DaveBaumann said:
Now, rather than writing different code for DX7, PS1.0, PS1.1, PS1.4, OGL, OGL2, OGL + (insert extension here), you write it once, and let the compiler deal with the rest.
That sounds very much like whats trying to be achieved with OpenGL2.
Except that:
1) OGL is a hardware level API and is designed to match up closely with what the underlying hardware has to implement.
2) There is always a need for higher level abstractions, and OGL2 sounds like it is lower level than Stanford's real time shading language. Remember, we want Renderman Shader-style flexibility.
3) Even if OGL2.0 achieves what it sets out to do, and I hope they do, it doesn't help the developers who want target multiple APIs and multiple platforms NOW. How soon will there be *drivers* and *hardware* that implement the complete OGL2.0 functionality available for all vendors, and for Mac, PlayStation2, X-Box, GameCube, Linux, etc?
Many developers want to start writing complex shaders right now, but can't wait 2 years for OGL2.0 to mature. CG's higher level layering in the API stack means that you can write to its language/API now, and take advantage of both today's hardware and OGL2.0 when it becomes available.
4) DirectX is still a force to be reckoned with. What if you want to support a card that doesn't support OpenGL?
5) Would you argue that they move GLUT's functionality into the base OpenGL API? Would you advocate that everyone program in Assembly Language!?? You don't always want a monolithic API. What you want is a low level API that exposes *powerful* general purpose hardware and then higher level APIs that make it easy to code effects.
CG sounds very high level. If CG was called "OpenCG" and was a higher level code generation tool for generating OGL2.0 shaders, endorsed by OpenGL, I suspect this discussion over competiting APIs or duplicate functionality wouldn't exist, as people would see that it's just a developers tool, not a device driver API that talks directly to hardware.