GameLib is my library for making games
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Macoy Madson 704da22ad2 Better naming for SDL functions 2 hours ago
Dependencies All 3rd party dependencies now built by Cakelisp 6 days ago
src Better naming for SDL functions 2 hours ago
test Better naming for SDL functions 2 hours ago
.clang-format Got Ogre initialized 3 months ago
.gitignore Cakelisp search dirs, NoHotReload fix 1 month ago
.gitmodules Added blender2ogre and mesh pipeline instructions 1 month ago Fix hot reloading 2 weeks ago Got hot-reloading working on VocalGame 1 month ago Added Tracy profiler 2 months ago All 3rd party dependencies now built by Cakelisp 6 days ago
COPYING Load meshes and create nodes separately 2 months ago
LICENSE Initial commit 3 months ago All 3rd party dependencies now built by Cakelisp 6 days ago Added Tracy profiler 2 months ago Update Cakelisp for macros, auto null 2 months ago


GameLib is my library for making games. It is the successor to base2.0.

GameLib is written in Cakelisp.


Clone the repository and its dependencies:

git clone
git submodule update --init --recursive
hg clone Dependencies/SDL



This step will take a while the first time, because it builds Cakelisp, Ogre, SDL, and all the test programs. Subsequent executions will use the cakelisp_cache and will be much faster.

Note that changes to the 3rd-party dependencies will not automatically be detected.

Asset pipeline

This is a work in progress.

Blender setup

  • Install Blender. I can confirm Blender 2.91 works.

  • Copy blender2ogre to Blender plugins:

cp -r Dependencies/blender2ogre/io_ogre/ ~/.config/blender/2.91/
  • Open Blender, then open Preferences (Edit->Preferences), and click Add-ons

  • Search for "Ogre" and check the box to enable the OGRE Exporter

  • Build Ogre, if you haven't already (run

  • Set OGRETOOLS_XML_CONVERTER to where you built OgreMeshTool. You'll need to browse to gamelib/Dependencies/ogre-next/build/Debug/bin/OgreMeshTool_d

You are now ready to export. Open your model or create one, then do File -> Export -> Ogre3D. See the following section for settings. Note: I will be making command-line driven auto-exporting to reduce these manual steps.

OGRE Export Settings

  • Don't export materials. These are v1 materials as far as I know, which don't work with Ogre 2

  • Don't export scene. I don't use these files

  • Ensure mesh export version is set to v2

Materials and Textures

The blender2ogre plugin doesn't do much to help with Ogre v2 materials.

For a textured mesh:

  • UV unwrap mesh

  • Create new image for texturing

  • Add a new material and set the diffuse input to your new image. Name the material what you'd like it to be called in the game as well

  • Paint the texture as desired

  • In the Image Editor window, do Image -> Save As and save the image to a lossless format (I used PNG)

  • Run the following to convert the image to .dds (which will be a larger file, but will load drastically faster):

      convert assets/MyTexture.png data/Materials/Textures/
  • Export the mesh. Because export materials doesn't do us any good yet, we only export the mesh to get the updated UV coordinates and material (name only)

  • Create a .material text file like below:

      hlms MyMaterial pbs
          roughness	0.4
          fresnel		1.33
          // normal_map		Rocks_Normal.tga
          // roughness_map	Rocks_Spec.tga
          // specular_map	Rocks_Diffuse.tga
  • Finally, add the material to the Ogre::Item:


    This is only necessary if the mesh didn't already have the Material name set.

Converting .mesh.xml to .mesh

You shouldn't need to do this step if you set OGRETOOLS_XML_CONVERTER, but in case blender2ogre didn't recognize it, here's how I worked around it:

cd Dependencies/ogre-next/build/Debug/bin
./OgreMeshTool_d -e -O puqs ../../../../../test/data/Models/Suzanne.mesh.xml

Run this after you've made an attempted export from the Blender OGRE plugin.


GameLib is copyright (C) 2020 Macoy Madson <>.

Licensed under GPL-3.0-or-later.

Contact if you would like to negotiate an exception for your use-case.