| Sure, OpenGL is portable and works everywhere, right? Well, first of all OpenGL and OpenGL ES aren't the same thing, so depending on the versions, the set of APIs differ, already there you have some set of alternative code paths. Then some features are only available as extensions, so you need to query for them, and then programm accordingly what is available. Some hardware features have different extensions per vendor for the same hardware capability, so yet another execution path. The shader compilers are quite different across vendors, some more strict than others, or different set of GLSL extensions, so yet another execution path. Finally, even when everything works, there are driver or hardware bugs to work around, yet another execution path. In the end it is OpenGL, portable everywhere, yet the engine looks like it is using multiple kinds of APIs just to work around every kind of issue. Naturally having a rotating cube available everywhere is easy, the problem is having a proper engine with Unreal like capabilities (we are talking about AAA here). |