我正在運行Mavericks的Intel HD 4000圖形處理Macbook Pro上的幾何着色器。我注意到來自EndPrimitive()
調用的一些奇怪行爲。這裏是我的幾何着色器:GLSL EndPrimitive()打破三角形條紋
#version 150 core
layout(points) in;
layout(triangle_strip, max_vertices = 512) out;
void main() {
vec4 start_pos = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
vec4 bottom_vertex = start_pos;
for (int i = 0; i < 17; ++i) {
bottom_vertex = start_pos + vec4(float(i) * float(1.0/16.0), 0.0, 0.0, 0.0);
gl_Position = bottom_vertex;
EmitVertex();
gl_Position = bottom_vertex + vec4(0.0, 1.0/16.0, 0.0, 0.0);
EmitVertex();
}
//EndPrimitive();
}
該方案採用glfw
並請求一個OpenGL 3.2的核心內容。我只繪製了一個頂點[0, 0]
,我的目標是最終讓我的幾何着色器輸出一個由多個三角形條構成的正方形網格。着色器按原樣輸出一行網格。這裏的結果:
在這一點上我想結束當前三角形帶原始,開始下一行一個新的。然而,簡單地取消註釋着色器中的EndPrimitive()
撥打以上砸了結果:
我誤解一些關於EndPrimitive()
?我的理解是,它應該結束當前的三角形帶,並開始一個新的。由於我在循環之後沒有做任何事情,所以我的着色器的結果應該與EndPrimitive()
相同或沒有它。
此外,我現在無法測試不同的實施,是否可能是我的車?有什麼我可以嘗試找出這個問題?