# Is ETC2 Texture Compression available in OpenGL ES 2.0?

I have an ES 2.0 app and would like to use ETC2 texture compression if it is available (i.e. I am running on a device that supports ES 3.0 standard). Is it possible to use ETC2 in ES 1.1/2.0, and if so how can I query if a device supports it? For most forms of texture compression, there is an extension I can query for, but there is no extension for ETC2 since it is built in.

• No, you can't use etc2 in ES2, not as far as i know. Probably on Android, but i still don't think so. Apr 9, 2014 at 15:13

There are a bunch of GL extensions related to ETC2 support:

OES_compressed_ETC2_RGB8_texture
OES_compressed_ETC2_sRGB8_texture
OES_compressed_ETC2_punchthroughA_RGBA8_texture
OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture
OES_compressed_ETC2_RGBA8_texture
OES_compressed_ETC2_sRGB8_alpha8_texture


The ES3 compatibility extension aggregates those (and a few others). You can query for these extensions to check support, presumably.

• Ok I think I misunderstood the extensions. When I open the "OpenGL Extensions Viewer" on android (on the newer Nexus 7), I see "Texture GL_COMPRESSED_RGBA8_ETC2_EAC". So i guess i should look for that when querying the extensions. Apr 9, 2014 at 17:21
• Well, except that string is not in the extensions, nor are any of the strings you mentioned (on this qualcomm device). Perhaps if those strings aren't in the extensions, then i can only use ETC2 in an ES 3.0 context? Not sure. Apr 9, 2014 at 17:51
• If the string isn't in the set of extension strings, it's not supported.
– user1430
Apr 9, 2014 at 18:13

Pretty late to the show but this is the top google hit for ETC2 on GLES2, and I think the accepted answer isn't really complete.

I think you ought to be querying compressed texture format support rather than extensions. Something like this:

    GLint iNumCompressedFormats = 0;
glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &iNumCompressedFormats);
if (iNumCompressedFormats > 0)
{
GLint *pCompressedFormats = new GLint[iNumCompressedFormats];
glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, pCompressedFormats);
for (int i = 0; i < iNumCompressedFormats; i++)
{
switch (pCompressedFormats[i])
{
case GL_COMPRESSED_RGBA8_ETC2_EAC:
printf("GL_COMPRESSED_RGBA8_ETC2_EAC supported\n");
break;
... etc ...
}
}
delete[] pCompressedFormats;
}


The relevant ETC2 formats you might want to check are: GL_COMPRESSED_R11_EAC, GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, GL_COMPRESSED_SRGB8_ETC2, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC.