将模板缓冲区可视化为纹理

Cha*_*den 3 opengl macos textures stencil-buffer deferred-rendering

我正在尝试将模板缓冲区放入纹理中以便在延迟渲染器中使用.

我正在使用其他颜色和深度附件,glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textures[color1], 0);结果是正确的. 没有模板缓冲区的正确渲染

但是,当我尝试将模板缓冲区附加到纹理时, glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT ,GL_TEXTURE_2D, textures[stencil], 0);我得到一个乱码的结果,好像FBO没有清除它的缓冲区.

不正确,乱码渲染

我不知道问题是什么.我怀疑这是设置模板纹理的问题......

//Stencil Texture Initialization

glBindTexture(GL_TEXTURE_2D, textures[stencil]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

glTexImage2D( GL_TEXTURE_2D, 0, GL_STENCIL_INDEX8, 512, 512, 0, GL_STENCIL_INDEX, GL_BYTE, 0);
Run Code Online (Sandbox Code Playgroud)

我的设置中没有任何错误代码,所以我不知道问题是什么.

编辑:也许我没有正确地这样做.如果有人知道如何将模板缓冲区写入纹理,我真的不在乎我是否写了不同的鳕鱼.我只需要一种有效的方法.

Nic*_*las 6

GL_STENCIL_INDEX8
Run Code Online (Sandbox Code Playgroud)

永远不要使用它.如果您需要模板位,请始终使用打包深度/模板图像,例如GL_DEPTH24_STENCIL8.你应该把它附在这GL_DEPTH_STENCIL_ATTACHMENT一点上.