I think you mis-spoke. DXT1 and DXT3 are native to OpenGL (as is DXT5). Well native in that everyone supports them. They have to or they’d be laughed out of town. They’d likely be core were it not for a silly patent issue.
And re DXT2: IIRC DXT2 == DXT3 and DXT4 == DXT5. Same formats!
The distinction was an implicit interpretation on whether the texture contained pre-multiplied alpha texels or non-premultiplied alpha (kinda like a shader TexEnv, but stored in the format type – odd), where DXT2/DXT4 supposedly represented pre-multiplied alpha texels, and DXT3/5 non-premultiplied-alpha.
In practice, nobody used it, and Microsoft figured out it was a dumb idea and got rid of it in DX10, where DXT2/DXT3 became BC2, and DXT4/DXT5 became BC3.
Note that DXT1 (became BC1) implicitly requires pre-multiplied alpha texel data.
So it’s not like you’re missing anything with OpenGL.
ATI The Compressonator is good, but I want to do it in my program.
Also check out Simon Brown’s free and open-source squish. Also, see Jan Paul van Waveren’s Real-time DXT Compression and Real-Time YCoCg-DXT Compression Whitepaper, if you really do want to code it up yourself – lots of provided sample code.