OGRE (Object-Oriented Graphics Rendering Engine)

Change Log

v1.6.3 [Shoggoth] (25 July 2009) - Maintenance Release

- OS X
  - Fixed skewed screenshots on OS X for windows with odd width
  - FreeImage 3.9 - 3.11.0 interoperability fix; detect when FreeImage uses big-endian even on Intel Macs & use the data correctly
  - Fix uninitialised mFullScreen in Cocoa window, and expose WINDOW and VIEW custom params as with Carbon
- OpenGL
  - GLSL: gracefully handle a link error during binding of parameters, so that we do not abort the render
  - OpenGL pixel buffer: download the buffer when lock mode is anything but HBL_DISCARD, and ignore whether the buffer was created as WRITE_ONLY. For consistency with other rendersystems, WRITE_ONLY should only be a hint, and should not prevent the user reading the contents if they choose to. Previously the read buffer would always contain garbage on GL unless you removed the WRITE_ONLY, which was easy to miss because TU_DEFAULT includes it.
  - Prevent deletion of an external GL context when using currentGLContext.
  - GLSLLinkProgram::activate should not access the vertex program (for attribute mapping) without checking it exists.
  - Fixed parentWindowHandle usage for GLX
  - Disabling hardware mipmap generation on ATI/Linux as reported faulty
  - Enable/disable GL_VERTEX_PROGRAM_POINT_SIZE for point size attenuation when vertex programs available
  - Workaround for broken hardware mipmap generation on Intel 915G's (at least - for the moment disable for all Intel chipsets)
  - Identify SiS chipsets and apply same GL automip workaround as for Intel chipsets
- Direct3D
  - Fix an edge-case in D3D9 where if _canDynamicTextures returned false, the default pool would still be used even though D3DUSAGE_DYNAMIC wasn't specified, which doesn't allow locking. If D3DUSAGE_DYNAMIC could not be specified, then use the managed pool in all cases.
  - Safety check before rebinding D3D9 textures after a device restore where user has destroyed render target but not texture.
  - D3D9 render texture classes had the wrong update() signature so were not protecting against device lost conditions
- Visual Studio
  - Fix for Runtime Check Failures with VC 2003 SP1 with alpha_op_ex
  - Allow OGRE to build with VC 2010, use TR1
  - Added missing OgreShadowCameraSetupPSSM.h/.cpp in VC 2003 project file
- ILImageCodec segfault fix (for those who choose to use it)
- Fix calculation of bounding radius from AABB in some places
- Fix McGuire style dark cap incompatible with multiple edge groups (stencil shadows)
- Make getCameraPosition, getCameraPositionObjectSpace and LOD camera equivalents consistent with other parameters when using camera relative rendering
- Fix dark cap clipping in stencil shadows in a few edge case conditions
- Fix the use of 2 scene managers with different settings on finite / infinite stencil shadow extrusion
- Fix Light::_getFrustumClipVolumes(...) numerical instability if infinite camera's far clip plane is used, causing light flickering if light is near camera's side frustum plane.
- Should propagate material scheme from primary viewport to shadow viewports so that caster/receiver materials are consistent with materials chosen for main view
- SceneManager should restore mCurrentViewport after rendering the shadow textures
- ConvexBody: only process finite AABBs (ignore null & infinite)
- Fix AABB when using BillboardSet with world coordinates and a transformed parent node
- Fix 2 typos in scripts where vertex_program should be fragment_program
- Fixed a few warnings
Fix problems with gui sample files schema validation when using Xerces Fix to fog_override parsing when using options other than 'none'
- GpuProgramUsage::setProgramName - check the type of the program assigned matches the type of usage it's assigned to (make copy/paste errors in scripts easier to diagnose)
- Don't pull the AABB out of an unloaded or half-loaded Mesh - if the Mesh is being background loaded, it's possible the AABB could be half-populated and invalid.
- AnimableValue should handle DEGREE and RADIAN types (gcc warned about this)
- Early-out optimisations to setMaterialName methods, to reduce their cost if the same material name is used
- Fix blended scene animation (previously, only one animation would successfully apply, now they can be blended)
- Fix write overflow in GPU parameters when using a (physically) 3x4 matrix - this could occur even if the param was declared as 4x4 but cast to 3x3.
- TextureUnit's rarely-used constructor wasn't initialising everything
- Fixed calling Root::loadPlugin twice for the same plugin caused a crash at shutdown (and also double-calling of init function)
- Return default value properly from ConfigFile::getSetting
- Fix license statement on Fresnel demo code - all samples are supposed to be public domain / free use.
- SceneManager should destroy its own shadow textures on destruction

v1.6.2 [Shoggoth] (11 April 2009) - Maintenance Release

- LGPL static link exclusion clause added to our official license terms. Static linking terms are now the same as dynamic linking.
- OpenGL:
  - Safety check before using mCurrentContext
  - Win32: Correctly restore display frequency on Win32/GL, was getting overridden after restoreConfig
  - Linux: CurrentGLContext option for GLX rendersystem should not be creating a new context.
  - ATI: Workaround for corruptions in most recent drivers with sub-buffer updates with glMapBuffer
  - ATI: fix crashes on some older cards when trying to use point sprites
  - Add support for more graceful downgrading on pre-GL 1.2 cards and other underpowered systems (Mesa should now work)
- D3D9:
  - Remove flushUpTo() call in CompositorChain::postTargetOperation; this happens after the begin/end of the scene and actually gets ignored anyway, D3D9 would bitch about this in debug mode
  - Fix a potential issue with switching from fullscreen to windowed if requested size overflows
  - Fix copyContentsToMemory in D3D9 for secondary windows
  - Allow reference device software fallback for low-end machines
- Win32: standardise the use of NOMINMAX and WIN32_LEAN_AND_MEAN
- Linux: Fix aclocal warnings in configure.in
- Linux: Deal with Xlib.h's definition of 'Status' which clashes with ResourceGroupManager header
- OS X: OgreMemoryNedMalloc.h correctly made 'public' in the Copy Headers task
- GCC: Make the PCZ plugin use the gcc visibility options like other libraries
- VC7.1: Fix for threaded build, VC7.1 doesn't have intrin.h
- VC9: Added missing 'user' files for VC9
- Change to the timing of dirtying a Pass hash before a material is loaded to better support threaded material population.
- Fix small potential memory leak when explicitly constructing a SharedPtr with a null pointer
- Fix a shadow map indexing bug when using pass iteration for a specific light type and multiple light types all with shadows
- Fix OverlayManager::getViewportAspectRatio, was inverted
- Return float from AutoParamDataSource::getLightCastsShadows to match declared type
- Make methods of TerrainZone virtual
- Fix off-by-one error in StaticGeometry::GeometryBucket::assign when checking number of vertices.
- Make sure aspect ratio of camera is updated when camera newly assigned to a viewport
- Propagate alpha for material and technique setAmbient and setSelfIllumination
- Fixed ManualObject's support for 4D texture coordinates
- Fixed ManualObject transparent sorting behaviour when using 'keep ordering' mode
- Fix a crash when a compositor chain doesn't have a compositor attached to it
- Default material scheme when compiling compositors, so that quad materials get assigned correctly
- Fix bug with StaticGeometry when using stencil shadows and LOD.
- Fix the GLSL 'attach' directive not allowing multiple attachments in one line.
- SceneManager::SceneMgrQueuedRenderableVisitor should be public, needed for SceneManager::setQueuedRenderableVisitor
- Entity::_initialise now uses needUpdate() rather than updateBounds() to update parent node so that it will work on deeper hierarchies with SceneManagers which require parent bounds to also be updated (or processed some other way).
- Fixed OpenEXR plugin build
- Fixed crashes with certain Overlay destruction orders.
- Documentation updates

v1.6.1 [Shoggoth] (22 January 2009) - Maintenance Release

- Shadows
  - LiSPSM now automatically adjusts for duelling frusta
  - Uniform shadow camera is now independent of FOV for directional shadows
  - Directional shadows no longer jitter when using the uniform shadow camera
  - Fix PSSMShadowCameraSetup when using arbitrary number of split points
- Memory
  - Nedmalloc deallocator should deal with null pointers
  - Nedmalloc is now the default allocator
  - Linux build now has option to change allocators
- Materials
  - cubic_texture now calls processTextureNames event properly
  - Fixed support for multi-line comments
  - Fixed script inheritance ordering bug
  - Fixed extra space being added to the parameters of texture_source in scripts
  - High-level shaders can now be reloaded properly after a compile error
- DirectX9
  - Fix device reset error when using hardware occlusion queries
- DirectX10
  - Fixed compilation on the November 08 DirectX SDK
  - Image pitch bug fixed
- OpenGL
  - Fix crash on Radeon 9200 in _setPointParameters
  - GTK fullscreen mode now works
- GLSL
  - Fix warnings of the form “Could not find vertex shader attribute 'vertex' to match BindAttributeLocation request”
  - Fix custom attribute names (tangent, blendWeights etc) interfering with user-specified 'varying' bindings that happen to be called the same thing
  - Fix “Invalid Enumerant” errors caused by trial-and-error binding of custom attributes
- OS X
  - Fixed plist link for OctreeZone project
  - Make sure OgreMemoryNedMalloc.h is copied during Framework bundling
- Code::Blocks
  - Project files updated to include PCZ plugins & sample
  - GL render system project updated to include render to vertex buffer
- PCZ SceneManager
  - Texture shadows now work correctly in PCZ scene manager
  - Null and infinite AABBs now handled correctly
- Tangent support
  - StaticGeometry now supports tangent parity option
  - Allow texture coordinate index 0 to be used for tangents if required (previously only the tangent semantic, or texture coordinate 1 or higher were supported)
- Pixel buffers
  - Some blit functions were ignoring the left/top/front offsets, this is fixed
  - HardwarePixelBuffer::lock implementations should not return the same left/top/front offsets as the incoming parameters, since the returned pointer is already offset
  - Box now has a safer default construction, in particular setting front/back to 0/1
- Linux / GLX
  - Xt is now the default GUI on Linux instead of GTK (if installed)
  - Do not correct window size to valid fullscreen mode in windowed mode
  - Fix typo in closing GLX window
- Fixed animation update for entities using the same Skeleton at all LOD levels
- MeshSerializer can now load submeshes without indices successfully
- Hardware SRGB option is now properly registered when using background loaded textures
- In SceneManager::_manualRender, shader params for view/projection are now updated correctly
- Fixed bugs with sky boxes / domes etc when repeatedly clearing the scene & resetting
- Fix calculated SubMesh size in .mesh when using 16-bit indices
- Manually changing the sort mode of solids in a render queue now works as expected
- Fix precision error in AnimationState::hasEnded
- Allow access to const version of OverlayElement factory list.
- Allow setMaterial() on Entity/SubEntity as well as setMaterialName, for efficiency
- STLport build option fixed
- Fixed uninitialised typeName in Exception
- Fix various compiler warnings

v1.6.0 [Shoggoth] (3 November 2008) - Major Release

[View changes since RC1]

- Script Changes
  - New script compilers are enabled by default, see OGRE_USE_NEW_COMPILERS in OgreConfig.h
  - Unified script syntax (.os), can contain anything that would have been in type-specific scripts (.material, .particle etc)
  - Import other scripts via the 'import' directive
  - More flexible syntax, quoted identifiers supported
  - Substitutable variables are supported
  - Interception of script parsing events now possible for custom behaviour

- Material Changes
  - 'manual_named_constants' directive added for assembler shaders to allow you to associate named parameters stored in a file with assembler. The file can be created from the GpuNamedParameters from high-level source if you want to precompile them.
  - 'gpu_vendor_rule' and 'gpu_device_rule' allow you to influence the techniques which are used with inclusive/exclusive matching rules on the vendor and device name. Can help tune your materials for vendor or device-specific behaviour.
  - '#include' directive now supported in HLSL and Cg shaders
  - Added MaterialManager::Listener
    - Can implement default Technique setting when using a material scheme for which there isn't a specific Technique
    - Can use to change materials for all objects easily per viewport by using a new scheme name
  - Added Pass::setPolygonModeOverrideable / script 'polygon_mode_overrideable'
    - Allows pass-level control over whether the camera's polygon mode should affect rendering
  - Added 'light_scissor' option to Pass
    - Allows pass fragment processing to be limited to a scissor rectangle of the light coverage in that pass
    - Additive texture and stencil shadows now use scissor automatically for additive colour passes, previously just used for rendering stencil shadow volumes
  - Added 'iteration_depth_bias' option to pass. Allows you to increment the depth bias on a pass by a specific amount each iteration if you wish
  - 'light_number' GPU parameter binding added
  - 'light_count' GPU parameter binding added
  - 'spotlight_viewproj_matrix' and 'spotlight_worldviewproj_matrix' added so you can use matrices from spotlights even without having set up texture shadows or an explicit texture projector
  - Added 'light_clip_planes' option to Pass
    - Clips triangles to a cube (point lights) or pyramid (spot lights)
    - Available when the pass is only using one light and you need to restrict complexity
  - Added 'separate_scene_blend' option to Pass
    - Allows the use of separate blend operations for colour and alpha between rendered pixel and existing frame buffer
  - Added pass option 'illumination_stage'
    - Allows material writers to assert control over the illumination pass compilation (additive shadows)
    - You can now incorporate sequences you could not before in your additive lighting materials
    - For example, allows you to include specular effects by pulling the decal pass into the per-light pass if that works for your material (offset mapping used as an example)
  - Added 'gamma' option to texture declaration in texture_unit (sRGB support)
    - Causes hardware to perform gamma space to linear space conversion when sampling the texture
    - Useful only for 8-bit per channel colour textures (not floating point textures or normal maps)
    - Can improve quality results from shaders because they mostly assume calculations are done in linear space
    - You will need to convert results back to gamma space when rendering to an 8-bit per channel render target either via a shader instruction or enabling the gamma correction option in RenderWindow or on the render texture
  - Added 'transparent_sorting' option to Pass, allows you to disable depth sorting for transparencies
  - Added 'alpha_to_coverage' option to Pass, allowing you to use alpha to coverage to multisample alpha-rejected textures. Even though this is a Dx10 feature, it is available on Dx9 for recent ATI and NVIDIA cards, and OpenGL on all cards that implement it.
- Frustum / Camera Changes
  - Orthographic projection now allows explicit setting of orthographic window size
  - Added Camera::getCameraToViewportBoxVolume. Similar to getCameraToViewportRay but generates a PlaneBoundedVolume from a screen-space rectangle which can be used in a PlaneBoundedVolumeListSceneQuery to do rubber-band selections
  - Added Frustum::setFrustumExtents - allows you to specify the left/right/top/bottom planes manually and thus create any shape frustum you need to, even without the camera being in the centre of it
- MovableObject changes
  - An object will no longer render its debug display if set to visible (e.g. via a cascading visibility update), you have to explicitly turn on the debug display. This is available via MovableObject::setDebugDisplayEnabled and SceneNode::setDebugDisplayEnabled
  - Added visitRenderables() method - allows you to get a callback to a Renderable::Visitor class for all Renderables that this object will potentially add to the render queue. Identifies LOD and debug renderables.
- Scaling Issues
  - By default now, renormalisation of normals is automatic if there is a non-unit scale on the main world matrix rather than the Entity::setNormaliseNormals option. If the user wants to optimise this, they can prevent the SceneManager doing it in all cases by calling SceneManager::setNormaliseNormalsOnScale(false) and then explicitly enabling the option per Pass instead. In the case of an array of world matrices being used, if the first world matrix isn't a guide then the shader writer should handle the renormalisation.
  - By default now, Ogre will flip the culling mode of objects that are rendered with a negative scale (ie they are reflected by the transform of the node). This means you can now negatively scale objects and they will be rendered correctly. You can disable this behaviour by calling SceneManager::setFlipCullingOnNegativeScale(false)
