2012-11-20 67 views
3

我有問題利用模板緩衝區,它似乎歸結爲不工作。 考慮下面的代碼:glStencilFunc(GL_NEVER,0,0)仍然呈現?

glEnable(GL_STENCIL_TEST); 
    glClearStencil(0); 
    glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glColor4f(1, 1, 1, 1); 
    glStencilFuncSeparate(GL_FRONT_AND_BACK, GL_NEVER, 0, 0); 
    glStencilOpSeparate(GL_FRONT_AND_BACK, GL_INCR, GL_INCR, GL_INCR); 
    glBegin(GL_TRIANGLES); 
    { draw something } 
    glEnd(); 

三角形仍在拉!?我在這裏錯過了一些微不足道的東西嗎?

注意: 我沒有渲染到一個幀緩衝區,我正在使用glStencil ...分開只是爲了確保它不與front \ back相關,我保留了一些代碼給我,似乎沒有關係。

+0

「*我不渲染幀緩衝區*」然後你在渲染什麼? –

+0

我的意思是,我直接渲染到屏幕上,即沒有幀緩衝區對象被激活。 –

+0

你在哪裏清除其他緩衝區? –

回答

3

您沒有模板緩衝區。並通過規範(從4.3核心,對開頁432):

如果沒有模板緩衝,不會發生模板修改,這是因爲如果 模板測試總是通過,無論對任何呼叫的StencilFunc。

+0

你的意思是我必須渲染到一個帶有模板緩衝區的幀緩衝區對象? –

+0

@ViktorSehr:不;你必須確保你使用的任何framebuffer都有一個模板緩衝區。如果您要呈現給FBO,那意味着您需要使用壓縮深度/模板緩衝區。如果要渲染到默認幀緩衝區,則需要使用提供模板緩衝區的像素格式。這是平臺特定的,所以除非你提到你如何創建你的上下文,否則我無法真正幫助你。另請注意,「framebuffer」是*一個字*,而不是兩個。 –

+0

似乎我沒有提供模板緩衝區到默認\ \屏幕框架(無空間)緩衝區。謝謝! –

相關問題