Files changed (2)
+<li>Hardware buffers system memory consumption reduced. Only write only access buffers allocates extra memory.</li>
+<li>Only default pool hardware buffers are re-created after device reset (Should fix resizing issues)</li>
+<li>Removed the obsolete shader generator (Now that we have the RTSS – we don’t need it anymore).</li>
+<li>Added code to support copy of vertex buffers that where allocated in system memory. (The terrain sample does such a copy).</li>
+<li>Added layered blending. Added an entity that shows the feature to the RTSS sample - a rock wall with the OGRE logo blended with the new "overlay" blend.</li>
+<li>D3D10 render system removed – the system is obsolete and all of its functionality exists in the D3D11 render system.</li>
+<li>Patch 2952444: support float1-4, short1-4, colour and ubyte4 in texture coordinates in XML converter</li>
+<li>Added optional shader cache feature: Compiled shaders can be saved to improve loading times.</li>
+<li>Introduced Unity builds: Enabling OGRE_UNITY_BUILD in CMake will significantly speed up Ogre compile times.
+<li>Allow skeletal and pose animations to be relative to a keyframe of an animation instead of the binding pose</li>
- <li>If Mesh::buildTangentVectors is called and causes vertex splits, and mesh had pose animation, make sure we fix up the poses too.</li>
- <li>Change 0 -> NULL in Dx9 Present() call, user reported issue on Intel G33/G31 GPU allegedly resolved by this (illogical, but does no harm)</li>
- <li>Fix problem in OpenGL when mixing anisotropy levels in different texture units on the same pass</li>
- <li>Prevent GLX ConfigDialog from creating empty dropdown elements which cause a crash when clicked on.</li>
- <li>PF_L8 is not likely to be a valid render target format on many cards, use PF_X8R8G8B8 as is the default for non-depth shadows.</li>
- <li>Compatibility with August 09 DirectX SDK: dxerr9->dxerr in all cases (works for older versions too)</li>
- <li>When locking a sub-area of a pixel buffer, we must remember the original lock area and not just the PixelBox that is returned (which is rebased).
- <li>Fix a problem in GL when using HardwarePixelBuffer::blit - it wasn't disabling higher texture units which could cause some incorrect results in the FBO rendered version</li>
- <li>Root::removeFrameListener would queue up removal even if the listener wasn't in the list yet, which could mean if you added it again it would get removed. Now it doesn't queue the removal if the entry isn't in the listener list already.</li>
- <li>Use PixelUtil::packColour instead of memset to initialise the contents of a null shadow texture. This bug could result in different results on nvidia / ati cards if this texture was floating-point</li>
- <li>Fix OgreOSXCocoaView causing application crash if you save the window attributes to the preferences</li>
- <li>Fix leftover texture sampler settings above fixed-function units when switching between shaders using 9+ samplers and fixed-function techniques</li>
- <li>Make it unnecessary for the parent directory to be in the search path for platform-specific subfolder includes</li>
- <li>Fix scene_depth_range and shadow_scene_depth_range when using LiSPSM or other ShadowCameraSetup classes that use custom matrices and don't use a 'real' camera position</li>
- <li>Revert revision 8591, "Early-out optimisations to setMaterialName methods, to reduce their cost if the same material name is used"
- This actually causes problems with applications that delete & recreate materials with the same name, such as Hikari. Of course, it would be better for those apps to regenerate the material in-place instead of creating a new one but since this was breaking behaviour it needs to be undone in the stable release.</li>
- <li>Fix a bug in RibbonTrail; you couldn't extend the number of chains from the amount that were initially created without problems, the ordering of the elements in mFreeChains was not consistent.</li>
- <li>FreeImage 3.9 - 3.11.0 interoperability fix; detect when FreeImage uses big-endian even on Intel Macs & use the data correctly</li>
- <li>Fix uninitialised mFullScreen in Cocoa window, and expose WINDOW and VIEW custom params as with Carbon</li>
- <li>GLSL: gracefully handle a link error during binding of parameters, so that we do not abort the render</li>
- <li>OpenGL pixel buffer: download the buffer when lock mode is anything but HBL_DISCARD, and ignore whether the buffer was created as WRITE_ONLY. For consistency with other rendersystems, WRITE_ONLY should only be a hint, and should not prevent the user reading the contents if they choose to. Previously the read buffer would always contain garbage on GL unless you removed the WRITE_ONLY, which was easy to miss because TU_DEFAULT includes it.</li>
- <li>GLSLLinkProgram::activate should not access the vertex program (for attribute mapping) without checking it exists.</li>
- <li>Enable/disable GL_VERTEX_PROGRAM_POINT_SIZE for point size attenuation when vertex programs available</li>
- <li>Workaround for broken hardware mipmap generation on Intel 915G's (at least - for the moment disable for all Intel chipsets)</li>
- <li>Fix an edge-case in D3D9 where if _canDynamicTextures returned false, the default pool would still be used even though D3DUSAGE_DYNAMIC wasn't specified, which doesn't allow locking. If D3DUSAGE_DYNAMIC could not be specified, then use the managed pool in all cases.</li>
- <li>Safety check before rebinding D3D9 textures after a device restore where user has destroyed render target but not texture.
- <li>D3D9 render texture classes had the wrong update() signature so were not protecting against device lost conditions</li>
- <li>Fix for Runtime Check Failures with VC 2003 SP1 with alpha_op_ex</li> <li>Allow OGRE to build with VC 2010, use TR1</li>
- <li>Make getCameraPosition, getCameraPositionObjectSpace and LOD camera equivalents consistent with other parameters when using camera relative rendering</li>
- <li>Fix the use of 2 scene managers with different settings on finite / infinite stencil shadow extrusion</li>
- <li>Fix Light::_getFrustumClipVolumes(...) numerical instability if infinite camera's far clip plane is used, causing light flickering if light is near camera's side frustum plane.</li>
- <li>Should propagate material scheme from primary viewport to shadow viewports so that caster/receiver materials are consistent with materials chosen for main view</li>
- <li>GpuProgramUsage::setProgramName - check the type of the program assigned matches the type of usage it's assigned to (make copy/paste errors in scripts easier to diagnose)</li>
- <li>Don't pull the AABB out of an unloaded or half-loaded Mesh - if the Mesh is being background loaded, it's possible the AABB could be half-populated and invalid.</li>
- <li>Early-out optimisations to setMaterialName methods, to reduce their cost if the same material name is used</li>
- <li>Fix blended scene animation (previously, only one animation would successfully apply, now they can be blended)</li>
- <li>Fix write overflow in GPU parameters when using a (physically) 3x4 matrix - this could occur even if the param was declared as 4x4 but cast to 3x3. </li>
- <li>Fixed calling Root::loadPlugin twice for the same plugin caused a crash at shutdown (and also double-calling of init function)</li>
- <li>Fix license statement on Fresnel demo code - all samples are supposed to be public domain / free use.</li>
- <li><b>LGPL static link exclusion</b> clause added to our official license terms. Static linking terms are now the same as dynamic linking.</li>
- <li>Win32: Correctly restore display frequency on Win32/GL, was getting overridden after restoreConfig</li>
- <li>Linux: CurrentGLContext option for GLX rendersystem should not be creating a new context.</li>
- <li>ATI: Workaround for corruptions in most recent drivers with sub-buffer updates with glMapBuffer</li>
- <li>Add support for more graceful downgrading on pre-GL 1.2 cards and other underpowered systems (Mesa should now work)</li>
- <li>Remove flushUpTo() call in CompositorChain::postTargetOperation; this happens after the begin/end of the scene and actually gets ignored anyway, D3D9 would bitch about this in debug mode</li>
- <li>Fix a potential issue with switching from fullscreen to windowed if requested size overflows</li>
- <li>Linux: Deal with Xlib.h's definition of 'Status' which clashes with ResourceGroupManager header</li>
- <li>Change to the timing of dirtying a Pass hash before a material is loaded to better support threaded material population.</li>
- <li>Fix small potential memory leak when explicitly constructing a SharedPtr with a null pointer</li>
- <li>Fix a shadow map indexing bug when using pass iteration for a specific light type and multiple light types all with shadows</li>
- <li>Fix off-by-one error in StaticGeometry::GeometryBucket::assign when checking number of vertices.</li>
- <li>Default material scheme when compiling compositors, so that quad materials get assigned correctly</li>
- <li>SceneManager::SceneMgrQueuedRenderableVisitor should be public, needed for SceneManager::setQueuedRenderableVisitor</li>
- <li>Entity::_initialise now uses needUpdate() rather than updateBounds() to update parent node so that it will work on deeper hierarchies with SceneManagers which require parent bounds to also be updated (or processed some other way).</li>
-<ul><li> <a href="http://www.ogre3d.org/wiki/index.php/NewScriptFeatures" class='external text' title="http://www.ogre3d.org/wiki/index.php/NewScriptFeatures" rel="nofollow">New script compilers</a> are enabled by default, see OGRE_USE_NEW_COMPILERS in OgreConfig.h
-</li><li> Unified script syntax (.os), can contain anything that would have been in type-specific scripts (.material, .particle etc)
-<ul><li> 'manual_named_constants' directive added for assembler shaders to allow you to associate named parameters stored in a file with assembler. The file can be created from the GpuNamedParameters from high-level source if you want to precompile them.
-</li><li> 'gpu_vendor_rule' and 'gpu_device_rule' allow you to influence the techniques which are used with inclusive/exclusive matching rules on the vendor and device name. Can help tune your materials for vendor or device-specific behaviour.
-<ul><li> Can implement default Technique setting when using a material scheme for which there isn't a specific Technique
-</li><li> Can use to change materials for all objects easily per viewport by using a new scheme name
-<ul><li> Allows pass fragment processing to be limited to a scissor rectangle of the light coverage in that pass
-</li><li> Additive texture and stencil shadows now use scissor automatically for additive colour passes, previously just used for rendering stencil shadow volumes
-</li><li> Added 'iteration_depth_bias' option to pass. Allows you to increment the depth bias on a pass by a specific amount each iteration if you wish
-</li><li> 'spotlight_viewproj_matrix' and 'spotlight_worldviewproj_matrix' added so you can use matrices from spotlights even without having set up texture shadows or an explicit texture projector
-<ul><li> Allows the use of separate blend operations for colour and alpha between rendered pixel and existing frame buffer
-<ul><li> Allows material writers to assert control over the illumination pass compilation (additive shadows)
-</li><li> You can now incorporate sequences you could not before in your additive lighting materials
-</li><li> For example, allows you to include specular effects by pulling the decal pass into the per-light pass if that works for your material (offset mapping used as an example)
-<ul><li> Causes hardware to perform gamma space to linear space conversion when sampling the texture
-</li><li> Useful only for 8-bit per channel colour textures (not floating point textures or normal maps)
-</li><li> Can improve quality results from shaders because they mostly assume calculations are done in linear space
-</li><li> You will need to convert results back to gamma space when rendering to an 8-bit per channel render target either via a shader instruction or enabling the gamma correction option in RenderWindow or on the render texture
-</li><li> Added 'transparent_sorting' option to Pass, allows you to disable depth sorting for transparencies
-</li><li> Added 'alpha_to_coverage' option to Pass, allowing you to use alpha to coverage to multisample alpha-rejected textures. Even though this is a Dx10 feature, it is available on Dx9 for recent ATI and NVIDIA cards, and OpenGL on all cards that implement it.
-</li><li> Added Camera::getCameraToViewportBoxVolume. Similar to getCameraToViewportRay but generates a PlaneBoundedVolume from a screen-space rectangle which can be used in a PlaneBoundedVolumeListSceneQuery to do rubber-band selections
-</li><li> Added Frustum::setFrustumExtents - allows you to specify the left/right/top/bottom planes manually and thus create any shape frustum you need to, even without the camera being in the centre of it
-<ul><li> An object will no longer render its debug display if set to visible (e.g. via a cascading visibility update), you have to explicitly turn on the debug display. This is available via MovableObject::setDebugDisplayEnabled and SceneNode::setDebugDisplayEnabled
-</li><li> Added visitRenderables() method - allows you to get a callback to a Renderable::Visitor class for all Renderables that this object will potentially add to the render queue. Identifies LOD and debug renderables.
-<ul><li> By default now, renormalisation of normals is automatic if there is a non-unit scale on the main world matrix rather than the Entity::setNormaliseNormals option. If the user wants to optimise this, they can prevent the SceneManager doing it in all cases by calling SceneManager::setNormaliseNormalsOnScale(false) and then explicitly enabling the option per Pass instead. In the case of an array of world matrices being used, if the first world matrix isn't a guide then the shader writer should handle the renormalisation.
-</li><li> By default now, Ogre will flip the culling mode of objects that are rendered with a negative scale (ie they are reflected by the transform of the node). This means you can now negatively scale objects and they will be rendered correctly. You can disable this behaviour by calling SceneManager::setFlipCullingOnNegativeScale(false)
-<ul><li> To define a MRT, just list all the formats one after the other in the 'texture' definition.
-</li><li> To reference a MRT subsurface later in a render_quad pass, use the optional extra 'mrtIndex' at the end of the 'input' command
-</li><li> Note: as at this time, D3D requires that all surfaces of the MRT are of the same bit depth, and GL requires them to be of the same format
-</li><li> Compositors now detect when the viewport they are attached to is using sRGB or multisample antialiasing, and apply the same settings to any intermediate textures which are having the original scene rendered to them (explicitly via a 'render_scene' pass or implicitly via 'input previous')
-</li><li> The 'texture' directive now supports specifying a size which is a multiple of the main target size. You can use 'target_width_scaled' and 'target_height_scaled', each followed by a floating-point scaling factor, so 'target_width_scaled 0.5' for example would result in a texture with a width of half the size of the target the compositor is applied to.
-<ul><li> Added new callback 'frameRenderingQueued'. This callback occurs after all rendering commands have been sent to all render targets, but before the double-buffered targets (windows) are asked to swap their buffers. This allows you to perform some useful work on the CPU in the main thread whilst the GPU chews over the queued rendering commands. On return from the callback, the buffers will be swapped. This is equivalent to running your own rendering loop in previous versions and using RenderWindow::update(false) then RenderWindow::swapBuffers separately, but it now makes the technique available in the standard render loop.
-</li><li> 'Camera relative rendering' option added so that in large scenes where you are far from the origin, precision issues on the GPU can be mitigated by only transforming objects relative to the camera. See SceneManager::setCameraRelativeRendering
-<ul><li> New TangentSpaceCalc class can be used to calculate tangents for any geometry more easily, not just Mesh
-</li><li> Now generates tangents based on a UV-area weighted, triangle angle weighted basis resulting in less biasing from small / thin triangles
-</li><li> Now has options for splitting vertices when the tangent space basis is either mirrored or rotated around a vertex.
-</li><li> Tangents can now be stored as a 4-component vector, with the 'w' component containing the parity. Multiply the binormal/bitangent you calculate in your shader by this to render models with mirrored UVs correctly.
-<ul><li> Resource now has a lightweight way to observe whether it has been reloaded since you last looked at it, via getStateCount(). Other changes known to make derived data out of date may also increment this number. This allows Entity to now pick up when Mesh has been altered and refresh itself on next render.
-</li><li> You can now query for file modification times via ResourceGroupManager::resourceModifiedTime
-<ul><li> RenderSystem capabilities can now be serialised and these configs used to emulate lesser hardware
-</li><li> More information about graphics card is exposed in this structure now, including device name, driver version and also enumerates the most common vendors
-<ul><li> Skyboxes now detect and can use materials which use the 'combinedUVW' option to cubic_texture. Allows you to use the same single combined DDS for both reflection maps and skybox (previously the skybox had to be 6 separate images)
-<ul><li> You can now request the hardware to perform linear-to-sRGB colour space conversions for you, before the blending calculation. Use the 'gamma' name-value pair option on creation of a window or the "sRGB Gamma Conversion" render system config option for the auto-window.
-</li><li> Multisample antialiasing is now supported when rendering to textures, specify the number of samples when you create the texture
-</li><li> MRTs with different bit depths are now supported if the hardware exposes the facility (check RSC_MRT_DIFFERENT_BIT_DEPTHS)
-<ul><li> Ogre can now detect the format of an image without needing a file extension, so you can load data from streams without knowing what file it came from. The Codec system has been expanded to provide support for recognising 'magic' signatures.
-</li><li> Lights can now have their own shadow far distance settings (default is to continue to use the SceneManager global one)
-<ul><li> You can now use 'skeletal blend masks' to simplify the process of combining multiple layered animations to subsets of skeletons, or temporarily masking out the application of predefined animation to given bones (e.g. in order to manually control them). You create & apply these through AnimationState.
-</li><li> AnimationTrack::Listener allows you to override interpolation and drive animation procedurally if you wish
-<ul><li> OGRE_THREAD_SUPPORT can now take 3 values, 0=no threading, 1=full background loading, 2=semithreading (background preparing). The new option allows you to use a background thread just to perform I/O or calculate data, but for the main thread still to be responsible for dealing with the rendersystem. This means less synchronisation is required (since the rendersystem can still run without any threading protection) and thus there are fewer overheads involved in using background loading, at the expense of a slightly more complicated setup.
-<ul><li> Added preRender and postRender methods that let you further customise the render operations that are performed by a specific Renderable
-<ul><li> Camera now has an optional 'LOD Camera' which can be used to make LOD decisions based on a different camera
-</li><li> Multiple textures per light are now supported, allowing techniques such as Parallel Split Shadow Maps, Dual-parabaloid Shadow Maps and Cubic Shadow Maps to be implemented
-</li><li> Implementation of Parallel Split Shadow Maps (PSSM) is included, use the new class PSSMShadowCameraSetup. Integrated shadows are required since shaders are required to pick the appropriate shadow map. See PlayPen::testTextureShadowsIntegratedPSSM for an example.
- <span style="text-decoration: underline"><a name="changessince1.6.0RC1"></a><strong>Changes since 1.6.0RC1</strong></span></p>