几何着色器不会发射几何体

时间:2014-01-28 12:29:31

标签: c++ opengl glsl geometry-shader

我正在设置以下管道:

顶点着色器获取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%正确。如果我分离几何,绘制四边形确定shader。这里可能有什么问题?

更新

这种变化确实有效。

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

几何着色器中的输入/输出的红色仍然没有帮助:

in gl_PerVertex
{
  vec4 gl_Position;

} gl_in[];
out gl_PerVertex
{
  vec4 gl_Position;

};

0 个答案:

没有答案