2017-10-09 133 views
2

我一直在學習OpenGL(實際上是OpenTK)一個月左右,我開始玩幾何着色器。我原本寫了一個更復雜的着色器,但它並不起作用,所以我已將所有東西都剝離了一個簡單的直通着色器,但仍然無法使用。GLSL直通幾何着色器

頂點着色器:

#version 420 core 

layout (location = 0) in vec3 position; 

uniform mat4 transform; 

void main() 
{ 
    gl_Position = transform * vec4(position, 1); 
} 

幾何着色器:

#version 420 core 

layout (triangles) in; 
layout (triangle_strip) out; 

void main() 
{ 
    int i; 
    for(i = 0; i < gl_in.length(); i++) 
    { 
     gl_Position = gl_in[i].gl_Position; 

     EmitVertex(); 
    } 

    EndPrimitive(); 
} 

片段着色器:

#version 420 core 

layout (binding = 0) uniform sampler2D diffuse; 

layout(location = 0) out vec4 color; 

void main() 
{ 
    color = vec4(1, 1, 1, 1); 
} 

應該吸取在窗口右下角的白色正方形,沒有幾何着色器,它確實,這就是我wo呃期望。使用幾何着色器,它不渲染任何東西。信息日誌顯示一切編譯和鏈接正常。

我錯過了什麼?

+2

看不到任何明顯的錯誤,但是您是否檢查了着色器編譯和鏈接錯誤? – Rabbid76

+0

是的,我在每次編譯和鏈接後都檢查過;沒有錯誤。 –

+0

嘗試'佈局(triangle_strip,max_vertices = 3);' – Rabbid76

回答

0

輸出必須有一個max_vertices聲明。該數字必須是編譯時常量,並且它定義了一次調用GS將寫入的最大頂點數。它可能不大於實現定義的極限MAX_GEOMETRY_OUTPUT_VERTICES

+0

是的,那是不可能的。爲什麼在編譯/鏈接信息中不顯示該錯誤? –

+0

未提供時,必須有一些默認值。它的奇怪,但我認爲它應該會拋出一些錯誤,你可以在編譯着色器的地方分享代碼嗎? –