Ich versuche, lineare Farbinterpolation auf einem Quad zu erstellen. Ich habe mit Hilfe meiner vorherigen Frage hier Erfolg gehabt, aber die Leistung ist schlecht, weil ich repeat glBegin() und glEnd() und 4 mal glUniform() vor glBegin() wiederholen muss.
Die Frage ist: Ist es irgendwie möglich, lineare Farbinterpolation auf einem Quad wie folgt anzuwenden:
glBegin(GL_QUADS);
glColor4f(...); glVertexAttrib2f(uv, 0, 0); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 1, 0); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 1, 1); glTexCoord2f(...); glVertex3f(...);
glColor4f(...); glVertexAttrib2f(uv, 0, 1); glTexCoord2f(...); glVertex3f(...);
... // hier können beliebig viele Quads sein, ohne glBegin()/glEnd() zu wiederholen
glEnd();
Um dies zu erreichen, denke ich, dass ich irgendwie auf die benachbarten Eckfarben zugreifen sollte, aber wie? Oder gibt es andere Lösungen dafür?
Ich brauche das, um auf diese Weise zu funktionieren, damit ich leicht zwischen verschiedenen Interpolations-Shadern wechseln kann.
Jede andere Lösung, die mit einem glBegin()-Befehl funktioniert, ist ebenfalls gut, aber das Senden aller Eckfarben pro Vertex ist nicht akzeptabel, es sei denn, das ist hier die einzige Lösung?
Bearbeiten: Der Beispielcode verwendet nur den Sofortmodus zur Klarheit. Selbst mit Vertex-Arrays/-Puffern wäre das Problem dasselbe: Ich müsste die Rendering-Aufrufe in 4 Vertex-Chunks aufteilen, was den gesamten Geschwindigkeitsabfall verursacht!