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()
,