
joel wrote:
Christian Schladetsch wrote:
That simply isn't true, unfortunately. DirectX and OpenGL have different abstractions for the same hardware, and what's worse is that the hardware itself is changing even faster than the API's that access it.
That is far different to the API's that deal with threads. To make matters worse, OpenGL is a few generations behind DirectX (sorry, but it's true), and the gap is only increasing with Geometry Shaders.
The reality is that DirectX provides the best API to use hardware, OpenGL wont and can't compete at that level because unlike DirectX, OpenGL is not driving the hardware industry.
Wasn't that stuff like Ogre3d do somehow. That's ages i didn't dip into these so take this question as a real naive one for the sake of the argument.
Examples are: - pixel formats supported by one API but not by the other (Direct3D: YUV textures, OpenGL: latc compression, at least I'm not aware of a D3D equivalent) - buffers: OpenGL Buffer Objects and Direct3D Buffers work differently, and allow for different semantics - render-to-texture differs significantly between the two (OpenGL FBOs allow have many more features than their D3D equivalents) - Direct3D10 unifies all types of buffers, OpenGL 3 doesnt - Render-To-Texture in D3D understands (0,0) as being the upper left corner, in D3D it is the lower left one - Direct3D shaders and OpenGL ones have different, incompatible approaches (D3D knows no shader linking for example) - Direct3D uses vertex declarations, OpenGL uses pointers (which actually are offsets when buffer objects are used) .... This is a small excerpt of the differences. There are more subtle ones, such as locking flags for memory mapping allowing more fine-grained data transfers in D3D. The problem is that the only feasible way is a lowest common denominator, both in terms of features and performance. To use the graphics hardware best, you must use API specific functions. regards carlos