簡體   English   中英

深度+模板幀緩沖區問題

[英]Depth + Stencil framebuffer concerns

我的OpenGL應用程序需要模板和深度緩沖區。 深度緩沖區至少需要通過幀緩沖區對象渲染為紋理,以便可以進行延遲着色和其他后處理效果。 我已經設置了這個幀緩沖區(使用GL_DEPTH24_STENCIL8),但是我有一些顧慮和問題。

首先,我想使用32位浮點深度緩沖區。 GL_DEPTH32F_STENCIL8選項似乎是最明顯的。 我想知道的是,這種格式的實際內存占用量是多少? 從邏輯上講,它是40位,但是知道我對對齊的處理方式,如果將其填充到64位也就不足為奇了,許多消息人士說,這就是事實。 我想確定。

也許將深度和模板緩沖區分開是更好的選擇嗎? 我是否需要擔心這一點不受支持? 緩存效率如何,因為模板測試和深度測試經常一起執行?

PS。 我沒有使用多重采樣。

GL_DEPTH32F_STENCIL8是64位格式; 深度為32位,模板為8位,對齊為24位。

有時知道這兩個桌面圖形API會派上用場,因為這是D3D10中添加的相同格式。 D3D使得僅通過查看其名稱即可輕松掌握其格式的大小。

在D3D中,該格式稱為DXGI_FORMAT_D32_FLOAT_S8X24_UINT

D32_FLOAT表示它存儲32位深度(浮點數)

S8X24_UINT表示它存儲8位模板+ 24位未使用(無符號整數)

D3D的好處在於,格式中會明確聲明何時有未使用的位用於填充(這是格式中的Xn表示的)。 D3D中沒有可渲染的8位RGB格式,因為這會導致對齊問題。 它們都是RGBX或4的某種排列,以便產生32位像素。


為了給您一個權威的答案,我將向您介紹首先將此格式添加到GL的擴展名:

GL_ARB_depth_buffer_float

概觀

[...]

此外,此擴展提供了新的打包深度/模板像素格式(請參閱EXT_packed_depth_stencil ),該格式具有64位像素,包括32位浮點深度值8位模板24個未使用位 還提供了打包的深度/模板紋理內部格式。

對於您有關格式的內存占用量的問題,我沒有答案(我想您可以在其他地方找到它),但我建議您為Defedred Shading的Depth Stencil部分使用RenderBuffer而不是Framebuffer:這是什么概念OpenGL中的幀緩沖區和渲染緩沖區之間的區別?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM