哪些OpenGL ES 2.0纹理格式是彩色,深度或模板可渲染的?

时间:2013-09-08 19:58:25

标签: opengl-es-2.0

来自OpenGL ES 2.0 specification第4.4.5节:

  

“表4.5中未列出的格式,包括压缩的内部格式。”不是   颜色,深度或模板可渲染,无论它们包含哪些组件。“

Table 4.5

然后有扩展来扩展此表,例如:

如果我正确理解了规范,表4.5会影响纹理和渲染缓冲格式。在这种情况下,例如,除非支持扩展OES_rgb8_rgba8(或RGBA的ARM_rgba8),否则每个组件8位的RGB和RGBA纹理不可着色。

在支持OES_rgb8_rgba8的测试设备上,以下纹理格式有效,即当作为颜色附件附加到FBO时帧缓冲完成:

  • RGB 565
  • RGB 888
  • RGBA 4444
  • RGBA 5551
  • RGBA 8888

而这些不是:

  • Alpha 8
  • Luminance 8
  • LuminanceAlpha 88

结果符合我的假设(至少在1台设备上),但我想知道我是否正确理解了规格,或者这是偶然的?

1 个答案:

答案 0 :(得分:10)

是的,您的假设是正确的。

官方规范中的可渲染格式列表正是所需支持的OpenGL ES 2.0实现。大多数支持比那里列出的更多。

然而,没有OpenGL / OpenGL ES的实现支持alpha或亮度纹理作为颜色可渲染。您可以使用纹理swizzle扩展和/或GLSL矢量混合来复制行为。扩展名:EXT_texture_rg添加了纹理 渲染缓冲区可用的红色和红色/绿色图像格式。当您想使用FBO绘制单通道或双通道图像格式时,这两种格式非常有用(因为GL_LUMINANCEGL_ALPHAGL_LUMINANCE_ALPHA不是可颜色渲染的格式)。

一般来说,渲染缓冲区图像格式集是纹理图像格式的子集。您可以使用压缩图像格式(ES 2.0中的可选),亮度和Alpha图像格式进行纹理和像素传输操作,但渲染缓冲区不支持它们。这意味着虽然您可以使用这些纹理进行绘制,但是无法通过将它们附加到FBO来绘制它们。要绘制纹理,它必须具有 两者 图像格式的渲染缓冲格式和纹理格式。

在历史记录中,有些渲染缓冲区格式不能用作纹理。多重采样格式就是一个例子,在创建初始FBO规范之后添加了多重采样纹理。