GL_ATI_texture_compression_atitc

Hello,

I’m trying to use that extension lo use compressed textures on Android platform, but I’m unable of finding its specification neither any example of the file format that this extension provides.

I really would appreciate if somebody could point me to the spec or to a fragment of code that loads that formats, as well as a tool to convert standard textures into compressed ones, compatibles with that extension.

Thank you very much.

Does android rely on GL|ES or classic GL ?

You tickled my curiousity, so I went googling with you.

I gather ATITC = ATC (or at least some folks think so).

And appears the spec is here:

which says:

The details of these formats is not disclosed, so refer to AMD’s Compressonator tool in order to encode your textures offline: http://ati.amd.com/developer/compressonator.html

So, closed format. “Use our tools. If you don’t like 'em, that’s just tough.” However, appears that NVidia texture tools may have support, with some “ATITC” library present (with header atitc/ATI_Compress.h, type ATI_TC_Texture, and API ATI_TC_ConvertTexture):

Appears this header is in some ATI SDK which a few years back looked like this

With access to a supporting device, shouldn’t be too hard to crack the encoding. Let me know if you find a link of someone that has. NVidia probably did long ago.

…however, I gather there’s a patent involved here, which is probably why nobody’s talking and few have even heard of this format:

ATC is AMD’s new texture compression algorithm for embedded systems. Technical detail is unknown, though it probably is based on the patent [17] registered by the person that wrote ATC’s OpenGL ES extension specification [2] (which states ”The details of these formats is not disclosed”).

[17] Aaftab Munshi. Block-based image compression method and apparatus. US Patent 20060215914.

@ZBuffer, Android relies on OpenGL|ES.

I’ve searched for information about that extension in these forums, in Khronos GL|ES forums, in ATI forums, and of course, googled it for a prudent period of time. The only thing I’ve found is another extension (in fact it is GL_AMD_compressed_ATC_texture), which looks like if it were GL_ATI_texture_compression_atitc (the one I’m looking for, so, an extension with two names, and the obsolete one given by the Android GL extension string??), and the ATI compressionator, like Dark Photon says.

Well, those kind of things remembers me why some years ago dropped ATI and choosed NV as gsx, but now I’m forced againt to use ATI chipsets, because the HTC’s

I must use compressed textures (as any other that wants program anything in OpenGL and embedded devices) so I’m forced to solve this issue, so when I figure out the whole process (compression, load and upload to gfx those textures) I’ll write the process in this thread. Perhaps could seerve to anybody, because I was unable to found anything about using compressed textures in Android in the hwole net.

It’s not ATi chipsets, just Qualcomm’s funky gpu. In my experience it can fetch texels extremely quickly, while its triangle setup is really slow. It made no performance difference if we’d feed it 1024x1024 32bpp or 128x128 16bpp. (I helped optimize Mystique:Chapter1 to run at 60fps) . Thus we chose to simply decode JPG/PNG into 24bpp and 32bpp. There’s whole 192MB RAM, after all :smiley: . And besides, after G1 it’s guaranteed the other phones won’t support said extensions (or even have 3D acceleration T_T )

So you’ll anyway have to support stinking uncompressed textures. Just for reference, here are the extensions:

Emulator:
GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_matrix_get GL_OES_query_matrix GL_ARB_texture_compression GL_ARB_texture_non_power_of_two GL_ANDROID_direct_texture GL_ANDROID_user_clip_plane GL_ANDROID_vertex_buffer_object GL_ANDROID_generate_mipmap

G1:
GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_vertex_buffer_object GL_ATI_extended_texture_coordinate_data_formats GL_ATI_imageon_misc GL_ATI_texture_compression_atitc GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_stencil_wrap GL_OES_byte_coordinates GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_fixed_point GL_OES_matrix_palette GL_OES_point_size_array GL_OES_point_sprite GL_OES_read_format GL_OES_single_precision GL_OES_vertex_buffer_object GL_QUALCOMM_vertex_buffer_object GL_QUALCOMM_direct_texture

Anyway, here’s the ATC patent, that looks very much like DXT1: http://www.freshpatents.com/Block-based-…ype=description

Follow the source, given by Dark Photon; the code should be identical to loading DXT1, imho. Even random data should be loadable and displayable - so first figure-out if the G1/G2 can really load said compressed format by manually specifying the 0x8C92 as internal-format.

You are right, I’ve complained too fast. Well, at least now I’m sure that both extensions are the same (first one was never released, but renamed as the second)

For the current time, I only need to convert standard textures and load them, and I’ve found that I can do that with the ATI compressonator (and there, I found how to load them)

Thank you all,
Jacobol

has anyone had success with this?

I downloaded the ‘compressonator’ and used the ATC_RGB_AMD 0x8C92
ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93
ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
compressions as generated by the compressonator.

then loaded the textures as both internal and external compressed using the values above.

but no luck.
anyone know if any examples exist?
tested on:
android 2.0 opengl 1.5 nexus one

the image showed a 3x compression over the raw data.
which would help me greatly.