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% 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.
Tags und Links c++ opengl shader vertex-shader