OGRE 14.3
Object-Oriented Graphics Rendering Engine
|
Classes | |
class | Ogre::AxisAlignedBoxSceneQuery |
Specialises the SceneQuery class for querying within an axis aligned box. More... | |
class | Ogre::BaseInstanceBatchVTF |
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) This implementation has the following advantages: More... | |
class | Ogre::Camera |
A viewpoint from which the scene will be rendered. More... | |
class | Ogre::DebugDrawer |
Interface for visualising debugging the SceneManager state. More... | |
class | Ogre::DefaultAxisAlignedBoxSceneQuery |
Default implementation of AxisAlignedBoxSceneQuery. More... | |
class | Ogre::DefaultIntersectionSceneQuery |
Default implementation of IntersectionSceneQuery. More... | |
class | Ogre::DefaultPlaneBoundedVolumeListSceneQuery |
Default implementation of PlaneBoundedVolumeListSceneQuery. More... | |
class | Ogre::DefaultRaySceneQuery |
Default implementation of RaySceneQuery. More... | |
class | Ogre::DefaultShadowCameraSetup |
Implements default shadow camera setup. More... | |
class | Ogre::DefaultSphereSceneQuery |
Default implementation of SphereSceneQuery. More... | |
class | Ogre::Entity |
Defines an instance of a discrete, movable object based on a Mesh. More... | |
class | Ogre::FocusedShadowCameraSetup |
Implements the uniform shadow mapping algorithm in focused mode. More... | |
class | Ogre::Frustum |
A frustum represents a pyramid, capped at the near and far end which is used to represent either a visible area or a projection area. More... | |
class | Ogre::InstanceBatch |
InstanceBatch forms part of the new Instancing system This is an abstract class that must be derived to implement different instancing techniques (InstanceManager::InstancingTechnique) OGRE wasn't truly thought for instancing. More... | |
class | Ogre::InstanceBatchHW |
This is technique requires true instancing hardware support. More... | |
class | Ogre::InstanceBatchHW_VTF |
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) and hardware instancing. More... | |
class | Ogre::InstanceBatchShader |
This is the same technique the old InstancedGeometry implementation used (with improvements). More... | |
class | Ogre::InstanceBatchVTF |
class | Ogre::InstancedEntity |
class | Ogre::InstanceManager |
This is the main starting point for the new instancing system. More... | |
class | Ogre::IntersectionSceneQuery |
Separate SceneQuery class to query for pairs of objects which are possibly intersecting one another. More... | |
class | Ogre::IntersectionSceneQueryListener |
Alternative listener class for dealing with IntersectionSceneQuery. More... | |
struct | Ogre::IntersectionSceneQueryResult |
Holds the results of an intersection scene query (pair values). More... | |
class | Ogre::Light |
Representation of a dynamic light source in the scene. More... | |
class | Ogre::LiSPSMShadowCameraSetup |
Implements the Light Space Perspective Shadow Mapping Algorithm [17]. More... | |
class | Ogre::ManualObject |
Class providing a much simplified interface to generating manual objects with custom geometry. More... | |
class | Ogre::MovableObject |
Abstract class defining a movable object in a scene. More... | |
class | Ogre::MovableObjectFactory |
Interface definition for a factory class which produces a certain kind of MovableObject, and can be registered with Root in order to allow all clients to produce new instances of this object, integrated with the standard Ogre processing. More... | |
class | Ogre::MovablePlane |
Definition of a Plane that may be attached to a node, and the derived details of it retrieved simply. More... | |
class | Ogre::Node |
Class representing a general-purpose node an articulated scene graph. More... | |
class | Ogre::PlaneBoundedVolumeListSceneQuery |
Specialises the SceneQuery class for querying within a plane-bounded volume. More... | |
class | Ogre::PlaneOptimalShadowCameraSetup |
Implements the plane optimal shadow camera algorithm. More... | |
class | Ogre::PSSMShadowCameraSetup |
Parallel Split Shadow Map (PSSM) shadow camera setup. More... | |
class | Ogre::RaySceneQuery |
Specialises the SceneQuery class for querying along a ray. More... | |
class | Ogre::RaySceneQueryListener |
Alternative listener class for dealing with RaySceneQuery. More... | |
struct | Ogre::RaySceneQueryResultEntry |
This struct allows a single comparison of result data no matter what the type. More... | |
class | Ogre::Rectangle2D |
Allows the rendering of a simple 2D rectangle This class renders a simple 2D rectangle; this rectangle has no depth and therefore is best used with specific render queue and depth settings, like RENDER_QUEUE_BACKGROUND and 'depth_write off' for backdrops, and RENDER_QUEUE_OVERLAY and 'depth_check off' for fullscreen quads. More... | |
class | Ogre::RegionSceneQuery |
Abstract class defining a query which returns single results from a region. More... | |
class | Ogre::Renderable |
Abstract class defining the interface all renderable objects must implement. More... | |
class | Ogre::SceneManager |
Manages the organisation and rendering of a 'scene': a collection of objects and potentially world geometry. More... | |
class | Ogre::SceneManagerFactory |
Class which will create instances of a given SceneManager. More... | |
class | Ogre::SceneNode |
Class representing a node in the scene graph. More... | |
class | Ogre::SceneQuery |
A class for performing queries on a scene. More... | |
class | Ogre::SceneQueryListener |
This optional class allows you to receive per-result callbacks from SceneQuery executions instead of a single set of consolidated results. More... | |
struct | Ogre::SceneQueryResult |
Holds the results of a scene query. More... | |
class | Ogre::ShadowCameraSetup |
This class allows you to plug in new ways to define the camera setup when rendering and projecting shadow textures. More... | |
class | Ogre::ShadowCaster |
This class defines the interface that must be implemented by shadow casters. More... | |
class | Ogre::ShadowRenderable |
Class which represents the renderable aspects of a set of shadow volume faces. More... | |
struct | Ogre::ShadowTextureConfig |
Structure containing the configuration for one shadow texture. More... | |
struct | Ogre::ShadowTextureListener |
class | Ogre::SimpleRenderable |
Simple implementation of MovableObject and Renderable for single-part custom objects. More... | |
class | Ogre::SkeletonInstance |
A SkeletonInstance is a single instance of a Skeleton used by a world object. More... | |
class | Ogre::SphereSceneQuery |
Specialises the SceneQuery class for querying within a sphere. More... | |
struct | Ogre::StaticFaceGroup |
Collects a group of static i.e. More... | |
class | Ogre::StaticGeometry |
Pre-transforms and batches up meshes for efficient use as static geometry in a scene. More... | |
class | Ogre::SubEntity |
Utility class which defines the sub-parts of an Entity. More... | |
class | Ogre::UserObjectBindings |
Class that provides convenient interface to establish a linkage between custom user application objects and Ogre core classes. More... | |
struct | Ogre::ViewPoint |
Structure for holding a position & orientation pair. More... | |
struct | Ogre::VisibleObjectsBoundsInfo |
Structure collecting together information about the visible objects that have been discovered in a scene. More... | |
class | Ogre::WireBoundingBox |
Allows the rendering of a wireframe bounding box. More... | |
Variables | |
bool | Ogre::InstanceManager::BatchSettings::setting [NUM_SETTINGS] |
_OgreExport const String | Ogre::SMT_DEFAULT |
Default scene manager type name. | |
typedef std::vector<InstancedEntity*> Ogre::InstanceBatch::InstancedEntityVec |
typedef std::vector<Vector4f> Ogre::InstanceBatch::CustomParamsVec |
typedef ConstMapIterator<InstanceBatchMap> Ogre::InstanceManager::InstanceBatchMapIterator |
typedef ConstVectorIterator<InstanceBatchVec> Ogre::InstanceManager::InstanceBatchIterator |
typedef std::vector<TexturePtr> Ogre::ShadowTextureList |
typedef std::vector<ShadowTextureConfig> Ogre::ShadowTextureConfigList |
typedef std::list<MovableObject*> Ogre::SceneQueryResultMovableList |
typedef std::vector<RaySceneQueryResultEntry> Ogre::RaySceneQueryResult |
typedef std::pair<MovableObject*, MovableObject*> Ogre::SceneQueryMovableObjectPair |
typedef std::pair<MovableObject*, SceneQuery::WorldFragment*> Ogre::SceneQueryMovableObjectWorldFragmentPair |
typedef std::list<SceneQueryMovableObjectWorldFragmentPair> Ogre::SceneQueryMovableWorldFragmentIntersectionList |
typedef std::vector<ShadowRenderable*> Ogre::ShadowRenderableList |
Enumerator | |
---|---|
ShaderBased | Any SM 2.0+ InstanceBatchShader |
TextureVTF | Needs Vertex Texture Fetch & SM 3.0+ InstanceBatchVTF. |
HWInstancingBasic | Needs SM 3.0+ and HW instancing support InstanceBatchHW. |
HWInstancingVTF | Needs SM 3.0+, HW instancing support & VTF InstanceBatchHW_VTF. |
InstancingTechniquesCount |
Values to be used in setSetting() & BatchSettings::setting.
Enumerator | |
---|---|
CAST_SHADOWS | Makes all batches from same material cast shadows. |
SHOW_BOUNDINGBOX | Makes each batch to display it's bounding box. Useful for debugging or profiling. |
NUM_SETTINGS |
A set of flags that can be used to influence ShadowRenderable creation.
Ogre::InstanceBatch::InstanceBatch | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
virtual |
|
inline |
Raises an exception if trying to change it after being built.
|
inline |
|
inline |
Returns true if this technique supports skeletal animation.
A virtual function could have been used, but using a simple variable overridden by the derived class is faster than virtual call overhead. And both are clean ways of implementing it.
|
pure virtual |
Some techniques have a limit on how many instances can be done.
Sometimes even depends on the material being used.
baseSubMesh | The base submesh that will be using to build it. |
flags | Flags to pass to the InstanceManager. |
Implemented in Ogre::InstanceBatchHW, Ogre::InstanceBatchHW_VTF, Ogre::InstanceBatchShader, and Ogre::InstanceBatchVTF.
|
virtual |
Constructs all the data needed to use this batch, as well as the InstanceEntities.
Placed here because in the constructor virtual tables may not have been yet filled.
baseSubMesh | A sub mesh which the instances will be based upon from |
|
virtual |
Instancing consumes significantly more GPU memory than regular rendering methods.
However, multiple batches can share most, if not all, of the vertex & index buffers to save memory. Derived classes are free to overload this method to manipulate what to reference from Render Op. For example, Hardware based instancing uses it's own vertex buffer for the last source binding, but shares the other sources.
baseSubMesh | A sub mesh which the instances will be based upon from |
renderOperation | The RenderOp to reference. |
Reimplemented in Ogre::InstanceBatchHW, Ogre::InstanceBatchShader, and Ogre::BaseInstanceBatchVTF.
|
inline |
Returns true if it no instanced entity has been requested or all of them have been removed.
void Ogre::InstanceBatch::getInstancedEntitiesInUse | ( | InstancedEntityVec & | outEntities, |
CustomParamsVec & | outParams | ||
) |
Fills the input vector with the instances that are currently being used or were requested.
Used for defragmentation,
void Ogre::InstanceBatch::_defragmentBatch | ( | bool | optimizeCulling, |
InstancedEntityVec & | usedEntities, | ||
CustomParamsVec & | usedParams | ||
) |
optimizeCulling | true will call the DoCull version, false the NoCull |
usedEntities | Array of InstancedEntities to parent with this batch. Those reparented are removed from this input vector |
usedParams | Array of Custom parameters correlated with the InstancedEntities in usedEntities. They follow the fate of the entities in that vector. |
Called by InstancedEntity(s) to tell us we need to update the bounds (we touch the SceneNode so the SceneManager aknowledges such change)
Reimplemented in Ogre::InstanceBatchHW, and Ogre::InstanceBatchHW_VTF.
Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.
Currently only InstanceBatchHW & InstanceBatchHW_VTF support it. This option makes the batch behave pretty much like Static Geometry, but with the GPU RAM memory advantages (less VRAM, less bandwidth) and not LOD support. Very useful for billboards of trees, repeating vegetation, etc.
Reimplemented in Ogre::InstanceBatchHW, and Ogre::InstanceBatchHW_VTF.
Returns true if this batch was set as static.
Reimplemented in Ogre::InstanceBatchHW, and Ogre::InstanceBatchHW_VTF.
InstancedEntity * Ogre::InstanceBatch::createInstancedEntity | ( | ) |
Returns a pointer to a new InstancedEntity ready to use Note it's actually preallocated, so no memory allocation happens at this point.
void Ogre::InstanceBatch::removeInstancedEntity | ( | InstancedEntity * | instancedEntity | ) |
Removes an InstancedEntity from the scene retrieved with getNewInstancedEntity, putting back into a queue.
Tells whether world bone matrices need to be calculated.
This does not include bone matrices which are calculated regardless
Reimplemented in Ogre::BaseInstanceBatchVTF.
|
inline |
Tells that the list of entity instances with shared transforms has changed.
void Ogre::InstanceBatch::_setCustomParam | ( | InstancedEntity * | instancedEntity, |
unsigned char | idx, | ||
const Vector4f & | newParam | ||
) |
const Vector4f & Ogre::InstanceBatch::_getCustomParam | ( | InstancedEntity * | instancedEntity, |
unsigned char | idx | ||
) |
|
inlineoverridevirtual |
Retrieves a weak reference to the material this renderable object uses.
Note that the Renderable also has the option to override the getTechnique method to specify a particular Technique to use instead of the best one available.
Implements Ogre::Renderable.
|
inlineoverridevirtual |
Gets the render operation required to send this object to the frame buffer.
Implements Ogre::Renderable.
Returns the squared distance between the camera and this renderable.
Used to sort transparent objects. Squared distance is used to avoid having to perform a square root on the result.
Implements Ogre::Renderable.
Gets a list of lights, ordered relative to how close they are to this renderable.
Directional lights, which have no position, will always be first on this list.
Implements Ogre::Renderable.
Returns the type name of this object.
Implements Ogre::MovableObject.
Internal method to notify the object of the camera to be used for the next rendering operation.
Certain objects may want to do specific processing based on the camera position. This method notifies them in case they wish to do this.
Reimplemented from Ogre::MovableObject.
|
overridevirtual |
Retrieves the local axis-aligned bounding box for this object.
This bounding box is in local coordinates.
Implements Ogre::MovableObject.
Retrieves the radius of the origin-centered bounding sphere for this object.
Implements Ogre::MovableObject.
|
overridevirtual |
Internal method by which the movable object must add Renderable subclass instances to the rendering queue.
The engine will call this method when this object is to be rendered. The object must then create one or more Renderable subclass instances which it places on the passed in Queue for rendering.
Implements Ogre::MovableObject.
Reimplemented in Ogre::InstanceBatchHW, and Ogre::InstanceBatchHW_VTF.
|
overridevirtual |
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject will add to the render queue when asked, if any.
visitor | Pointer to a class implementing the Renderable::Visitor interface which will be called back for each Renderable which will be queued. Bear in mind that the state of the Renderable instances may not be finalised depending on when you call this. |
debugRenderables | If false, only regular renderables will be visited (those for normal display). If true, debug renderables will be included too. |
Implements Ogre::MovableObject.
Ogre::InstanceBatchHW::InstanceBatchHW | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
virtual |
|
overridevirtual |
Implements Ogre::InstanceBatch.
|
overridevirtual |
Reimplemented from Ogre::InstanceBatch.
Overloaded so that we don't perform needless updates when in static mode.
Also doing that could cause glitches with shadow mapping (since Ogre thinks we're small/bigger than we really are when displaying, or that we're somewhere else)
Reimplemented from Ogre::InstanceBatch.
Reimplemented from Ogre::InstanceBatch.
|
inlineoverridevirtual |
Returns true if this batch was set as static.
Reimplemented from Ogre::InstanceBatch.
Gets the world transform matrix / matrices for this renderable object.
If the object has any derived transforms, these are expected to be up to date as long as all the SceneNode structures have been updated before this is called.
This method will populate transform with 1 matrix if it does not use GPU vertex blending. If it does use GPU vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Implements Ogre::Renderable.
|
overridevirtual |
Overloaded to avoid updating skeletons (which we don't support), check visibility on a per unit basis and finally updated the vertex buffer.
Reimplemented from Ogre::InstanceBatch.
Ogre::InstanceBatchHW_VTF::InstanceBatchHW_VTF | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
virtual |
|
overridevirtual |
Implements Ogre::InstanceBatch.
Overloaded so that we don't perform needless updates when in static mode.
Also doing that could cause glitches with shadow mapping (since Ogre thinks we're small/bigger than we really are when displaying, or that we're somewhere else)
Reimplemented from Ogre::InstanceBatch.
Reimplemented from Ogre::InstanceBatch.
|
inlineoverridevirtual |
Returns true if this batch was set as static.
Reimplemented from Ogre::InstanceBatch.
|
overridevirtual |
Overloaded to visibility on a per unit basis and finally updated the vertex texture.
Reimplemented from Ogre::BaseInstanceBatchVTF.
Ogre::InstanceBatchShader::InstanceBatchShader | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
overridevirtual |
Implements Ogre::InstanceBatch.
|
overridevirtual |
Reimplemented from Ogre::InstanceBatch.
Gets the world transform matrix / matrices for this renderable object.
If the object has any derived transforms, these are expected to be up to date as long as all the SceneNode structures have been updated before this is called.
This method will populate transform with 1 matrix if it does not use GPU vertex blending. If it does use GPU vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Implements Ogre::Renderable.
Returns the number of world transform matrices this renderable requires.
When a renderable uses GPU vertex blending, it uses multiple world matrices instead of a single one. Each vertex sent to the pipeline can reference one or more matrices in this list with given weights. If a renderable does not use vertex blending this method returns 1, which is the default for simplicity.
Reimplemented from Ogre::Renderable.
Ogre::BaseInstanceBatchVTF::BaseInstanceBatchVTF | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
virtual |
|
overridevirtual |
Reimplemented from Ogre::InstanceBatch.
Gets the world transform matrix / matrices for this renderable object.
If the object has any derived transforms, these are expected to be up to date as long as all the SceneNode structures have been updated before this is called.
This method will populate transform with 1 matrix if it does not use GPU vertex blending. If it does use GPU vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Implements Ogre::Renderable.
|
overridevirtual |
Overloaded to be able to updated the vertex texture.
Implements Ogre::MovableObject.
Reimplemented in Ogre::InstanceBatchHW_VTF.
|
inline |
Sets the state of the usage of bone matrix lookup.
Under default condition each instance entity is assigned a specific area in the vertex texture for bone matrix data. When turned on the amount of area in the vertex texture assigned for bone matrix data will be relative to the amount of unique animation states. Instanced entities sharing the same animation state will share the same area in the matrix. The specific position of each entity is placed in the vertex data and added in a second phase in the shader.
Note this feature only works in VTF_HW for now. This value needs to be set before adding any instanced entities
|
inline |
Tells whether to use bone matrix lookup.
|
inline |
|
inline |
|
inline |
|
inlineoverridevirtual |
Reimplemented from Ogre::InstanceBatch.
Ogre::InstanceBatchVTF::InstanceBatchVTF | ( | InstanceManager * | creator, |
MeshPtr & | meshReference, | ||
const MaterialPtr & | material, | ||
size_t | instancesPerBatch, | ||
const Mesh::IndexMap * | indexToBoneMap, | ||
const String & | batchName | ||
) |
|
virtual |
|
overridevirtual |
Implements Ogre::InstanceBatch.
Ogre::InstancedEntity::InstancedEntity | ( | InstanceBatch * | batchOwner, |
uint32 | instanceID, | ||
InstancedEntity * | sharedTransformEntity = NULL |
||
) |
|
virtual |
bool Ogre::InstancedEntity::shareTransformWith | ( | InstancedEntity * | slave | ) |
Shares the entire transformation with another InstancedEntity.
This is useful when a mesh has more than one submeshes, therefore creating multiple InstanceManagers (one for each submesh). With this function, sharing makes the skeleton to be shared (less memory) and updated once (performance optimization). Note that one InstancedEntity (i.e. submesh 0) must be chosen as "master" which will share with the other instanced entities (i.e. submeshes 1-N) which are called "slaves"
Sharing does nothing if the original mesh doesn't have a skeleton When an InstancedEntity is removed (
slave | The InstancedEntity that should share with us and become our slave |
void Ogre::InstancedEntity::stopSharingTransform | ( | ) |
This function is automatically called in InstanceBatch::removeInstancedEntity
|
inline |
Returns the type name of this object.
Implements Ogre::MovableObject.
|
overridevirtual |
Retrieves the local axis-aligned bounding box for this object.
This bounding box is in local coordinates.
Implements Ogre::MovableObject.
Retrieves the radius of the origin-centered bounding sphere for this object.
Implements Ogre::MovableObject.
This is used by our batch owner to get the closest entity's depth, returns infinity when not attached to a scene node.
Overridden so we can tell the InstanceBatch it needs to update it's bounds.
Reimplemented from Ogre::MovableObject.
|
overridevirtual |
Internal method called to notify the object that it has been attached to a node.
Reimplemented from Ogre::MovableObject.
|
inlineoverridevirtual |
Do nothing, InstanceBatch takes care of this.
Implements Ogre::MovableObject.
|
inlineoverridevirtual |
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject will add to the render queue when asked, if any.
visitor | Pointer to a class implementing the Renderable::Visitor interface which will be called back for each Renderable which will be queued. Bear in mind that the state of the Renderable instances may not be finalised depending on when you call this. |
debugRenderables | If false, only regular renderables will be visited (those for normal display). If true, debug renderables will be included too. |
Implements Ogre::MovableObject.
|
inline |
AnimationState * Ogre::InstancedEntity::getAnimationState | ( | const String & | name | ) | const |
AnimationStateSet * Ogre::InstancedEntity::getAllAnimationStates | ( | void | ) | const |
Called by InstanceBatch in his _updateRenderQueue to tell us we need to calculate our bone matrices.
Sets the transformation look up number.
Set the position or the offset from the parent node if a parent node exists.
|
inline |
Retrieve the orientation.
void Ogre::InstancedEntity::setOrientation | ( | const Quaternion & | orientation, |
bool | doUpdate = true |
||
) |
Set the orientation or the offset from the parent node if a parent node exists.
Set the scale or the offset from the parent node if a parent node exists
Real Ogre::InstancedEntity::getMaxScaleCoef | ( | ) | const |
Returns the maximum derived scale coefficient among the xyz values.
void Ogre::InstancedEntity::updateTransforms | ( | ) |
Update the world transform and derived values.
|
inline |
Tells if the entity is in use.
|
inlineoverridevirtual |
Returns the world transform of the instanced entity including local transform.
Reimplemented from Ogre::MovableObject.
References Ogre::Affine3::IDENTITY.
Returns the derived position of the instanced entity including local transform.
Returns true if this object is attached to a SceneNode or TagPoint, and this SceneNode / TagPoint is currently in an active part of the scene graph.
Reimplemented from Ogre::MovableObject.
Sets the custom parameter for this instance.
If this function is never called, all instances default to Vector4::ZERO. Watch out! If you destroy an instanced entity and then create it again (remember! Instanced entities are pre-allocated) it's custom param will contain the old value when it was destroyed.
idx | of the param. In the range [0; InstanceManager::getNumCustomParams()) |
newParam | New parameter |
|
inline |
Ogre::InstanceManager::InstanceManager | ( | const String & | customName, |
SceneManager * | sceneManager, | ||
const String & | meshName, | ||
const String & | groupName, | ||
InstancingTechnique | instancingTechnique, | ||
uint16 | instancingFlags, | ||
size_t | instancesPerBatch, | ||
unsigned short | subMeshIdx, | ||
bool | useBoneMatrixLookup = false |
||
) |
Ogre::InstanceManager::~InstanceManager | ( | ) |
|
inline |
Raises an exception if trying to change it after creating the first InstancedEntity The actual value may be less if the technique doesn't support having so much.
See getMaxOrBestNumInstancesPerBatch for the usefulness of this function
instancesPerBatch | New instances per batch number |
Sets the size of the lookup table for techniques supporting bone lookup table.
Raises an exception if trying to change it after creating the first InstancedEntity. Setting this value below the number of unique (non-sharing) entity instance animations will produce a crash during runtime. Setting this value above will increase memory consumption and reduce framerate.
maxLookupTableInstances | New size of the lookup table |
Sets the number of custom parameters per instance.
Some techniques (i.e. HWInstancingBasic) support this, but not all of them. They also may have limitations to the max number. All instancing implementations assume each instance param is a Vector4 (4 floats).
This function cannot be called after the first batch has been created. Otherwise it will raise an exception. If the technique doesn't support custom params, it will raise an exception at the time of building the first InstanceBatch.
HWInstancingBasic: Each custom params adds an additional float4 TEXCOORD. HWInstancingVTF: Not implemented. (Recommendation: Implement this as an additional float4 VTF fetch) TextureVTF: Not implemented. (see HWInstancingVTF's recommendation) ShaderBased: Not supported.
numCustomParams | Number of custom parameters each instance will have. Default: 0 |
|
inline |
size_t Ogre::InstanceManager::getMaxOrBestNumInstancesPerBatch | ( | const String & | materialName, |
size_t | suggestedSize, | ||
uint16 | flags | ||
) |
Calculates the maximum (or the best amount, depending on flags) of instances per batch given the suggested size for the technique this manager was created for.
This is done automatically when creating an instanced entity, but this function in conjunction with setInstancesPerBatch allows more flexible control over the amount of instances per batch
materialName | Name of the material to base on |
suggestedSize | Suggested amount of instances per batch |
flags | InstanceManagerFlags to pass to the InstanceManager |
InstancedEntity * Ogre::InstanceManager::createInstancedEntity | ( | const String & | materialName | ) |
Creates an InstancedEntity.
This function can be useful to improve CPU speed after having too many instances created, which where now removed, thus freeing many batches with zero used Instanced Entities However the batches aren't automatically removed from memory until the InstanceManager is destroyed, or this function is called.
This function removes those batches which are completely unused (only wasting memory).
After creating many entities (which turns in many batches) and then removing entities that are in the middle of these batches, there might be many batches with many free entities.
Worst case scenario, there could be left one batch per entity. Imagine there can be 80 entities per batch, there are 80 batches, making a total of 6400 entities. Then 6320 of those entities are removed in a very specific way, which leads to having 80 batches, 80 entities, and GPU vertex shader still needs to process 6400! This is called fragmentation. This function reparents the InstancedEntities to fewer batches, in this case leaving only one batch with 80 entities
optimizeCulling | When true, entities close together will be reorganized in the same batch for more efficient CPU culling. This can take more CPU time. You want this to be false if you now you're entities are moving very randomly which tends them to get separated and spread all over the scene (which nullifies any CPU culling) |
void Ogre::InstanceManager::setSetting | ( | BatchSettingId | id, |
bool | enabled, | ||
const String & | materialName = BLANKSTRING |
||
) |
Applies a setting for all batches using the same material.
If the material name hasn't been used, the settings are still stored This allows setting up batches before they get even created.
setSetting(InstanceManager::CAST_SHADOWS, false, "")
disables shadow casting for all instanced entities (see MovableObject::setCastShadows) setSetting(InstanceManager::SHOW_BOUNDINGBOX, true, "MyMat")
will display the bounding box of the batch (not individual InstancedEntities) from all batches using material "MyMat" id | BatchSettingId to setup |
enabled | Boolean value. It's meaning depends on the id. |
materialName | When Blank, the setting is applied to all existing materials |
bool Ogre::InstanceManager::getSetting | ( | BatchSettingId | id, |
const String & | materialName | ||
) | const |
If settings for the given material didn't exist, default value is returned.
Returns true if settings were already created for the given material name.
If false is returned, it means getSetting will return default settings.
Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.
Currently only InstanceBatchHW & InstanceBatchHW_VTF support it. This option makes the batch behave pretty much like Static Geometry, but with the GPU RAM memory advantages (less VRAM, less bandwidth) and not LOD support. Very useful for billboards of trees, repeating vegetation, etc.
void Ogre::InstanceManager::_addDirtyBatch | ( | InstanceBatch * | dirtyBatch | ) |
Called by an InstanceBatch when it requests their bounds to be updated for proper culling.
dirtyBatch | The batch which is dirty, usually same as caller. |
Called by SceneManager when we told it we have at least one dirty batch.
|
inline |
Get non-updateable iterator over instance batches per material.
InstanceBatchIterator Ogre::InstanceManager::getInstanceBatchIterator | ( | const String & | materialName | ) | const |
Get non-updateable iterator over instance batches for given material.
Each InstanceBatch pointer may be modified for low level usage (i.e. setCustomParameter), but there's no synchronization mechanism when multithreading or creating more instances, that's up to the user.
_OgreExport bool Ogre::operator== | ( | const ShadowTextureConfig & | lhs, |
const ShadowTextureConfig & | rhs | ||
) |
Referenced by Ogre::DualQuaternion::operator!=(), Ogre::Matrix3::operator!=(), and Ogre::Quaternion::operator!=().
_OgreExport bool Ogre::operator!= | ( | const ShadowTextureConfig & | lhs, |
const ShadowTextureConfig & | rhs | ||
) |
bool Ogre::InstanceManager::BatchSettings::setting[NUM_SETTINGS] |
|
extern |
Default scene manager type name.
Referenced by Ogre::Root::createSceneManager(), and Ogre::Root::createSceneManager().