OGRE (Object-Oriented Graphics Rendering Engine)

Change Log

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 the Eihort 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, all world / view transforms now 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
- WindowEventUtilities introduced

- 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