- Compositor Changes
  - You can now define Multiple Render Targets (MRT) in compositor scripts.
    - To define a MRT, just list all the formats one after the other in the 'texture' definition.
    - To reference a MRT subsurface later in a render_quad pass, use the optional extra 'mrtIndex' at the end of the 'input' command
    - Note: as at this time, D3D requires that all surfaces of the MRT are of the same bit depth, and GL requires them to be of the same format
  - Compositors now detect when the viewport they are attached to is using sRGB or multisample antialiasing, and apply the same settings to any intermediate textures which are having the original scene rendered to them (explicitly via a 'render_scene' pass or implicitly via 'input previous')
  - The 'texture' directive now supports specifying a size which is a multiple of the main target size. You can use 'target_width_scaled' and 'target_height_scaled', each followed by a floating-point scaling factor, so 'target_width_scaled 0.5' for example would result in a texture with a width of half the size of the target the compositor is applied to.
- FrameListener changes
  - Added new callback 'frameRenderingQueued'. This callback occurs after all rendering commands have been sent to all render targets, but before the double-buffered targets (windows) are asked to swap their buffers. This allows you to perform some useful work on the CPU in the main thread whilst the GPU chews over the queued rendering commands. On return from the callback, the buffers will be swapped. This is equivalent to running your own rendering loop in previous versions and using RenderWindow::update(false) then RenderWindow::swapBuffers separately, but it now makes the technique available in the standard render loop.
- SceneManager changes
  - Chaster's 'Portal Connected Zone' SceneManager added
  - 'Camera relative rendering' option added so that in large scenes where you are far from the origin, precision issues on the GPU can be mitigated by only transforming objects relative to the camera. See SceneManager::setCameraRelativeRendering
- ManualObject changes
  - 4D texture coordinates now supported
  - 32-bit indexes now supported
- Tangents generation changes
  - New TangentSpaceCalc class can be used to calculate tangents for any geometry more easily, not just Mesh
  - Now generates tangents based on a UV-area weighted, triangle angle weighted basis resulting in less biasing from small / thin triangles
  - Now has options for splitting vertices when the tangent space basis is either mirrored or rotated around a vertex.
  - Tangents can now be stored as a 4-component vector, with the 'w' component containing the parity. Multiply the binormal/bitangent you calculate in your shader by this to render models with mirrored UVs correctly.
- Resource changes
  - Resource now has a lightweight way to observe whether it has been reloaded since you last looked at it, via getStateCount(). Other changes known to make derived data out of date may also increment this number. This allows Entity to now pick up when Mesh has been altered and refresh itself on next render.
  - You can now query for file modification times via ResourceGroupManager::resourceModifiedTime
- RenderSystemCapabilities changes
  - RenderSystem capabilities can now be serialised and these configs used to emulate lesser hardware
  - More information about graphics card is exposed in this structure now, including device name, driver version and also enumerates the most common vendors
- SkyBox changes
  - Skyboxes now detect and can use materials which use the 'combinedUVW' option to cubic_texture. Allows you to use the same single combined DDS for both reflection maps and skybox (previously the skybox had to be 6 separate images)
- RenderWindow changes
  - You can now request the hardware to perform linear-to-sRGB colour space conversions for you, before the blending calculation. Use the 'gamma' name-value pair option on creation of a window or the "sRGB Gamma Conversion" render system config option for the auto-window.
- Render to Texture changes
  - You can now enable sRGB conversion on render textures when you create them
  - Multisample antialiasing is now supported when rendering to textures, specify the number of samples when you create the texture
  - MRTs with different bit depths are now supported if the hardware exposes the facility (check RSC_MRT_DIFFERENT_BIT_DEPTHS)
- Image Changes
  - Ogre can now detect the format of an image without needing a file extension, so you can load data from streams without knowing what file it came from. The Codec system has been expanded to provide support for recognising 'magic' signatures.
- Light changes
  - Lights now have a 'power' value as well as a colour, for HDR lights (defaults to 1.0)
  - Derived light colour auto-params are now factored by the light power
  - Lights can now have their own shadow far distance settings (default is to continue to use the SceneManager global one)
- Animation Changes
  - You can now use 'skeletal blend masks' to simplify the process of combining multiple layered animations to subsets of skeletons, or temporarily masking out the application of predefined animation to given bones (e.g. in order to manually control them). You create & apply these through AnimationState.
  - AnimationTrack::Listener allows you to override interpolation and drive animation procedurally if you wish
- Threading changes
  - OGRE_THREAD_SUPPORT can now take 3 values, 0=no threading, 1=full background loading, 2=semithreading (background preparing). The new option allows you to use a background thread just to perform I/O or calculate data, but for the main thread still to be responsible for dealing with the rendersystem. This means less synchronisation is required (since the rendersystem can still run without any threading protection) and thus there are fewer overheads involved in using background loading, at the expense of a slightly more complicated setup.
- Renderable changes
  - Added preRender and postRender methods that let you further customise the render operations that are performed by a specific Renderable
- Archive changes
  - Added Archive::getModifiedTime to allow you to query for file changes
- Camera changes
  - Camera now has an optional 'LOD Camera' which can be used to make LOD decisions based on a different camera
- Shadow changes
  - Texture shadows now base LOD on the main view's camera, not on the shadow camera
  - Multiple textures per light are now supported, allowing techniques such as Parallel Split Shadow Maps, Dual-parabaloid Shadow Maps and Cubic Shadow Maps to be implemented
  - Implementation of Parallel Split Shadow Maps (PSSM) is included, use the new class PSSMShadowCameraSetup. Integrated shadows are required since shaders are required to pick the appropriate shadow map. See PlayPen::testTextureShadowsIntegratedPSSM for an example.
- Geometry shader support
  - Currently supported in OpenGL only (until Dx10 renderer complete)
  - ParticleGS and IsoSurf demos added
  - RenderToVertexBuffer support also added
- Memory management changes
  - Custom allocators now supported
  - New debug memory tracker for tracking memory usage by pool, and identifying leaks

Changes since 1.6.0RC1

- Native VC9 (2008) projects added
- Correctly deal with decompressing DXT data that is less than 4 pixels in width/height
- Fix assertion bug when mesh does not contain any UV
- Added missing virtual destructors to new script compiler classes, fixes memory leak
- Added PCZ plugins to SDK build script
- Make LOD camera position available to shaders (lod_camera_position)
- Fix passless technique handling in OgreEntity.cpp
- Various GLX Config Dialog fixes
- Add void* cast to deallocateBytes call to guarantee compatibility; this fixes luabind+ogre compile error for example
- Safety change - don't assume that shadow texture cameras and shadow texture list is entirely in sync, in case an exception has made this temporarily not the case before shutdown
- Simple ease-in, ease-out for camera motion in samples
- Fixed new script compiler not respecting the 'gamma' option to the texture directive (hardware sRGB conversion on sample)
- Make sure colour depth doesn't exceed desktop on GL/Win32/Windowed
- gcc 4.3 deprecated the ext/hash_map and ext/hash_set includes. Now backward/hash_map and backward/hash_set.
- When using manual LOD on an Entity and attaching an object to a bone, still use that attached object on lower detail versions. If a lower detail skeleton is being used though and the bone that the child object is attached to no longer exists, don't display the object.
- Expose the ability to turn off shadows in a compositor in script
- Fix for "No Contacts Requested" bug in ReferenceApp
- Bugfix for segfault in Root::loadPlugins() when empty plugin directory specified
- Fix wave_xform and scaling factors.
- Allow Animation to change lengths, useful for editors; just document caveats.
- Remove all 'using namespace OIS' directives, since OIS has a Vector3 now so it can be ambiguous, better to refer to external project explicitly
- When increasing the number of shadow textures, use the settings from the end of the list if it is not empty. This avoids confusion when a user for example sets the size or format first, then increases the count.
- OctreeSceneManager should be checking for duplicates in createCamera like the other SMs
- texture_source now supported in new script compilers
- Add missing ColourValue::getHSB method
- Const fixes to Polygon, and adding missing obvious method (isPointInside)
- Deal with D3D9 lost device condition where a texture is no longer contained in the TextureManager resource list, but still exists through some other shared pointer reference. Previously these were not released / restored (if in the default pool) and could cause a failure to restore the device, they now are dealt with properly.
- Normalise rotation quaternions to eliminate the progressive drift which can happen in some cases (resulting in skewed matrices)
- Fix a bug in the new compositor script compiler - the 'clear' and 'stencil' passes are supposed to pick up their settings (buffers, colour_value etc) from nested sections, not attributes directly under the pass. Added new translators to handle these nested areas and moved the attribute parsing into them. This fixes bad parsing of compositors with custom clear / stencil settings that used to work in 1.4.
- Fix transposed matrix parsing in new script compiler; affected 'transform' attribute in texture_unit and also shader parameters expressed as a matrix in script. Addressing of matrix4 is [row][column] and not [column][row].
- Fix to InstancedGeometry::destroy - clear list
- Change Windows SDK script so that uninstall doesn't remove any new nested folders created by the user underneath it.
- Fix compile when using (deprecated) GTK platform
- Patch autotools files for PCZSceneManager and new Samples
- InstancedGeometry should be looking for the best technique, not the first technique
- Fixed Technique::movePass when moving a pass forward
- Camera::getCameraToViewportBoxVolume extra plane generated, also added optional far plane inclusion as requested, non interface breaking
- Extra checking in AutoParamDataSource to prevent accidental out of bounds access to light arrays
- Protect Pass hash recalculation process from race conditions by adding mutexes to cover the change conditions
- Mac/Carbon support for "border" and windowClosing event
- Rename OgreOctree.h in OctreeZone plugin to avoid name clash with existing file on OctreeSceneManager plugin.
- Limit FOV on standard shadow camera setup so it doesn't approach 180 degrees
- Added support for leading '/' in tokens in new script compiler
- NedMalloc now added as an option for faster memory allocation / deallocation
- Fix problem with setting up a controller on a TextureUnitState when one already exists (e.g. calling setAnimatedTextureName more than once)
- Slight optimisation to BillboardSet - use Matrix3 instead of Quaternion to orient, uses less instructions.
- Default preferred render texture mode to FBO in OS X now - this appears to be working just fine in Leopard on my July 2007 MBP.
- Improve LiSPSM quality when camera direction becomes parallel with the light direction (scale up the opt adjust factor automatically)
- Fix weird darkening of grass blades in Demo_Grass while camera moves (bug 190)
- Compatibility with libtool 1.6+
- Use forward slashes in q3settings.cfg
- Fixed some gcc warnings & const correctness issues
- XCode & MinGW build fixes
- Documentation fixes

v1.4.9 [Eihort] (16 June 2008) - Maintenance Release

- Fix crash on Linux with NVIDIA cards when probing FBO formats
- Fix corrupt mipmaps on NVIDIA with 175.x drivers
- Fix GL clip planes for off-centre objects

v1.4.8 [Eihort] (10 May 2008) - Maintenance Release

- Mac OSX:
  - Workaround for a few GL driver bugs on older machines, in particular first-gen iMacs and old PPC machines
  - Workaround for GLSL vertex attribute aliasing problems.
- Linux:
  - Don\'t use non-conformant GLX visuals.
  - Workaround for FBO problem with some Linux NVIDIA 169.x drivers - if this fix doesn't work for you, see this forum thread for a more drastic temporary workaround.
- Windows:
  - Safety check in D3D9RenderSystem::__SetTextureStageState should ignore texture stages above 7. Could cause errors in D3D9 debug mode with large numbers of textures.
  - Add NOMINMAX declaration to WindowEventUtilities header since it includes windows.h - ordering of includes could start complaining about std::min/max in other Ogre headers.
  - GetModuleHandle calls fixed to deal with debug plugins more correctly
- Terrain:
  - Allow creation of terrain before any camera/viewport
  - Report an exception when terrain isn't found rather than just asserting
- Fix Maya exporter vertex colours - use packed RGBA instead of float4
- Camera::setWindow() fixed
- Fixed FileSystemArchive::exists bug with absolute filenames
- MayaExport ported to OSX, phong materials supported
- Update the manual to list all the new automatically bound GLSL custom vertex attributes (those to replace built-ins if you need to use all custom attributes to avoid aliasing problems on some drivers)

v1.4.7 [Eihort] (6 March 2008) - Maintenance Release

- Mac OS X:
  - Fixed CGL and uint issues when building against the Leopard (10.5) SDK
  - Carbon and CGL context's now manage the life of the pixel format, since this is needed to context share.
  - Window destruction and resize fixes.
  - Added in support for WindowEventUtilities to function properly on OS X.
  - OgreCEGuiRenderer now builds on demand rather than being in the dependencies
  - Dependencies package updated, OIS version updated & CEGui package issue resolved
  - Added the Preprocessor Macro NDEBUG to disable assertions in a release build
- Linux:
  - Add 2 missing headers to Makefile.am so they get installed correctly in Linux
  - Fix a bootstrap warning - extra characters after backslash
  - Fix problem where configure wasn't completing because of a spurious tab character
- GL:
  - Remove call to _setCullingMode in GLRenderSystem::initialise - no reason for it to be there and if an auto-window was not used it could cause GL functions to be called before a window & context were available.
  - GL bugfix: unbind vertex / fragment programs at the end of a frame. This avoids having pointers to these programs stored when they could potentially be removed from the resource manager, e.g. during shutdown.
- D3D9:
  - D3D9: Avoid setting texture transform flags if a vertex program is bound - this could cause a crash if a user incorrectly set a fixed-function transform on a shader-based material.
- Fix SceneManager::findLightsAffectingFrustum bug; directional lights should have been assigned a zero tempSquaredDist. This could lead to discrepancies between the documented behaviour of shadow texture ordering and the results.
- Prevent any unnecessary rendering where iterate_once_per_light doesn't find any lights of the right type to iterate over
- Unregister Entity from Mesh listener list when destroying. Also reorganise background loading event - queue the event, not the event and listeners, since listeners may get destroyed & removed in between the event getting queued and fired.
- Fix Math::intersects ray/convex list of planes
- Initialise Entity::mHardwarePoseCount properly
- SceneManager::setShadowTextureCasterMaterial and setShadowTextureReceiverMaterial should cope with cases where there is no supported technique gracefully
- Copy main camera FOV to reflection camera in Demo_RenderToTexture example; some people have changed the FOV and then wondered why they get arefacts.
- FreeImage codec - make it drop alpha & downgrade to 24 bit if the format doesn't support 32-bit.
- Allow OverlayElement::setMaterialName to accept a blank name and thus to reset the material to nothing, to return it to the original state of not rendering.
- Fix movement speed for high frame rates in example framework
- Make Node::getRenderOperation() more robust under resource reloading situations. Lower performance, but this is only a debug routine anyway so robustness is better.
- Correct compositor script syntax - 'target_output' should allow all the same options as 'target'
- Win32 Ogre::Timer: now sorts out proper use of system cores
- Fix MemoryDataStream leaving garbage on unexpectedly short read
- Make SceneManager::setSkyBox tolerant of materials with no supported technique or incorrectly constructed with no passes or no texture units.
- Fix a rather obscure bug with compositor chains attached to viewports which get destroyed and later recreated
- Allow objects in render queues between RENDER_QUEUE_OVERLAY and RENDER_QUEUE_MAX to function correctly with compositors
- XMLConverter resilience fixes
- Minor doc corrections

v1.4.6 [Eihort] (28 December 2007) - Maintenance Release

- DirectX9:
  - Fix a bug when using fixed-function texture blending with manual source values. It only occurred when you used a manual colour as source2 and a manual alpha value as source2, together.
  - Fix a bug with compositors where the sequence {1. device lost 2. compositor disable/enable 3. device restore} would result in corrupted compositor resources.
- OpenGL:
  - Fix a DXT compression problem on Apple / Intel GMA machines.
  - Deal more gracefully with gluErrorString returning null; really shouldn't for a valid GL error code but FireGL has been shown to do so
  - Workaround for nvidia 169.x GLSL driver bug resulting in "Bad scope in ConvertLocalReferences()" in HDR compositor
- Dependency updates:
  - Freetype 2.3.5
  - Cg 2.0
  - FreeImage 3.10.0
