Eniko:
It was probably done for purposes of memory/performance. Remember that OGL ES2.0 was designed for MUCH lower-end platforms than the Pandora. I have worked in mobile phone software development (GIS/mapping display and routing and social network interfaces) and most phones do not have much to work with. A large executable/DLL to provide both the "scripted" (GLSL) functionality along with the fixed-function pipeline is likely too much for most developers.
Heh... You'd be amazed at what they've got under the hood of an OpenGL API layer and the supporting driver underneath. In most modern GPU driver/API combos, you have a programmable pipeline engine with NO fixed functionality present. With the DX10 capable devices, you can even pick and choose which GPU processing elements are actively Vertex, Fragment, Geometry, or GPGPU in varying combinations.
Now, you might say, "if there's no fixed functionality present, how does the API provide it?"
To this, I will reply that the driver provides emulation shaders that get placed in the mix that provide the desired fixed functionality behavior (ShaderGen's about to be revisited again (It lives but the good working version only resides on my HD right at the moment as something I revived from 3DLabs' lost past...) because it's a helpful tool for people to wean themselves OFF of fixed functionality...). These do not arbitrarily replace the programmable pipeline operations, they get applied with this complex set of rules and while the rules are largely followed to the letter, these rules don't always give you what you expect.
QUOTE
That said, OGL ES2.0 is not hard to learn, and with the capability of ignoring features of the fixed-function pipeline you don't need - you can improve performance quite a bit. I would not be surprised if it simplified hardware design too
I'd have to concur on that aspect- overall, ES 2.0 isn't too hard to learn and it can unlock a lot more cool stuff for you if you pay attention to what you're doing. Having said this, if you've got an older piece of code or you're not ever going to need the programmable stuff for your project, it's not unreasonable to stick with ES 1.1 instead.
As for ignoring features of the fixed function pipe improving performance, that remains to be seen. The fixed function pieces didn't get applied even in the old days when we didn't have programmable pipelines until you specified something other than the default behavior. As for simplification...it dramatically simplifies the driver and API layer code and little else at this point.
Eniko said:
]Can anyone shed light on why this was done? Seems rather silly to make everyone reinvent the wheel every time.
This is because of the fact that most embedded system solutions using ES are going to be memory constrained (technically, we're that ourselves, but the constraint's so big compared to what they were envisioning using this with, that it might as well be unlimited for us...
)- moreover, it's simple enough to supply a basic shader that does this that it's a minimal thing on your part and if people are going to mostly do shader based stuff, having defaults on that piece on an embedded system equates to extra bloat there just to make it 'easy' on the people that're not going to use it.
QUOTE
Also, just so I don't have to recode my OpenGL rendering (again) is it possible to use vertex buffers and fixed functionality (at least I'm assuming it is...) like this on the Pandora?CODE
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, ScreenWidth, 0, ScreenHeight)
glMatrixMode(GL_MODELVIEW)
Or do I need to start looking for GLSL shaders for the most basic of things?
You can use the basic ones I provided in a previous comment or you can use the ES 1.1 API edge instead and sidestep the problem completely.