GLSL пройти через проблему геометрии шейдеров

На данный момент у меня есть рабочий вершинный и фрагментный шейдеры. Если я полностью удалю свой геометрический шейдер, то получу ожидаемый куб с цветами в каждой вершине. Но с добавленным геометрическим шейдером геометрия вообще не отображается.

Вершинный шейдер:

#version 330 core

layout(location = 0) in vec3 vertexPosition_modelspace;
layout(location = 1) in vec3 vertexColor;

out VertexData
{
    vec3 color;
} vertex;

uniform mat4 MVP;

void main(){    

    gl_Position =  MVP * vec4(vertexPosition_modelspace,1); 
    vertex.color = vertexColor;
}

Геометрия шейдера:

#version 330

precision highp float;

in VertexData
{
    vec3 color;
} vertex[];

out vec3 fragmentColor;

layout (triangles) in;
layout (triangle_strip) out;
layout (max_vertices = 3) out;

void main(void)
{
    for (int i = 0; i > gl_in.length(); i++) {

        gl_Position = gl_in[i].gl_Position;
        fragmentColor = vertex[i].color;
        EmitVertex();
    }

    EndPrimitive();
}

Фрагмент шейдера:

#version 330 core

in vec3 fragmentColor;

out vec3 color;

void main(){
    color = fragmentColor; 
}

Моя видеокарта поддерживает OpenGL 3.3, насколько я могу судить. И, как я уже сказал. Работает без шейдера Geometry. В качестве данных я передаю два массива GLfloat, каждый из которых соответствует своей вершине или цвету вершины.

1 ответ

Решение
for (int i = 0; i > gl_in.length(); i++)   //note the '>'

Это условие цикла будет ложным с самого начала, поэтому вы никогда не будете испускать никаких вершин. Что вы, скорее всего, имели в виду i < gl_in.length(),

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