2017-09-12 4 views
0

I verwenden einen einheitlichen Block wie folgt aus:die Offsets in einem in mehrere UBO Shadern verwendet

uniform matrices 
{ 
    mat4 pv_matrix; 
    mat4 screen_matrix; 
}; 

in verschiedenen Shadern mit der gleichen Bindungsstelle definiert explizit durch UniformBlockBinding.

mit einem Uniform Buffer Objekt arbeiten müssen die Offsets auf diese Weise abfragen:

int offsets = new int[Length]; 
GL.GetActiveUniforms(id_program, Length, indices, 
ActiveUniformParameter.UniformOffset, offsets); 

Und ich nenne diesen Code für jedes Shader-Programm mit dem gleichen Ergebnis.

Wenn ich richtig verstanden habe, repräsentieren die Offsets die Struktur des einheitlichen Pufferobjekts, das eins für alle aufgerufenen Programme ist.

Macht es Sinn, viele Male anzurufen, oder sollte es genug sein, es zu nennen?

Antwort

3

Standardmäßig sind einheitliche Blöcke in der shared Reihenfolge angeordnet. Daher müssen Sie das Layout nur in einem Programm abfragen. jede Blockdeklaration, die auch shared ist und genau übereinstimmt, wird das gleiche Layout haben.

Oder Sie könnten einfach std140 Layout verwenden und nicht alles abfragen.