Contact Mailing list Get latest version

Oolong Game Engine

The Oolong Engine is written in C++ with some help from Objective-C. It will help you to create new games and port existing games to the iPhone and the iPod touch.

Feature list

  • OpenGL ES 1.1 support
  • Math library that supports floating-point calculations with an interface very similar to the D3D math library
  • Support for numerous texture formats including the PowerVR 2-bit, 4-bit and normal map compression formats
  • Support for PowerVR's POD (Scene and Meshes) and the 3DS files formats
  • Touch screen support
  • Accelerometer support
  • Text rendering to support a basic UI
  • Timing: several functions that can replace rdstc, QueryPerformance? etc.
  • Profiler: industry proven in-game profiler
  • Resources streaming system
  • Bullet SDK support (for 3D Physics)
  • Sound Engine that supports OpenAL
  • Networking library based on ENet
  • Industry proven memory manager from Fluid Studios

Planned features

  • OpenGL ES 2.0
  • new sound engine ...
  • a new model and scene format like the .x file format or the DOOM III formats

Oolong Engine 2.x is developed with the official iPhone SDK (Oolong is in development since September 2007). So it requires a Mac with at least OS X 10.5.x and driven by an INTEL processor. Your device (== iPhone / iPod touch) should run OS 2.x and you need to be a registered developer to use it on the device.

Check out Oolong Engine at Google code for the latest version.
The new discussion list is here

Many of the assets used in the Oolong Engine are copyrighted by Imagination Technologies / PowerVR. Thanks for allowing us to use them. Please check out their PowerVR SDK for further information on how to optimize for the grapics chip in the iPhone / iPod touch.

Some thoughts on graphics programming in general can also be found on Wolfgang's blog Diary of a Graphics Programmer. Have fun!

Oolong is used in

  • Block2
  • iPunt
  • Kids vs. Zombies
  • Battle Checkers from uses some of the Oolong Engine code
  • iTorque Game Builder (the iPhone version of the Torque Game Builder)
  • Zombie Mansion a first person shooter for the iPhone
  • A stereoscope simulator
  • Oolong 1.x was used in iPhysics


June 28th, 2009

Fixed the VFP math library bug. We started with the support for OpenGL ES 2.0.

May 8th, 2009

Added new timer functions yesterday and changed the skeleton example so that it shows off how they work.

May 6th, 2009

Commited code that should remove the errors that were seen in split testing tool for Debug builds of the particle system and other examples with the VFP math library. This is an updated version of the VFP math library file that removes the errors with register clobbing. Additionally there is now a define that forces you to switch off the thumb mode. If thumb mode is still on in your compiler settings you should see an error message. Switching off thumb mode was a huge speed up ... especially the Bullet physics engine shows a really boosted frame rate -probably more than 2x-. If anyone feels like he/she is not receiving mails from the Oolong list, hotmail seems to have set us on a spam list and bounced back mails, so that the Oolong mail server deactivated the accounts. On a sidenote there are 625 members in the mailing list.

December 28th, 2008

Commited the code for the latest POD format two days ago with extensions to the math library. Additionally all examples now use a VBO. Please provide feedback if everything still works as expected ... lots of code changes and my Q&A; department is so small :-)

December 24th, 2008

Happy Holidays! Upgraded the engine over to the new POWERVR POD format. I already converted the POD and Optimized Mesh example over. Need to convert all the other stuff as well. This will come out with the next commit as well as a small tweak to the the memory manager. It does now memset all allocated memory to 0, independent if you allocate memory with malloc or calloc. Updated the to-do list: removed the POWERVR upgrade but added a new sound engine ... let's see if I ever get closer to the DOOM III format support :-) On related news I realized today that the Quake III project I contributed some code to went public already at the end of November. Here is the URL

Quake III Arena for the iPhone

There is a list of issues. If you have more spare time than me, maybe you can help out.

November 28th, 2008

Added a new memory manager. I picked the one from Fluid Studios. You need to include the header file "Memory.h" and add the memory manager files to your directory to make it work. The main difference between the version available from Fluid Studios website and the one used in Oolong is that it outputs to your console instead of a log file. There is also a new timer function in available that is more convenient. I removed all the fixed-point functionality from the engine. It is not necessary on the iPhone. Update 2: the memory manager and the new VFP based math library is not supported by the simulator. They are excluded now if the demo/game is compiled for the simulator. Update 3: added the preprocessor flag _NOMEMORYMANAGER to switch off the memory manager in the Physics examples. They use the memory manager from the Bullet SDK already.

November 25th, 2008

Hooked up the VFP math library to Oolong. Removed all fixed-point math functionality. It just bloated the code and wasn't used on the iPhone anyway. Next stop is memory management ...

