OpenGL ES versions ; programming without Unity

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

  • HiroLordHiroLord Posts: 54Member
    I'm pretty sure the majority of games on Ouya do not use Unity. Some do but not all.
  • ShushShush Posts: 178Member
    The Tegra3 GPU is optimised for OpenGL ES 2.0, it has a programmable non-unified shader pipeline, (4 vertex shaders and 8 fragment shaders), that most efficiently maps to the OpenGL ES 2.0 functionality. It also provides fixed functionality for blending and Nvidia's coverage based anti-aliasing.

    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.

  • Killa_MaakiKilla_Maaki Posts: 504Member
    No, Unity is most definitely NOT required. OUYA doesn't care what was used to create the APK, it's just an Android app.

    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?
    You didn't remember the plot of the Doctor Who movie because there was none; Just a bunch of plot holes strung together.
  • ShushShush Posts: 178Member
    OpenGL ES 1 should be slower on the Tegra 3 than a GPU of similar performance capabilities that has a complete fixed function pipeline, as the OpenGL driver has to intercept all the OpenGL ES 1 draw calls and states and run OpenGL ES 2 shaders, (these shaders are built into the OpenGL driver, at Nvidia's end of the driver as part of the OpenGL ES 1 emulation).

    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.
  • Spider--ManSpider--Man Posts: 2Member
    From my understanding, the Tegra 3's GPU is just one of those (mobile) chips that "slow down" the OpenGL ES 1.0 and OpenGL 1.1 calls because it has to intercept such calls and "translate" them into 'OpenGL ES 2.0'-friendly calls (due to OpenGL ES 1.0/1.1 "emulation" (being done inside the Tegra 3 chip)), right? But other mobile GPUs don't necessarily do that. I'm guessing they, those other chips, can still run OpenGL ES 1.x at full/regular speed, even if it may still not be as fast as OpenGL ES 2.x on that same device. Correct?

    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!  :)
  • ShushShush Posts: 178Member
    You're basically right Spider--Man, the only thing that I would change is that OpenGL ES 2.0 supersedes OpenGL ES 1.0/1.1. If the device you are using, (i.e. Tegra 3), is capable of OpenGL ES 2.0, then you shouldn't be using OpenGL ES 1.0/1.1 as OpenGL ES 2.0 is a completely different rendering pipeline, it is in effect almost completely programmable allowing the developer to produce effects and rendering techniques that are just not possible on an OpenGL 1.0/1.1 device.

    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.
Sign In or Register to comment.