OpenGL GSL glUniform4fv для цвета не работает
Я пытаюсь сделать простой 3D-движок, но я рву волосы, странствуя, почему я не могу изменить цвет маленькой 3d-линии. Следующее работает, но всегда делает белый. Я пытаюсь заставить его нарисовать зеленым:
...
float color[4] = { 0.5f, 1.0f, 0.0f, 1.0f };
glUseProgram( shader.id );
//I ommitted the model matrix and stuff because it works fine
glUniformMatrix4fv( glGetUniformLocation( shader.id, "color" ), 1, GL_FALSE, color );
glBegin( GL_LINES );
glVertex3f( x, y, z );
glVertex3f( x, y+10, z );
glEnd();
...
Вершинный шейдер:
#version 330
in vec3 vertexPosition_modelspace;
uniform mat4 mvp;
void main(){
vec4 v = vec4(vertexPosition_modelspace,1);
gl_Position = mvp*v;
}
Фрагмент шейдера:
#version 330
uniform vec4 color = vec4(1.0,1.0,1.0,1.0);
out vec4 frag;
void main(){
frag = color;
}
Я прочитал некоторые документы, в которых говорится, что иногда униформа оптимизируется и становится невидимой, но это не так, поскольку Я использую униформу для выбора цвета пикселей. Также возвращаемым значением glGetUniform является (0), которое является действительным и, таким образом, оно существует. Так почему же он облажался? Мои водители мертвы?
Единственный другой релевантный или похожий вопрос был от GLSL Shader не будет отображать цвет из единой переменной, и ответ я не понял. Что он подразумевает под несколькими шейдерами? Я просто использую один шейдер.
1 ответ
Вы используете glUniformMatrix4fv
когда вы должны использовать glUniform4fv
(так как color
является vec4
не mat4
).
Что дано, всегда проверяйте glGetError()
статус, когда сомневаешься. Еще лучше, используйте KHR_debug
расширение.
И не думайте об ошибке в драйвере, прежде чем проверять все в своем коде:-). Это крайне редкий случай.