2014-09-25 178 views
0

我想輸出gl_PrimitiveID作爲片段着色器中的顏色。但是它總是等於0GLSL gl_PrimitiveID始終爲0

這裏是我的片段着色器:

void main(void) 
{ 
    if(gl_PrimitiveID == 0) 
     gl_FragColor.rgba = vec4(1, 0, 0, 1); // red for 0 
    else 
     gl_FragColor.rgba = vec4(0, 0, 1, 1); // blue otherwise 
} 

和頂點着色器

void main(void) 
{ 
    gl_Position = ftransform(); 
} 

爲三角形輸出顏色總是紅色。 我使用glDrawElements繪製三角形,並且在使用默認着色器時呈現效果良好。

我到底做錯了什麼?

這裏是我畫的三角形:

glBindBuffer(GL_ARRAY_BUFFER, vertexPosBuffer); 
glVertexPointer(3, GL_FLOAT, 0, NULL); 

glBindBuffer(GL_ARRAY_BUFFER, vertexNormalBuffer); 
glNormalPointer(GL_FLOAT, 0, NULL); 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer); 
glDrawElements(GL_TRIANGLES, countVertices, GL_UNSIGNED_INT, (void*)0); 
+0

其他着色器階段在哪裏?特別是幾何,如果你有一個。 – 2014-09-25 23:03:26

+0

對於某些要到達片段着色器的內容,* *會在其他着色器中傳遞。還有你的着色器中的任何編譯鏈接錯誤? – 2014-09-26 10:26:42

+0

@Andon我將頂點着色器添加到原始帖子中。我沒有任何幾何着色器。 – Milo 2014-09-26 13:56:25

回答

0

後撞我的頭靠在牆上的時間,我意識到自己的頂點着色器沒有連接到正確的程序ID。

僅附加了片段着色器。看起來gl_PrimitiveID不會自動遞增,如果沒有提供頂點着色器。

+1給Andon和棘輪指向我正確的方向。

+1

我不知道你爲什麼被低估。儘管我對OpenGL有很多經驗,但很容易忽略一些東西。在任何情況下,我都贊成你,因爲我發現你試圖完成的任務非常有用。我使用'gl_PrimitiveID'global來引用一個對齊的數組,以改變每個poly的着色器行爲。通過文檔爲我節省了很多跋涉:-) – yapdog 2016-05-26 01:16:21