OpenGL ES 2.0将纹理附加到模板缓冲区

时间:2014-12-03 15:14:10

标签: opengl-es

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

是否可以将GL_LUMINANCE,GL_ALPHA纹理用于此purporses?

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

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

P.S。可以用四边形“覆盖”模板区域,但是....

1 个答案:

答案 0 :(得分:0)

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

从ES 2.0规范(第117页)中的“Framebuffer Attachment Completeness”部分开始:

  

如果附件是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或互联网上Google可见部分的任何其他地方都找不到。但是因为它适用于ES 3.x,无论如何它都无济于事。