ILGE 2010 Post-mortem: Engine Troubles over Tentacle Planet
Progress
I have made very little progress since the last report, mainly due to the little time that was available to me. Only two things were done:
- The source code was cleaned up a little.
- A windows binary was made (OpenGL only).
In the short term I will not work on ETOTP anymore but perhaps for ILGE 2011 or another challenge or expo I'll continue where I left off.
What Went Right
- Making wrapper functions in C for Ogre's C++ methods and adding them to ECL from C using ECL's API. I used this approach because the inverse (making the C wrapper code from Lisp) gave me segmentation faults and didn't get me very far about 2 years ago. (Note: this was using ECL functionality, not CFFI for which there's Okra.)
- Compiling a C program on both Linux and Windows that was (dynamically) linked to ECL, Ogre and OIS. This C program can, for example, start a game right away and quit back to the OS but it can also provide a CL REPL (like ECL's
si:toplevel
) so one can interactively play with a 3D scene. Since it's just a plain CL one can load extra packages and perhaps start Slime.
What Went Wrong
- Compiling a statically linked binary on Linux. This didn't go as easily as I had hoped and was starting to eat into my time budget.
- ManualObjects and shadows. I had to resort to Ogre's prefab entities to get shadows working the way I wanted in the time that I had available.
What I Learned
- ECL is a really good option for embedding a CL implementation in C(++) programs. Juanjo has been working on ECL for years now and he's still going strong. Questions on the mailing-list are generally answered within hours.
- One doesn't just add "-static" to a build rule and be done with it :-)
- Perlin noise is usable to animate objects with. Definitely for prototyping since it's so easy and quick to implement.
- I should brush up on my maths.
Source & Binary
The source code and the Windows binary are available here
http://www.aerique.net/software/etotp/.
I have not given the source code its separate GitHub repository since it will be added to Okra.
Linux Dependencies
ECL (10.4.1) configured "–with-cxx". (Feel free to try without it, I haven't.)
Debian: libogre-dev libois-dev ogre-plugins-cgprogrammanager
Windows Dependencies
I develop on Linux but the build is checked and tested on Windows using MinGW and MSYS. Either MSYS 1.10 or 1.11 was used, it doesn't really matter. The MinGW release that was used is TDM-GCC 4.4.1 but I see there's a 4.5.0 release out now.
Ogre SDK 1.6.1 for MinGW (there's no later 1.6.x SDK for MinGW). You can try the 1.7.x SDK for MinGW since the Ogre API is pretty stable, but I can make no guarantees that it will work.