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.