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 расширение.

И не думайте об ошибке в драйвере, прежде чем проверять все в своем коде:-). Это крайне редкий случай.

Другие вопросы по тегам