Compressing 3D Textures for S3TC


I’m trying to figure out how OpenGL compresses and mipmaps 3D textures. From the spec, I gather that mipmaps are just 2x2x2 down-sampled (cube filtered) versions of the original. But how might one compress 3D images for S3TC, by compressing each slice independently, or by taking slices together somehow? I have a working version of the 2D version, but I’m not sure how to proceed with 3D. I’m thinking slices but not sure.

I know that OpenGL can do this for me, but I want this addition to my library.

Any insight would be appreciated.


The more I think about it the more I think it has to be independent slices, since I see nothing in the s3tc spec about volumes. Probably just the way it is for 2D, only repeat for each slice. That’s got to be it!

Sorry guys. If anyone disagrees, please chime in! :slight_smile:


Take a look at this:

Thank you very much for pointing that out. That’s exactly what I was looking for (right under my nose).

This spec seems to confirm my original suspicion, that each slice (layer) is calculated independently of the others. DXT1 size is 8 bytes in 2D 4x4, but 16 bytes in 3D 4x4x2 and so on. I initially feared I’d need a new algorithm to convert the blocks, but apparently that’s not the case. What a relief!


This is something I am very interested in.
But it is unbelievably difficult finding the information out on the web.

Do all cards now, pretty much, support hardware compression of 3D textures ?


unbelievably … :rolleyes:

For 3D textures, this extension is nvidia-only apparently :

Hi ZBuffer - quick tip - it really pays to read the thread thoroughly before trying to attempt patronizing comments. :slight_smile: Good luck in future.

I fail to see your problem, John. As ZbuffeR correctly pointed out, only Nvidia provides this extension. The comment was neither patronizing nor inappropriate.

Yeah, jon is complaining one an a half year after I gave an useful answer … I guess he was very upset :smiley:

Wow, I haven’t looked at the date Oo

Funny :slight_smile: