什么是ETC2压缩纹理的块大小?

时间:2013-07-27 19:59:53

标签: opengl-es opengl-es-3.0

GL_COMPRESSED_RGB8_ETC2GL_COMPRESSED_RGBA8_ETC2_EAC纹理的块大小是多少?

我使用((w+3)/4)*((h+3)/4)* 8作为GL_ETC1_RGB8_OES,但找不到任何有关ETC2的内容(Khronos文档对此并不十分清楚)。

4 个答案:

答案 0 :(得分:3)

    // ETC1
    { 4, 4, 8, COMPRESSED_ETC1_RGB8_OES },

    // ETC2 / EAC
    { 4, 4,  8, COMPRESSED_R11_EAC },
    { 4, 4,  8, COMPRESSED_SIGNED_R11_EAC },
    { 4, 4, 16, COMPRESSED_RG11_EAC },
    { 4, 4, 16, COMPRESSED_SIGNED_RG11_EAC },
    { 4, 4,  8, COMPRESSED_RGB_ETC2 },
    { 4, 4,  8, COMPRESSED_SRGB8_ETC2 },
    { 4, 4,  8, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 },
    { 4, 4,  8, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 },
    { 4, 4, 16, COMPRESSED_RGBA8_ETC2_EAC },
    { 4, 4, 16, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC },

前两个值是块大小(例如,4x4),第三个值是BytesPerBlock。第四个值是压缩模式。这来自我用于处理所有存在的压缩格式的表。

我删除了对此答案无用的值(压缩和解压缩函数指针以及源/目标数据的首选像素格式,sRGB等)。

答案 1 :(得分:1)

OpenGL ES 3.0规范在A texture compressed using any of the ETC texture image formats is described as a number of 4 x 4 pixel blocks部分中包含声明:C.1 ETC Compressed Texture Image Formats

答案 2 :(得分:1)

FWIW ETC2通过利用Strom等人在“Texture Compression using Invalid Combinations”中描述的一些其他未使用的位模式来扩展ETC1。 (另请参见图形硬件Slides Presentation):

因此块大小相同。

答案 3 :(得分:1)

此处记录了块大小:http://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage2D.xhtml

特别是:

  • GL_COMPRESSED_RGB8_ETC2 = ceil(width / 4)* ceil(height / 4)* 8
  • GL_COMPRESSED_RGBA8_ETC2_EAC = ceil(width / 4)* ceil(height / 4)* 16