From OpenGL ES 2.0 规范 http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf第 4.4.5 节:
“表 4.5 中未列出的格式,包括压缩的内部格式。不包括在内。
颜色、深度或模板可渲染,无论它们包含哪些组件。”
然后还有扩展该表的扩展,例如:
- OES_深度24 http://www.khronos.org/registry/gles/extensions/OES/OES_depth24.txt
- OES_深度32 http://www.khronos.org/registry/gles/extensions/OES/OES_depth32.txt
- OES_rgb8_rgba8 http://www.khronos.org/registry/gles/extensions/OES/OES_rgb8_rgba8.txt
- ARM_RGBA8 http://www.khronos.org/registry/gles/extensions/ARM/ARM_rgba8.txt
如果我正确理解了规范,表 4.5 会影响纹理和渲染缓冲区格式。在这种情况下,例如,每个组件 8 位的 RGB 和 RGBA 纹理无法进行颜色渲染,除非支持扩展 OES_rgb8_rgba8(或用于 RGBA 的 ARM_rgba8)。
在支持 OES_rgb8_rgba8 的测试设备上,以下纹理格式有效,即,当作为颜色附件附加到 FBO 时,帧缓冲区已完成:
- RGB 565
- RGB 888
- RGBA 4444
- RGBA 5551
- RGBA 8888
这些不是:
结果符合我的假设(至少在一台设备上),但我想知道我是否正确理解了规范,还是这是偶然的?
是的,你的假设是正确的。
官方规范中的可渲染格式列表正是 OpenGL ES 2.0 实现的内容required支持。大多数支持比此处列出的要多得多。
但是,没有任何 OpenGL / OpenGL ES 实现支持可渲染颜色的 alpha 或亮度纹理。您可以使用纹理混合扩展和/或 GLSL 矢量混合来复制该行为。扩展名:EXT_texture_rg
添加纹理可用的红色和红色/绿色图像格式and渲染缓冲区。当您想要使用 FBO 绘制为一通道或两通道图像格式时,这两种格式非常有用(因为GL_LUMINANCE
, GL_ALPHA
and GL_LUMINANCE_ALPHA
不是可色彩渲染的格式)。
一般来说,渲染缓冲区图像格式集是纹理图像格式的子集。您可以使用压缩图像格式(ES 2.0 中可选)、亮度和 alpha 图像格式进行纹理和像素传输操作,但渲染缓冲区不支持它们。这意味着虽然您可以使用这些纹理进行绘制,但您无法通过将它们附加到 FBO 来绘制它们。要绘制到纹理中,它必须具有以下图像格式both渲染缓冲区格式和纹理格式。
从历史记录来看,有些渲染缓冲区格式不能用作纹理。多重样本格式就是一个例子,多重样本纹理是在创建初始 FBO 规范后添加的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)