JellyTouch is an OpenGL ES game development framework created by Surgeworks. Unlike many popular RAD tools like Unity or Torque our framework is for hardcore developers, those programming geeks who like to retain total control over the code and not willing to trade game performance for RAD development comfort. JellyTouch is a set of Objective-C classes and utilities that encapsulate useful optimizations and common things one would most likely have to code when developing a game on iPhone.Some of the features include:
- Hierarchies of scene objects (2D or 3D)
- Animation
- Input handling — gestures and accelerometer
- Mesh optimization and compression
- Shadows and particle systems
- Resource management
- Local high scores management
Developers using it can focus on building game features instead of routine coding but they also have an unlimited level of freedom to modify any part of the process. Our goal was to create a very useful but also a very lightweight and fast library with an efficiency comparable to expensive manual coding from scratch.
We use JellyTouch in own projects so far but we do plan to make an open source release pretty soon. So it was essential for us to know how we compare to industry leading tools in terms of performance. As an opponent we chose Unity as one of the most popular tools on market. The test was to render a mesh of N polygons textured with a 512×512 texture and lit by one directional light source. The scene was animated and controlled by accelerometer so «player» could move the mesh around.
For accelerometer frequency of 60 and max frame rate 60 the results are below:
Number of polygons | JellyTouch FPS | Unity FPS |
1200 | 60 | 60 |
3120 | 60 | 58 |
7080 | 58 | 48 |
12640 | 44 | 33 |
The results are really encouraging for us. It was not immediately we outperformed Unity on our test and we had to implement some very nice optimization techniques during this test which are now a part of JellyTouch. Now there is something for us to be proud of. We also learned some important things regarding what works and what doesn’t work to improve rendering performance — see another post about that.