Нужно ли передавать цвет через мой геометрический шейдер фрагментному шейдеру?

В моей программе три шейдера.

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);
}

Теперь без геометрического шейдера все отображается просто отлично. Но как только я включаю геометрический шейдер, все идет … плохо.

Он действует так, будто не получает аккордов для текстур.

Итак, вопрос в том, должен ли геометрический шейдер передавать данные через себя во фрагментный шейдер? Я имею в виду, что геометрический шейдер в основном ничего не делает, поэтому не должен. Если нет какой-то гигантской ошибки, которую я пропускаю.

Я попытался добавить пропуск, хотя он жалуется, что все должно быть массивом, и даже когда я сделал его массивом, он не совсем правильно работал.

0

Решение

квотирование GLSL 3.30 спецификации 4.3.1 Входы :

Входные данные шейдера фрагмента получают значения для каждого фрагмента, обычно интерполированные
из результатов предыдущего этапа

Наличие геометрического шейдера — предыдущий этап. Так что да, ваша FS использует данные от вашего GS и только от него.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]