Enhancements since the Dagon branch:
* SSE/SSE2/SIMD improves performance in several areas
o Software animation
o Batch concatenation of affine matrices
o Shadow volume routines
o Aligned memory allocator & CPUID detection
* Shader enhancements
o Parameter system rewritten and enhanced, particularly improves support for GLSL arrays but also allows more optimal parameter binding and more efficient memory usage
o preprocessor_definitions option supported in HLSL/GLSL to create variant shaders based on same source (Cg already supported this through compile_arguments param)
o column_major_matrices option in HLSL to alolow you to pack parameters differently
o 'unified' program definitions allow you to use one program as an alias for others for simpler cross-platform support
o GLSL 1.2 (GL 2.1) supported allowing non-square matrices
o GLSL now binds tangent, binormal, blendWeights and blendIndices to extended attributes (see the manual)
o Added many new auto-bindings including:
+ spotlight_params
+ 'array' versions of light auto-bindings (light_position_object_space_array, light_diffuse_colour_array, etc)
+ Fixed-function surface reflectance passthoughs (surface_ambient_colour, surface_diffuse_colour, etc)
+ texture_size, inverse_texture_size and packed_texture_size
* Lighting and shadowing
o You can now integrate texture shadows directly into your primary material pipeline, rather than them being rendered as separate shadow receiver passes
o 'content_type shadow' added to texture unit to auto-bind shadow textures into your materials and use them in integrated rendering
o New light iteration parameters to give extra flexibility when doing integrated lighting / shadowing - iteration per_n_lights and start_light
o More texture shadow projection options through ShadowCameraSetup subclasses allow improved fidelity on texture shadows:
+ Plane optimal
+ Uniform focused
+ LiSPSM
o Depth-shadowmapping example, with percentage-closest filtering for antialiased, self-shadowing effects using texture shadows
o Bounding boxes of objects visible from each camera in the last frame are now recorded, which can be used to adjust custom shadow camera setups. See SceneManager::getVisibilityABBForCam and SceneManager::getShadowCastersAABForLight
o Customisable Light Finding
+ Now you can more directly influence how OGRE picks lights to use against your renderable objects
+ Default is still 'n nearest' but you can alter that to prioritise certain lights or any other custom reordering
* Mesh enhancements
o Triangles in the edge list now grouped by vertex set - use MeshUpgrader to take advantage of performance enhancement, old files will still load but suffer a load-time reorganisation cost
o Default placement for tangents is now the tangent semantic rather than a texture coord. The latter was used in the past to support SM1 shaders, and is still an option, but the default is now the SM2 friendly version
o Submeshes can now have optional 'extremity points' stored with them to allow submeshes to be sorted with respect to each other in the case of transparency.
* Animation
o Skeleton::_mergeSkeletonAnimations added to merge animations from multiple skeletons
o Added option to Skeleton::optimiseAllAnimations which only destroys node tracks which have identity keyframes only for all animations.
o Several runtime and memory footprint optimisations
* Math optimisations
o Added specially optimised functions to dealing with affine matrices, all world / view transforms now have to be affine transforms (they were assumed so before anyway).
* Material enhancements
o mipmap_bias supported on texture_unit
o texture attribute allows you to specify a desired pixel format separate from the format of the loaded texture
o depth bias now supports slope-scale biasing as well as fixed biasing
o serialising a material is now simpler, there is no need to call addConstantDefinition et al to make sure program params are recorded for export
o quieter logging when including GPU programs which target a rendersystem which is not loaded
o shader compilation errors now dealt with more gracefully
* Texture enhancements
o You can now describe the desired pixel format to be used instead of the original image format when loading a texture
o You can now set the preferred bit depth for integer and float pixel formats respectively, for example loading 128-bit float textures as 64-bit for performance
* Vertex Texture support (SM3.0)
* Shader-based Instancing (SM2.0+)
* Particle system enhancements
o Particle System now supports emitted emitters (to create effects such as fireworks more realistically).
o Particle system renderer now has optional callback when particle(s) being emitted, moved, expired or cleared.
* ManualObject enhancements
o ManualObject now allows you to update its contents more efficiently provided the structure does not alter
o ManualObject can be used to render 2D elements by using an infinite AABB and telling it to use identity view and projection matrices
* Background loading
o Queue the loading of resources in a background thread
o Register your own thread or use automatic background queue manager
o Simple queued notification callbacks in primary thread so user doesn't have to think in a thread-safe manner
o Advanced users can perform other tasks (like scene graph setup) in a separate thread if they're careful about locking
* Static Linking official support
o Build targets for linking everything statically into one executable, including plugins
o Be aware of LGPL license conditions on derived works, or consider the OGRE Unrestricted License
* Unicode support on Font and Overlays
* WindowEventUtilities introduced
o Allows subscription to window events on auto-created windows
o Allows access to message pump for externally created windows
* RenderWindow::getCustomAttribute and related features unified across platforms
* Build / dependency changes:
o Image routines replaced - FreeImage + custom DDS codec now used
o SDL platform removed on Linux
o PlatformManager removed, all classes now referenced / created direct
o CEGui 0.5 supported
o Input removed from core, now using OIS in samples
o Windows-specific:
+ All dependencies are now statically linked to OgreMain, no dependency DLLs
+ All plugins & rendersystems now use the naming convention _d for debug
+ All library files now found in ogrenew/lib rather than distributed in subfolders
* Exception changes
o Ogre::Exception now subclasses from std::exception and implements what()
o All error codes now result in a separate subclass of Ogre::Exception being thrown so you can catch particular types, e.g. RenderingAPIException and InvalidParametersException
o OgreGuard / OgreUnGuard and stack tracing option have been removed