glGetAttribLocation gibt -1 zurück, wenn ein vorhandenes Shader-Attribut abgerufen wird

8

Ich versuche, Attribute an meinen Vertex-Shader zu übergeben, aber aus irgendeinem Grund gibt es mir weiterhin eine -1 am dritten Attribut-Ort, den ich mit openGl über glGetAttribLocation () abfragen möchte. Momentan gibt es mir immer noch eine -1 für das texCoord Attribut und wenn ich den texAttrib und colAttrib umschalte (die Zeilen im Code wechseln), gibt es mir eine -1 auf der Farbeigenschaft anstatt der Textur und ich habe keine Ahnung warum? Da eine -1 an glVertexAttribPointer übergeben wird, erhalte ich den 1281 OpenGL-Fehler: GL_INVALID_VALUE.

Mein Vertex-Shader:

%Vor%

OpenGL-Code:

%Vor%     
Joey Dewd 26.03.2013, 14:44
quelle

1 Antwort

22

Sie sollten aufhören, glGetAttribLocation zu verwenden. Weisen Sie jedem Attribut einen Ort zu , entweder mit glBindAttribLocation vor der Verknüpfung des Programms oder mit explizite Attributpositionen, falls diese verfügbar sind.

Auf diese Weise ist es Ihnen egal, wenn der Compiler ein Attribut entfernt (was hier passiert; Ihr Fragment-Shader verwendet wahrscheinlich keinen der interpolierten Werte). Sie richten Ihre Arrays wie gewohnt ein, indem Sie eine Standardkonvention für Attributindizes verwenden. Außerdem müssen Sie nicht jedes Mal fragen, was ein Attributspeicherort ist, wenn Sie mit einem anderen Programm rendern möchten. Sie wissen, welchen Ort es ist, weil Sie es zugewiesen haben.

Wenn Sie nicht können / wollen, dann können Sie nichts tun. Der Compiler optimiert Attribute, wenn Sie sie nicht verwenden. Das einzige, was Sie tun können, ist zu erkennen, dass es -1 zurückgibt und das Array für dieses Attribut nicht eingerichtet.

    
Nicol Bolas 26.03.2013, 14:52
quelle

Tags und Links