
Originally Posted by
Eric Lengyel
I understand why most of the deprecated features in OpenGL 3.x were deprecated, but there are a few that don't make sense to me. Could someone on the inside please explain why the following features were ripped out? The only plausible explanation seems to be that these features aren't in DX10, so they were dropped from OGL3 just for parity. I know that nothing has actually been removed from OGL3 -- I'm just looking for the reasons that came up when the ARB decided to put the following items on the deprecated list.
1) Alpha test. Yes, we can put kill/discard statements in our fragment shaders, but alpha test has been in hardware forever and is faster than adding shader instructions. This feature also presents a negligible burden on driver developers.
2) Quads. These are extremely useful for all kinds of things, and they're supported directly by the setup hardware. Yes, I know the hardware splits quads into two triangles internally, but being able to specify the GL_QUADS primitive saves us from either (a) having to add two more vertices to the four needed for each quad, or (b) adding an unnecessary index array to the vertex data for a list of disjoint quads. This feature is also trivial for driver writers to implement.
3) Alpha, luminance, luminance/alpha, and intensity formats. These are very useful for specifying 1-2 channel textures! But the most important reason to keep these is that the hardware has remapping circuitry in the texture units that's independent of the shader units, so a shader doesn't have to be modified in order to work with an RGBA texture or a LA texture. If these formats can't be used, then two separate shaders would be necessary: one that operates on an RGBA sample, and another that reads an R or RG sample and then swizzles/smears to get the proper result.