- Fix Animation::clone exception in Visual Studio 8 (release mode)
- Cg & HLSL: Fix bug with unload / reload if a compile error was encountered
- Fix a potential deadlocking issue between HardwareBufferManager allocateVertexBufferCopy and _notifyVertexBufferDestroyed, order the locks the same way to avoid
- Make resource listener list threadsafe
- Shadows:
  - Fix divergent behaviour in focused / LiSPSM shadows between debug and release.
  - Fixed edge case issues with focussed shadow camera setup: up dir should be camera up dir; deal with zero vector
- Added setDebugOutputEnabled function to Log class
- Add missing format initializer in Ogre::Image
- Fix bounding box updates wh en background loading entity
- Fix bug with TextAreaOverlayElement GMM_RELATIVE_ASPECT_ADJUSTED
- Fix TerrainRenderable::_calculateNormals
- Fix RibbonTrail::removeNode preserving associated ChainSegments
- Link zlib[d].lib in static builds, avoid problem when referenced externally
- GLX: Move restoration of desktop resolution from GLXWindow destructor to destroy() method, should be symmetric with create
- gcc 4.3 fix - needs C stdlib includes explicitly now where used
- TextureUnitState:
  - Fix changing from animated texture to cubic texture (was still trying to be animated)
  - Fix inability to combine fixed-function x and y transform animations
- XSI exporter:
  - Fix bug when using advanced rigs - 'RemoveAllAnimation' actually isn't necessary any more
  - Several usability enhancements suggested by artists
- Mesh::suggestTangentVectorBuildParams() exception condition - If you have more than one submesh and you find existing tangents in the mesh, avoid throwing an exception because of mismatching targets
- Maya exporter:
  - Use correct Eihort default for tangent generation ie VES_TANGENT
  - Enable the GUI option to switch between texcoord and tangent semantics when building tangents
  - Put debug & release plugins in consistent location
- BSP support:
  - Fix use of BSP geometry with compositors
  - Security fix (buffer overrun) for BSPSceneManager
- Various documentation corrections and code tidy ups

v1.4.5 [Eihort] (29 September 2007) - Maintenance Release

- D3D:
  - Fix checking of capabilities in D3D when selecting non-default device
  - Fix HLSL preprocessor_defines in edge cases such as ending string with a ';' and empty clauses
- GL:
  - Ensure that GL RTTs generate a unique render target name in all cases, don't make it deterministic based on the texture name. This resolves an issue when if you removed a RTT but did not cause it to be destroyed, then created a new RTT with the same name, the render targets would have the same name and there would be issues with destroying them.
  - Fix isFullScreen reporting in GLXWindow (was using own member variable)
- OS X:
  - Frameworks reorganisation - now we default to embedding all frameworks in the .app to support drag & drop install of applications in the traditional OS X way
  - No longer expect frameworks in /Library/Frameworks, and don't copy Ogre.framework there after building - link dependency frameworks from Dependencies/ now (deps archive reorganised)
  - After building all samples, symlink all frameworks into Foo.app/Contents/Frameworks. This means we don't have to duplicate them but the app is still self-contained. Real apps would genuinely copy of course.
  - Enable stripping on release builds to see if that makes them smaller
  - Fix SDK sample project so it only tries to build the included architecture.
  - Specify a local PCH directory rather than the default shared directory, which causes problems if you use multiple branches of the same project.
- Linux:
  - Fix "make distclean" problems
- Fix for random crashing in some cases when using /fp:fast and certain combinations of renderer / debug & release settings
- Prevent an std::advance overrun in SceneManager::renderSingleObject when using start_light, and max_simultaneous_lights would run off the end of the light list.
- When using additive stencil shadows, the 'only for light type' pass iteration option was not being respected. Every iteration once_per_light pass was being executed no matter what.
- Fix problem with light_direction_object_space when using non-uniform scaling.
- All light_direction_* auto params now have 0 in the w component to make them safe to transform in shaders by 4x4 matrices with translations
- In focused texture shadow camera setups (e.g. uniform focused or LiSPSM), truncate the scene AABB by the plane formed by the shadow far distance. This allows much tighter focus regions and thus better shadow quality in sprawling scenes.
- Fix a minor bug where the shadow camera lists were not updated in some variants of destroyCamera
- Compositor scripts: fix grammar bug that prevented multiple techniques from being defined.
- Fix to Plane::projectVector in some cases
- Use std::istringstream in StringConverter::parseUnsignedInt for direct correlation with toString and std::ostringstream outputs. Could cause some problems in other locales with non-symmetric behaviour.
- Grass demo shader - make grass waving based on UV not absolute Y so people can move the grass if they want
- Fix segfault when logging a FreeImage error that returns null for FreeImage_GetFormatFromFIF
- Root::initialisePlugins should iterate in forward order of plugins, not reverse (looks like bad copy & paste from shutdownPlugins)
- Fix ResourceGroupManager potential deadlock
- Fix FileHandleDataStream::read, was returning incorrect counts (and is never used in core OGRE, hence why missed)
- Fixed build when memory manager is turned on (default is off now)
- Documentation updates

v1.4.4 [Eihort] (20 August 2007) - Maintenance Release

- GL:
  - Fix small buffer overrun in mTextureCoordIndex - should be as largeas the max number of texture units, not max number of texture coord sets
  - Optimise setting of texture coords in fixed-function mode slightly
  - Call ReleaseDC in Win32Window::destroy when window is external, since CS_OWNDC won't handle it
  - Fix buffer overrun when writing contents of a window to a file whose width is not 4-byte aligned
- DirectX:
  - Support NVPerfHUD 5
  - Fix some potential problems when switching between fullscreen and windowed mode
- OS X:
  - Build changes: make Ogre and Samples projects build into the same folder structure. This allows us to reference the Ogre framework relative to the build folder and not in /Library/Frameworks, this means we can have more than one major version of Ogre & samples building independently.
  - SDK build scripts created, now generate a DMG
  - Ocean and Compositor demos now work on OS X
- StaticGeometry now deals with non-uniform scaling of normals
- StaticGeometry should transform VES_TANGENT and VES_BINORMAL elements in the same way as VES_NORMAL.
- Override OctreeNode::removeAllChildren so that it updates the octree.
- Fix a potential crash & inaccurate visibility masks if a viewport was removed directly after rendering to it.
- Compositors now carry more viewport options across to the automatic 'original scene' compositor: 'shadows enabled' and 'material scheme'
- For bitmap font definitions, support definition of the glyph as a unicode decimal as well as a single character
- Fix a params bug with assembler shader usage, when using the same assembler shader twice
- RibbonTrail now behaves better when jumping large distances (high speed or low framerate)
- AxisAlignedBox::transform should setNull() before merging transformed points back in.
- Fixed stack overflow when calling Node::_getDeribed* in MovableObject::_notifyMoved() callback
- Remove assert when trying to derive parameters from Cg program that fails compilation, just derive no parameter names instead
- Add optional listener parameter to ResourceBackgroundQueue 'unload' methods - both for consistency and also to prevent garbage listener pointer problems
- A couple of safety checks in animation tracks to check for null pointers
- Don't create 2 logs in MeshUpgrader, and error handling improved in XMLConverter and MeshUpgrader
- SkeletonSerializer internal methods now protected, not private, to allow extending
- Deal with display colour depth changes in windowed mode under Windows
- Linux pkg-config fix: package defined as OGRE not ogre
- Linux SSE check - only enable SSE on recognised platforms instead of turning off for just powerpc
- Fix some lesser-used 64-bit based architectures: ppc64, alpha, ia64, s390
- Add support for compilation on mips architectures.
- Add support for intel compiler
- Compatibility with Doxygen 1.5.x
- Compatibility with VS9 beta compilation

v1.4.3 [Eihort] (8 July 2007) - Maintenance Release

- GL:
  - Fix returning to fixed-function pipeline after using programmable pipeline with more than fixed-function (8) texture units
  - Don't delete externally created windows in GLX renderer
  - Allow a Win32 GL window to use an externally created GL context
- D3D9:
  - Fixed loading of DXT compressed data manually from memory instead of .dds files in D3D
  - Fix a leak / potential crash when manually shutting down and reinitialising
  - Only reset window size when necessary, when going between fullscreen and windowed modes
  - Precompiled SDK built again with 2004 DirectX SDK for max compatibility
- Change MRT surface restriction to 'same bit depth' not 'same pixel format'. This is the actual restriction that the majority of cards enforce, save the latest (e.g. 8800)
- Fix max_lights in non light-iteration cases, was being ignored previously which could cause some issues with other processing of light lists
- Fix Math::intersects (sphere / plane) - was missing the 'd' component Fix Math::intersects (sphere / aabb) - use Arvo's algorithm Neither of these methods were called in the Ogre code which is why they were missed.
- Add Compositor to VC2005 SDK samples project, was missing.
- Fix SharedPtr bug in operator= when rhs and lhs are interdependent (e.g. one holding a pointer to the other)
- Allow OGRE_EXCEPT to be overridden if predefined
- Node::Listener is now called after all derived implementations of _updateFromParent, this fixes some issues with generating a RibbonTrail from a TagPoint
- Fix failure in vertex pose animation when subentities are made invisible
- Define maximum render queue ID more explicitly and assert against it to avoid issues with compositors if this is exceeded by user code
- Fix an animation blending problem on some skeleton set ups. This should resolve the problems some people were getting when using non-unit weighting on multiple active animations. Would not have affected many skeletons, depends on the exporter.
- Fixed incorrect fading of modulative texture spotlight shadows when using custom shadow projection systems
- Font now correcly removes everything it creates allowing it to be reloaded at runtime
- Prevented continuous (every frame) retry of texture loading when it fails, now only retries when something changes
- Bug fix for auto params light_direction_view_space_array and light_direction_object_space_array
- Fixed uncallable operator= of ConstMapIterator
- A few const correctness / warning fixes.

v1.4.2 [Eihort] (10 June 2007) - Maintenance Release

- GL:
  - Restore old GL context instead of setting it to null during initialisation and context cloning, helps with systems managing their own contexts
  - When uploading from scratch to real buffer, should only discard whole buffer if the entire buffer was locked.
  - Scratch buffer optimisations temporarily disabled in Linux and OSX since they appear to still be having issues with them, Win32 is fine.
  - Support arrays of sampler uniforms in GLSL
- D3D9: Use D3DPOOL_SYSTEMMEM for temp surface when going down the GetRenderTargetData path since that's a requirement and complained on some drivers.
- Fix a versioning issue on Linux, bumpversion script was missing AM_INIT_AUTOMAKE due to typo
- Fix texture clamping on non-integrated custom shadow receiver materials
- Fix Vector3::perpendicular for base vectors near UNIT_X
- Rewrite Frustum::projectSphere so it is more accurate, now correctly solves quadratic instead of using inaccurate shortcut.
- Fix bug in XML converter when reading poses that used 'mesh' as a target
- Fix MaterialSerializer exporting of mipmap count
- XML mesh conversion now handles incorrect XML vertex/face count cleanly instead of overrunning
- Fix multiple index buffer locking bugs in StaticGeometry and InstancedGeometry, was causing underrun buffer corruptions in GL
- Cope cleanly with GpuProgramParameters::mNamedConstants not having been initialised, mostly likely because of a compile error
- Add the ability to switch between fullscreen mode and windowed mode on the fly, and to switch fullscreen modes, without recreating a window. Windows only implementation for the moment, still waiting for GLX and OSX versions.
- Fix off-by-one error when writing a GLX window contents to disk, had already been fixed in Win32Window.
- Fix some light_direction_object/view_space GPU parameters. Should make sure we extract 3x3 matrix to avoid accidentally factoring in translations. Also standardise the _array versions of the same.
- Support up to 16 textures properly in programmable pipeline, instead of maxing out at fixed-function limits.
- Fix a crash caused by a Resource being created during bulk-loading of a resource group, with a different group (e.g. the autodetect group).
- Water materials that use scene_blend should have depth_write off
- Compositor fixes:
  - Detect when visibility mask is varied on the viewport for the implied 'original scene' and recompile
  - Assign the new values of vis mask and background settings to the compositor to stop repeated compilations after one change detected
  - Fix compositor demo closing when you ALT-TAB away from it
- Fix use of GPU parameters in SceneManager::manualRender

v1.4.1 [Eihort] (6 May 2007) - Maintenance Release

- Linux support for GLX 1.2 and earlier re-established. Patch which enhanced GLX support but was reliant on GLX 1.3 has been rolled back.
- Allow Linux configure to choose to use DevIL again if wished, to avoid conflicts of FreeImage's modified image libraries & system libs.
- Fix autotool detection of FreeImage
- Fix assert in debug mode with custom projections (e.g. focused or LiSPSM shadows) caused by constructing an invalid AABB
- MemoryManager::dllocMem should early-out for null pointers to conform to standards
- Fix theoretical problem with Ray/AABB intersection - if origin was precisely on the boundary of an AABB plane it wouldn't be classed as 'inside' but would also would not test whether the ray was heading towards the box.
- Don't set logical / physical param maps for GLSL, as GLSL isn't supposed to access parameters by logical index, so try to do that will throw exception rather than some undefined behavior now.
- Global namespace uniforms supported in Cg
- Fix cracks in TerrainSceneManager vertex morph program in GL/ATI. Was caused by different interpretation of ARB_vertex_program by ATI drivers.
- Registration and deregistration of high level gpu program factories tightened up, they're only registered if supportable now so easier to determine high-level support. Were originally registered early to try to reduce errors in using cross-platform media but this has been addressed via null programs now.
- Resolved some ALT-key issues in default window loop
- Fixed directional lights inverted when using focused & LiSPSM shadows
- Fixed opening GLX window on displays > 0
- Fix OpenGL fullscreen refresh rate in Win32 (GLX ok)
- Fix use of ACT_TEXTURE_VIEWPROJ_MATRIX with custom projectors (not texture shadows)
- Fix problems with compositor removing a viewport listener in the middle of the viewport listener callbacks - only shows up if there is more than one listener.
- Allow arbitrary D3D window size in auto created window (in windowed mode), was previously only allowed in manually created windows)
- More gracefully handle trying to build edge lists on meshes which have line / point geometry in them. Make sure we create no edge list when there is no triangle data, and allow meshes with mixed operation types by only including the triangle data submeshes in the edge list
- Fix to make StringConverter::parseXxxx correctly return zero when given garbage
- GCC visibility fixes (python-ogre compatibility)
- Compositors are now correctly created in the resource group their script was parsed from
- MeshSerializerImpl::writeSubMeshExtremes bugfix
- Improvement to FileName splitting functions
- AxisAlignedBox::getCorner method const correctness
- Documented the 'emitted emitters' feature
- Remove manual setting of light state in TerrainSceneManager
- Updated GLX config dialog backdrop

v1.4.0 Final [Eihort] (25 March 2007) - Major Release

Please see the RC1 notes below for the major changes in the 1.4.0 release, this section just details the changes since RC2:

- OpenGL:
  - Significant speed improvements for dynamic VBOs - glMapBuffer/glUnmapBuffer is now only used for total buffer replacement or large sub-buffer changes; smaller partial updates use a CPU scratch buffer area and glBufferSubData which can be much faster. Also eliminated some redundant copying when using shadow buffers
  - Fix a problem with bleeding of vertex colour tracking state in GL rendersystem.
  - Use a smaller buffer size when testing FBO formats to reduce overhead
  - Correct GeForce 6200 profile, doesn't support floating-point texture filtering, as stated in NV documents
  - Fixed PBuffer check for whether main context is usable - copy/paste error compared width with height
  - Fixed line ending detection in GLSL uniform parsing, was causing problems with *nix line-endings
  - GLDefaultHardwareVertexBuffer now allocates aligned memory
  - Made GLTextureBuffer destructor safe even if failed to construct render-targets for some reason
  - Don't use FBO method to upload texture from memory if either source or target pixel format is luminance, seems never supported by hardware.
  - Upload texture from memory with FBO should take extra care with source image rowPitch/slicePitch (e.g. nonconsecutive image).
- D3D9:
  - Fall back to TAM_CLAMP and eliminate D3D debug run-time error if TAM_BORDER not supported by hardware
  - Fixed potential double-release in D3D9HardwarePixelBuffer::blitToMemory if fast GetRenderTargetData fails
