Геометрический шейдер не испускает геометрию

Я устанавливаю следующий конвейер:

Вершинный шейдер получает в качестве входных данных 4 вершины для рисования в виде полноэкранного четырехугольника с треугольной полосой:

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

#version 420 core
layout(location = 0)  in vec4 position;
out gl_PerVertex
{
vec4 gl_Position;

}
;
void main()
{
gl_Position =  position;
}

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

Geom Shader

#version 420 core

layout(invocations = 1,triangles) in;
layout(triangle_strip, max_vertices =4) out;out gl_PerVertex
{

vec4 gl_Position;

};
void main()
{

gl_Position = vec4( 1.0, 1.0, 0.0, 1.0 );

EmitVertex();

gl_Position = vec4(-1.0, 1.0, 0.0, 1.0 );

EmitVertex();

gl_Position = vec4( 1.0,-1.0, 0.0, 1.0 );

EmitVertex();

gl_Position = vec4(-1.0,-1.0, 0.0, 1.0 );

EmitVertex();

EndPrimitive();

}

И фрагмент шейдера:

 #version 420 core

layout(binding=0) uniform sampler2D   COLOR_MAP_0;

out vec4 OUTPUT;

void main(void) {

OUTPUT =  vec4(1,0,0,1);}

Настройка на стороне клиента выглядит следующим образом:

    glm::vec4 va[4] ={glm::vec4(1.0, 1.0, 0.0, 1.0),glm::vec4(-1.0, 1.0, 0.0, 1.0),glm::vec4(  1.0,-1.0, 0.0, 1.0),glm::vec4(-1.0,-1.0, 0.0, 1.0)};
auto ss = sizeof(va);
glGenVertexArrays(1,&_dummyVao);
glBindVertexArray(_dummyVao);
glGenBuffers(1,&_dummyPoinBuff);
glBindBuffer(GL_ARRAY_BUFFER, _dummyPoinBuff);
glBufferData(GL_ARRAY_BUFFER,  ss, &va[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, ((GLubyte *)NULL + (0)));
glEnableVertexAttribArray(0);
glBindVertexArray(0);

Жеребьевка:

glBindVertexArray(_dummyVao);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindVertexArray(0);

Странно то, что это не работает! Вывод пуст. Если я переключаюсь на излучение точек, то он их излучает. Данные вершин на 100% правильные. Четвёрка в порядке, если я отсоединяю геометрический шейдер. может быть здесь что-то не так?

ОБНОВИТЬ:

Этот вариант работает.

 const vec2 vert_data[4] = vec2[](
vec2(-1.0, 1.0),
vec2(-1.0, -1.0),
vec2(1.0, 1.0),
vec2(1.0, -1.0)
);for(int i=0; i<4; i++)
{
gl_Position = vec4( vert_data[i].xy,0,1);///gl_Position;
EmitVertex();
}
EndPrimitive();

Redclare входов / выходов в геометрическом шейдере все еще не помогло:

in gl_PerVertex
{
vec4 gl_Position;

} gl_in[];
out gl_PerVertex
{
vec4 gl_Position;

};

0

Решение

Задача ещё не решена.

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

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

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