November 9th, 2008

Now that we have our first VFP based function in the VFP math library: VFP Math Library, I measured the speed difference. The function multiplies two 4x4 matrices. Running the standard Oolong C function 1000 times takes 17ms. The VFP based version takes here 0.7ms. I would call this a 20+x speed-up :-)

November 6th, 2008

Matthias Grundmann uploaded the first VFP ASM function to the following website: VFP Math Library. This library will hold VFP ASM versions of the Oolong math library. We will slowly but steadily convert some of the functions to VFP ASM. The VFP hardware unit on the iPhone / iPod touch is undocumented. It is a kind of MMX unit with 128-bit registers that can speed up code substantially, assuming that it has the right layout.

November 2nd, 2008

Simplified the renderer framework by removing InitView() and ReleaseView() everywhere. That was not necessary anymore because Oolong assumes always a full-screen view with the main button on the left.

October 25th, 2008

Lots of things happened in the meantime. Oolong has now a networking library with several example programs on how to start a server on your mac etc.. There is a new ported PowerVR example that shows Matrix Palletes. The next big challenge is to solve the challenge of having at least a simple art workflow in there. The current plan is to export from an art package a collada file and then convert this into a game format that is lighter and has vertex cache optimizations for the PowerVR chip in there. Somehow the physics data for Bullet will need to be preserved in those files. The mailing list has now more than 290 people.

July 25th, 2008

Updated the audio example, made the sound engine more error proof and added reset code to the touch screen library. I also changed in every plist file the icon reference from Icon.png to icon.png. Thanks to darky lucera for high-lighting the sound engine improvements and to James Power for the hint regarding the big I :-). The new audio example shows now how to switch on and off a sound and how to position a sound by moving it to the right, left or center.

July 13th, 2008

News hijacked by Sven Herrmann ;-)

As you can see the new website is online, hope everyone likes it. The structure of the page is pretty much the same as the old one, didn't made much sense to do a website with multiple pages at the moment. As soon there is enough content to justify a multiple page website expect another update ;-)

Would be nice to get some feedback how the pages looks on an iPhone as I don't have one yet (ordered a 3G but that didn't arrived yet).

July 11th, 2008

Erwin finished the Pick Object example. It shows how to pick objects with the help of the touch screen and how to kick them away. So it is more like a Kick Object example :-)

I added an audio library that supports OpenAL and I am working now on the example program for this library.

The skybox demo is now working as expected.

There is a new resource path function that returns the path to the package content of the *.app file. It is in the Utility directory.

Now I will look into a Super Monkey Ball like example to show how a camera can be used together with the accelerometer and then we would need a network library and a new model format. At the same time Jim Treats started working on the documentation of the engine. Sven Herrmann contributes a better website design that I can setup soon.

July 3rd, 2008

Cleaned up the code base of the San Angeles demo. There is a switch now that let's you switch on and off the usage of indexed triangle lists. So the triangle soup that is generated from the procedural geometry algo is converted into an indexed triangle list. There are still a few problems with the generation of normals and colors because the relationship between vertices and the normals and colors is different. In the original code path, the code assumed quads as the base primitive form. So for each quad there should have been the same set of normals and colors. I need to find a way to keep up this relationship for indexed triangle lists.

The example only runs on the simulator. The support on the device broke between beta 4 and 5. I will submit a bug report to Apple. Furthermore I increased the framerate for all examples to a minimum of 60 by decreasing the timer value. Many of the examples actually run with 60 frames so it is nice to show this off.

June 29th, 2008

I just made a minor update to the code base. I installed beta 8 and it seems to work without any changes. I also realized that my small little commit I did before I left for Germany kept all the PowerVR examples from compiling .... I fixed that.

June 23rd, 2008

Added a comment regarding assets and examples used from the PowerVR SDK to the Oolong Google code website. I also moved all the PowerVR SDK examples that were ported over to Oolong in the folder "Ported PowerVR Examples". Having those examples with the assets around makes a huge difference. Thanks PowerVR for allowing us this!

June 14th, 2008

Paul Scott is joing the Oolong team. He is an experienced Mac game engine developer and worked for Garage Games before on the Mac platform layer of the Torque game engine. He is currently making a game for the iPhone using Oolong and wants to roll back additions to Oolong he is making for his game. Welcome to the team!!
I will also add a discussion group for the Oolong Engine soon ... stay tuned.

June 12th, 2008

Changed the planned feature list. I think OpenAL is more important than all the other stuff :-)

May 29th, 2008

Just uploaded the latest version of the Oolong Engine that compiles with the iPhone SDK beta 6.

