1

我正在尝试通过 GLSL 渲染模板缓冲区纹理,但我找不到它可能。模板纹理使用 GL_DEPTH24_STENCIL8 格式与深度纹理打包在一起。我发现您无法渲染该纹理,至少不能渲染模板数据,但深度数据可以使用纹理的 x/y/z 值进行渲染。所以我想出了一个超级想法,尝试将模板缓冲区 blit 为 GL_RED 纹理。这在某种程度上可能吗?

以下是如何将模板缓冲区从 FBO1 位块传输到 FBO2:

glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, FBO1 );
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, FBO2 );
glBlitFramebufferEXT(0, 0, X, Y, 0, 0, X, Y, GL_STENCIL_BUFFER_BIT, GL_NEAREST );
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);

这就是我卡住的地方。有任何想法吗?

4

1 回答 1

2

您只能将一种类型的数据blit 到它自己的数据类型中。您不能将颜色数据粘贴到 中GL_DEPTH_COMPONENT,也不能将深度数据粘贴到颜色中。你也不能把模板涂成颜色。

做你想做的事情的唯一方法是使用ARB_stencil_texturing,它是 GL 4.3 的一部分。它是否可用于您的硬件取决于您的硬件。

于 2013-02-11T02:56:46.937 回答