2012-04-02 253 views
0

我正在編寫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新手,所以任何幫助將不勝感激,謝謝。

回答

2

你確實改變了你的輸入頂點以提供鄰接數據,對吧?因爲OpenGL不會分析你的頂點數據來找出與什麼相鄰的東西。鄰接類型的存在允許告訴着色器關於相鄰信息。所以你必須提供這些數據。

簡而言之,您無法使用具有相鄰幾何着色器的完全相同的屬性和索引數據進行渲染。不要忘記你的glDraw*呼叫需要使用GL_LINES_ADJACENCY而不是GL_LINES

+0

我作爲GL_LINE_STRIP傳遞了四點,我認爲這意味着鄰接。我不知道GL_LINES_ADJACENCY,我會接下來嘗試。 – atb 2012-04-02 23:43:07