Ist es jemals sinnvoll, in einem OpenGL-Shader Berechnungen außerhalb von main durchzuführen?

Ich habe einen Vertex-Shader-Code wie den folgenden (dies ist ein vereinfachtes Beispiel):

attribute vec2 aPosition;
attribute vec4 aColor;

varying lowp vec4 vColor;

uniform  vec4 uViewport;
mat4 viewportScale = mat4(2.0 / uViewport.z, 0, 0, 0,    0, -2.0 / uViewport.w, 0,0,    0, 0,1,0,    -1,+1,0,1);

void main() {
  vec2 pos = aPosition;
  gl_Position = viewportScale * vec4(pos, 0, 1);
  vColor = vec4(aColor.rgb*aColor.a, aColor.a);
}

Insbesondere dieviewportScale Matrix berechnet sich aus demuViewport Uniformaußerhalb der Hauptfunktion. Wenn Sie dies von einem Browser (WebGL) aus tun, funktioniert es anscheinend auf jedem Computer, auf dem ich es getestet habe, einwandfrei ... insbesondere auf demviewportScale Matrix wird korrekt aktualisiert, wenn ich das @ ändeuViewport Variable. Gibt es einen Unterschied zwischen dieser und derselben Berechnung innerhalb der Hauptfunktion? Ich kann keine Beispiele oder Diskussionen dazu finden.

Ich bin auf ein @ gestoß verwandtes Problem das hat mich ein bisschen paranoid gemacht - zumindest würde ich gerne verstehen, was los ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage