众所周知,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。可以用四边形“覆盖”模板区域,但是....
答案 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,无论如何它都无济于事。