使用lines_adjacency的GLSL几何着色器

问题描述:

我正在编写GLSL几何着色器,我试图使用lines_adjacency输入布局,但它不起作用。使用lines输入布局我第一次通不过测试工作正常:使用lines_adjacency的GLSL几何着色器

// GLSL GEOMETRY SHADER 
#version 410 

layout (lines) in; 
layout (line_strip, max_vertices = 2) out; 

void main() 
{ 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 
    gl_Position = gl_in[1].gl_Position; 
    EmitVertex(); 
    EndPrimitive(); 
} 

,但是当我切换到lines_adjacency输入不画任何东西:

// GLSL GEOMETRY SHADER 
#version 410 

layout (lines_adjacency) in; 
layout (line_strip, max_vertices = 2) out; 

void main() 
{ 
    gl_Position = gl_in[1].gl_Position; 
    EmitVertex(); 
    gl_Position = gl_in[2].gl_Position; 
    EmitVertex(); 
    EndPrimitive(); 
} 

我知道我没有实际使用邻接点在这里,但我最终需要它们。我是GLSL新手,所以任何帮助将不胜感激,谢谢。

你确实改变了你的输入顶点以提供邻接数据,对吧?因为OpenGL不会分析你的顶点数据来找出与什么相邻的东西。邻接类型的存在允许告诉着色器关于相邻信息。所以你必须提供这些数据。

简而言之,您无法使用具有相邻几何着色器的完全相同的属性和索引数据进行渲染。不要忘记你的glDraw*呼叫需要使用GL_LINES_ADJACENCY而不是GL_LINES

+0

我作为GL_LINE_STRIP传递了四点,我认为这意味着邻接。我不知道GL_LINES_ADJACENCY,我会接下来尝试。 – atb 2012-04-02 23:43:07