使用lines_adjacency的GLSL几何着色器

时间:2012-04-02 19:59:36

标签: glsl geometry-shader

我正在编写一个GLSL几何着色器,我正在尝试使用lines_adjacency输入布局,但它无效。我使用lines输入布局的第一次传递测试工作正常:

// 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新手,所以任何帮助都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:2)

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

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