- OSX:
  - Updated the Xcode project by changing any header listed as project, or private, to public.
  - Fixed the header referencing to be compatible with Xcode's framework system. This means that Ogre should be fully ready to be released as a stand alone binary, and it will use the headers in the framework instead of needing an extra copy of the source around
  - Added Crowd and Instancing demos
  - The Tools Xcode projects have been updated against the latest Ogre.framework
  - ExampleApplication relative path fix
- Linux:
  - Fix automake detection beyond version 1.9
  - Fix GLX crash when building the config dialog image in debug mode
  - Generally improved the GLX driver functionality
  - Allow gcc 4.x builds to take advantage of visibility attribute to reduce plugin size a bit. Works for MinGW and linux gcc >= 4.0.
  - Fix detection of X11 paths for 64bit systems
- Fix instancing demo crash (should have reduced the mesh count when removing cube.mesh)
- Fixed and unusual situation with auto-organised buffers where there was unexpected blend weights/indices in vertex data
- Hardware skinning examples:
  - have GLSL and Cg vertex two weight skinners share the same default parameters.
  - added GLSL vertex skinner two weight shadow caster
  - added unified vertex program for skinner two weight shadow casters
  - used matrix multiply instead of individual dot products in GLSL to improve performance on ATI cards
- Fix use of UTFString class when using STLport
- Make sure Rectangle2D::setCorners constructs a valid bounding box
- Fixed ATI GLSL lighting problem for instancing demo
- Update deferred shading demo to fix tangent access and explicitly set texture coord set. Also disable skies for MRT since skies don't render to MRT and nVidia D3D driver refuses to write to MRTs for other objects after that's done. Still a few issues with this demo though.
- Code::Blocks:
  - Project updates including adding missing instancing demo
  - Linux project for Code::Blocks added
- StringConverter::parseBool accepts '1' as true now
- Enclose max/min with parentheses in headers to suppress nasty max/min macro substitution if user has a Windows header on their path
- Make static pass dirty list and graveyard threadsafe when threading enabled
- Fix bug in GpuProgramParameters::_getFloatConstantPhysicalIndex/_getIntConstantPhysicalIndex when expanding in middle of the buffer for a logical entry
- Fix CEGui renderer in GL being a bit random with the texture filter modes
- Font bugfix - don't restart texture coordinates to (0,0) for each code-point range
- Fixed the fact that Entity::_deinitialise() should have been clearing the internal lists
- Fixed locale problems with StringConverter::parse* methods - now use std::istringstream instead of atof / atoi so they behave consistently with StringConverter::toString which uses ostringstream.
- Fixed bug which caused BSP loading not to parse .shader files in subfolders
- Fix const-correctness on PixelUtil::packColour and Bitwise::intWrite
- TextAreaOverlayElement - needed to reduce the vertex count twice for CR/LF
- Fixed Pass max_lights in per-light or per-n-lights iteration, max should apply to the sum of all iterations and not per single iteration
- 'shadow_scene_depth_range' auto-binding needed same behavior as SceneManager when dealing with light list
- Consistency issues with writeContentsToFile fixed:
  - D3D now writes only the client area to the screenshot, no title / border (matches GL)
  - Fixed 1-pixel border in Win32 GL screenshots caused by off-by-1 params to glReadPixels
  - Used glReadBuffer(GL_FRONT) in fullscreen mode to ensure that the latest results are read in cases where single-stepping is done
- Minor memory leaks fixed in OgreXmlConverter
- Ensure PixelUtil::getBNFExpressionOfPixelFormats is called after all global statics are properly initialised
- Consistency fixes (export and const correctness) for << operators in various classes
- Make #ifdef more specific on OgrePrerequisites.h to avoid name clashes
- TextureUnitState animated textures - allow resetting of animation position
- Default Quaternion::getYaw / getPitch / getRoll to more intuitive versions ie the atan2 of the projection of the local axes. Can return to the previous version by passing 'false' to the methods.
- Fix Ogre debug calloc macro has incorrect parameter count
- Added access to ManualObject sections after they are created
- Added "hasEnded" method to AnimationState
- Tidied and removed header entries for some previously removed code
- LEXIExporter updated to 1.0.3
- Blender Exporter:
  - added check for empty ipos
  - fixed translation key frame values
  - documentation updates
- XSI Exporter:
  - Fix pose animations for objects not at the origin

v1.4.0 RC2 [Eihort] (4 March 2007) - Major Release

Please see the RC1 notes below for the major changes in the 1.4.0 release, this section just details the changes since RC1:

- Mac OSX build updated (also dependencies, please download the updated package), including bugfixes to Carbon window
- Code::Blocks / MingW build updated (can now be built with MingW gcc 4.x + Mingw C++ Toolbox)
- Octree plugin:
  - OctreeCamera and OctreeNode now exported
  - Now supports infinite bounding boxes if present
  - Uses the Camera's linked cull frustum instead of its own custom CullCamera option
- Fix texture directive in material scripts when all 5 parameters are used (should be allowed)
- XSI 6 exporter
- MeshUpgrader now has a 'Regenerate bounding box' option for people having problems with incorrect bounds on meshes
- Workaround for ATI driver bug causing crash on GLSL compilation with skinning shader
- Workaround for GLSL drivers (ATI) that report array uniforms incorrectly
- Updated to latest version of TinyXML for XMLConverter
- Fixed codec support for 16-bit RGB(A) formats
- Added warning when a skinned mesh has vertices not assigned to any bones
- Unicode fixes for MingW
- Bugfix for when the "original scene" compositor instance is not guaranteed to be valid
- Added const version of SceneManager::getMovableObjectCollection
- Config file save/load moved out of config dialogs to common area
- Fix For "parentWindowHandle" with GLX
- Instancing demo: Fix selection of ogrehead.mesh in Linux / OSX
- Fixed D3D9HardwareOcclusionQuery::isStillOutstanding - should not have been using D3DGETDATA_FLUSH flag
- Fix assert when using custom per-renderable GPU parameters with GLSL params smaller than 4 floats (DeferredShading).
- Eliminated GL MRT shader warning: global variable gl_FragData requires "#extension GL_ARB_draw_buffers : enable" before use.
- Make ResourceManager::getMemoryUsage public
- Improve compositor demo / sharpen edges shader support on lower-end ATI cards
- Add non-const versions of GpuProgramParameters::getFloatPointer and getIntPointer
- Add destructor implementation for ErrorDialog in Win32
- Add SceneManager::get/setQueuedRenderableVisitor so users can hook into low-level rendering behaviour if they want to
- Fix rather obscure issue with glDrawBuffer / glReadBuffer not getting reset in some cases of external GL control
- Fixed problem with attaching a Light instance to a bone
- Fixed / suppressed some warnings
- Small optimisations and tidy ups
- Minor documentation updates

v1.4.0 RC1 [Eihort] (11 February 2007) - Major Release

Below are listed the most significant changes in the Eihort release over the previous stable version. This isn't quite everything, please look at theEihort Notes for more details, and also for advice on how to upgrade your applications from Dagon to Eihort.
Enhancements since the Dagon branch:

- SSE/SSE2/SIMD improves performance in several areas
  - Software animation
  - Batch concatenation of affine matrices
  - Shadow volume routines
  - Aligned memory allocator & CPUID detection
- Shader enhancements
  - Parameter system rewritten and enhanced, particularly improves support for GLSL arrays but also allows more optimal parameter binding and more efficient memory usage
  - preprocessor_definitions option supported in HLSL/GLSL to create variant shaders based on same source (Cg already supported this through compile_arguments param)
  - column_major_matrices option in HLSL to alolow you to pack parameters differently
  - 'unified' program definitions allow you to use one program as an alias for others for simpler cross-platform support
  - GLSL 1.2 (GL 2.1) supported allowing non-square matrices
  - GLSL now binds tangent, binormal, blendWeights and blendIndices to extended attributes (see the manual)
  - 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
  - You can now integrate texture shadows directly into your primary material pipeline, rather than them being rendered as separate shadow receiver passes
  - 'content_type shadow' added to texture unit to auto-bind shadow textures into your materials and use them in integrated rendering
  - New light iteration parameters to give extra flexibility when doing integrated lighting / shadowing - iteration per_n_lights and start_light
  - More texture shadow projection options through ShadowCameraSetup subclasses allow improved fidelity on texture shadows:
    - Plane optimal
    - Uniform focused
    - LiSPSM
  - Depth-shadowmapping example, with percentage-closest filtering for antialiased, self-shadowing effects using texture shadows
  - 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
  - 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
  - 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
  - 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
  - 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
  - Skeleton::_mergeSkeletonAnimations added to merge animations from multiple skeletons
  - Added option to Skeleton::optimiseAllAnimations which only destroys node tracks which have identity keyframes only for all animations.
  - Several runtime and memory footprint optimisations
- Math optimisations
  - Added specially optimised functions to dealing with affine matrices, allworld / view transformsnow have to be affine transforms(they were assumed so before anyway).
- Material enhancements
  - mipmap_bias supported on texture_unit
  - texture attribute allows you to specify a desired pixel format separate from the format of the loaded texture
  - depth bias now supports slope-scale biasing as well as fixed biasing
  - serialising a material is now simpler, there is no need to call addConstantDefinition et al to make sure program params are recorded for export
  - quieter logging when including GPU programs which target a rendersystem which is not loaded
  - shader compilation errors now dealt with more gracefully
- Texture enhancements
  - You can now describe the desired pixel format to be used instead of the original image format when loading a texture
  - 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
  - Particle System now supports emitted emitters (to create effects such as fireworks more realistically).
  - Particle system renderer now has optional callback when particle(s) being emitted, moved, expired or cleared.
- ManualObject enhancements
  - ManualObject now allows you to update its contents more efficiently provided the structure does not alter
  - 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
  - Queue the loading of resources in a background thread
  - Register your own thread or use automatic background queue manager
  - Simple queued notification callbacks in primary thread so user doesn't have to think in a thread-safe manner
  - Advanced users can perform other tasks (like scene graph setup) in a separate thread if they're careful about locking
- Static Linking official support
  - Build targets for linking everything statically into one executable, including plugins
  - Be aware of LGPL license conditions on derived works, or consider the OGRE Unrestricted License
- Unicode support on Font and Overlays
- WindowEventUtilitiesintroduced
  - Allows subscription to window events on auto-created windows
  - Allows access to message pump for externally created windows
- RenderWindow::getCustomAttribute and related features unified across platforms
- Build / dependency changes:
  - Image routines replaced - FreeImage + custom DDS codec now used
  - SDL platform removed on Linux
  - PlatformManager removed, all classes now referenced / created direct
  - CEGui 0.5 supported
  - Input removed from core, now using OIS in samples
  - 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
  - Ogre::Exception now sbuclasses from std::exception and implements what()
  - 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
  - OgreGuard / OgreUnGuard and stack tracing option have been removed

v1.2.5 [Dagon] (21 January 2007) - Maintenance Release

Changes since v1.2.4:

- GL:
  - Cope with GL_COMPRESSED_RGB_S3TC_DXT1_EXT as well as GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, OSX in particular seems to return the former sometimes even though DXT1 is only one format
  - Test support for GL_EXT_secondary_color before using to avoid crashes on very old drivers
- D3D9: Use per-texture unit constant storage for cards that support it to allow each unit to be more independent like GL. Otherwise using more than one manual blend in a pass would override the same value.
- Fix light_direction_object_space and light_direction_view_space auto params - should have been using inverse transpose since they are directions
- Mesh: Close the log after writing debug edge data log to free up file handle
- Animation: Deal with invalid zero-length animations in a friendlier fashion (no infinite looping)
- GPU program params:
  - setAutoConstant should check to see if the parameter already has an auto, and replace it if so to allow modification of autos without endlessly growing list.Add clearAutoConstant to allow the unbinding of a single auto constant
  - When parsing a manual parameter, unset any auto parameters with the same name / index. This solves the problem where overriding an auto parameter with a manual one in a subclassed material, or overriding a default parameter didn't work.
  - Fix ACT_LIGHT_POSITION_VIEW_SPACE - since Light::getAs4DVector returns the result in worldspace, should be using just the view matrix, not worldview
- Add SubEntity::getParent
- Octree plugin:
  - OctreeNode::_isIn now deals with growth in object size and bumps objects out of the current node when too big
  - Fix resize when setting 'Depth' parameter on OctreeSceneManager
- Terrain:
  - Terrain renderable bounding radius should use half length of the diagonal instead of maximise half length of edge of the bounding box.
  - When calculating scale of terrain, should use pagesize - 1 since pagesize refers to the number of vertices; physical size is one less.
- Fix Billboard origins BBO_TOP_* and BBO_BOTTOM_* , were inverted
- Fix getCameraToViewportRay again, wasn't quite right for ortho / custom matrices
- Force update of animation after reevaluating vertex processing, to cope with potential switching between hardware/software at unusual times
- Make CompositorChain::_compile public so that expert users can precompile chains if they want to. Also some compositor compile optmisations.
- Don't try to load a HighLevelGpuProgram if it is not supported - bulk loading all resources in a group could cause this to fail if the shader isfor an unsupported system
- Fixed automatic setting of texture alias names when adding a new unnamed texture unit to a pass and then naming it
- Compiler2Pass: testNextTokenID() did not allow testing of the last token in the que. Also fixed some problems parsing off the end of the source in pass 1.
- Overlays:
  - Overlay::setZOrder should maintain the same zorder multiple as Overlay::add2D on children
  - Fix another potential overlay teardown order problem - elements should tell their parents when they are destroyed.
- Change 'time' to 'time_0_1' in Fresnel shader to try to prevent precision errors when run for a very long time
- Fixed some Code::Blocks project dependencies for some projects. Updated to latest Code::Blocks project format.
- Enable the FAT32 manifest workaround to prevent random manifest errors when building on a FAT32 drive - seems to especially be a problem on VS2005 SP1
- Fix a small constants overrun in GpuProgramParameters::copyConstantsFrom
- Fix /RTCc compatibility in ColourValue
- Small const correctness and tidy ups
- Various documentation corrections

v1.2.4 [Dagon] (12 November 2006) - Maintenance Release

Changes since v1.2.3:

- DirectX9:
  - Eliminated setting of texture transform to D3D device if texture transforms are disabled, since D3D texture coordinate processing will ignore it
  - If "Full Screen" or "Video Mode" configuration option missing when creating an auto D3D window, should throw exception correctly
  - D3D9RenderSystem::setVertexBufferBinding now dealing with gaps in vertex buffer bindings correctly, could manifest iteself as problems if entities created before shadow type picked (generally not recommended anyway)
  - Correctly report support for non-POW2 textures in D3D9, and also detect 'limited' support option which many cards have (no mips etc). Flag was not used in Ogre since POW2 issues are dealt with another way but external apps might be checking it.
  - Fix divide by zero when locking DXT compressed textures
- OpenGL:
  - Buffers which had temporary blend copies were not forcibly destroying those buffer copies when the original was destroyed, leading to wasted memory that was only recovered when using more general shutdown methods
  - Full screen antialiasing (FSAA) now supported for Win32/GL even if in 16bpp display mode
  - GLSL now correctly populating GL_SAMPLER_2D_RECT and GL_SAMPLER_2D_RECT_SHADOW type uniforms
  - Detect FBO depth/stencil formats a little more robustly
  - Ensure GLSL programs are properly unbound when the next program bound is a different type
  - Check for existence of wglSwapIntervalEXT before trying to use it, fixes crash on very old drivers
  - Hardware pixel buffer locking fix - was only downloading the buffer when locked read-only, now downloads provided the discard lock option isn't used and the texture was not created write-only
  - Hardware pixel buffer unlocking optimisation - don't upload the buffer if the original lock mode was read only
- Shadows:
  - Should disable fogging explicitly for shadow receiver pass if using additive texture shadows, since fogging state might otherwise leak from a previous modulative mode
  - Fix memory growth issue with stencil shadows when destroying and recreating entities - EntityShadowRenderable was creating vertex buffer binding and vertex declarations itself when they were already being created by VertexData
