2014-01-14 162 views
4

我想獲取一個模板緩衝區,但如果可能的話,不會承受附加深度緩衝區的開銷,因爲我不會使用它。我發現的大部分資源都表明,儘管模板緩衝區是可選的(例如,爲了獲得更多的深度緩衝區精度,不包括它),但我沒有看到任何代碼請求併成功獲取8位模板緩衝區。我見過的最常見的配置是具有8位模板緩衝區的24位深度緩衝區。OpenGL:僅獲取模板緩衝區並且沒有深度緩衝區?

是否有可能只請求帶有顏色緩衝區的模板緩衝區?

如果可能,這個請求是否可能被大多數OpenGL實現授予?我使用

OpenGL的版本爲2.0

編輯:

我使用調用OpenGL是SFML,通常不支持模板配置爲它的API的FBO包裝對象,儘管它允許顯示錶面的幀緩衝區。我編輯了自己的功能,雖然這是我卡住的地方。

glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, width, height)); 

此行決定我假設的存儲類型。然而,GL_DEPTH24_STENCIL8_EXT是我發現的唯一指定了模板緩衝區創建的定義。 (有沒有GL_STENCIL8或任何類似至少)

+0

你應該可以。我知道你一定可以用FBO來做。 – Xonar

+0

是的。這是可能的,這取決於你用什麼來實現它。你用什麼窗口(glut/SDL/GLFW等)? – Xonar

+0

我正在使用SFML,它'通常'不允許它的FBO包裝器請求模板緩衝區。但我在自己身上黑了。我可以將它編輯到問題 –

回答

1

研究這是在評論中提到GL_STENCIL_INDEX8,我碰到下面一行在正式的OpenGL維基來了,http://www.opengl.org/wiki/Framebuffer_Object_Examples#Stencil

永遠不要做一個模板緩衝區。所有GPU和所有驅動程序不支持獨立的模板緩衝區。如果你需要一個模板緩衝區,那麼你需要設置Depth = 24,Stencil = 8緩衝區,也叫做D24S8。

壓力測試的兩種不同的分配方案,GL_STENCIL_INDEX8_EXT VS GL_DEPTH24_STENCIL8_EXT,結果是大致相等的,無論是在存儲器使用和性能方面。無論如何,我懷疑它用24位填充模板緩衝區。所以爲了便於攜帶,只使用深度和模板打包方案。