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

标签 macos opengl textures stencil-buffer deferred-rendering

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

我正在通过 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textures[color1], 0); 获得其他颜色和深度附件结果是正确的。
Correct Rendering without Stencil Buffer

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

Incorrect, Garbled Rendering

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

//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);

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

编辑:也许我没有正确地做到这一点。如果有人知道如何将模板缓冲区写入纹理,那么我真的不在乎我是否编写了不同的 cod。我只需要一个有效的方法。

最佳答案

GL_STENCIL_INDEX8

永远不要使用这个。如果您需要模板位,请始终使用打包的深度/模板图像,例如 GL_DEPTH24_STENCIL8 .您应该将此附加到 GL_DEPTH_STENCIL_ATTACHMENT观点。

关于macos - 将模板缓冲区可视化为纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13171036/

相关文章:

c++ - 调用 glDrawElements 时出现段错误

git - 使用 launchd 在 OS X 上启动 git-daemon

c++ - GLSL 链接错误

multithreading - OpenGL 视频播放器的纹理缓冲区

c++ - OSX AUGraph 重新创建导致 badComponentType 错误

swift - 没有为每个菜单项调用 validateMenuItem

c++ - "cast"GL_R8 到 GL_BGRA

c++ - 为什么 glGetProgramiv GL_ACTIVE_UNIFORMS 偶尔会返回垃圾并使我的程序崩溃?

json - 将 3D 模型转换为 SceneJS JSON,包括纹理

c++ - DevIL 图像无法正确呈现