The OGRE Next Game Framework

The OGRE 3D graphics/game framework is a cross platform open-source C++ game framework and rendering engine that has been in development since 2001! Over the last two + decades, OGRE has been used to power several successful games, such as the Torchlight Series, Rogue Galaxy and even provided the original rendering engine for Roblox.

OGRE Next is a branch of Ogre that is focused on modernizing the OGRE renderer. Ogre-Next 3.0.0 Eris was recently released, which included a move to C++ 11. Details of the Ogre Next 3 (and a bit about 4):

It’s been 2 years since 2.3.0 and almost a year since the last 2.3.x release. It’s about time for 3.0.0!

Ogre to OgreNext name migration

We’re trying to make OgreNext and Ogre able to be installed side-by-side. The details can be found in the manual.
But the short version is that we’re moving forward to have Ogre.dll and OgreNext.dll as different DLLs so that
Ogre and OgreNext can coexist for projects who want to support both, and for Linux distros that want to support
both without getting into name clashes.

Given that this requires changes in client projects (e.g. CMakeLists.txt and *.sln, etc) that depend on OgreNext,
the old naming can be selected using the CMake variable OGRE_USE_NEW_PROJECT_NAME which defaults to OFF for 3.0, but will default to ON for 4.0; and will be scheduled for removal in OgreNext 5.0.

Dealing with ABI mismatches: AbiCookie

A common problem in our community are crashes that were caused by simple mistakes such as mixing OgreNext.dll (Release) with OgreNext.dll (Debug). Or upgrading to a newer version of OgreNext but a lingering old DLL got loaded instead.

This can cause quite cryptic errors and crashes our users were having trouble to deal with.

AbiCookie is here to fix most of this issues, as it validates on load that the DLL being loaded matches the one it is supposed to be linked against.

The ABI cookie is used like this during Ogre::Root creation:

const Ogre::AbiCookie abiCookie = Ogre::generateAbiCookie();
mRoot = OGRE_NEW Ogre::Root( &abiCookie, pluginsPath, cfgPath,
                         mWriteAccessFolder + "Ogre.log", windowTitle );

While the AbiCookie may not catch all sort of ABI mismatches, it should catch the most common mistakes.
Plugins are also always validated by the AbiCookie.

ABI Semver

Starting 3.0.0; OgreNext will follow a modified semver versioning, where 3.0.x increments must absolutely not break the ABI, but 3.x.0 MIGHT be allowed to break the ABI in subtle changes. See this ticket comment for an explanation.

For this reason, most development will focus on 4.x.x; with 3.0.x for small fixes. Changes that would involve a 3.x.0 change will mostly be considered upon contract request.

Move to C++11 and general cleanup

The biggest focus of Ogre-Next 3.0.0 was easier maintenance and porting to newer versions; rather than new features.

We started aggressively using C++11’s override keyword, which makes much easier to catch derived classes whose functions have changed slightly in signature at compile-time.

We are also enforcing clang-format through CI to ensure code formatting stays consistent across the project and contributors.

Another important factor is that we fixed all warnings (or most, depending on your compiler version) in OgreNext.
Now compiling OgreNext results in a clean log. This results in a more robust codebase.

Furthermore, including headers no longer generates warnings in client applications, which is unacceptable.

This is not to say all changes were coding-style and C++ version related.

Particularly there have been PBR/PBS changes to better match what other engines are doing, with compatibility functions to restore the old look.

Towards the future: Ogre-Next 4.0

Actually Ogre-Next 4.0 is far more exciting! Development started a year ago as 3.0.0 stabilized and 4.0 has already interesting features:

  • Multithreaded Shader Compilation and PSO generation: This greatly speeds up shader compilation, app loading and greatly reduces stutter. Available for Vulkan and Metal.
  • ParticleFX2 plugin: An alternate plugin for ParticleFX2 with a focus on performance (parallel CPU simulation + vertex-shader-based geometry generation). The original ParticleFX plugin will not be deprecated as it serves different means. Certain FXs are easier to perform with the original PFX, while PFX2 focus on performance for large amount of particles and special rendering features.
  • Alpha Hashing and Alpha Hashing with A2C (Alpha to Coverage): A very decent trick that gets impressive results to perform transparency with depth writes enabled, which means it’s Order Independent (unlike traditional alpha blending).

Key Links

Ogre Homepage

Ogre-Next 3.0.0 Release Blog

Release Notes

Which Version to Choose Guide

You can learn more about the OGRE game/graphics/rendering framework and the Ogre-Next 3.0 release in the video below. This video was sponsored by TechSmith the makers of Camtasia (which is what I use to create all of my videos). You can learn more about Camtasia here and use code GAMEFROMSCRATCH at checkout for 15% off.

Scroll to Top