- Materials:
  - Material::getNumLodLevels should fall back on first scheme if scheme is not defined for this material
  - Fixed incorrect auto gpu program parameters: inverse_transpose_view_matrix, inverse_transpose_world_matrix and inverse_transpose_worldview_matrix
- Node: Fix missing calls to Node::Listener if user causes transformation derivation to happen earlier than regular Node::update()
- Fix reinitialisation of auto windows after Root::shutdown
- BillboardChain::clearChain should notify index dirty and update bounds.
- RibbonTrail:
  - setMaxChainElements, setNumberOfChains should reset all trails to initial state if there have tracked node.
  - setNumberOfChains should not allow changing the number of chains to less than number of tracking nodes.
  - Overridden clearChain to reset trail to initial state if it has a tracked node.
- Mesh:
  - Fixed an assert that would be raised when trying to lock an already locked buffer when buildTangentVectors is called on a skeleton animated mesh with no edge list built.
- Overlay:
  - Fix copying of nested overlay container elements from template
  - Fix incorrect static_cast<unsigned> instances in BorderPanelOverlayElement which caused problems with some metrics
  - On destruction of a root overlay container, remove from parent overlay to avoid dangling bad reference
- Quaternion: Fixed shortest path slerp bug, also use lerp rather than just return first quaternion in case two quaternions are very close.
- OctreeSceneManager: detect mOctree deletion during shutdown if callbacks from nodes being destroyed hit OctreeSceneManager methods, fixes some rare shutdown issues
- TerrainSceneManager: Fix terrain reloading problems (setWorldGeometry called more than once)
- Pass: dirty pass hashes immediately on change rather than on load. If pass is loaded on demand as part of queueing an object for rendering, and the pass had previously been rendered, the pass hash would be dirtied too late for it to be corrected (since the hash is recalculated when the queue is cleared, which has already happened), leading to a hash discrepancy
- Fix small memory growth issue when destroying and recreating StaticGeometry and ManualObject
- PixelFormat: PF_UNKNOWN should be marked as inaccessible from PixelUtil::isAccessible
- Removed MemoryManager::instance() from MemoryManager methods being used inside non-static MemoryManager methods
- Profiler: Init hierarchicalLvl earlier so that it is valid when used by intermediate code
- BillboardSet::mBoundingRadius now initialised correctly
- Normalise result of Vector3::getRotationTo to protect against variations in extreme cases
- MaterialSerializer: Serialise number of mips and alpha-only option on texture_unit 'texture' attributes
- AnimationTrack: Ensure the result for zero-weight and trackless animations is the same, caused incorrect blending if mixed
- HDR compositor scene HDR rendering pass should use "input none", and suppressed warning that attempt to render queue 5 before 96.
- Entity:
  - shareSkeletonInstanceWith should not delete sharing prepared temp blend buffers
  - Stop sharing skeleton instance during entity destroy and there is only one entity sharing the skeleton
  - Don't re-prepare temp blend buffers when stopping sharing skeleton instance, it's unnecessary in this case
- Fix Camera::getCameraToViewportRay so that it deals with custom view / projection matrices properly
- XSI Exporter: Fix a pose animation bug where the start of a pose animation was truncated to fit to a later animation and incorrectly indexed
- Code::Blocks:
  - allow MinGW to use mem pipe instead of temp files to speedup build process
  - added missing Demo_Ocean project file for CB + MinGW
- Documentation updates

v1.2.3 [Dagon] (17 September 2006) - Maintenance Release

Changes since v1.2.2:

- D3D9:
  - Respect displayFrequency option if specified
  - Use D3DFMT_UNKNOWN instead of D3DFMT_FROM_FILE for DDS loading routines, allow more fallbacks
  - Make sure DestroyWindow is called in all cases on destruction in D3D9 when using OGRE-created window
  - Don't try to update RTT/MRT when D3D device is lost
  - Fix device lost recovery for secondary windows
- GL:
  - Make sure fixed-function LBX_ADD_SMOOTH implemented, even though no direct equivalent for arbitrary GL_COMBINE in GL. GL_INTERPOLATE is the closest
  - Fix a problem with the model (world) matrix being incorrectly taken into account when using fixed-function cubic reflection in GL
- TerrainSceneManager:
  - Explicitly shut down page source before DLL shutdown, identified by tuan as a cause of shutdown problems in TSM under certain conditions
  - Fix terrain pages not using custom assigned render queue
- Resource system:
  - Move firing of resource start / end outside the isLoaded() check to ensure that the callback count is correct even if resource state changes
  - Fix a bug with ResourceGroupManager::loadResourceGroup - if any resource in the group at the start changed group (because of a resource found in another location not in the group being loaded), iterators are invalidated which caused a nasty crash. Really people should sort out their group locations but detect this condition and deal with it nicely
- XSI Exporter:
  - Fix exporting of tangents
  - Fix bug with scaling in keyframes should be relative to original bone scale (previously assumed bind scale of UNIT_SCALE)
- Linux:
  - Fix compilation of OgreSDLConfig_gtk.cpp with recent libsigc
  - Ogre::SDLWindow::isFullScreen implementation
  - gcc deprecated warning fixes
  - Provide -DOGRE_DOUBLE_PRECISION and -DEXT_HASH through pkg-config
- OSX:
  - Universal binaries support
  - Dependencies update
  - Updated the Ogre Config Dialog to look more like it's windows counterpart
  - NOTE: Using Frame Buffer Objects (FBOs) on OSX can cause some visual artefacts, choose "PBuffer" as the "RTT Preferred Mode" when configuring the GL rendersystem until Leopard is released which should fix this problem.
- Code::Blocks:
  - project format updated
  - STLport no longer required, but special build of MinGW needed for correct DLL handling of std::string
- Node changes:
  - If node already attached to a parent, addChild now throws an exception instead of just asserting, helpful to track down this type of bug in release build
  - removeChild(Node*) now uses node name to find whether/where to erasing the child (still keep same behavior as previous), increases performance
  - Bugfix for node weighted transform scale blend: should interpolate between old and new scale rather than scaling old scale with factored new scale
- Compositors:
  - Eliminate constant recompilation when compositors enabled on more than one viewport at once
  - Eliminate extra memory consumption each time CompositorChain is recompiled
- ManualObject:
  - Fix crash in ManualObject when silly people call begin() and end() with no data in between
  - If ManualObject is already attached to a node when new geometry is added, tell parent to update so potentially new bounds are updated too
- BillboardChain:
  - changing number of elements and chains, enabling/disabling vertex colour and texture coords usage should mark index buffer dirty and rebuild later
  - update render queue should take render queue into account
- Tangent calculations:
  - Correct bug with shared geometry where each submesh covered only some of the vertices
  - Orthogonalise tangent vectors with the vertex normal when generating
- Ensure the correct texture format / num mips is used if texture loaded through declareResource / loadResourceGroup instead of TextureManager::load
- Fixed stencil shadow bug when enabling a custom near clip plane, which in some case missing generate light/dark caps that required by zfail algorithm
- Viewport clear buffers defaults to FBT_COLOUR|FBT_DEPTH, the same as the value defaulted in Viewport::setClearEveryFrame, not 0xFF. More consistent, small speedup and resolves some compositor issues
- Overlay bugfix - when a parent container was using pixel metrics, and the child was using non-left or non-top alignment, the pixel metrics were being used as relative metrics to calculate the childs position in error
- Mesh::clone - fix pose list being empty after mesh cloning
- DeferredShading Demo now compiles under OGRE_DOUBLE_PRECISION mode
- Fix incorrect override on AnimableValue::applyDeltaValue(Real)
- Bugfixes for skeleton unloading
- Fix use of depth bias with CEGui renderer
- Tolerate compile errors in shaders, just log the errors and mark the technique as unsupported instead of requiring app to catch exception
- StaticGeometry was getting the wrong material technique which caused material LOD not to work, and for potentially unsupported techniques to be picked - fixed.
- Fix a bug in vertex morph animation where if the same keyframe was passed as both parameters for the morph (because only one keyframe in a track, or because the time exactly matched a keyframe), the same buffer was locked twice
- Root::addFrameListener now deals with the case where a listener with a given address is removed and re-added before the deferred removal is processed
- Entity::refreshAvailableAnimationState should refresh vertex animation too. Refreshing the animation state should update length if it has changed
- Virtualise a few SceneNode methods so they can be overridden
- Copy pass should copy hash value too. On demand illumination pass compiles should calculate new pass hash value immediately.
- BillboardSet: unreference main buffer when destroying buffers, so the hardware vertex buffer will release back to driver as early as possible
- Fix Ocean demo crashing if there are no supported material techniques
- Safely handle null camera in all cases in Viewport
- Fix a bug in the Milkshape exporter when exporting models imported from other formats which have less position keyframes than rotation keyframes (Milkshape never creates these)
- Fix and enhance BitmapFontBuilderTool
- Miscellaneous detail-level performance improvements
- Documentation updates

v1.2.2 [Dagon] (23 July 2006) - Maintenance Release

Changes since v1.2.1:

- D3D9:
  - when loading DDS files, se 'Ex' versions of DDS loading routines so that user mipmap preferences are preserved
  - Initialise D3DTexture::mD3DPool to some value other than D3DPOOL_DEFAULT, if texture loading failed and then later it might re-create as empty texture on device lost/restore
  - Fixed checking whether or not device supports mip-map texture when loading .dds texture
  - Small optimisations during matrix conversion
- GL:
  - updated GL uniform type names to GL2.0 spec as defined in glew.h
  - added missing shadow sampler uniform types
- TextureUnitState: Reset mRecalcTexMatrix to false after texture matrix calculated, to avoid recalculating each time
- Fix bootstrap script not accepting autoconf 2.60
- Node: Avoid queueing a node for update more than once, which could result in a crash if node was destroyed
- Added missing initialisation of mAutoCalc for RotationalSpline
- MapIterator / ConstMapIterator - fixed peekNextValuePtr
- Fixed shadow_receiver_fragment_program usage with modulative texture shadows
- Added more tests for configure.in
- Solaris 11 (Nexenta OS Alpha 5) build compatibility
- Fixed an inappropriate unsigned casting issue in TextAreaOverlayElement introduced in 1.2.1
- OGRE_DEBUG_MEMORY_MANAGER can now be defined externally which is usefull for batch builds that need to build both versions
- Added MinGW + STLPort version of Code::Blocks project for MeshUpgrader, a few other Code::Blocks project tweaks
- SkeletonInstance::createTagPointOnBone offset position parameter should default to ZERO instead of UNIT_SCALE.
- Slight optimisation/fix of BillboardSet and ParticleSystem:
  - Use list<>::splice to move billboard/particle between active and free list. As a side note that removing a billboard which doesn't exist in the active list now causes assertion fault in debug
  - BBT_PERPENDICULAR_COMMON no need to generate axes and vertex offsets for every billboards (use common axes and vertex offsets instead).
  - Notify particle system renderer attached node only if is configured
- Fix CEGui renderer potential bufer overrun with malformed XML
- Added MovableObject::getVisible allow direct access to the value set by MovableObject::setVisible without the additional conditions of isVisible
- SceneNode::flipVisibility should use object visible flag only, i.e. should not take object upper rendering distance into account.
- Added missing overridden getMovableType for RibbonTrail
- Added overridden getSingleton* methods to CompositorManager for consistency
- Remove unnecessary normalize calls in normal mapping shaders for optimisation on lower end cards
- Sphere intersection test with another sphere or point now uses squaredLength() instead of length() to avoid square root
- Fixed a naming bug in the 3dsmax exporter, can now use names with operators embedded
- Added a few missing header files to Mac OSX framework
- SceneNode::_getWorldAABB returns AxisAlignedBox by const reference instead of by value
- Some octree functions const correctness improved
- Tidy ups and minor optimisations for Vector2/3/4 classes
- SDL back-end:
  - VSync support for SDL RenderSystem added
  - Fix compilation of OgreSDLConfig_gtk.cpp with recent libsigc
  - SDL_FreeSurface not needed for screen surfaces
- More corrections to the manual & docs

v1.2.1 [Dagon] (11 June 2006) - Maintenance Release

Changes since v1.2.0:

- Fix bug with software skinning under gcc 4.1 (an optimisation issue which does not occur on stable gcc 4.0 or MSVC)
- Remove unnecessary (and incorrect, although harmless) linker path from platform manager
- InputEvent's constructor should take 'when' param as a Real like the subclasses KeyEvent and MouseEvent to avoid truncation
- Fixed bug in edge list builder when dealing with degenerate triangles. Conforming vertex / index data is required to build an edge list, so throw an exception if this condition is detected
- Fixed HLSL program populating incorrect parameter index of array parameters
- Fixed potential double inserts into mSupportedTechniques while compile materials
- Put RibbonTrail local TimeControllerValue class into unnamed namespace, avoid potential naming conflict and also marked it as private
- Minor issue in Rectangle2D - set the (unused in most cases) mBox member properly instead of some random stack variable
- Fixed animation update problem when animation state changed between end of last frame and beginning of next frame - note this changes the behaviour of AnimationStateSet::getDirtyFrameNumber, if you used this yourself, check the changes
- Fixed a bug causing the transform of an object attached to a bone to never update if its own transform is changed, when the parent skeleton animation is frozen
- Entity shouldn't force software animation because of stencil shadows if it has shadow casting disabled
- Texture Shadow fixes:
  - Fix several bugs with using global custom shadow caster / receiver materials that used vertex / fragment programs
  - Fix continuous memory consumption bug when using a combination of modulative texture shadows, custom shadow receivers and spotlights
  - Fix bug in setShadowTextureSettings where the previous shadow pixel format settings would be used
- Remove fog-based distance fade of additive texture shadows since it can't work; clamp to border instead
- Fix problem in BillboardSet::setTextureCoords if params are 0,0
- Add compatibility with NVPerfHUD 4.0
- Add missing 'clear' methods to BillboardChain
- Add 'SceneManager::hasCamera', 'SceneManager::hasEntity' etc as requested in the forum
- XSI exporter: Fix a bug when submesh merging is enabled and objects do not have the same geometry format (UV sets or vertex colours) - would cause objects to be leaked and not exported
- CompositionPass should take & return a Material shared pointer by const reference instead of by value
- Ensure correct values are returned from SkeletonInstance::getName, getHandle, getGroup
- Update to latest Code::Blocks project format
- OpenGL fix for parentWindowHandle option under Windows
- Eye vector normalisation fix to the bump map w/ specular shader
- Fix XMLConverter crash with more than 65536 faces
- Ocean demo fixes & enhancements:
  - reflection map can now be blurred by using bias to select mipmap level during cube map sampling
  - fixed rotation matrix calc for tangent space to object space transformation - Cg, HLSL, GLSL now produce the exact same image
  - allow wave amplitude to be much larger now that reflections work correctly on waves
  - increased mesh resolution so that large waves aren't so jagged
- SDK setup enhancements:
  - Wiki page link on finish page
  - Add readme checkbox on finish page so readme.html is opened after SDK finishes install
  - Fixed text crop problem on finish page
  - Add shortcut link to relevant wiki page for SDK setup and usage
- Remove unimplemented FrameEvent method declarations from ParticleSystemManager, shouldn't be there
- Documentation fixes & tweaks

v1.2.0 [Dagon] (Final: 7 May 2006) - Major Release

See the RC1/2 notes below for other changes and major new features in 1.2.0. This release has the following changes & bugfixes over RC2:

- Add NV_occlusion_query fallback for cards without ARB_occlusion_query
- Fix a couple of bugs when combining pose and skeletal animation in a single model
- Add RTLD_GLOBAL when loading dynamic libs under Linux - solves problems with DRI drivers
- Compiler2Pass now includes exclusion support for character sets
- Compositor:
  - Fix knot material when HDR compositor enabled under OpenGL, now looks the same as D3D
  - Gaussian blur compositor added
  - Widen CEGui text widgets in compositor demo to prevent name clipping
  - Fixed the initialisation of the central sample offsets for vertical blur, caused some artefacts in release mode sometimes in HDR and gaussian blur
