In this short post I want to tell how harmony will exactly work and what progress I achieved with it.
Harmony is split up to backend and frontend. Backend provides low level OOP API and allows to create frontends like mojo. At the moment I conduct the development of graphic backend. This backend is based on OpenGL ES API on those targets, where it can be used. On targets without GLES support, there are some native wrappers for its emulation. So, I minimized the platform specific native code. In future it will help to do less work on adding new targets.
In case of graphic API, it isn’t a big issue to write cross platform backend. I already have support of primitive shaders and vertex buffers on all planned targets. Now I will need to add support for working with textures and some functionality for batching.
Unfortunately, it’s not so simple with audio API, which is more platform dependent. That’s why, the first versions of Harmony will require mojo for work with audio. But ultimately, there will be added backends for audio too.
What targets will be supported?
Currently Harmony supports the following targets: HTML5, Desktop, Android/OUYA, iOS, PS Vita, WP8 and Win8 targets. There is no support for XNA target. I’m also thinking about Flash target and most likely there will be no support for it too.
A couple of words about shaders
Base shading language will be GLSL. But in case of PSM, you’ll need to write additional shader for it in CG. Also, there are some issues with complex shaders for Win8 and WP8 targets, as these targets have some limits. Perhaps in future, I’ll add support for writing shaders on some general-purpose shading language, but I’m not sure of it.
Despite the fact that I made significant progress in these three weeks, there is still a lot of work until I can publish the first beta-version. I’ll try to keep you up to date, and post updates in this blog more frequently. Here is a small harmony demo that shows work of a simple plasma shader: