Hello, I searched for info on "OpenGL ES 1" in these forums, and I got one post that seemed the most relevant (to me) --> <
http://forums.ouya.tv/discussion/comment/779/#Comment_779> (specifically, the sentence: "
Also, it would be great if Ouya provides another sample using OpenGL ES 2.0 instead of 1.0."), but it seems to just only be referring to a game sample running in an
Android emulator, and I wanted to get a more definitive answer. So, my question is: does the actual
Ouya game console run games coded in just
OpenGL ES 1.1 O.K.? Now, if OpenGL ES 1.1 runs slower than OpenGL ES 2.0 (on Ouya) because of some "Compatibility Mode" (as some others have claimed in various posts/threads on the 'Net), how much slower is it? Barely noticeable or too slow? <-- I am talking about the Ouya gaming console itself and not an emulator, BTW.
Another question, does one need to use Unity to program an Ouya video game? Is it
absolutely necessary to also use that in order to code games for this Android-based device? So, would something that was coded for something like a
Nexus 7 tablet port over relatively easily (onto the Ouya console)? <-- Note: these apps do not use any Unity or other similar engine or whatever you may call it. Would a
complete and playable/runnable Ouya game/app work without Unity (or such similar thing) in it? Thanks, in advance, for your help!
Comments
As far as I know the Tegra3 provides OpenGL ES 1.1 support through a fixed function emulation path through it's driver stack, so like ye good ole days on the desktop when programmable pipelines first appeared, they remained backwards compatible with fixed function pipelines with emulation, (think DX8 and DX7).
Unity I'm guessing provides a whole bunch of pre-generated OpenGL ES 2.0 shaders, for transformation, lighting, texturing, shadows, etc. Which makes it easy to use as you probably don't even have to know what a shader is, let alone write one. I'm assuming it provides enough extensibility so that you could provide your own shaders, (a Unity user should be able to answer this for you).
Your choices of API are not limited in anyway, you can use any of the API's with pre-generated shaders, libgdx, (2D), Unity, (3D), for example or generate your own shaders in OpenGL ES 2.0 using the Android SDK in Java or the Android NDK in native, (C, C++). With the Java SDK you are unable to use any of NVidia's OpenGL ES 2.0 extensions, whilst with the native NDK you have access to all of them.
If you want to write your own shaders under OpenGL ES 2.0, then you have a fair bit more setup work to do, but you will have more flexibility and probably more performance compared to canned shaders in an API.
You don't have to use Unity, you can use a multitude of API's, or hit the metal as hard as you want through your own shaders using the Android SDK/NDK.
As far as how much slower ES 1 would be over ES 2, I really have no idea. Why wouldn't you just use ES 2?
This allows shader only hardware, (such as the Tegra 3), to offer OpenGL ES 1 fixed functionality and hence backward compatibility.
Why would you use OpenGL ES 1 on a Tegra 3? Well I wouldn't, but someone who didn't have shader knowledge or the time/resources to build a shader only engine would probably benefit from OpenGL ES 1 functionality.
FYI: here's an interesting document (that I just found) for those wanting something easy to understand regarding the different versions of OpenGL ES:
[PDF] Open GL ES - Computer Graphics
Hope that helps other programming newbies! :)
The other thing that I would change with your statement is that a true OpenGL 1.0/1.1 device, (i.e. old school or cheap fixed function hardware), cannot run OpenGL ES 2.0, whereas all OpenGL ES 2.0 devices, (I think it's part of the ES standard), can run OpenGL ES 1.0/1.1 for backwards compatibility.