- Code::Blocks:
  - STLPort import libs no longer required. DLL is linked directly
  - Workaround a problem with STLport which caused filestream problems
  - Project dependencies updated
  - Removed unused defines - not using explicit dll exports for MinGW builds
- Fixed potential bug in FileSystemArchive::open - Open file stream should check ensure open succeeded
- Apply original fog settings to auto params even when fog override is enabled, since if you want to disable fixed function fog but implement fog in the shader you can't do it otherwise
- Recompile compositor if viewport colour / clear options changed since last compiled, necessary for reliably picking up viewport colours
- Shadows:
  - Fixed a problem with using custom shadow caster / receiver materials and transparent objects
  - Tweak validation of transparent renderables so that those with more than one pass are only rendered once into shadow textures and once for a receiver pass
  - Don't hard code the avoidance of texture shadows in compositor render queue listener, detect reentrancy more generally - allows compositors to be used on texture shadows if required
  - Soft shadow example added using gaussian blur compositor on shadow texture
- GLX:
  - Closing windows and visibility
  - Key repeat issues improved
  - GLX Pointer Warp Fix
  - Mouse Wheel support
- Clarify assert messages when trying to retrieve invalid software blend data
- Fixed Direct3D9 FSAA options that didn't refresh until selecting another a video mode
- Allow access to the internal inverse transforms in case external apps were using the removed _getBindingPoseInverseTransform
- Fixed memory leak of ManualObject when converted to Mesh
- Fixed issue of global new([])/delete([]) overridden when compiling in VS2005 with managed C++
- Fixed a couple of issues with the sizing / resizing of SDL surfaces
- XSI Exporter now builds successfully against the newer XSI 5.1 SDK
- Fixed a couple of multithreading issues fixed with shared pointers and resource groups

v1.2.0 [Dagon] (RC2: 17 April 2006) - Major Release

See the RC1 notes below for the major new features in 1.2.0. This release has the following changes & bugfixes over RC1:

- Compatibility with Cg 1.4 (particularly affects GL); also Visual C++ Dependencies updated to Cg 1.4.1
- Code::Blocks project updates
- Compositor demo expanded and improved; now uses CEGui to present all the available compositors and includes lots of new ones including Sharpen Edges, Old Movie, Posterise and HDR
- Fix attaching objects to bones
- Fix crash bug in OgreMeshUpgrade when using meshes with no vertex colour
- Bugfix for software skin blending with position/normal shared buffer with blend position only. Also allow more flexible vertex data layout.
- Fixed bug in default intersection scene query, incrementing wrong iterator in inner loop
- Fixed bug with hardware skinning on cards that don't support UBYTE4 (Geforce 3/4)
- Fonts completely switched to address a legal issue with distributing Tahoma; now using freeware Blue Highway throughout
- Fix crash problems with glPointParameters on some cards / drivers, especially ATI
- Added capability flag for point sprites and extended point parameters; point rendering for billboardset now falls back on non-point rendering if point sprites not available
- Throw exception if trying to attaching movable which already attached to scene node or bone.
- Added missing method Animation::_getVertexTrackList.
- Manual updates
- Make MaterialSerializer match the manual for texture element - allow all optional elements
- Fix segfaults when using an animation with no tracks
- Turn on RTTI for core projects for VC7.1 (already on for VC8)
- Fix shadow volume generation for ManualObject
- More graceful handling when trying to define high-level shaders in a language not possible for the current rendersystem (GLSL on D3D, HLSL on GL). You don't get lots of errors in the log anymore, and technique fallback now works better.
- XSI exporter
  - Fix vertex colour export
  - Fix translation animation
  - Automatically pad mesh bounds when animation takes skeleton outside the original bounds
- Milkshape exporter - fix a translation animation bug
- Fix an ambiguous method declaration on AnimableValue when using a non-const object; would pick the protected version and fail
- Remove old MSVC hash_compare override - this was only required for VC6 and VC7.0 and is no longer relevant. Can cause problems if users are relying on the default hash function.
- Fixed issues with buggy GL drivers claiming GL 1.5 compliance and not supporting ARB_vertex_buffer_object. F
- Fixed hardware occlusion support for GL render system (should check GL 1.5 or ARB_occlusion_query instead of NV_occlusion_query)
- Binary search optimization of keyframe searching, helps with very large animations.
- Allow different resource group names to be used when creating compositors from script. Was previously hard coded.
- Fix to SharedPtr with threading support enabled
- Calculating the bone matrices should combine scale as equivalent axes, no shearing
- Make MovableObject::_getParentNodeFullTransform return const reference of Matrix4 and avoid memory copy
- GLSL: Support arbitrary sized uniform arrays of vec4 like Cg and HLSL
- Dr_Bunsen_Head.jpg - texture was NPOT which was screwing up some ATI cards, fixed.
- Avoid divide by zero when setting fog auto gpu program parameter.
- Make 'original scene' compositor source pick up viewport background colours & clear options
- Bugfix for using wrong source in VertexData::reorganiseBuffers
- DataStream issues:
  - Fixed read, get and skip line bug when line too long.
  - readLine and skipLine now implemented in DataStream, derived class doesn't need to override unless they have more effective implementation.
  - Use temp buffer in the stack instead of in the class.
  - ConfigFile should open file in binary mode, since line reading functions might seek backward, and seeking in text mode have problem with CR/LF pairs.

v1.2.0 [Dagon] (RC1: 12 March 2006) - Major Release

1.2.0 is a new major stable release, and therefore has literally shedloads of new features. Some interfaces have also changed since the 1.0.x branch (Azathoth), for full information on porting your application from the previous version of OGRE, see the Dagon Porting Notes in the OGRE Wiki.

- Compositing framework
  - Full-screen post-processing effects made simple
  - Easily render to multiple targets, potentially multiple times, and combine the results through shaders
  - Chain multiple compositors together flexibly so post-processing results can be combined simply
  - Scriptable through .compositor scripts so you can write less code
  - Demo_Compositor shows you how to create compositors in code and through script
- Multiple Render Target (MRT) support
  - Render to multiple targets simultaneously in the same rendering operation
  - Perform advanced effects like deferred shading (demo included)
  - Requires a card which supports MRT
- RenderTexture enhancements
  - RenderTextures are now created like all other textures, with TextureManager::getSingleton().createManual; you just need to set a usage parameter of TU_RENDERTARGET
  - Render to the faces of cube maps and to volume slices
  - Retrieve the content of these sub-faces by accessing the HardwarePixelBuffer like so: tex->getBuffer(x,y)->getRenderTarget(z)
  - RenderTarget::writeContentsToDisk now implemented for all RenderTextures
  - D3D9: RenderTextures of compatible formats now share one DepthStencil surface to conserve memory
  - GL: For faster and more flexible rendertextures use GL_EXT_framebuffer_object instead of pbuffers (if available)
  - GL: PBuffers only used when rendertarget is smaller than frame buffer. If smaller, the framebuffer is used, as this is faster
  - GL: PBuffers are shared between RenderTextures to conserve memory
- MovableObject changes
  - All MovableObjects are now created through MovableObjectFactory, and new factories can be registered by plugins. Plugging in new object types generically is now simple
  - SceneQueries can now exclude entire MovableObject types as well as individual objects
  - Added MovableObject::setRenderingDistance which operates like the same method of StaticGeometry, effectively limiting the view distance of individual objects
  - MovableObject::setVisibilityFlags controls the visibility of objects based on a mask set in SceneManager::setVisibilityMask, in the same way as SceneQuery works. This is yet another way for you to control object visibility, and makes it simpler to turn categories of object on / off quickly and efficiently
  - The default values for MovableObject::setQueryFlags and MovableObject::setVisibilityFlags on creation of the MovableObject are now defined in the static methods MovableObject::setDefaultQueryFlags and MovableObject::setDefaultVisibilityFlags. These defaults start out at 0xFFFFFFFF to preserve previous behaviour.
- Billboard / particle enhancements
  - Billboards can now be sorted individually relative to the camera to provide correct transparency effects (also applies to BillboardParticleRenderer, and a new 'sorted' attribute is available in particle scripts)
  - ParticleSystemRenderer can now describing their desired sort mode by override '_getSortMode'.
  - Billboards can now have their own individual texture coordinates to allow you to display subsets of a texture per billboard (e.g. for billboard based text)
  - Particles can now be kept in local space rather than world space
  - Added two new billboard/particle type: BBT_PERPENDICULAR_COMMON (perpendicular_common) and BBT_PERPENDICULAR_SELF (perpendicular_self). BBT_PERPENDICULAR_COMMON make the billboard plane perpendicular to a common direction, and BBT_PERPENDICULAR_SELF make the billboard plane perpendicular to their own direction. In other words, their facing to the given direction instead of the camera. It's useful for an aureola around the player and parallel to the ground etc. Both of them use an additional up-vector to determine the billboard X and Y axis.
  - Added billboard/particle rotation type setting, allowing you to rotate vertices or rotate texture coordinates. Defaults to rotate texture coordinates to preserve previous behavior. Use new 'billboard_rotation_type' attribute to set rotate type in particle scripts when using BillboardParticleRenderer.
  - Billboard particle renderer now supports setting the billboard origin in particle scripts via 'billboard_origin'.
  - Particle system now allows the user to configure the sampling interval, either fixed or based on frame-rate. Default based on frame-rate to preserving previous behavior. Use 'ParticleSystem::setIterationInterval' to configure iteration interval per particle system, or use 'ParticleSystem::setDefaultIterationInterval' to set the default iteration interval for all ParticleSystem instances that don't have their own setting. Available in script as 'iteration_interval'.
  - ParticleSystem now supports a 'nonvisible update timeout' which means that if a particle system is not visible from any camera for the time specified, it will cease to update, saving the expense. You can set the default for all systems without their own setting through ParticleSystem::setDefaultNonvisibleUpdateTimeout, or set it per system (through script as 'nonvisible_update_timeout').
  - Each billboard can now have its own custom texture coordinates instead of merely generated coordinates (which were either the whole texture or grid set)
  - Billboardset now supports an 'accurate facing' model so that billoard orientation is calculated based on the relative positions of the camera and each billboard, which is more accurate but slower than the default method (which is to use the camera axes for all billboards). This option is available through particle systems as 'accurate_facing true' too.
  - BillboardChain and RibbonTrail classes allow you to do 'beam' effects like jet trails and lightning arcs
- SceneManager enhancements
  - SceneManagers are now constructed from SceneManagerFactory instances, allowing more than one instance of the same type of SM
  - SceneManagers must be constructed first using Root::createSceneManager, and can be created based on a scene type mask (a binary combination of requested types), or an explicit name
  - Available SceneManager types can be iterated over using Root::getSceneManagerMetaDataIterator, each with a type name, description, scene type mask and world geometry support flag
  - Using multiple simultaneous SceneManagers, of the same type or different types, is now safe
  - SceneManager::setWorldGeometry now accepts a stream as input as well as a filename
- Material enhancements
  - Techniques, passes, and Texture unit states can now be named
  - Materials can now extend other materials, through the script syntax 'material DerivedMaterial : BaseMaterial', to allow simple refinement of existing materials
  - matrix4x4, float4, float9, and float16 in material script now properly load matrices for use with GLSL shader unitforms
  - New auto parameter binding 'pass_number'
  - Serializer now writes out all shader bindings (for tools)
  - Passes can now iterate an arbitrary number of times, either globally or per light
  - New auto parameter binding 'pass_iteration_number'
  - There is no limit on the number of frames for animated textures. There used to be a limit of 32.
  - matrix4x4 in material script now uses same matrix element layout for Cg, HLSL, GLSL
  - New TextureUnitState blending option, blend_diffuse_colour, allows you to use the RGB luminence of vertex colours as an additional blending parametric
  - New texture addressing mode 'border' and texture unit attribute 'tex_border_colour'. 'border' addressing mode will set to the border colour when texture coordinates outside the range [0.0, 1.0].
  - New gpu parameter 'render_target_flipping', allow adjust position to accord with requires texture flipping when bypassed standardise projection transform.
  - New gpu parameters 'fog_colour' and 'fog_params', allow access fog parameters by gpu program if need.
  - New pass attribute 'polygon_mode', allowing you to specify solid, wireframe or point rendering on a per-pass basis (instead of just an object basis as before)
  - New feature 'material schemes' - every technique can be allocated to a scheme ('scheme blah' in technique block), and viewports can have a preferred scheme. This allows wholesale switching between techniques per viewport, or just globally to do scalable effects, or hdr paths etc
  - new Ocean Demo added showing use of CEGUI manipulating programable shader parameters in realtime.
  - New option on texture loading within texture_unit to load a single-channel luminence texture into alpha, useful for fixed-function alpha textures
- Animation enhancements
  - Morph and Pose animation
    - Animation of vertex positions in either hardware or software
    - 'Morph' variant is similar to old-skool vertex keyframe animation; this is recommended only for legacy applications (e.g. MD2)
    - 'Pose' variant is a modern, blendable pose based system which allows you to perform much more sophisticated vertex animation such as facial animation (using expression and mouth shape keys), and can be combined with skeletal animation.
  - Existing animation tracks are now just one type of track, ie NodeAnimationTrack
  - New 'NumericAnimationTrack' allows the animation of any numeric value through the AnimableValue abstraction
  - Significant number of optimisations means that animation is now faster than before
- Skinning blending enhancements.
  - Larger skeletons are now possible with hardware skinning. OGRE now only passes world matrices for the bones of a subentity that are actually used, saving shader constants if you split up your mesh, should your skeleton get too large for the constraints of the target shader model.
  - Software skinning is now more efficient
    - Temporary blended buffers are now held for a period of time per entity before being released back to the pool, which allows better frame coherency on these buffers
    - software skinning is now done in object space, with additional special optimisations for frozen/disabled animation, so that the software blended vertex datacan be kept for as many frames as practical without recalculating it (it will only get released when the entity has been out of frame for some time)
- ManualObject added to make custom geometry creation more accessible
  - Closely mirrors the GL immediate mode interface; create geometry using begin(); position(); normal(); texCoord(); end();
  - Builds data into regular hardware buffers for performance
  - Supports all types of shadows
  - Can convert the result to Mesh if desired for instancing
- Node enhancements
  - Node::Listener added so you can use Node::setListener to get callbacks when the transform changes
  - Node::setInheritOrientation/getInheritOrientation added allows configure the node whether it should inherit orientation from it's parent node.
- Render queue enhancements
  - Render queue groups can now be given an arbitrary uint8 identifier rather than just one of a fixed set of enums
  - Custom render queue invocation sequence per viewport if required
  - Allow suppression of shadow processing and render state changes during custom invocation
  - Ordering / grouping of non-transparents can be changed per invocation
- Shadow enhancements
  - New shadow type SHADOWTYPE_TEXTURE_ADDITIVE, allowing the lighting accuracy of additive shadows with the GPU speed of texture shadows
  - You can now disable the rendering of shadows per viewport, to save time in mini-maps / RTTs etc
  - ShadowListener interface added
    - shadowTexturesUpdated allows you to hook into the time when shadow textures have been rendered to, but before they are used. You can use this to perform custom shadow behaviour such as filtering
    - shadowTextureCasterPreViewProj and shadowTextureReceiverPreViewProj fires before the view & projection matrices are set for the shadow caster / receiver renders respectively; you can use these hooks to provide a specialised camera setup if you want to define custom shadow systems
  - Texture shadow casting now fully supports alpha blended / alpha rejection materials
  - Both stencil and texture additive shadow technique now fully supports alpha rejection shadow receiver.
  - Texture shadow supports point light, used directional light look at target mechanism and 120 degree FOV (similar spotlight) behavior.
