OGRE Wiki
Support and community documentation for Ogre3D
Ogre Forums
ogre3d.org
Log in
Username:
Password:
CapsLock is on.
Remember me (for 1 year)
Log in
Home
Tutorials
Tutorials Home
Basic Tutorials
Intermediate Tutorials
Mad Marx Tutorials
In Depth Tutorials
Older Tutorials
External Tutorials
Cookbook
Cookbook Home
CodeBank
Snippets
Experiences
Ogre Articles
Libraries
Libraries Home
Alternative Languages
Assembling A Toolset
Development Tools
OGRE Libraries
List of Libraries
Tools
Tools Home
DCC Tools
DCC Tutorials
DCC Articles
DCC Resources
Assembling a production pipeline
Development
Development Home
Roadmap
Building Ogre
Installing the Ogre SDK
Setting Up An Application
Ogre Wiki Tutorial Framework
Frequently Asked Questions
Google Summer Of Code
Help Requested
Ogre Core Articles
Community
Community Home
Projects Using Ogre
Recommended Reading
Contractors
Wiki
Immediate Wiki Tasklist
Wiki Ideas
Wiki Guidelines
Article Writing Guidelines
Wiki Styles
Wiki Page Tracker
Ogre Wiki Help
Ogre Wiki Help Overview
Help - Basic Syntax
Help - Images
Help - Pages and Structures
Help - Wiki Plugins
Toolbox
Freetags
Categories
List Pages
Structures
Trackers
Statistics
Rankings
List Galleries
Ogre Lexicon
Comments
History: DagonNotes
View page
Source of version: 24
(current)
Welcome to the ChangeLog and porting notes for OGRE 1.2.0 "((Dagon))" in progress {QUOTE(replyto="H.P. Lovecraft")}''Vast, polyphemus-like, and loathsome, it darted like a stupendous monster of nightmares to the monolith, about which it flung its gigantic scaly arms, the while it bowed its hideous head and gave vent to certain measured sounds...'' (From H. P. Lovecraft's short story "Dagon").{QUOTE} {maketoc} !!ChangeLog * __Compositing framework__ added (CompositorManager). This interface makes it possible to easily apply postprocessing and other after-effects to a viewport using shaders or stencil effects. Multiple effects can also be used in a chain if so desired. * __Compositor Scripting__ added. Compositor scripts allow post processing special effects to be defined through script instead of hard coded. Compositor scripts are loaded on startup similar to material scripts and loading occurs after material script loading. ** The Compositor Demo has been updated to show the use of both hard coded compositors and those loaded from script. * __MultiRenderTarget (MRT) support__. Shaders can now render to multiple simultaneous render textures on cards supporting this. ** Added DeferredShading demo demonstrating the use of MultiRenderTarget to do deferred shading * Change ~np~HardwarePixelBuffer::blit~/np~ prototype to be more usable (take a SharedPtr not a hard pointer) * __OpenGL changes__: ** 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 ~np~Texture::copyToTexture~/np~ for GL, which was already implemented for DX9 (useful for longer term storage of graphics rendered to a texture) * __D3D9 Changes__: ** Triple buffering enabled when vsync is enabled * __RenderTexture changes__ ** RenderTexture API overhaul {ALINK(aname="RenderTexture Changes")}more{ALINK} ** Rendering to faces of cubemaps (for realistic reflections), mipmaps and slices of 3D textures is now possible. ** ~np~RenderTarget::writeContentsToDisk~/np~ 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 ~np~MovableObject::setRenderingDistance~/np~ which operates like the same method of StaticGeometry, effectively limiting the view distance of individual objects ** ~np~MovableObject::setVisibilityFlags~/np~ controls the visibility of objects based on a mask set in ~np~SceneManager::setVisibilityMask~/np~, 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 ~np~MovableObject::setQueryFlags~/np~ and ~np~MovableObject::setVisibilityFlags~/np~ on creation of the MovableObject are now defined in the static methods ~np~MovableObject::setDefaultQueryFlags~/np~ and ~np~MovableObject::setDefaultVisibilityFlags~/np~. These defaults start out at 0xFFFFFFFF to preserve previous behaviour. * Added __radix sorting__ routines * __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 '~np~ParticleSystem::setIterationInterval~/np~' to configure iteration interval per particle system, or use '~np~ParticleSystem::setDefaultIterationInterval~/np~' 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 ~np~ParticleSystem::setDefaultNonvisibleUpdateTimeout~/np~, 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 ~np~Root::createSceneManager~/np~, 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 ~np~Root::getSceneManagerMetaDataIterator~/np~, 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 * __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 use 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 ** Unusual transparent with colour write disabled technique are now put into transparent render group. Allow rendering self-intersection object without self overlay, and still performing depth sorting for better transparent blending with other objects. * __Animation enhancements__ ** 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 ** New 'VertexAnimationTrack' allows animation of vertex positions in a VertexData instance, either in software or hardware. Comes in 2 variants, morph animation (like MD2) and pose animation (blendable poses, e.g. facial animation) ** Some optimisations * __Skinning blending enhancements__. ** Only passing bones world matrices of a subentity that are actually used, mainly purpose is support more bones in a mesh when hardware skinning is enabled. Now the hardware skinning supports limit and is applyed to actually used bones of each submesh, not mesh. And it's possible to split up the meshes to support unlimited number of bones with hardware skinning. ** Software skinning now done in object space, and additional special optimise for froze/disabled animation, kept software blended vertex data as many frames as possible. * __ManualObject added__ to make custom geometry creation more accessible ** Closely mirrors the GL immediate mode interface; ~np~create geometry using begin(); position(); normal(); texCoord(); end();~/np~ ** Builds data into regular hardware buffers for performance ** Supports all types of shadows ** Can convert the result to Mesh if desired for instancing * __Node changes__ ** Node::Listener added so you can use ~np~Node::setListener~/np~ to get callbacks when the transform changes ** ~np~Node::setInheritOrientation/getInheritOrientation~/np~ 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 changes__ ** Added a new predefined resource group called ~np~ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME~/np~ ("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 ~np~ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME~/np~ ("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 ** __~np~ResourceGroupManager::unloadUnreferencedResourcesInGroup~/np~__ now available to unload only resources which are not currently being used ** __~np~ResourceManager::unloadUnreferencedResources~/np~__ / __~np~ResourceManager::reloadUnreferencedResources~/np~__ now available to unload / reload only resources which are not currently being used * 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) * ~np~SceneManager::setWorldGeometry~/np~ now accepts a stream as input as well as a filename * CEGUI renderer updated to take advantage of CEGUI HEAD which doesn't depend on Xerces-C++ anymore * Added ~np~IndexData::optimiseVertexCache~/np~ to allow people to cache-optimise their triangle list indexes * Added pulse width modulation option to WaveformControllerFunction * Standardised projection matrix manipulation in Frustum so translation to rendersystem-specific versions is done later, uniform projectin matrix available to callers if they need it * Added off-axis perspective projection to Frustum and Camera. Related functions: ~np~Frustum::setFrustumOffset~/np~, ~np~Frustum::getFrustumOffset~/np~, ~np~Frustum::setFocalLength~/np~, ~np~Frustum::getFocalLength~/np~. * Added method to access 'virtual' (reflected if need) or 'real' (unreflected always) world orientation/position of the camera. * Added ~np~Root::setFrameSmoothingPeriod()~/np~ to let users customise smoothing of frame time fluctuations. * Every render system config options are stored to configuration file. * Added ~np~Viewport::setSkiesEnabled()~/np~ to let users hide skies for viewport individually, allow control skies displays or not more easy, especially for using multiple viewports. * VC6 & VC7.0 (2002) support discontinued; officially supported Microsoft compilers are now VC7.1 (2003) and VC8 (2005) * Direct3D7 support removed * __Platform Manager Changes__ ** Added ~np~Ogre::PlatformManager::messagePump(RenderWindow*)~/np~ 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. !!Porting notes !!!MovableObject changes * '__mName' has been promoted to MovableObject__ and thus ~np~MovableObject::getName~/np~ now has a concrete implementation. You must remove any name member variables in your subclasses, and probably any getName() implementations. Include an initialisation to MovableObject(name) in your named constructors. * __~np~SceneManager::getEntityIterator~/np~, getBillboardSetIterator, getLightIterator no longer exists__. Use SceneManager::getMovableObjectIterator("Entity") instead * __Query flags/masks__ ** Underlying type has changed from unsigned long to uint32 to be explicit about length on all systems. ** There are now 2 sets of query flags on MovableObject and masks on SceneQuery. The existing flags/masks have been reinterpreted to mean 'instance flags/masks', which are specific to the object. The second set, called 'type flags/masks' relates to the type of object. ** When a MovableObjectFactory is registered, it can request that it is allocated a type flag, which will be used by any MovableObject instances created by it. Since many factories can be plugged in independently, there is no way these flags could be unique unless allocated by the SceneManager. SceneManager will allocate flags from LSB upwards. ** Custom MovableObjects not created by factories can override getTypeFlags if they want to return a specific value anyway. Must be careful about overlap here (although you can use intentional overlap if you want to classify different types the same way). ** The highest significant bit on the type flag is reserved for world geometry. SceneManager::WORLD_GEOMETRY_QUERY_MASK has been renamed ~np~SceneManager::WORLD_GEOMETRY_TYPE_MASK~/np~ to reflect the fact that it affects matching with the type mask on a scene query, not the instance mask. ** Any custom MovableObject that is neither created from a MovableObjectFactory, nor overrides getTypeFlags, will be included in all queries since the default type flag is 0xFFFFFFFF. This preserves the previous behaviour. ** It's now important to call ~np~Root::getSceneManager~/np~ before you start creating objects through other managers like ParticleSystemManager; most probably do already but this is a definite requirement now, when it was not before. !!!Animation Changes * Animation now holds several types of tracks; to port your code which creates / reads / modifies pre 1.1.x tracks, you need to change your code as follows: ** Use NodeAnimationTrack instead of AnimationTrack, and use ~np~Animation::createNodeTrack~/np~, ~np~Animation::getNodeTrack~/np~, etc ** Use TransformKeyFrame instead of KeyFrame, and use NodeAnimationTrack::createNodeKeyFrame et al * AnimationState no longer derives from ~np~ControllerValue<Real>~/np~, because Controllers work via shared pointers which delete their contents automatically, and AnimationState is destroyed manually so you'll get a double-free condition. Use AnimationStateControllerValue now instead of AnimationState when wanting to change animations through a controller. !!!Entity changes * setRenderDetail is no longer available on Entity, instead this is all controlled via the Pass of the material as with other rendering options. It is now called setPolygonMode, previously the names used were inconsistent. * getSoftwareSkinningRequests, getSoftwareSkinningNormalsRequests, addSoftwareSkinningRequest and removeSoftwareSkinningRequest are now renamed to getSoftwareAnimationRequests, getSoftwareAnimationNormalsRequests, addSoftwareAnimationRequest and removeSoftwareAnimationRequest. * _getSkelAnimVertexData now guarantee usable only if added requests for software animation via addSoftwareAnimationRequest. Also note that the blended vertex data is now in object space instead of in world space in previous version. !!!Renderable changes * setRenderDetail is no longer available on Renderable, instead this is all controlled via the Pass of the material as with other rendering options. It is now called setPolygonMode, previously the names used were inconsistent. !!!Material Changes * ~np~Pass::setRunOncePerLight~/np~ (and getter) is now called setIterateOncePerLight, since setPassIterationCount applies per light if this option is set. * Texture coordinate transform now dealing with full 4x4 matrix always, in previous version, they are treat as 3x3 or 4x4 base on the texture type. Both of ''~np~TextureUnitState::getTextureTransform~/np~'' and ''~np~TextureUnitState::setTextureTransform~/np~'' accept/returns full 4x4 matrix now. * GPU view and projection related matrix bindings now pick-up identity matrix base on Renderable useIdentityView/useIdentityProjection. * Identity projection matrix now take care with render system depth range in both fixed-function and programmable pipe. * Fog parameters now passing to render system even if using fragment program, allow fixed-function fog applicable in some situations. !!!RenderTexture Changes * RenderTextures can be created like all other textures, with TextureManager::getSingleton().createManual. Usage parameter should be TU_RENDERTARGET * tex->getBuffer(x,y)->getRenderTarget(z) in which x is the face (for cubemaps), y is the mipmap, and z is the slice number (for rendering to 3D textures) will acquire a RenderTarget to a surface. * RenderSystem::createTexture is now deprecated * To destroy a RenderTexture, detach it from the TextureManager like you would destroy a normal texture. Removing the RenderTarget will no longer work (as there are potentially many render targets per texture) !!!Camera / Frustum Changes * The meaning of the projection matrix methods has changed to make it easier to understand what each of them do, and so that you can get hold of a completely standard projection matrix if you want to do manual operations on it. ** __getProjectionMatrix__ used to retrieve the rendersystem-specific projection matrix. It now returns a standard, right-handed projection matrix with depth range of [[-1,1] ** __getStandardProjectionMatrix__, which used to retrieve a standard right-handed projection matrix except that the depth-range was rendersystem-specific (for shaders), has been renamed __getProjectionMatrixWithRSDepth__ ** __getProjectionMatrixRS__ is a new method returns the rendersystem-specific projection matrix. This is the matrix which is sent to the pipeline. * __Custom view and / or projection matrices__ are now permitted to allow custom camera set ups if required, see setCustomViewMatrix and setCustomProjectionMatrix * setDetailLevel and getDetailLevel have been renamed setPolygonMode and getPolygonMode for consistency with other areas * getDerivedOrientation, getDerivedPosition and getDerivedDirection now respects reflected camera, their are now returns 'virtual' (reflected if need) orientation/position in the world space. __This changes may break related code if they already take reflection into account__. ** Previous derived orientation/position behavior can still access by new method __getRealOrientation__, __getRealPosition__ and __getRealDirection__, they are returns 'real' (unreflected always) world orientation, position and direction of the camera. ** If you never dealing with reflected camera, this changes never affect you. !!!SceneManager Changes * removeCamera, removeEntity, removeBillboardSet, removeLight and removeStaticGeometry, as well as their removeAll* variants, have been renamed to destroyCamera, destroyEntity etc for interface consistency (create / destroy are paired, and add / remove - in this case it was create / remove which was inconsistent and some people had trouble finding them). * SceneManagers are now managed as ''instances'' of a given SceneManager type. Instead of using ~np~Root::getSceneManager~/np~ initially you must now call ~np~Root::createSceneManager~/np~,and you can use a type mask (e.g. ST_GENERIC as before, or some bitwise combination of types), or you can use a specific type name (e.g. "OctreeSceneManager"). You can create more than one to maintain multiple separate scenes if you want. If you used getSceneManager(ST_GENERIC) before, now use __createSceneManager(ST_GENERIC)__. * ~np~Root::_getCurrentSceneManager~/np~ now _strictly_ only valid during target update since support for multiple SMs. Previously was available after getSceneManager even though the docs said it was only valid during update so you can't rely on this undocumented behaviour anymore * Custom SceneManagers must implement the new getTypeName method, and have a constructor with a 'name' String parameter. You must use the same string for ~np~SceneManager::getTypeName~/np~ and the SceneManagerFactory metadata. * Custom SceneManagers should come with a SceneManagerFactory to plug in to ~np~Root::addSceneManagerFactory~/np~. Should register in dllStartPlugin, unregister in dllShutdownPlugin. You can still plug a custom SM instance in manually if you want, but the SceneManagerFactory approach is recommended for flexibility. !!!Root changes * Automatic smoothing out of fluctuations in frame times is now disabled by default. To return to the old behaviour call ''Root::getSingleton().setFrameSmoothingPeriod(0.5);''. * Render system config options stored in its own section, allow save/restore config options for every render system now. !!!Render queue Changes * All instances of RenderQueueGroupID in parameters are now uint8 to allow values in between the standard OGRE queue numbers to be used without the compiler complaining * RenderQueueListener existing method signatures have changed, check your implementations. Note also the addition of the shadowTexturesUpdated event. !!!Render System Changes * _setRasterisationMode has been renamed _setPolygonMode for consistency with higher level functions !!!Resource manager Changes * New predefined resource group called __ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME__ ("__Internal__"). All engine internal created resources (shadow materials/textures, default materials, compositor internal resources, etc) will use this group. And this special resource group are supposed to used by engine internal only, user shouldn't modify, unload or remove the resources that in this group. * Added a new meta resource group called __~np~ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME~/np~ ("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 * __~np~ResourceGroupManager::unloadUnreferencedResourcesInGroup~/np~__ now available to unload only resources which are not currently being used * __~np~ResourceManager::unloadUnreferencedResources~/np~__ / __~np~ResourceManager::reloadUnreferencedResources~/np~__ now available to unload / reload only resources which are not currently being used !!!Billboard changes * Billboard member function setTexCoords and getTexCoords renamed to setTexcoordIndex and getTexcoordIndex, which set billboard use generated texture coordinates. Also added function setTexcoordRect to set its own custom texture coordinates, and new function isUseTexcoordRect to determinant which is being used. !!!Particle System Changes * ParticleSystem can now only be created and retrieved via SceneManager like all other MovableObject types, using the generic createMovableObject or the specific createParticleSystem. ParticleSystemManager is still used for registering emitter / affector / renderer factories and creating templates. * ~np~ParticleSystemManager::setTimeFactor~/np~ is no longer available in favour of the more generic (and therefore consistent) ~np~ControllerManager::setTimeFactor~/np~. This is more useful if you're trying to globally change the perceived time, and you still have the per-particle system speed factor for per-system adjustments anyway. * When using oriented_self, the size of particles is now always consistent and is no longer affected by particle velocity. You may need to adjust the height of your particles to compensate for this change, but particle size will now be more predictable when you have variable velocities. * ParticleSystemRenderer derived class must be override ___getSortMode__ to describing their desired sort mode. !!!Vertex element changes * Vertex colour changes ** The VET_COLOUR has been replaced by VET_COLOUR_ARGB (in D3D) and VET_COLOUR_ABGR (in GL) to make sure the internal format is unambiguous, and to allow automatic conversion. ** On loading, colour formats are automatically converted if they are not native to the rendersystem ** You can still use VET_COLOUR when creating geometry in memory, but it will be automatically changed to one of the specific variants when ~np~VertexDeclaration::addElement~/np~ is called ** If you read out VET_COLOUR from vertex buffers (say in a case statement) you need to detect the other 2 variants too. ** Use ~np~VertexElement::convertColourValue~/np~ to convert between types, and ~np~VertexElement::getBestColourElementType~/np~ to get the recommended format for the current rendersystem. ** ~np~RenderSystem::convertColourValue~/np~ is still available for packing colours into buffers but you are recommended to use ~np~VertexElement::convertColourValue~/np~ now since it's more generally applicable (works with no RenderSystem loaded) ** If you have any existing meshes that use vertex colour, run them through OgreMeshUpgrade to convert the colours to a specific type ** OgreXmlConverter defaults to writing VET_COLOUR_ARGB on Windows, and VET_COLOUR_ABGR on other platforms (conversion is seamless). If you want to change this, use the -d3d or -gl options. !!!CEGui Renderer Changes * Due to the new flexibility in SceneManager construction, you __must__ either pass the SceneManager to the OgreCEGUIRenderer constructor, or call setTargetSceneManager sometime afterwards otherwise your GUI will not render (it cannot assume which SM to use anymore) * setTargetSceneManager only takes an explicit SceneManager pointer now, there is no SceneType option anymore (since SceneType does not lead to a unique SM anymore). The same goes for the constructor. !!!Overlay changes * Overlay scripts no longer support defining 'entity' as a 3D element; if you want to use 3D elements you have to define them at runtime. This is because ownership of Entity instances is at a SceneManager level, and SceneManager instantiation is much more flexible now. !!!TextureUnit changes * Effect ET_SCROLL is replaced by ET_UVSCROLL, ET_USCROLL and ET_VSCROLL !!!Controller changes * ~np~ControllerManager::createTextureScroller~/np~ is replaced with ~np~ControllerManager::createTextureUVScroller~/np~, ~np~ControllerManager::createTextureUScroller~/np~ and ~np~ControllerManager::createTextureVScroller~/np~ !!!Misc * The SceneDetailLevel enum has been renamed PolygonMode, as have the enum values (SDL_SOLID is now PM_SOLID) * TerrainSceneManager's TerrainPageSourceListener has an additional parameter to the pageConstructed event, a SceneManager pointer, so you must change your listener signatures if you use this !!Remaining issues * Point Attenuation causes segfault on Linux / ATI, but is fine on all other hardware? !!Annotated roadmap * Code Review (Owner: temas) * Texture features (Owner: wumpus) __~np~[done]~/np~__ ** Support DDS custom mipmaps for GL and the Image class (Owner: wumpus) __~np~[done, went into 1.0.1]~/np~__ *** Compressed (DXT) mipmaps support for mipmaps needs deep changes to DevIL as it refuses to provide DXTdata on them __[done]__. This needs [http://sourceforge.net/tracker/index.php?func=detail&aid=1177785&group_id=4470&atid=304470|this] patch to DevIL ** Use GL_EXT_framebuffer_object instead of pbuffers if available __~np~[done]~/np~__ ** Better support for render to faces of cubemap textures __~np~[done]~/np~__ ** VTC texture compression for cards supporting this ** Render to multiple buffers at once (GL_ARB_draw_buffers, MRT) __~np~[done]~/np~__ *** Deferred shading demo using Manuel's postfilter framework __~np~[done]~/np~__ * Performance optimization and profiling (Owner: everyone) ** RenderState caching for GL __~np~[done, but tests show no significant speed improvement]~/np~__ ** Float radix sort for depth sorting __~np~[done - only used when there are enough transparents to make radix sorting faster]~/np~__ * XSI v4.x / v5 Exporter (Owner: sinbad) __~np~[done]~/np~__ ** Basic mesh exporting __~np~[done]~/np~__ ** Multiple UV support __~np~[done]~/np~__ ** Polygon cluster material change support __~np~[done]~/np~__ ** Mesh optimisation (index organisation, submesh merging) __~np~[done]~/np~__ ** Animation export __~np~[done]~/np~__ ** Material export __~np~[done]~/np~__ ** IK -> FK sampling __~np~[done]~/np~__ ** Shape keys / clips -> pose animation __~np~[done]~/np~__ * Customisable render queues (Owner: sinbad) __~np~[done]~/np~__ ** Specify custom render queue group invocation sequences __~np~[done]~/np~__ ** Update RenderQueueListener to be called per invocation instead of per queue, and remove the repeat / skip options (since they can be handled by the former) __~np~[done]~/np~__ ** Per queue group invocation, specify whether material render state is managed by OGRE or whether it will be left constant, thereby allowing queue invocation listeners to set global renderstate for all objects in the invocation __~np~[done]~/np~__ ** Per queue group invocation, choose between standard sorting (solids grouped by pass hash, transparents by decreasing depth) or global depth sorting. Note that differing settings for the same queue group will cause and renderables to be added to 2 separate sets of lists to cope with this. __~np~[done]~/np~__ * Billboard / Particle System enhancements (Owner: _mental_, sinbad) __~np~[done]~/np~__ ** Point particle rendering __~np~[done]~/np~__ *** Basic point rendering __~np~[done]~/np~__ *** Point sprites __~np~[done]~/np~__ *** Option to allow BBS to use point sprites if requested (has limitations to point oriented billboards, uniform size (GL has no per-vertex point size) and some max size limits (GL has a max point size) __~np~[done]~/np~__ ** Ribbon Particles (BillboardChain) __~np~[Done]~/np~__ ** Sortable billboardsets (radix sort) __~np~[done]~/np~__ ** Per-billboard texture coordinates __~np~[done]~/np~__ ** Relative positioning option __~np~[done]~/np~__ * MovableObject factories (Owner: sinbad) __~np~[done]~/np~__ ** Register MovableObjectFactory with SceneManager __~np~[done]~/np~__ ** Generalise creation of MovableObject subclasses and use with SceneQuery __~np~[done]~/np~__ * Animation enhancements (Owner: sinbad) __~np~[done]~/np~__ ** Morph animation, facial animation (morph animation combined with skeletal animation) __~np~[done]~/np~__ *** Hardware morphing __~np~[done]~/np~__ *** Software morphing __~np~[done]~/np~__ *** Combination of skeletal and morph animation __~np~[done]~/np~__ *** Exporter updates __~np~[done]~/np~__ ** Animation of any numeric value (light colours, camera fov etc) through generic tracks __~np~[In progress]~/np~__ * Texture shadow enhancements (Owner: sinbad) __~np~[in progress]~/np~__ ** Additive texture shadows __~np~[done]~/np~__ ** Post-render of shadow texture hook to allow for postprocessing __~np~[done]~/np~__ ** Clean up code so stencil vs texture, modulative vs additive branching is simpler __~np~[done]~/np~__ ** Per-light passes should support shaders e.g. normal mapping __~np~[done]~/np~__ ** Support alpha blended casters properly __~np~[done, also backported to Azathoth]~/np~__ ** Add hook to allow view / projection matrices for shadow casting to be customised by the user, as a way to implement new shadow techniques such as PSM __~np~[done]~/np~__ ** Custom fragment programs in receivers __~np~[done]~/np~__ ** Add filtering option to Demo_Shadows * Mesh file vertex colour changes __~np~[Done]~/np~__ ** Be specific about the packed colour type so serialised versions can be converted to native format on loading if required (only if non-native) __~np~[Done]~/np~__ ** Allow preferred native type to be specified on XMLConverter and flipped with MeshUpgrader __~np~[Done]~/np~__ ** XML vertex colours should be floating point separate channels __~np~[Was Done Already, clarified in docs]~/np~__ * Serialiser changes __~np~[done]~/np~__ ** Serialisers to read/write in native endian format rather than being locked to little endian with conversion on big endian platforms __~np~[Done]~/np~__ ** Automatic endianness conversions for binary formats in both directions __~np~[Done]~/np~__ * Wireframe / point rendering mode per material pass __~np~[done]~/np~__ ** Camera should override still __~np~[done]~/np~__ ** Per-object render detail removed, completely controlled through material now __~np~[done]~/np~__ * Material system Enhancements (Owner: nfz) ** allow techniques, passes to be named __~np~[done]~/np~__ ** allow texture unit states to be named __~np~[done]~/np~__ ** material can extend from a previously defined material in material script __~np~[done]~/np~__ ** Pass index number auto parameter for shaders __~np~[done]~/np~__ ** add write methods to material serializer to write out all shader bindings used within a material __~np~[done]~/np~__ ** make render system be able to re-issue draw calls without changing render state through use of pass iteration in material script __~np~[done]~/np~__ *** pass iteration number auto parameter for shaders __~np~[done]~/np~__ ** Texture alias: meshes can indicate which textures are to be used in a material. Will allow one material to be defined in a script that is used on different meshes using different textures. __~np~[done]~/np~__ ** Technique, Pass, and texture unit enable/disable __~np~[Deferred to Eihort]~/np~__ ** Mipmap LOD biasing on TextureUnitState ([http://www.ogre3d.org/phpBB2/viewtopic.php?p=109026|forum thread]) __~np~[Deferred to Eihort]~/np~__ ** materials that have techniques using gpu programs that fail to compile/link use next available technique or fall back to fixed pipeline rendering. Error messages are logged but exception is not raised which could shut down the renderer. __~np~[Deferred to Eihort]~/np~__ ** make material scripts reloadable without having to unload the materials __~np~[Deferred to Eihort]~/np~__ ** add methods to manipulate order of techniques, passes, texture unit states __~np~[Deferred to Eihort]~/np~__ ** add methods to manipulate texture frame names in Texture units. __~np~[done]~/np~__ *** remove 32 frame limit __~np~[done]~/np~__ ** make the use of matrix4x4 in material script uniform for Cg, HLSL, GLSL __~np~[done]~/np~__ ** GLSL bug fixes *** Skeletal Animation support (hardware skinning) __~np~[Deferred to Eihort]~/np~__ *** support for uniform arrays __~np~[done]~/np~__ *** fix GLSL Matrix bug in material scripts __~np~[done]~/np~__ ** Material Script Compiler __~np~[Deferred to Eihort]~/np~__ *** enhance compiler so that it can accept more flexible text source layout **** ie ~np~pass (texture_unit decal { texture "my texture.jpg" }}~/np~ *** allow names (includes texture file names) to have spaces - names with spaces have to surrounded with double quotes * Core ((Compositor|PostFilters)) framework (wumpus, sinbad) ** PostfilterManager that can assign arbitrary chains of screen post filters to a ViewPort __~np~[done]~/np~__ ** Postfilter scripting __~np~[done]~/np~__ * RenderSystem changes ** Rationalise configuration options so they're easier to set between different render systems, especially FSAA __~np~[done]~/np~__ !!Dagon Dependencies A number of the dependencies used by Ogre have been updated. * FreeType 2: went from 2.1.09 to 2.1.10 ** there is an issue with building the otv module but Ogre doesn't need it so it can be removed from the build by editing include/freetype/config/ftmodule.h and comment the following line ~pp~ FT_USE_MODULE(otv_module_class) ~/pp~ so it becomes ~pp~ //FT_USE_MODULE(otv_module_class) ~/pp~ * CEGUI: went from 0.3.0 to 0.4.0 * Devil: went from 1.6.5 to 1.6.7 !!Beyond Dagon Since Dagon is approaching release, all new ideas that can't make it into Dagon will go into the next development version after Dagon, ((EihortNotes|OGRE 1.4 aka 'Eihort')).
Search by Tags
Search Wiki by Freetags
Latest Changes
Overlay Editor
Introduction - JaJDoo Shader Guide - Basics
RT Shader System
RapidXML Dotscene Loader
One Function Ogre
IDE Eclipse
FMOD SoundManager
HDRlib
Building Ogre V2 with CMake
Ogre 2.1 FAQ
...more
Search
Find
Advanced
Search Help
Online Users
117 online users