В моей программе три шейдера.
Vertex:
#version 330 core
in vec2 Inpoint;
in vec2 texCoords;
out vec2 TexCoords;
uniform mat4 model;
uniform mat4 projection;
void main()
{
TexCoords = texCoords;
gl_Position = projection * model * vec4(Inpoint, 0.0, 1.0);
}
Геометрия:
#version 330 core
layout(triangles) in;
layout(triangle_strip, max_vertices = 4) out;
void main()
{
int i;
for (i = 0; i < gl_in.length(); i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
}
И, наконец, фрагмент шейдера:
#version 330 core
in vec2 TexCoords;
out vec4 color;
uniform sampler2D image;
uniform vec3 spriteColor;
void main()
{
color = vec4(spriteColor, 1.0) * texture(image, TexCoords);
}
Теперь без геометрического шейдера все отображается просто отлично. Но как только я включаю геометрический шейдер, все идет … плохо.
Он действует так, будто не получает аккордов для текстур.
Итак, вопрос в том, должен ли геометрический шейдер передавать данные через себя во фрагментный шейдер? Я имею в виду, что геометрический шейдер в основном ничего не делает, поэтому не должен. Если нет какой-то гигантской ошибки, которую я пропускаю.
Я попытался добавить пропуск, хотя он жалуется, что все должно быть массивом, и даже когда я сделал его массивом, он не совсем правильно работал.
квотирование GLSL 3.30 спецификации 4.3.1 Входы :
Входные данные шейдера фрагмента получают значения для каждого фрагмента, обычно интерполированные
из результатов предыдущего этапа
Наличие геометрического шейдера — предыдущий этап. Так что да, ваша FS использует данные от вашего GS и только от него.
Других решений пока нет …