- Resource management enhancements
  - Added a new predefined resource group called ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME ("Internal") for dealing with resources created internally by the engine; you can now safely unload the default resource group if you choose without affecting these internal resources.
  - Added a new meta resource group called ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME ("Autodetect"); if you use this group name, the real resource group is detected at load time based on where the resource is found in the configured resource locations. Entity now uses this method by default to load meshes so you no longer have to preload meshes in custom resource groups if you don't want to (although preloading is often a good idea anyway for performance).
  - Resource loading group fallback
    - When a resource is not found in the requested resource group, look for it in the others based on resource locations
    - The group ownership of resources changes when this happens
    - This allows you to load a material from a custom group and have it load textures into a general resource group dynamically
  - ResourceGroupManager::unloadUnreferencedResourcesInGroup now available to unload only resources which are not currently being used
  - ResourceManager::unloadUnreferencedResources / ResourceManager::reloadUnreferencedResources now available to unload / reload only resources which are not currently being used

- Platform Manager enhancements
  - Added Ogre::PlatformManager::messagePump(RenderWindow*) to the platform manager - This moves the Win32 message pump from Ogre::Root to the Win32Platform Manager, and the GLX platform messages to the GLX Platform manager. On other platforms (Mac & SDL) this has no effect. Call this method if not using startRendering (as startRendering calls this everyloop for the default renderwindow) to pump messages into Ogre while avoiding the OS pcific issues in your own code - allows alt-tabbing, etc to work correctly.
  - Timer stability on dual core systems
  - GLX Platform only listens to Window X events when not using Ogre input system - allows ability to plug in other input systems easier, while not having to pump specific X events into Ogre manually.
  - Added Viewport::setSkiesEnabled() to let users hide skies for viewport individually, allow control skies displays or not more easy, especially for using multiple viewports.
- D3D9 enhancements
  - Triple buffering enabled when vsync is enabled
- GL enhancements
  - Two sided stencil is always supported for GL 2.0 compliant drivers, even ATI
  - Fast texture-to-texture blit, blitFromMemory, and hardware accelerated bi/trilinear scaling using FBO. This improves loading time in the common case that some textures need to be scaled to power-of-two size.
  - Implement Texture::copyToTexture for GL, which was already implemented for DX9 (useful for longer term storage of graphics rendered to a texture)
- Camera / Viewport Enhancements
  - Cameras & Frustums can now have custom view and / or projection matrices if required
  - Viewports now have a setting to say which buffers they clear if clearing is enabled (colour, depth, stencil)
  - Added off-axis perspective projection to Frustum and Camera. Related functions: Frustum::setFrustumOffset, Frustum::getFrustumOffset, Frustum::setFocalLength, Frustum::getFocalLength.
  - Added methods to access 'virtual' (reflected if need) or 'real' (unreflected always) world orientation/position of the camera.
- Added radix sorting routines to allow for faster sorting
- CEGUI renderer updated to v0.4.x
- Added IndexData::optimiseVertexCache to allow people to cache-optimise their triangle list indexes
- Added pulse width modulation option to WaveformControllerFunction
- Added Root::setFrameSmoothingPeriod() to let users customise smoothing of frame time fluctuations.
- Every render system config options are stored to configuration file.
- VC6 & VC7.0 (2002) support discontinued; officially supported Microsoft compilers are now VC7.1 (2003) and VC8 (2005)
- Direct3D7 support removed

v1.0.7 [Azathoth] (12 February 2006) - Maintenance Release

- D3D9:
  - Fixed device leak when destroying primary window manually rather than via shutdown()
  - Potential D3D9 leaks during fatal error conditions fixed
  - Fix potential leak when using DDS textures if premature shutdown encountered
  - Fix another trailing state issue on device lost/restore, clear all texture units and vertex streams before resetting
  - Don't create any mipmaps when building temp surface in blitToMemory
  - Fixed a compile bug in double-precision mode
  - Floating point texture support now correctly logged
  - Fix vs_2_x/a, ps_2_x/a/b detection
- D3D7:
  - Fix crash when D3D7 window is minimised
- GL:
  - Fix potential performance problems with NPOT pbuffers
- Terrain plugin:
  - Light list finding should be specialised for each terrain tile.
  - LOD calculation should use minimum distance between terrain tile bounding box and camera position
  - Throw exception when registering a page source for a type which is already present
- Nodes:
  - Fixed a bug in SceneNode::setDirection with a local natural facing of something other than +/-Z, and when dealing with different spaces
  - TagPoint should always reflect parent entity scale changes
  - Fixed crash in SceneManager::destroySceneNode when using auto tracking
- Shadows:
  - Fix rendering of texture shadows not respecting getShadowsEnabled() flag on queue group
  - Alpha-blended materials can now cast texture shadows accurately
  - Correctly render stencil shadows when oblique depth projection in use (use zfail all the time)
  - Free up shadow textures immediately when texture shadows no longer in use to save video memory
- Materials:
  - Fix incorrect output serialisation of 'modulate' and 'colour_blend' scene blend factors from memory to .material files
  - Fix splitting of passes when too many texture units used
  - Bugfix for auto gpu program parameters:'view_direction', 'view_side_vector' and 'view_up_vector' should be in world space. Also viewport size params were using render target details instead of viewport
- Particles & billboards:
  - Fix billboard orientation when using camera reflection
  - AreaEmitter should have a different default 'up' to the default 'direction'
  - Fix bug in particle scale affector - should scale from default dimensions in the first instance
- Workaround to avoid std::iostream memory leaks in VC8 (MS bug - until VC8 SP1 arrives)
- Fix Font::StrBBox for strings containing spaces
- Memory manager tweaks to improve shutdown performance when using large containers in debug
- Quaternion now outputs to stream with same element ordering as constructor
- Accessor methods added to retrieve current sky settings on SceneManager
- Add automatic fallback for Vector3.getRotationTo if 180 degree rotation is requested
- Cleaner Implementation of occlusion query delete mechanism. Added destroyHardwareOcclusionQuery and made RenderSystem clean up any remaining queries at shutdown just like RenderTarget
- Eliminate potential temp blended buffer checkout bug: occuring when call TempBlendedBufferInfo::checkoutTempCopies more than once in same frame.
- Fixed rendersystems setClipPlanes sending of user clip plane equations to device (d was inverted)
- Fix bug in edge list builder when indexStart is used
- Fix bug where Math::ASin returned the wrong value for +1.0 and -1.0
- Fix bug in border panel; uvs for centre panel should be updated at the same time as the border
- XSI exporter significant speed improvements and better progress reporting
- Timer more consistent after performance counter hiccups, and will run continuously over the 49.7 days boundary
- Move zziplib headers so external apps are no longer dependent
- Update controllers before updating scene animations in case users use controllers to manipulate scene animation
- Avoid multi-results of same object from OctreePlaneBoundedVolumeListSceneQuery
- Default mMaterialName as well as mpMaterial in SubEntity so they are consistent (issue with StaticGeometry if no material set)
- Fix infinite loop when RenderQueueListener tried to skip a queue
- Fix crash when creating / destroying Root more than once
- 3D Studio Max exporter now supports Max 8
- New barrel and palette models added
- Many compiler warnings squashed
- Documentation clarifications

v1.0.6 [Azathoth] (20 November 2005) - Maintenance Release

- Visual C++ 2005 now supported, use Ogre_vc8.sln
- XSI Exporter
  - XSI v5 now supported (in addition to v4.0 and 4.2)
  - Material exporter now picks up custom texture transforms correctly
  - Fix for using multiple clusters with envelopes (bone assignment groups) spanning them.
  - Don't export empty submeshes (caused by starting with polys which are later all reallocated to clusters)
- D3D9 fixes:
  - Render window writeContentsToFile method speeded up + some bugfixes
  - Avoid a memory leak when GPU programs fail to load
  - Fix potential surface leak when destroying a secondary window but not the device
- GL fixes:
  - Don't change GL context while creating a new render window if current context is available
  - Share lists between render window GL contexts
  - Fixed incorrect loaded state when creating a manual texture in GL
  - Fixed many gcc warnings on GL atifs compiler
  - Type correction for external / parent handles in GLX platform & doc corrections
- D3D7 fixes:
  - Fixed Dx7 device lost problems, switching from fullscreen to windowed and back now works in Dx7 too.
  - Fix oblique projection on D3D7 (fix bad clipping on render to texture demo)
- Mesh / Entity fixes:
  - XML format DTD
    - Range of texture_coords attribute should be 0 to 8 not 0 to 7
    - 3D texture coordinates should be considered valid in DTD
  - Mesh::getSubMesh now safely checks for an index out of bounds condition.
  - Unload mesh should clear bone assignments and removes reference to skeleton
  - Added method to access manual levels of detail for the entity. Allow user more control to the lod level (e.g. change material, attach objects).
- Hardware vertex buffer pool fixes:
  - TempBlendedBufferInfo destructor needs to make sure allocated buffer copies have been released - this bug showed up when entities using software skinned skeletal animation were removed from the scenemanager during rendering prior to frame ended finishing
  - Buffer manager must make sure that no buffer copies or free temp vertex buffers exist that are associated with a vertex buffer that is being deleted
- Logging changes:
  - Silently tolerate not having any log files to write to, so people can run logless if they really want.
  - Allow suppression of file output on Log to allow a LogListener-only setup
- Shader fixes:
  - Correct number of constants supported by ps_1_x
  - Fix ps_2_x detection; report as ps_2_a/b but assembler syntax is still called ps_2_x
  - Fixed memory/resource leak of high-level GPU program in the case qhere the high-level portion is loaded, but the low-level GPU program itself never loaded
- Shadow fixes:
  - Fix missing shadow volume extrude program parameters when shadow volume materials initialised somewhere else
  - Resolve an issue when find shadow casters for light, and the light is attached to scene node. Should use derived light position/direction to query for shadow casters
- Material fixes:
  - Ensure that custom texture transforms are serialised / deserialised into .material scripts
  - When material recompile required, need to unload whole content of material, avoid leak because some TUS animation/effect controllers maybe created.
  - Fix cloning problems when using the ACT_TIME auto parameter
- Texture fixes:
  - TextureManager loadImage/loadRawData should be create texture as manual texture without loader, in fact the texture can't auto reload again.
  - Enable/disable 32-bit textures now work properly even if no texture exists, and only reloads the loaded and reloadable textures.
  - You can now access the original dimensions of the texture image even if the final texture dimensions (due to hardware requirements) are different
- Dependencies updated
  - Freetype is now v2.1.1.0
  - DevIL is now 1.6.7
  - zlib is now 1.2.3
  - zzliplib is now 0.13.44 (this fixes a memory leak when reloading resources from a zip file)
  - CEGui remains at 0.3.x since 0.4.x requires potential changes to custom looks, users are free to upgrade themselves (but will need the source release, not the SDK)
- Particle systems:
  - Delay loading of image on ColourImage particle affector to avoid startup overhead, and deal with more formats instead of assuming pixel format
  - Should check for duplicates before creating/adding new particle system templates, otherwise leakage
- Disable gcc version script which causes problems in gcc v4.x
- Add the ability to raise and listen in on RenderSystem-specific events (allows people to listen in on device lost / restore if they choose to)
- Fix comparison bug in HardwarePixelBuffer::blit which would cause it to scale unnecessarily
- Solve crash when ray scene query is done without landscape loaded in TerrainSceneManager
- Open data streams one at a time while parsing scripts to avoid opening a lot of disk files simultaneously that may exceed file handle limits
- Allow archives to be unloaded
- Fixed destroying track which maybe absent, just ignore it when this situation happens
- Fix merging of CEGui flags in Linux build
- Don't allow double-load of plugins
- Gracefully deal with invalid requests to use the same SceneNode name more than once
- RenderTarget::writeContentsToTimestampedFile now writes out the date/time in correct human readable format
- Fix for "unknown property."scale" in $Biped_Object" error in 3DSMax exporter
- OverlayElement parent overlay initialisation fixed
- Several documentation corrections

v1.0.5 [Azathoth] (25 September 2005) - Maintenance Release

- D3D9:

  - Fixed device lost issue with manual textures with manual loaders.

  - Ensure that textures which were unloaded at the time of the device lost remain unloaded after the device is restored (previously these textures would be loaded by the restore)

  - Fix restoration of specified number of mipmaps after device restore

  - Fix mipmap issue introduced in 1.0.4 with textures whose dimensions are not power of two

- GL:

  - context switching should be preserving GPU programs and depth/colour mask settings, because scene manager treat render system as ONE 'context' ONLY.

  - 'Warning texture' now bound to a texture unit if it is used but not defined, e.g. in a shader but the material definition does not include a corresponding texture unit

  - Fix a flipping issue when a viewport doesn't take up the whole of a render texture

- XSI Exporter:

  - Fix export of multiple animations where initial pose is different

  - Material prefix should apply to the exported .mesh as well as the .material

- Fix memory leak on software skinning

- Material: compile illumination passes on demand

- BillboardSet: Optimise updating of bounds when creating a new billboard

- Win32 platform fix: DInput buffer overflows resolved

- StaticGeometry::addSceneNode should cascade as documented

- Ensure HardwareBufferLicensee::licenseExpired is called in all cases

- GLXWindow::resize fixed

- Fix potential memory leak during overlay creation

- Alter bump mapping / offset mapping shaders to handle directional lights as well

- Fix a range issue on the specular bump mapping shader, looks nicer now

- Fix memory leaks when using StaticGeometry & stencil shadows

- Fix TextureUnitState clone bug: _load called after after TUS is cloned so that effect and animation controllers are constructed. Also reduced _dirtyhash() calls while cloning TUS

- Fix off-by-one bug in parseAlphaOpEx when using manual blend

- Fix potential transparencybug: passes can be transparent even if destination blend factor is zero, if source factor is destination-based

- Node: Assert that a node is parent-less before adding it in addChild, avoids inconsistency issues

- Support conversion from and to PF_FLOATxx_R pixel format

- Fix segfault in OgreXMLConverter when built with GCC 4.0

- Fix big endian compilation bug in CEGuiTexture (affects Linux on PPC and OSX)

- Some API and manual clarifications, including:

  - Finally add section on hardware pixel buffers

  - now includes minimum ATI/nVidia card specifications for shaders of a given profile

  - Remove / correct old GUI manual pages

v1.0.4 [Azathoth] (21 August 2005) - Maintenance Release

- Fix texture shadows when using basic SceneManager (not octree or bsp)

- Fix memory leaks in Demo_Water and Demo_VolumeTex

- Add isStillOutstanding method to hardware occlusion queries to promote more asynchronous behaviour

- Fix a couple of squared distance comparison bugs

- Fix OverlayElement::updateTextureGeometry being called repetitively

- D3D _makePerspectiveMatrix fix (left/top/right/bottom version)

- Demo_VolumeTex material loading bug fixed

- Fixed accumulated discrepancy in animation track optimise

- Bugfix to SceneQuery::removeQueryFlags

- Node destruction now cleaner

- Add ability to force software skinning to Entity

- D3D texture bugfixes

  - We need to check the corrected pixel format before determining hardware dynamic/auto-mipmap texture support

  - The D3D render system texture auto mipmap generation should respect the TU_AUTOMIPMAP usage

  - Should check the ability to use dyncamic textures in volume and cube maps before enabling the flag

- Fix remaining device restore problems with manual (e.g. dynamic) textures, RTTs that are never used, and colour state after restore

- Material bug - fixup best techniques container when material copied

- Fix depth bias in D3D9 on nVidia to be more reliable

- Fix iterator invalidation problem in SceneNode::removeAndDestroyChildren

- Quaternion::equals now takes negated quaternion into account, may define the same rotation

- XML Converter issues fixed:

  - crash fix - prevent FileStreamDataStream from deleting stack allocated stream

  - fixed a problem with converting manual LOD levels

- Fixed water demo crash if ESC pressed at config screen

- Fixed Viewport/Camera auto aspect ratio bug - use floating point division, not integer

- getRenderTargetIterator added to RenderSystem to allow external parsing of current targets

- Clamp projected texture in Demo_RenderToTexture to avoid artefacts on some cards

- TagPoint was not inheriting parent entity scale meaning attached object didn't scale with their parents; now they do

- Several small documentation corrections

- Fixed off-by-one bug in SimpleSpline & RotationSpline which caused incorrect interpolation over loop

- Resource group initialised flag is now reset when clearing, allowing scripts to be re-read

- Hardware skinning example shaders now handle directional as well as point lights

