gpt4 book ai didi

opengl - 在着色器程序中访问深度模板纹理

转载 作者:行者123 更新时间:2023-12-04 15:44:57 24 4
gpt4 key购买 nike

似乎很难找到有关如何在连续渲染 channel 的着色器中访问深度和模板缓冲区的信息。

在第一次渲染过程中,我不仅渲染颜色和深度信息,还使用模板操作来计算对象。为此,我使用了多渲染目标 FBO,并附加了颜色缓冲区和组合深度模板缓冲区。所有这些都是纹理的形式(不涉及渲染缓冲区对象)。

在第二次渲染过程中(当渲染到屏幕时),我想访问先前计算的每个像素的模板索引(但不一定是我正在绘制的相同像素),就像你想访问的一样先前渲染的颜色缓冲区以应用一些后期处理效果。

但是我未能将第二遍中的深度模板纹理作为制服绑定(bind)到我的着色器程序。至少只从中读取黑色值,所以我猜它没有正确绑定(bind)。

  • 是否可以将深度模板纹理绑定(bind)到纹理单元以在着色器程序中使用?使用“普通”采样器是否无法访问深度和模板纹理?是否可以使用一些“特殊”采样器?它是否取决于纹理上设置的插值模式或类似设置?
  • 如果不是,在这两个渲染 channel 之间将模板信息复制到单独的颜色纹理中的最佳(最快)方法是什么?可能涉及使用模板测试绘制单一颜色的第三次渲染 channel (我只需要在最终渲染 channel 中使用二进制版本的模板缓冲区,准确地说,我需要测试该值是否为零)。

  • 中间 FBO 使用的纹理设置如下:
    // The textures for color information (GL_COLOR_ATTACHMENT*):
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
    // The texture for depth and stencil information (GL_DEPTH_STENCIL_ATTACHMENT*):
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, w, h, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0);

    在第二个渲染过程中,我目前只尝试“调试”所有纹理的内容。因此,我使用以下值设置着色器:
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, <texture>);
    glUniform1i(texLocation, 0);

    让着色器程序简单地将纹理复制到屏幕上:
    uniform sampler2D tex;
    in vec2 texCoord;
    out vec4 fragColor;

    void main() {
    fragColor = texture2D(tex, texCoord);
    }

    结果如下:
  • <texture>上面指的是我的一个颜色纹理,我看到在第一个渲染 channel 中渲染的颜色输出,这是我所期望的。
  • <texture>上面指的是深度模板纹理,着色器不做任何事情(我看到了我清除屏幕的颜色)。
  • 将深度模板纹理复制到 CPU 并检查它时,我在打包的 24 + 8 位数据中看到了深度和模板信息,正如预期的那样。
  • 最佳答案

    我没有使用模板作为纹理的经验,但您可能想看看以下扩展:

    http://www.opengl.org/registry/specs/ARB/stencil_texturing.txt

    另一种选择可能是使用创建纹理 View

    http://www.opengl.org/registry/specs/ARB/texture_view.txt

    或者您可以在没有模板缓冲区的情况下计算对象,可能使用 MRT 并在第二个渲染目标上使用添加混合:

    http://www.opengl.org/registry/specs/EXT/draw_buffers2.txt

    但恐怕这些选项不包含在纯 GL3.3 中......

    关于opengl - 在着色器程序中访问深度模板纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169576/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com