The 1.10.11 release marks the final (planned) release for the 1.10 series and kicks off the 1.11 cycle that will allow us to break the API. As announced in the mid-term report we will use this to move to C++11 and drop some of the deprecated functionality.
But the 1.10.11 release has also some highlights on its own, namely
Physically Based Rendering
A PBR demo based on the glTF2.0 reference implementation was added. As the original it runs both on desktop GL as well as on GLES2. As HLSL shaders are missing it will not run on D3D yet though.
The glTF2 geometry was converted using blender and the blender2ogre exporter. The albedo/ emissive/ metallic maps can be used as is. Note that this is just straightforward port of the WebGL demo without being integrated in the RTSS. This means that you can not use FFP fog settings or hardware based morph/ skeletal animation without extending the shaders. On the other hand you neither could with the existing HLMS demo – without being able to straightly load glTF2 models.
Android SDK (beta)
As cross compiling Ogre from source for Android was a obstacle for those wishing to just use the Java bindings we now offer a pre-compiled SDK providing JNI bindings. The target architecture is “armeabi-v7a with NEON”, requiring API level 16. This means it will run on almost all recent ARM devices including 64bit ARMv8 with decent performance.
Note that the Java Component itself is still marked beta as not all Components wrapped and not all API parts (callbacks) have been verified to work yet.
Improved RTSS Component
The original plan was to integrate the PBR shaders with our Real Time Shading System – the automatically connecting shader blocks we use for emulating the Fixed Function Lighting on GLES2 and GL3Plus. Unfortunately the PBR approach does fit well the lighting/ texturing separation of the FFP, that is consequently present in the RTSS. So we need to make the RTSS more flexible in this regard first.
Nevertheless some important improvements for the RTSS have landed. Most notable is probably the improved documentation as it was the weakest point here. You now find a reference of the supported material script options here (e.g. normal-mapping, triplanar texturing). Yes those were actually supported since the inception of the RTSS. 😉
If you either use the GLES2, the GL3Plus or the D3D11 RenderSystems, you are strongly encouraged to take a look at the RTSS System overview, to understand what is happening “under the hood”.
Furthermore we have improved the internal API – while previously you had to write something like this for a simple “a = b;” assignment
curFuncInvocation = OGRE_NEW FunctionInvocation(FFP_FUNC_ASSIGN, FFP_VS_COLOUR); curFuncInvocation->pushOperand(vsDiffuse, Operand::OPS_IN); curFuncInvocation->pushOperand(mVSOutputDiffuse, Operand::OPS_OUT); vsMain->addAtomInstance(curFuncInvocation);
you can now just write
vsMain->addAtomAssign(mVSOutputDiffuse, vsDiffuse, FFP_VS_COLOUR);
and indeed get “vsOutputDiffuse = vsDiffuse;” instead of “FFP_Assign(vsDiffuse, vsOutputDiffuse);”
Then the RTSS is now able to generate shaders for single passes of a technique which allows you to create multi-pass techniques with custom shaders, but still get your shaders auto-generated for the remaining passes.
Finally the RTSS now fully supports point sprites – including texturing and attenuation.
The logging in ogre was extend by colored output on xterm compatible terminals (including our CI server output). While this sounds like just a minor change, it greatly improves the visibility of warnings and errors generated by Ogre. To this end there is also the new LML_WARNING log level that produces yellow output (while errors are colored red).
Cg shaders in GL3Plus
The Cg plugin was enabled to generate GLSL shaders for the GL3Plus RS which should greatly improve migration towards GL3Plus. Note that traditionally the Cg plugins emits primitive ARB assembly code, so the results are not exactly the same.
For the full list of bugfixes and changes – as always – see the release notes.