- Fixed CEGuiTexture so it frees shared pointer whether it deleted shared texture or not

- Fixed bug in EventProcessor shutdown: wasn't removing its registered frame listener which causes a seg fault if rendering continues

- Infinite loop bug fixed in Matrix3::QLAlgorithm

- Small compatibility fixes for VS2005

- Context switching problem in GL Render system (GLX) solved

- Some const correctness and other tidying exercises

v1.0.3 [Azathoth] (10 July 2005) - Maintenance Release

- Fixed a problem in D3D9 where GeForce 6x00 range was not enabling infinite projection

- libOgreMain.so now only exports symbols based on ogremain.map

- Fixed --enable-openexr argument for ./configure

- XSI exporter - don't crash if textures are not found, just warn instead. Also trap cases where too many texture coordinate sets are used and warn.

- Last of D3D9 leaks removed

- Extra logging for D3D9 device lost / restore process

- Fix device restore of RTT in D3D9

- Replace SDL hard-coded constant args for SDL_ShowMouse

- Make RenderWindow::windowMovedOrResized virtual & generalised from GL/D3D since they're useful for people with externally managed windows

- Corrected type of the returned value from std::string::find_first_of and find_first_not_of

- Allow external setting of BillboardSet bounds for billboard injection

- Q3A level loader - reject lightmap indexes < 0, not just -1, for greater level compatibility

- Export TagPoint to allow post attach-to-bone modifications

- Set ambient light settings per _renderScene call incase we switch contexts in GL

- gcc 4.0 compatibility and removed the need for GCC_3_1 compiler flag

- In GL, support the GL_MAX_TEXTURE_IMAGE_UNITS_ARB number of texture units when using shader hardware instead of just GL_MAX_TEXTURE_UNITS

- Fix attaching particle systems to bones

- Implemented vp30, vp40, fp30 and fp40 Cg profiles

- Fixed a 64 bit issue in Serializer::flipEndian

- Add conversion from GpuProgramPtr to HighLevelGpuProgramPtr, and fix mutex usage on existing reverse conversion

- CEGUI v0.3.0 now required

- Fix memory leak in ZipDataStream

- Fix to AnimationTrack::optimise - we should not eliminate all duplicate keys since the boundary values are required to preserve the interpolation shape. In fact, we need to preserve sequences of up to no more than 4 identical keys to preserve tangents for if spline interpolation is used. Any inner ones are removed.

- Matrix4::operator != should take a const reference parameter

- Node::removeAllChildren should notify those children of detachment and clear the child update list too.

- Fix a bug in StringUtil::match where a partial match after a wildcard goes wrong and the wildcard doesn't correctly consume it ready for later matches

- Fixed some variable shadowing warnings in gcc

- Don't try to prep subentities for shadow volumes if they don't have their own geometry

- Fixed DataStream::readLine returning incorrect count and not dealing with reading exactly the max length properly

- Fixed TerrainSceneManager incorrectly calculating normals

- VertexData::vertexStart bugfix for GL render system

- Fix small inconsistency in near / far clip plane in world space between rendersystems

- A few win32 resize / getMetrics fixes

- Allocate initial particle pools on demand to save memory

- 3DSMax exporter - support mirrored bones

- Fix memory leak in Bsp Collision demo

- Correct GLX initialisation issue

- Objects which are attached to bones are now properly picked up by scene queries and cast shadows properly

- Fixed carrying forward of manual loader through Material::applyDefaults

- A few other miscellaneous safety checks

v1.0.2 [Azathoth] (30 May 2005) - Maintenance Release

- Mesh::buildTangentVectors now deals with 32-bit indexes

- Re-introduce commented out degenerate face test in progressive mesh, adds quality at very low LOD levels

- Multisampling in GLX corrected

- Documentation fixes

- A few state optimisations in the rendersystem

- Removed calls to srand in Math - user might want to control random number seeding

- Addition of a few minor 'getter' methods and const-correctness

- Matrix4 * Plane should use inverse transpose to transform plane normal to deal with non-uniform scale.

- GL: throw an exception when we failed to properly initialise a texture, instead of a devide by zero

- Fix for skeleton serializer (showed up in XSI testing) - don't assume every bone has a track.

- VC7.1 + OGRE_DOUBLE_PRECISION fix

- Fix bug in getSquaredViewDepth in WireBoundingBox

- Added useful fuzzy comparison methods to Vector3 / Quaternion

- Add animation optimisation methods to eliminate tracks which do nothing and duplicate keyframes (used by default in XML converter)

- Include quake3settings.cfg in SDK distribution

- Minor particle fixes

- Allow Renderable to determine whether it can be overridden by camera as to the detail level it renders at. Allows us to view the whole scene in wireframe but keep the overlays solid by default.

- Bugfix - when bulk-loading resources, unsupported high-level and assembler programs end up getting loaded since they are part of the declared resources in the group

- Fix resource counting bug on bulk loading

- GLX backdrop image now embedded

- StringConverter::parseUnsignedInt fixed for boundary numbers

- Fixed OgreGLTexture and compressed textures delete [] mismatch

- Timer - compensate for QueryPerformanceCounter hiccups on some chipsets

- MeshUpgrader should set mesh padding factor to nothing to avoid adding extra padding

- Material - restore manual loader and manual flag after applying defaults

- Fixed Node::getPitch/getRoll/getYaw

- Implement ParentWindowHandle for GLX - Disable FSAA for now, it's heavily unstable for NVidia

- Don't try to log exception when no LogManager exists yet

- Allow skeletons to share animations with other skeletons (requires strict skeletal structure matching) Supports a scale option to adapt animation to matching skeletons with different sizes

- D3D9 window resizing issues resolved

- Properly support downgrading to 16-bit textures again via TextureManager::getSingleton().enable32BitTextures(false)

- Small bugfix for TerrainSceneManager (texture coords wrapped at 1 vertex too high)

- Some MingW and some Linux distribution (e.g. Gentoo) build fixes

- Fix multi-pass precision issue on nVidia when using GL

- Fixed Dynlib* deleted 2 times when unloading plugins manually

- Fixed BSP plugin creating materials in wrong group

- Fixed unitialised member mQueuedForDeletion in Pass

- Gui demo control name strings fixed

- ResourceManager::load methods (and derivatives) now reload an existing Resource which is already present, but has been manually unloaded

- Fixes Linux boost linking issue when --enable-threading used. Modified slightly to check for the existence of the library during ./configure.

- Linux - disabled RTTI and disabled the ability to use undefined symbols in plugin object files.

- Fix ordering of directional lights in GPU programs to be consistent

- Fix reloading of high-level programs

- Don't do anything in SharedPtr::setNull if already null, avoids issues with shared mutex for null shared pointers.

- PanelOverlayElement can now live with materials which have no texture units.

v1.0.1 [Azathoth] (10 April 2005) - Maintenance Release

- Support for Cg 1.3

- ConfigFile no longer crashes on empty parameter values

- Fix crash when using sharing skeleton instance between entities

- Shutdown primary rendertarget last, fix for crash on ATI OpenGL shutdown when using multiple targets.

- Fixed shutdown bug when exiting in frameEnded and using software skinned entities

- Fixed shutdown bug when using a Cg-based custom material in TerrainSceneManager

- Tolerate not having loaded a texture to allow people making editors to apply materials which have missing resources.

- Fixed the case of vertex_program in OgreGLGpuProgramManager.cpp

- Modified --with-platform=GLX to look for X11 headers.

- Fix display corruption on DDS with custom mipmaps via DevIL (ie GL); the custom mipmaps are not loaded yet so just ignore them. D3D9 unaffected.

- Fix bug when using colour_op_ex and alpha_op_ex to supply manual colour and alpha at the same time in the same texture unit

- Don't define *any* memory macros if the user doesn't want them or we are in release mode

- Add CEGUI-OGRE.pc.in back into the CEGUIRenderer.

- Fix bufferering area contention in Zip

- Fixed particle system so custom render queue id is properly passed through to renderer

- Deal with zero-volume meshes in StaticGeometry

- Actually use the left and right flags in StringUtil::trim

- cppunit m4 fix needed for some autotools versions

- Add Exception::getDescription so that it is possible to get the 'description' field of the exception without the rest. This is useful for printing or logging errors compactly.

- Make SceneManager::setSkyBox, setSkyPlane and setSkyDome only set their respective enabled flags at the end of the function. This makes sure that when an exception happens the renderloop will not crash in its next iteration.

- Added missing OgreParticleSystemRenderer.h to OgreMain/include/Makefile.am

- Fixed sysrq key for GLX

- Fixed GLX screenshot colours

- Fixed material exporting in Milkshape

- Back buffer resizing, dedicated depth stencil and lost device / destruction fixes for additional swap chains under Direct3D9

- Added many new shader auto parameters; includes support for equivalents of many RenderMonkey parameter bindings

- Allow usage of external input system (GGI, SDL) with GLX

- Fixed display of self- or common-oriented billboards that are attached to a rotated node

- Fix for CEGUI renderer under latest Linux nVidia drivers; also increases performance of CEGUI rendering

- XSI mesh and skeletal animation exporter

- Added a missing vertexbuffer unlock in MeshSerializerImpl::writeGeometry.

- Add explicitly named methods to ConfigFile to resolve ambiguity when using defaulted paramters

- Minor documentation updates

- Hardware occlusion support fixes

- Clean up some support for D3D9 buffer lock options

- Fixed modifiers getting lost on mouseup

- Frame / input event Listener removal now doesn't invalidate iterators anymore

- Fixed ResourceManager::resourceExists bug which caused it to return true when the resource didn't exist.

- Initialise mAnimController in the TextureUnitState copy contructor.

- Fixed a problem which caused SkeletonInstance::unloadImpl() not to be called on destruction.

- Remove StringConverter downcast warnings from MSVC

- Fixed a memory leak in BspSceneManager when loading multiple maps

- Custom DDS mipmaps now work in GL as well as D3D

- scene_blend now works after D3D9 lost device recovery

- Potential D3D9 blending state optimisation on some cards

- Fixed loading of axes.mesh when displaying debug skeletons

- Specular highlights now look the same in GL as D3D9, and secondary vertex colour now works correctly in GL

- Code::Blocks support and projects added

- Invisible lights are now properly excluded from shadow calculations

- FSAA support in Win32 OpenGL

v1.0.0 Final [Azathoth] (21 February 2005) - Major Release

The final 1.0.0 release includes a set of bugfixes to the original release candidate, and will also see the first emergence of a precompiled SDK for OGRE. Again, if you are upgrading from Hastur (0.15.x) please read the Azathoth Porting Notes Wiki Page.

Bugfixes & changes since RC1:

- Fixed a couple of memory leaks and a buffer overrun in StaticGeometry

- API doc introduction page added

- Fixed version numbers in Linux build system

- ResourceGroupManager iterator bugs and memory leak on removing groups fixed

- Vsync option was not being passed correctly in D3D rendersystems

- Add external access to software blend data in Entity

- Fix DynLib .so appending issue on Linux

- Depth bias fixed on D3D9 and GL

- Fixed problem with particle systems in some fullscreen modes

- Convert paletted images to RGBA automatically

- Fix a skeleton issue when unloading & reloading resources

- Disable fog when rendering shadow textures

- Allow users to configure custom texture shadows; change caster & receiver material and texture format

- Fix a shutdown problem when external apps linked directly to octree plugin

- OgreGuiRenderer project moved from CEGUI source repository to Ogre repository to simplify dependencies

- Be tolerant of externally created LogManager instances

- Fix crash on invalid DXTx surface sizes

- Image based fonts fixed

- API documentation content and style updates

- Update version of image scaling routines

- Fix a bug with the translation of scene_blend modulate

v1.0.0 RC1 [Azathoth] (5 February 2005) - Major Release

1.0.0 is a big release, and due to us wanting to freeze interfaces at the best possible level for 1.0.0 there are more interface breaking changes in 1.0.0 than is typical for previous releases. For the full lowdown on upgrading your code from Hastur (0.15.x) to Azathoth (1.0.x) , please see the Azathoth Porting Notes Wiki Page.

Enhancements and new Features:

- Resource System Overhaul:

  - Resources now addressed through shared pointers

  - Resource groups can now be defined so that you can load and unload resources in groups, and also set up group-specific search paths and scripting tasks.

  - Manual resource provision formalised; there is now a ManualLoader class that should be implemented when creating resources in code; this allows resource reloads to be possible in all cases

  - Streaming support - data is now accessed from Ogre's virtual file system solely through the DataStream class (and subclasses), meaning that accessing very large files efficiently is now possible while still using the resource system.

  - Loading progress reports; you can now register ResourceGroupListeners in order to implement loading bars

  - Thread safety - steps have been taked to make the resource system thread-safe to allow background loading. This feature is experimental and should only be used by experienced users.

- Hardware Pixel Buffers & Image enhancements:

  - Direct access to read / write to texture surfaces through the HardwarePixelBuffer class, including mip levels, cube surfaces and volume slices

  - Pixel formats have been extended, are now unambiguous across endianness, having separate 'native' endian formats and per-byte formats

  - Support for floating-point pixel formats, luminence formats, depth formats, and compressed formats

  - Image class has been tidied and enhanced to support composite images (like cube maps)

  - PixelUtil class now provides access to all pixel format conversion functions, with optimised templated conversion routines available in capable compilers

- High Dynamic Range (HDR) rendering support:

  - Create render textures in floating-point pixel formats

  - Load .hdr or .exr textures from disk using the OpenEXR plugin (optional)

- Particle System enhancements: Particle systems are no longer limited to rendering with billboards, they render through instances of ParticleSystemRenderer subclasses, which can be implemented in plugins and added at runtime. Use of these alternative renderers is scriptable and can be used to implement alternative particle types like ribbons.

- GUI changes:

  - The OGRE internal GUI has been replaced with Crazy Eddie's GUI, a superior GUI system which follows the same kind of design principles as Ogre itself (portable, clean OO code).

  - Non-interactive overlays remain within OGRE itself, the classes have been renamed *OverlayElement instead of *GuiElement to reflect their role

- Material changes:

  - alpha_rejection has been moved from the texture_unit to the pass

  - Linking vertex colours to material attributes; you can now link vertex colours to any of the diffuse, specular, emissive or ambient material attribures, (e.g. 'ambient vertexcolour') rather than the linkage being implicit.

  - You can now define the number of mipmaps to be generated when loading a texture in the material script, from '0' to 'unlimited'

- New StaticGeometry class allows you to batch up individual meshes and render thousands of them far more efficiently than if they were separate movable objects

- GL now supports render textures larger than the frame buffer (through pbuffers)

- D3D9 uses best possible filter method supported by hardware for generating Mipmaps, this can improve display quality especially when using trilinear filtering

- Support all image types that DevIL can load: bmp, gif, hdr, ico, jpeg, pnm, mng and many more

- GLX, SDL, D3D9: FSAA(Full Scene AntiAliasing) support improved

- Image codecs are now completely replaceable, if you wish to remove the use of DevIL

- Better support for 3D and compressed textures

- New and improved demos:

  - 'DynTex' shows how to procedurally generate textures using the new pixel buffer API

  - 'VolumeTex' demonstrates volume rendering and procedurally generated meshes and 3D textures

  - 'Grass' demonstrates the use of the new StaticGeometry class to batch up lots of individual meshes

  - 'Gui' has been updated to use Crazy Eddies GUI.

- Interface to RenderSystem::createWindow and RenderSystem::createRenderTexture cleaned up and made more flexible

- Support Athlon 64 in native 64-bit mode (Linux)

- Support running the OGRE core in double precision floating point mode through the use of OGRE_DOUBLE_PRECISION

- Add 'inverse transform' automatic shader parameter bindings

- MinGW/Cygwin build system using auto* tools included

- Visual C++ 2005 Beta support

Bugfixes:

- Fixed texture_view_proj shader parameter binding

- Terrain now supports texture shadows

- Fixed 4-weight hardware skinning vertex shader

- Fixed possible texture frame overflow in animated texture controller

- GLX: alt-tab now allows mouse to escape window