【问题标题】:OpenGL ES 2.0 attach texture to stencil bufferOpenGL ES 2.0 将纹理附加到模板缓冲区
【发布时间】:2014-12-04 15:09:13
【问题描述】:

众所周知,OpenGL ES 2.0 没有 GL_STENCIL_INDEX8、GL_DEPTH24_STENCIL8_OES 等...

是否可以为此目的使用 GL_LUMINANCE、GL_ALPHA 纹理?

glGenTextures(1, &byteTex);
glBindTexture(GL_TEXTURE_2D, byteTex);
glTexImage2D(GL_TEXTURE_2D, 0,GL_LUMINANCE, width(), height(), 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, byteTex, 0);

换句话说 - 是否有可能将模板缓冲区渲染为纹理?

附:可以用四边形“覆盖”模板区域,但是....

【问题讨论】:

    标签: opengl-es


    【解决方案1】:

    没有。在 ES 2.0 中,您只能将渲染缓冲区用于模板附件。

    来自 ES 2.0 规范(第 117 页)中的“帧缓冲区附件完整性”部分:

    如果附件是 STENCIL_ATTACHMENT,则图像必须具有可模板渲染的内部格式。

    同一页上的表 4.5 将 STENCIL_INDEX8 列为唯一可模板渲染的内部格式。在上一页中,它说:

    表 4.5 中未列出的格式(包括压缩的内部格式)不能进行颜色、深度或模板渲染,无论它们包含哪些组件。

    ES 2.0 是 OpenGL 的极简版本。您显然超出了 ES 2.0 的范围。 ES 3.0 引入了深度/模板纹理,但仍然不支持对这些纹理的模板部分进行采样。 ES 3.1 引入了对深度/模板纹理的模板部分进行采样。

    定义了一个OES_texture_stencil8 扩展,但对我来说它看起来一团糟。它说它基于 ES 3.0,但随后部分引用了 ES 3.1 规范。它说它依赖于 OES_stencil_texturing 扩展,这在 www.khronos.org 或互联网的谷歌可见部分的任何其他地方都找不到。但是因为它是针对 ES 3.x 的,所以无论如何它都帮不了你。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2011-11-26
      • 2013-01-22
      • 2021-01-07
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多