I have to develop a cross-platform multimedia application that will run on Windows, Linux, MacOSX, Android and IOS. This application will have to be able to play audio/video content, display photos and graphs and, probably, show simple 2D animations. After lot of searching, it seems that the "most portable approach" to the problem is to use
C++ as language and
OpenGL ES as drawing APIs, because both are supported on almost any pair of device/OS, the performance level will be good and the visual appearance should be near the same on each (group of) devices.
Obviously, I know that I'll have to tweak the appearance of the app to "scale" on different devices with different display sizes and resolutions. I also know that it's unrealistic to demand the exact same behavior for any piece of code on such different architectures. I just want to minimize the written code (e.g. the rewrite of a piece of interface first in C++, then in Java must be avoided).
I'm not an expert in OpenGL ES programming, but looking at some samples, it seems that I will need a framework to have some ready-made widget (menus, buttons, textboxes). I'd prefer not to reinvent the wheel.
This is a low-budget project, so I'll need a framework that is completely free and opensource. The latter requirement also gives the freedom to add/modify APIs of the framework when something important is missing or is misbehaving. I'm not asking for a multipurpose framework (such Qt for example), able to handle input, networking, storage, etc., just because I strongly suspect that such a framework doesn't exist for the platforms I mentioned. I just want a sort of OpenGL wrapper able to abstract many of its low level details but also offering some UI widget as Qt would do. I'll handle intput, networking, storage, sensors separately, probably using other cross-platform open source libraries, as suggested here.
I've read a lot of similar questions on Stackoverflow and Gamedev, and I've heard about a lot of frameworks (Unity, Corona SDK, LÖVE, LibGDX, Ogre, Cocos2D-x), mainly created for game development. Ogre and Cocos2D-x, for example seem to match some of my requirements, but if I decide to use one of them I'll have to code almost all my UI elements (not such a big burden, someone might argue).
A few remarks:
- the application is 2D, so OpenGL might seem like overkill. However, OpenGL ES has been chosen because of it's very good portability and its high performance level even on old hardware.
- I'm basically a Linux C++ developer, so I'd prefer not to switch to HTML5 (still too young) or .NET/Mono (less efficient) without remarkable advantages in return. Moreover, I couldn't realistically master these languages in the short period.
- I've been impressed with the story in this article. I believe that this could be the right approach: a mix of open source tools and libraries that fit the project needs. But I'm still missing the most important piece: the graphics framework.
- Writing this question, I found this discouraging answer. I hope my requirements doesn't produce an empty set. I really can't affort to maintain n different UIs on n different platform. I really need something that is platform agnostic.
Any help or advice would be greatly appreciated.