0

我正在设置以下管道:

顶点着色器将 4 个顶点作为输入以绘制为带有三角形条的全屏四边形:

顶点着色器:

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

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

然后我想在几何着色器中对它们做一些工作。但现在我只是尝试从着色器发出与三角形条相同的顶点,以确保它工作正常。

几何着色器

#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;

};
4

0 回答 0