May 26th, 2008

Uploaded an early version of a new Physics example that shows how to pick objects and do something with them. It is currently not quite working as expected due to my lack of experience with Bullet. Added a nice abstraction of the touch screen that should be easy to use from C++. Things that are broken in the moment: SanAngeles still waits for me to add code that calculates the normals for the lighting. I changed the example from using a soup of triangles to using a triangle list, but need to calculate the normals now differently. The implementation of the Profiler is not quite right currently. The Oolong icon is not used currently on the buttons .. don't know why but should be easy to figure out ...

May 8th, 2008

Uploaded the beta 5 release. Next task is to create an example that shows how to pick an object. After that it is an example on how to use OpenAL.

May 5th, 2008

I added better support for getting the accelerometer vector to the Accelerometer example. With the release of beta 5 today I will start porting the engine over to the this version of the SDK.

April 26th, 2008

I will upload today a new release on google code that will work with beta 4. Stay tuned! Here is the tea that you might enjoy while programming with Oolong :-)

April 15th, 2008

Erwin Coumans is visiting our office this week. Our conversation went somehow to iPhone programming and I showed him my demos. Today I brought in my Mackbook Pro with the whole dev environment and showed him the renderer and the stuff I did. After I gave him the source code I had a meeting. When I came back from the meeting he was smiling all over his face and he showed me the following demo that he wrote with the Bullet Physics SDK in the meantime :-)
There is also a movie here

April 11th, 2008

Ported the rest of the examples with the engine over to OS 2.0. Here is a screenshot of the main desktop:

Here are the other examples:
This example shows a basic skeleton that can be used to start a game.
This example shows how to load PowerVR's 2-bit per pixel color textures and their 4-bit per pixel normal map format. It also shows how to apply per-pixel lighting with the register combiners.
This example shows how to load PowerVR's POD geometry format with a keyframed object. There is also a per-vertex light rotating around the scene which is also loaded from the scene file.
This example shows the in-game profiler that comes with the engine. It has several ways to show the data ... this is only one of them.
This example shows the accelerometer support in the engine. It looks very similar to the official iPhone example. The main difference is that the accelerometer support now lives in the engine.
This is my still very slow demo :-) ... need to work on this.

April 10th, 2008

Got a skeleton application running on my device. Here is a screenshot:

Ok ... a rotating cube probably is not that interesting, but the cool part is that a whole renderer is running in the background. So the renderer framework works now. Apart from that I added accelerometer support to the engine. I used the accelerometer example of the SDK and abstracted the code so that it is generic and easy to add to any example. Here is a screenshot:

April 9th, 2008

Got accepted for the iPhone developer program last week and I can run now applications developed with the iPhone SDK on my iPod touch (my main development device). The latest iPhone SDK has support now for 32-bit backbuffers in combination with a 24-bit depth buffer. I am re-writing the engine again from scratch and I try to keep it running on OS 1.x and OS 2.x devices.

March 22nd, 2008

Started to port Oolong over to the official iPhone SDK. My target is to have a OS 1.x and a OS 2.x rendering path, so that it can be used to develop apps even if there is no access to OS 2.0. You would need to have installed the unofficial and official toolchain for this. Funny detail: EAGL only supports 5:6:5 backbuffer and a 24-bit depth buffer. Oolong Engine running on the OS 1.x supports 32-bit backbuffers.

February 10th, 2008

I added code to retrieve some performance data from the San Angeles demo. It seems like the demo is using 263 draw calls to glDrawArrays that just draws triangles and it throws 62872 triangles at the PowerVR chip. Those triangles are not triangle lists or strips ... so there is some room for improvements. To reduce the number of draw calls per frame, frustum culling should help a lot.

File system 1.1.3 did not let me write log files into the root directory. So they are now written to /var/root

January 29th, 2008

Switched my development environment to Mac OS X 10.5.1 and upgraded to the 1.1.3 filesystem. So all examples now compile with the latest filesystem. I added a triangle stripifier that creates triangle strips from triangle lists, several functions to do vector transformations and started to write a collision / culling library for 3D physics that supports floating-point or fixed-point math. Next on my list is the advanced camera model implementation.

January 13th, 2008

Oolong supports now 32-bit rendering by default and there is no need to synchronize with the UI update. So the update of the screen is now independent from the UI update. This was a huge speed increase.

January 12th, 2008

Added a short movie of the San Angeles Observation port to YouTube. You can find it here

January 8th, 2008

I ported the San Angeles Observation demo from Jetro Lauha to the iPhone. You can find the original version here
Here are some screenshots

January 6th, 2008

Happy new year!