OGRE 2.1
Object-Oriented Graphics Rendering Engine
Loading...
Searching...
No Matches

Namespaces

namespace  Ogre::SceneFlags
 
namespace  Ogre::v1
 
namespace  Ogre::VisibilityFlags
 

Classes

class  Ogre::AxisAlignedBoxSceneQuery
 Specialises the SceneQuery class for querying within an axis aligned box. More...
 
struct  Ogre::BuildLightListRequest
 
class  Ogre::Camera
 A viewpoint from which the scene will be rendered. More...
 
class  Ogre::CompositorManager2
 Main system for managing Render Targets through the use of nodes. More...
 
class  Ogre::CompositorPassProvider
 Base class that users can derive from in order to implement custom passes for the compositor. More...
 
struct  Ogre::CullFrustumRequest
 All variables are read-only for the worker threads. 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::DefaultSceneFormatListener
 Default implementation that prevents a SceneNode from being exported if the only attached objects. More...
 
class  Ogre::DefaultSceneManager
 Default scene manager. More...
 
class  Ogre::DefaultSceneManagerFactory
 Factory for default scene manager. More...
 
class  Ogre::DefaultShadowCameraSetup
 Implements default shadow camera setup. More...
 
class  Ogre::DefaultSphereSceneQuery
 Default implementation of SphereSceneQuery. More...
 
class  Ogre::FocusedShadowCameraSetup
 Implements the uniform shadow mapping algorithm in focused mode. More...
 
struct  Ogre::InstanceBatchCullRequest
 
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::Item
 Defines an instance of a discrete, movable object based on a Mesh. More...
 
class  Ogre::ItemFactory
 FItemy object for creating Item instances. More...
 
class  Ogre::Light
 Representation of a dynamic light source in the scene. More...
 
class  Ogre::LightFactory
 Factory object for creating Light instances. 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::NullEntity
 
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::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::RenderableAnimated
 
class  Ogre::SceneFormatBase
 
class  Ogre::SceneFormatExporter
 
class  Ogre::SceneFormatImporter
 
class  Ogre::SceneFormatListener
 Override this listener if you want to filter which objects get exported. More...
 
class  Ogre::SceneManager
 Manages the organisation and rendering of a 'scene' i.e. More...
 
class  Ogre::SceneManagerEnumerator
 Enumerates the SceneManager classes available to applications. More...
 
class  Ogre::SceneManagerFactory
 Class which will create instances of a given SceneManager. More...
 
struct  Ogre::SceneManagerMetaData
 Structure containing information about a scene manager. 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::ShadowVolumeExtrudeProgram
 Static class containing source for vertex programs for extruding shadow volumes. 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::SubItem
 Utility class which defines the sub-parts of an Item. More...
 
struct  Ogre::UpdateLodRequest
 
struct  Ogre::UpdateTransformRequest
 
class  Ogre::UserObjectBindings
 Class that provides convenient interface to establish a linkage between custom user application objects and Ogre core classes. More...
 
class  Ogre::v1::BaseInstanceBatchVTF
 Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) This implementation has the following advantages: Supports huge amount of instances per batch Supports skinning even with huge ammounts of instances per batch Doesn't need shader constants registers. More...
 
class  Ogre::v1::Entity
 Defines an instance of a discrete, movable object based on a Mesh. More...
 
class  Ogre::v1::EntityFactory
 Factory object for creating Entity instances. More...
 
class  Ogre::v1::InstanceBatch
 InstanceBatch forms part of the new Instancing system This is an abstract class that must be derived to implement different instancing techniques (. More...
 
class  Ogre::v1::InstanceBatchHW
 This is technique requires true instancing hardware support. More...
 
class  Ogre::v1::InstanceBatchHW_VTF
 Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) and hardware instancing. More...
 
class  Ogre::v1::InstanceBatchShader
 This is the same technique the old "InstancedGeometry" implementation used (with improvements). More...
 
class  Ogre::v1::InstanceBatchVTF
 
class  Ogre::v1::InstancedEntity
 
class  Ogre::v1::InstanceManager
 This is the main starting point for the new instancing system. More...
 
struct  Ogre::v1::InstanceManagerCmp
 
class  Ogre::v1::ManualObject
 Class providing a much simplified interface to generating manual objects with custom geometry. More...
 
class  Ogre::v1::ManualObjectFactory
 Factory object for creating ManualObject instances. More...
 
class  Ogre::v1::OldNode
 Class representing a general-purpose OldNode an articulated scene graph. More...
 
class  Ogre::v1::OldSkeletonInstance
 A OldSkeletonInstance is a single instance of a Skeleton used by a world object. More...
 
class  Ogre::v1::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 'depth_write off' materials. More...
 
class  Ogre::v1::Rectangle2DFactory
 Factory object for creating Entity instances. More...
 
class  Ogre::v1::SimpleRenderable
 Simple implementation of MovableObject and Renderable for single-part custom objects. More...
 
class  Ogre::v1::StaticGeometry
 Pre-transforms and batches up meshes for efficient use as static geometry in a scene. More...
 
class  Ogre::v1::SubEntity
 Utility class which defines the sub-parts of an Entity. More...
 
class  Ogre::v1::WireBoundingBox
 Allows the rendering of a wireframe bounding box. More...
 
struct  Ogre::ViewPoint
 Structure for holding a position & orientation pair. More...
 

Typedefs

typedef vector< Vector4 >::type Ogre::v1::InstanceBatch::CustomParamsVec
 
typedef ConstVectorIterator< InstanceBatchVecOgre::v1::InstanceManager::InstanceBatchIterator
 
typedef ConstMapIterator< InstanceBatchMapOgre::v1::InstanceManager::InstanceBatchMapIterator
 
typedef FastArray< InstancedEntity * > Ogre::v1::InstanceBatch::InstancedEntityArray
 
typedef vector< InstancedEntity * >::type Ogre::v1::InstanceBatch::InstancedEntityVec
 
typedef vector< RaySceneQueryResultEntry >::type Ogre::RaySceneQueryResult
 
typedef list< SceneQueryMovableObjectPair >::type Ogre::SceneQueryMovableIntersectionList
 
typedef std::pair< MovableObject *, MovableObject * > Ogre::SceneQueryMovableObjectPair
 
typedef std::pair< MovableObject *, SceneQuery::WorldFragment * > Ogre::SceneQueryMovableObjectWorldFragmentPair
 
typedef list< SceneQueryMovableObjectWorldFragmentPair >::type Ogre::SceneQueryMovableWorldFragmentIntersectionList
 
typedef list< MovableObject * >::type Ogre::SceneQueryResultMovableList
 
typedef list< SceneQuery::WorldFragment * >::type Ogre::SceneQueryResultWorldFragmentList
 
typedef uint16 Ogre::SceneTypeMask
 Bitmask containing scene types.
 
typedef FastArray< MovableObject::MovableObjectArrayOgre::VisibleObjectsPerRq
 
typedef FastArray< VisibleObjectsPerRqOgre::VisibleObjectsPerThreadArray
 

Enumerations

enum  Ogre::v1::InstanceManager::BatchSettingId { Ogre::v1::InstanceManager::CAST_SHADOWS = 0 , Ogre::v1::InstanceManager::SHOW_BOUNDINGBOX , Ogre::v1::InstanceManager::NUM_SETTINGS }
 Values to be used in setSetting() & BatchSettings::setting. More...
 
enum  Ogre::FaceGroupType { Ogre::FGT_FACE_LIST , Ogre::FGT_PATCH , Ogre::FGT_UNKNOWN }
 A type of face group, i.e. More...
 
enum  Ogre::v1::InstanceManager::InstancingTechnique {
  Ogre::v1::InstanceManager::ShaderBased , Ogre::v1::InstanceManager::TextureVTF , Ogre::v1::InstanceManager::HWInstancingBasic , Ogre::v1::InstanceManager::HWInstancingVTF ,
  Ogre::v1::InstanceManager::InstancingTechniquesCount
}
 
enum  Ogre::InstancingThreadedCullingMethod { Ogre::INSTANCING_CULLING_SINGLETHREAD , Ogre::INSTANCING_CULLING_THREADED }
 There are two Instancing techniques that perform culling of their own: HW Basic HW VTF Frustum culling is highly parallelizable & scalable. More...
 
enum  Ogre::SceneType {
  Ogre::ST_GENERIC = 1 , Ogre::ST_EXTERIOR_CLOSE = 2 , Ogre::ST_EXTERIOR_FAR = 4 , Ogre::ST_EXTERIOR_REAL_FAR = 8 ,
  Ogre::ST_INTERIOR = 16
}
 Classification of a scene to allow a decision of what type of SceenManager to provide back to the application. More...
 
enum  Ogre::v1::InstanceBatch::SkeletalAnimationMode { Ogre::v1::InstanceBatch::SKELETONS_NOT_SUPPORTED , Ogre::v1::InstanceBatch::SKELETONS_SUPPORTED , Ogre::v1::InstanceBatch::SKELETONS_LUT }
 

Functions

 Ogre::v1::BaseInstanceBatchVTF::BaseInstanceBatchVTF (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstanceManager::BatchSettings::BatchSettings ()
 
 Ogre::v1::InstanceBatch::InstanceBatch (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstanceBatchHW::InstanceBatchHW (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstanceBatchHW_VTF::InstanceBatchHW_VTF (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstanceBatchShader::InstanceBatchShader (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstanceBatchVTF::InstanceBatchVTF (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap)
 
 Ogre::v1::InstancedEntity::InstancedEntity (IdType id, ObjectMemoryManager *objectMemoryManager, InstanceBatch *batchOwner, uint32 instanceID, BoneMemoryManager *boneMemoryManager, InstancedEntity *sharedTransformEntity=NULL)
 
 Ogre::v1::InstanceManager::InstanceManager (IdString customName, SceneManager *sceneManager, const String &meshName, const String &groupName, InstancingTechnique instancingTechnique, uint16 instancingFlags, size_t instancesPerBatch, unsigned short subMeshIdx, bool useBoneMatrixLookup=false)
 
 Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::SendAllAnimatedTransformsToTexture (float *RESTRICT_ALIAS dstPtr, size_t floatsPerEntity, size_t entitiesPerPadding, size_t widthFloatsPadding, const Mesh::IndexMap *indexMap)
 
 Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::SendAllDualQuatTexture (float *RESTRICT_ALIAS dstPtr, size_t floatsPerEntity, size_t entitiesPerPadding, size_t widthFloatsPadding, const Mesh::IndexMap *indexMap)
 
 Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::SendAllLUTToTexture (float *RESTRICT_ALIAS dstPtr, size_t floatsPerEntity, size_t entitiesPerPadding, size_t widthFloatsPadding, const Mesh::IndexMap *indexMap, size_t numLutEntries)
 
 Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::SendAllSingleTransformsToTexture (float *RESTRICT_ALIAS dstPtr, size_t floatsPerEntity, size_t entitiesPerPadding, size_t widthFloatsPadding)
 
 Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::TransformsToTexture (float *RESTRICT_ALIAS dstPtr, size_t floatsPerEntity, size_t entitiesPerPadding, size_t widthFloatsPadding)
 
virtual Ogre::v1::BaseInstanceBatchVTF::~BaseInstanceBatchVTF ()
 
virtual Ogre::v1::InstanceBatch::~InstanceBatch ()
 
virtual Ogre::v1::InstanceBatchHW::~InstanceBatchHW ()
 
virtual Ogre::v1::InstanceBatchHW_VTF::~InstanceBatchHW_VTF ()
 
virtual Ogre::v1::InstanceBatchShader::~InstanceBatchShader ()
 
virtual Ogre::v1::InstanceBatchVTF::~InstanceBatchVTF ()
 
virtual Ogre::v1::InstancedEntity::~InstancedEntity ()
 
virtual Ogre::v1::InstanceManager::~InstanceManager ()
 
void Ogre::v1::InstanceManager::_addDirtyStaticBatch (InstanceBatch *dirtyBatch)
 Called by an InstanceBatch when it requests their bounds to be updated for proper culling.
 
void Ogre::v1::InstanceManager::_addToDynamicBatchList (InstanceBatch *dynamicBatch)
 Kees the batch in the dynamic batch list so that it gets updated every frame.
 
void Ogre::v1::InstanceBatchHW_VTF::_boundsDirty (void)
 
void Ogre::v1::InstanceBatch::_defragmentBatch (bool optimizeCulling, InstancedEntityVec &usedEntities, CustomParamsVec &usedParams)
 
void Ogre::v1::InstanceBatch::_defragmentBatchDiscard (void)
 
const Vector4Ogre::v1::InstanceBatch::_getCustomParam (InstancedEntity *instancedEntity, unsigned char idx)
 
const Mesh::IndexMapOgre::v1::InstanceBatch::_getIndexToBoneMap () const
 
MeshPtrOgre::v1::InstanceBatch::_getMeshRef ()
 
const Ogre::v1::MeshPtrOgre::v1::InstanceBatch::_getMeshReference (void) const
 
InstanceBatchOgre::v1::InstancedEntity::_getOwner () const
 
void Ogre::v1::InstanceBatch::_markTransformSharingDirty ()
 Tells that the list of entity instances with shared transforms has changed.
 
virtual void Ogre::v1::InstancedEntity::_notifyAttached (Node *parent)
 Overloaded so we can register ourselves for updating our animations.
 
virtual void Ogre::v1::InstancedEntity::_notifyParentNodeMemoryChanged (void)
 @See Node::_callMemoryChangeListeners
 
virtual void Ogre::v1::InstanceBatch::_notifyStaticDirty (void)
 Called by InstancedEntity(s) or directly to tell us we need to update the bounds Should only useful if this batch is static.
 
virtual void Ogre::v1::InstancedEntity::_notifyStaticDirty (void) const
 Called by SceneManager when it is telling we're a static MovableObject being dirty Don't call this directly.
 
void Ogre::v1::InstanceManager::_removeFromDynamicBatchList (InstanceBatch *batch)
 Called when a previously dynamic InstanceBatch went static (.
 
void Ogre::v1::InstanceBatch::_setCustomParam (InstancedEntity *instancedEntity, unsigned char idx, const Vector4 &newParam)
 
void Ogre::v1::InstanceBatch::_setInstancesPerBatch (size_t instancesPerBatch)
 Raises an exception if trying to change it after being built.
 
SkeletalAnimationMode Ogre::v1::InstanceBatch::_supportsSkeletalAnimation () const
 Returns true if this technique supports skeletal animation.
 
void Ogre::v1::InstanceBatch::_updateBounds (void)
 
void Ogre::v1::InstanceManager::_updateDirtyBatches (void)
 Called by SceneManager every frame.
 
void Ogre::v1::InstanceManager::_updateDirtyBatchesThread (size_t threadIdx)
 Called by SceneManager every frame from multiple threads.
 
void Ogre::v1::InstanceBatch::_updateEntitiesBoundsThread (size_t threadIdx)
 Updates the bounds of only our entities from multiple threads.
 
virtual void Ogre::v1::InstanceBatchHW::_updateRenderQueue (RenderQueue *queue, Camera *camera, const Camera *lodCamera)
 Overloaded to avoid updating skeletons (which we don't support), check visibility on a per unit basis and finally updated the vertex buffer.
 
virtual void Ogre::v1::InstanceBatchHW_VTF::_updateRenderQueue (RenderQueue *queue, Camera *camera, const Camera *lodCamera)
 Overloaded to visibility on a per unit basis and finally updated the vertex texture.
 
void Ogre::v1::BaseInstanceBatchVTF::_updateRenderQueue (RenderQueue *queue, Camera *camera, const Camera *lodCamera)
 Overloaded to be able to updated the vertex texture.
 
void Ogre::v1::InstancedEntity::_updateRenderQueue (RenderQueue *queue, Camera *camera, const Camera *lodCamera)
 Do nothing, InstanceBatch takes care of this.
 
virtual RenderOperation Ogre::v1::InstanceBatch::build (const SubMesh *baseSubMesh)
 Constructs all the data needed to use this batch, as well as the InstanceEntities.
 
virtual void Ogre::v1::InstanceBatch::buildFrom (const SubMesh *baseSubMesh, const RenderOperation &renderOperation)
 Instancing consumes significantly more GPU memory than regular rendering methods.
 
void Ogre::v1::InstanceBatchHW::buildFrom (const SubMesh *baseSubMesh, const RenderOperation &renderOperation)
 
void Ogre::v1::InstanceBatchShader::buildFrom (const SubMesh *baseSubMesh, const RenderOperation &renderOperation)
 
void Ogre::v1::BaseInstanceBatchVTF::buildFrom (const SubMesh *baseSubMesh, const RenderOperation &renderOperation)
 
size_t Ogre::v1::InstanceBatchHW::calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const
 
size_t Ogre::v1::InstanceBatchHW_VTF::calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const
 
size_t Ogre::v1::InstanceBatchShader::calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const
 
size_t Ogre::v1::InstanceBatchVTF::calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const
 
virtual size_t Ogre::v1::InstanceBatch::calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const =0
 Some techniques have a limit on how many instances can be done.
 
void Ogre::v1::InstanceManager::cleanupEmptyBatches (void)
 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.
 
InstancedEntityOgre::v1::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.
 
InstancedEntityOgre::v1::InstanceManager::createInstancedEntity (const String &materialName, SceneMemoryMgrTypes sceneType=SCENE_DYNAMIC)
 Creates an InstancedEntity based on an existing InstanceManager (.
 
void Ogre::v1::InstanceManager::defragmentBatches (bool optimizeCulling)
 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.
 
bool Ogre::v1::BaseInstanceBatchVTF::forceOneWeight () const
 
const AxisAlignedBoxOgre::v1::InstancedEntity::getBoundingBox (void) const
 
const Vector4Ogre::v1::InstancedEntity::getCustomParam (unsigned char idx)
 
InstanceBatchIterator Ogre::v1::InstanceManager::getInstanceBatchIterator (const String &materialName, SceneMemoryMgrTypes sceneType) const
 Get non-updateable iterator over instance batches for given material.
 
InstanceBatchMapIterator Ogre::v1::InstanceManager::getInstanceBatchMapIterator (void) const
 Get non-updateable iterator over instance batches per material.
 
void Ogre::v1::InstanceBatch::getInstancedEntitiesInUse (InstancedEntityVec &outEntities, CustomParamsVec &outParams)
 Fills the input vector with the instances that are currently being used or were requested.
 
InstancingTechnique Ogre::v1::InstanceManager::getInstancingTechnique () const
 
const LightListOgre::v1::InstanceBatch::getLights (void) const
 Gets a list of lights, ordered relative to how close they are to this renderable.
 
virtual size_t Ogre::v1::BaseInstanceBatchVTF::getMaxLookupTableInstances () const
 
size_t Ogre::v1::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.
 
const StringOgre::v1::InstanceBatch::getMovableType (void) const
 Returns the type name of this object.
 
const StringOgre::v1::InstancedEntity::getMovableType (void) const
 Returns the type name of this object.
 
const IdString Ogre::v1::InstanceManager::getName () const
 
unsigned char Ogre::v1::InstanceManager::getNumCustomParams () const
 
unsigned short Ogre::v1::InstanceBatchHW::getNumWorldTransforms (void) const
 Returns the number of world transform matrices this renderable requires.
 
unsigned short Ogre::v1::InstanceBatchShader::getNumWorldTransforms (void) const
 Returns the number of world transform matrices this renderable requires.
 
unsigned short Ogre::v1::BaseInstanceBatchVTF::getNumWorldTransforms (void) const
 Returns the number of world transform matrices this renderable requires.
 
void Ogre::v1::InstanceBatch::getRenderOperation (RenderOperation &op, bool casterPass)
 Gets the render operation required to send this object to the frame buffer.
 
SceneManagerOgre::v1::InstanceManager::getSceneManager () const
 
bool Ogre::v1::InstanceManager::getSetting (BatchSettingId id, IdString materialName) const
 If settings for the given material didn't exist, default value is returned.
 
SkeletonInstanceOgre::v1::InstancedEntity::getSkeleton (void) const
 
Real Ogre::v1::InstanceBatch::getSquaredViewDepth (const Camera *cam) const
 
Real Ogre::v1::InstancedEntity::getSquaredViewDepth (const Camera *cam) const
 This is used by our batch owner to get the closest entity's depth, returns infinity when not attached to a scene node.
 
void Ogre::v1::InstanceBatchHW::getWorldTransforms (Matrix4 *xform) const
 Gets the world transform matrix / matrices for this renderable object.
 
void Ogre::v1::InstanceBatchShader::getWorldTransforms (Matrix4 *xform) const
 Gets the world transform matrix / matrices for this renderable object.
 
void Ogre::v1::BaseInstanceBatchVTF::getWorldTransforms (Matrix4 *xform) const
 Gets the world transform matrix / matrices for this renderable object.
 
bool Ogre::v1::InstanceManager::hasSettings (IdString materialName) const
 Returns true if settings were already created for the given material name.
 
bool Ogre::v1::InstancedEntity::hasSkeleton (void) const
 
virtual void Ogre::v1::InstanceBatchHW::instanceBatchCullFrustumThreaded (const Camera *frustum, const Camera *lodCamera, uint32 combinedVisibilityFlags)
 
virtual void Ogre::v1::InstanceBatchHW_VTF::instanceBatchCullFrustumThreaded (const Camera *frustum, const Camera *lodCamera, uint32 combinedVisibilityFlags)
 
bool Ogre::v1::InstanceBatch::isBatchFull (void) const
 
bool Ogre::v1::InstanceBatch::isBatchUnused (void) const
 Returns true if it no instanced entity has been requested or all of them have been removed.
 
virtual bool Ogre::v1::InstancedEntity::isInScene (void) const
 
bool Ogre::v1::InstancedEntity::isInUse () const
 Tells if the entity is in use.
 
bool Ogre::v1::InstanceManagerCmp::operator() (const InstanceManager *a, const InstanceManager *b) const
 
bool Ogre::v1::InstanceManagerCmp::operator() (const InstanceManager *a, IdString name) const
 
FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::operator() (const MovableObject *mo)
 
FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::operator() (const MovableObject *mo)
 
FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::operator() (const MovableObject *mo)
 
FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::operator() (const MovableObject *mo)
 
bool Ogre::v1::InstanceManagerCmp::operator() (IdString name, const InstanceManager *a) const
 
void Ogre::v1::InstanceBatch::removeInstancedEntity (InstancedEntity *instancedEntity)
 Removes an InstancedEntity from the scene retrieved with getNewInstancedEntity, putting back into a queue.
 
void Ogre::v1::InstanceManager::setBatchesAsStatic (bool bStatic)
 Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.
 
void Ogre::v1::BaseInstanceBatchVTF::setBoneDualQuaternions (bool enable)
 
void Ogre::v1::BaseInstanceBatchVTF::setBoneMatrixLookup (bool enable, size_t maxLookupTableInstances)
 Sets the state of the usage of bone matrix lookup.
 
void Ogre::v1::InstancedEntity::setCustomParam (unsigned char idx, const Vector4 &newParam)
 Sets the custom parameter for this instance.
 
void Ogre::v1::BaseInstanceBatchVTF::setForceOneWeight (bool enable)
 
void Ogre::v1::InstanceManager::setInstancesPerBatch (size_t instancesPerBatch)
 Raises an exception if trying to change it after creating the first InstancedEntity.
 
void Ogre::v1::InstanceManager::setMaxLookupTableInstances (size_t maxLookupTableInstances)
 Sets the size of the lookup table for techniques supporting bone lookup table.
 
void Ogre::v1::InstanceManager::setNumCustomParams (unsigned char numCustomParams)
 Sets the number of custom parameters per instance.
 
void Ogre::v1::InstanceManager::setSetting (BatchSettingId id, bool enabled, IdString materialName=IdString())
 Applies a setting for all batches using the same material_ existing ones and those that will be created in the future.
 
bool Ogre::v1::InstanceBatch::setStatic (bool bStatic)
 Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.
 
void Ogre::v1::InstancedEntity::setTransformLookupNumber (uint16 num)
 Sets the transformation look up number.
 
void Ogre::v1::BaseInstanceBatchVTF::setUseOneWeight (bool enable)
 
bool Ogre::v1::InstancedEntity::shareTransformWith (InstancedEntity *slave)
 Shares the entire transformation with another InstancedEntity.
 
void Ogre::v1::InstancedEntity::stopSharingTransform ()
 
bool Ogre::v1::BaseInstanceBatchVTF::useBoneDualQuaternions () const
 
bool Ogre::v1::BaseInstanceBatchVTF::useBoneMatrixLookup () const
 Tells whether to use bone matrix lookup.
 
bool Ogre::v1::BaseInstanceBatchVTF::useOneWeight () const
 

Variables

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::boneIdxEnd
 
Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::boneIdxEnd
 
Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::boneIdxEnd
 
Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::boneIdxStart
 
Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::boneIdxStart
 
Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::boneIdxStart
 
float *RESTRICT_ALIAS Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mDest
 
size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mEntitiesPerPadding
 
size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mFloatsPerEntity
 
size_t Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::mInstancesWritten
 
size_t Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::mInstancesWritten
 
size_t Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::mInstancesWritten
 
size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mWidthFloatsPadding
 
vector< bool >::type Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::mWrittenPositions
 
bool Ogre::v1::InstanceManager::BatchSettings::setting [NUM_SETTINGS]
 

Friends

class Ogre::v1::InstancedEntity::BaseInstanceBatchVTF
 
class Ogre::v1::InstancedEntity::InstanceBatch
 
class Ogre::v1::InstancedEntity::InstanceBatchHW
 
class Ogre::v1::InstancedEntity::InstanceBatchHW_VTF
 
class Ogre::v1::InstancedEntity::InstanceBatchShader
 

Detailed Description

Typedef Documentation

◆ CustomParamsVec

◆ InstanceBatchIterator

◆ InstanceBatchMapIterator

◆ InstancedEntityArray

◆ InstancedEntityVec

◆ RaySceneQueryResult

◆ SceneQueryMovableIntersectionList

◆ SceneQueryMovableObjectPair

◆ SceneQueryMovableObjectWorldFragmentPair

◆ SceneQueryMovableWorldFragmentIntersectionList

◆ SceneQueryResultMovableList

◆ SceneQueryResultWorldFragmentList

◆ SceneTypeMask

Bitmask containing scene types.

◆ VisibleObjectsPerRq

◆ VisibleObjectsPerThreadArray

Enumeration Type Documentation

◆ BatchSettingId

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 

◆ FaceGroupType

A type of face group, i.e.

face list of procedural etc

Enumerator
FGT_FACE_LIST 
FGT_PATCH 
FGT_UNKNOWN 

◆ InstancingTechnique

Enumerator
ShaderBased 

Any SM 2.0+.

See also
InstanceBatchShader
TextureVTF 

Needs Vertex Texture Fetch & SM 3.0+.

See also
InstanceBatchVTF
HWInstancingBasic 

Needs SM 3.0+ and HW instancing support.

See also
InstanceBatchHW
HWInstancingVTF 

Needs SM 3.0+, HW instancing support & VTF.

See also
InstanceBatchHW_VTF
InstancingTechniquesCount 

◆ InstancingThreadedCullingMethod

There are two Instancing techniques that perform culling of their own: HW Basic HW VTF Frustum culling is highly parallelizable & scalable.

However, we first cull InstanceBatches & regular entities, then ask the culled InstanceBatches to perform their culling to the InstancedEntities they own. This results performance boost for skipping large amounts of instanced entities when the whole batch isn't visible. However, this also means threading frustum culling of instanced entities got harder.

There are four approaches: Ask all existing batches to frustum cull. Then use only the ones we want. Sheer brute force. Scales very well with cores, but sacrifices performance unnecessary when only a few batches are visible. This approach is not taken by Ogre.

Sync every time an InstanceBatchHW or InstanceBatchHW_VTF tries to frustum cull to delegate the job on worker threads. Considering there could be hundreds of InstanceBatches, this would cause a huge amount of thread synchronization overhead & context switches. This approach is not taken by Ogre.

Each thread after having culled all InstancedBatches & Entities, will parse the culled list to ask all MovableObjects to perform culling of their own. Entities will ignore this call (however they add to a small overhead for traversing them and calling a virtual function) while InstanceBatchHW & InstanceBatchHW_VTF will perform their own culling from within the multiple threads. This approach scales well with cores and only visible batches. However load balancing may be an issue for certain scenes: eg. an InstanceBatch with 5000 InstancedEntities in one thread, while the other three threads get one InstanceBatch each with 50 InstancedEntities. The first thread will have considerably more work to do than the other three. This approach is a good balance when compared to the first two. This is the approach taken by Ogre when INSTANCING_CULLING_THREADED is on

Don't multithread instanced entitites' frustum culling. Only the InstanceBatch & Entity's frustum culling will be threaded. This is what happens when INSTANCING_CULLING_SINGLE is on.

Whether INSTANCING_CULLING_THREADED improves or degrades performance depends highly on your scene.

When to use INSTANCING_CULLING_SINGLETHREAD? If your scene doesn't use HW Basic or HW VTF instancing techniques, or you have very few Instanced entities compared to the amount of regular Entities. Turning threading on, you'll be wasting your time traversing the list from multiple threads in search of InstanceBatchHW & InstanceBatchHW_VTF

When to use INSTANCING_CULLING_THREADED? If your scene makes intensive use of HW Basic and/or HW VTF instancing techniques. Note that threaded culling is performed in SCENE_STATIC instances too. The most advantage is seen when the instances per batch is very high and when doing many PASS_SCENE, which require frustum culling multiple times per frame (eg. pssm shadows, multiple light sources with shadows, very advanced compositing, etc)

Note that you can switch between methods at any time at runtime.

Enumerator
INSTANCING_CULLING_SINGLETHREAD 
INSTANCING_CULLING_THREADED 

◆ SceneType

Classification of a scene to allow a decision of what type of SceenManager to provide back to the application.

Enumerator
ST_GENERIC 
ST_EXTERIOR_CLOSE 
ST_EXTERIOR_FAR 
ST_EXTERIOR_REAL_FAR 
ST_INTERIOR 

◆ SkeletalAnimationMode

Enumerator
SKELETONS_NOT_SUPPORTED 
SKELETONS_SUPPORTED 
SKELETONS_LUT 

Function Documentation

◆ BaseInstanceBatchVTF()

Ogre::v1::BaseInstanceBatchVTF::BaseInstanceBatchVTF ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ BatchSettings()

Ogre::v1::InstanceManager::BatchSettings::BatchSettings ( )
inline

◆ InstanceBatch()

Ogre::v1::InstanceBatch::InstanceBatch ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ InstanceBatchHW()

Ogre::v1::InstanceBatchHW::InstanceBatchHW ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ InstanceBatchHW_VTF()

Ogre::v1::InstanceBatchHW_VTF::InstanceBatchHW_VTF ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ InstanceBatchShader()

Ogre::v1::InstanceBatchShader::InstanceBatchShader ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ InstanceBatchVTF()

Ogre::v1::InstanceBatchVTF::InstanceBatchVTF ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceManager creator,
MeshPtr meshReference,
const MaterialPtr material,
size_t  instancesPerBatch,
const Mesh::IndexMap indexToBoneMap 
)

◆ InstancedEntity()

Ogre::v1::InstancedEntity::InstancedEntity ( IdType  id,
ObjectMemoryManager objectMemoryManager,
InstanceBatch batchOwner,
uint32  instanceID,
BoneMemoryManager boneMemoryManager,
InstancedEntity sharedTransformEntity = NULL 
)

◆ InstanceManager()

Ogre::v1::InstanceManager::InstanceManager ( IdString  customName,
SceneManager sceneManager,
const String meshName,
const String groupName,
InstancingTechnique  instancingTechnique,
uint16  instancingFlags,
size_t  instancesPerBatch,
unsigned short  subMeshIdx,
bool  useBoneMatrixLookup = false 
)

◆ SendAllAnimatedTransformsToTexture()

Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::SendAllAnimatedTransformsToTexture ( float *RESTRICT_ALIAS  dstPtr,
size_t  floatsPerEntity,
size_t  entitiesPerPadding,
size_t  widthFloatsPadding,
const Mesh::IndexMap indexMap 
)
inline

◆ SendAllDualQuatTexture()

Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::SendAllDualQuatTexture ( float *RESTRICT_ALIAS  dstPtr,
size_t  floatsPerEntity,
size_t  entitiesPerPadding,
size_t  widthFloatsPadding,
const Mesh::IndexMap indexMap 
)
inline

◆ SendAllLUTToTexture()

Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::SendAllLUTToTexture ( float *RESTRICT_ALIAS  dstPtr,
size_t  floatsPerEntity,
size_t  entitiesPerPadding,
size_t  widthFloatsPadding,
const Mesh::IndexMap indexMap,
size_t  numLutEntries 
)
inline

◆ SendAllSingleTransformsToTexture()

Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::SendAllSingleTransformsToTexture ( float *RESTRICT_ALIAS  dstPtr,
size_t  floatsPerEntity,
size_t  entitiesPerPadding,
size_t  widthFloatsPadding 
)
inline

◆ TransformsToTexture()

Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::TransformsToTexture ( float *RESTRICT_ALIAS  dstPtr,
size_t  floatsPerEntity,
size_t  entitiesPerPadding,
size_t  widthFloatsPadding 
)
inline

◆ ~BaseInstanceBatchVTF()

virtual Ogre::v1::BaseInstanceBatchVTF::~BaseInstanceBatchVTF ( )
virtual

◆ ~InstanceBatch()

virtual Ogre::v1::InstanceBatch::~InstanceBatch ( )
virtual

◆ ~InstanceBatchHW()

virtual Ogre::v1::InstanceBatchHW::~InstanceBatchHW ( )
virtual

◆ ~InstanceBatchHW_VTF()

virtual Ogre::v1::InstanceBatchHW_VTF::~InstanceBatchHW_VTF ( )
virtual

◆ ~InstanceBatchShader()

virtual Ogre::v1::InstanceBatchShader::~InstanceBatchShader ( )
virtual

◆ ~InstanceBatchVTF()

virtual Ogre::v1::InstanceBatchVTF::~InstanceBatchVTF ( )
virtual

◆ ~InstancedEntity()

virtual Ogre::v1::InstancedEntity::~InstancedEntity ( )
virtual

◆ ~InstanceManager()

virtual Ogre::v1::InstanceManager::~InstanceManager ( )
virtual

◆ _addDirtyStaticBatch()

void Ogre::v1::InstanceManager::_addDirtyStaticBatch ( InstanceBatch dirtyBatch)

Called by an InstanceBatch when it requests their bounds to be updated for proper culling.

Parameters
dirtyBatchThe batch which is dirty, usually same as caller.

◆ _addToDynamicBatchList()

void Ogre::v1::InstanceManager::_addToDynamicBatchList ( InstanceBatch dynamicBatch)

Kees the batch in the dynamic batch list so that it gets updated every frame.

@See _removeFromDynamicBatchList

Parameters
dynamicBatchThe batch which is now static or unused, usually same as caller.

◆ _boundsDirty()

void Ogre::v1::InstanceBatchHW_VTF::_boundsDirty ( void  )

◆ _defragmentBatch()

void Ogre::v1::InstanceBatch::_defragmentBatch ( bool  optimizeCulling,
InstancedEntityVec usedEntities,
CustomParamsVec usedParams 
)
See also
InstanceManager::defragmentBatches This function takes InstancedEntities and pushes back all entities it can fit here Extra entities in mUnusedEntities are destroyed (so that used + unused = mInstancedEntities.size())
Parameters
optimizeCullingtrue will call the DoCull version, false the NoCull
usedEntitiesArray of InstancedEntities to parent with this batch. Those reparented are removed from this input vector
usedParamsArray of Custom parameters correlated with the InstancedEntities in usedEntities. They follow the fate of the entities in that vector.
Remarks
: This function assumes caller holds data to mInstancedEntities! Otherwise you can get memory leaks. Don't call this directly if you don't know what you're doing!

◆ _defragmentBatchDiscard()

void Ogre::v1::InstanceBatch::_defragmentBatchDiscard ( void  )
See also
InstanceManager::_defragmentBatchDiscard Destroys unused entities and clears the mInstancedEntity container which avoids leaving dangling pointers from reparented InstancedEntities Usually called before deleting this pointer. Don't call directly!

◆ _getCustomParam()

const Vector4 & Ogre::v1::InstanceBatch::_getCustomParam ( InstancedEntity instancedEntity,
unsigned char  idx 
)

◆ _getIndexToBoneMap()

const Mesh::IndexMap * Ogre::v1::InstanceBatch::_getIndexToBoneMap ( ) const
inline

◆ _getMeshRef()

MeshPtr & Ogre::v1::InstanceBatch::_getMeshRef ( )
inline

◆ _getMeshReference()

const Ogre::v1::MeshPtr & Ogre::v1::InstanceBatch::_getMeshReference ( void  ) const
inline

◆ _getOwner()

InstanceBatch * Ogre::v1::InstancedEntity::_getOwner ( ) const
inline

◆ _markTransformSharingDirty()

void Ogre::v1::InstanceBatch::_markTransformSharingDirty ( )
inline

Tells that the list of entity instances with shared transforms has changed.

◆ _notifyAttached()

virtual void Ogre::v1::InstancedEntity::_notifyAttached ( Node parent)
virtual

Overloaded so we can register ourselves for updating our animations.

Reimplemented from Ogre::MovableObject.

◆ _notifyParentNodeMemoryChanged()

virtual void Ogre::v1::InstancedEntity::_notifyParentNodeMemoryChanged ( void  )
virtual

◆ _notifyStaticDirty() [1/2]

virtual void Ogre::v1::InstanceBatch::_notifyStaticDirty ( void  )
virtual

Called by InstancedEntity(s) or directly to tell us we need to update the bounds Should only useful if this batch is static.

◆ _notifyStaticDirty() [2/2]

virtual void Ogre::v1::InstancedEntity::_notifyStaticDirty ( void  ) const
virtual

Called by SceneManager when it is telling we're a static MovableObject being dirty Don't call this directly.

See also
SceneManager::notifyStaticDirty

Reimplemented from Ogre::MovableObject.

◆ _removeFromDynamicBatchList()

void Ogre::v1::InstanceManager::_removeFromDynamicBatchList ( InstanceBatch batch)

Called when a previously dynamic InstanceBatch went static (.

See also
InstanceBatch::setStatic) or a dynamic batch has no InstancedEntity in use
Parameters
batchThe batch which is now static or unused, usually same as caller.

◆ _setCustomParam()

void Ogre::v1::InstanceBatch::_setCustomParam ( InstancedEntity instancedEntity,
unsigned char  idx,
const Vector4 newParam 
)

◆ _setInstancesPerBatch()

void Ogre::v1::InstanceBatch::_setInstancesPerBatch ( size_t  instancesPerBatch)

Raises an exception if trying to change it after being built.

◆ _supportsSkeletalAnimation()

SkeletalAnimationMode Ogre::v1::InstanceBatch::_supportsSkeletalAnimation ( ) const
inline

Returns true if this technique supports skeletal animation.

Remarks
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.

◆ _updateBounds()

void Ogre::v1::InstanceBatch::_updateBounds ( void  )
See also
InstanceManager::updateDirtyBatches

◆ _updateDirtyBatches()

void Ogre::v1::InstanceManager::_updateDirtyBatches ( void  )

Called by SceneManager every frame.

◆ _updateDirtyBatchesThread()

void Ogre::v1::InstanceManager::_updateDirtyBatchesThread ( size_t  threadIdx)

Called by SceneManager every frame from multiple threads.

◆ _updateEntitiesBoundsThread()

void Ogre::v1::InstanceBatch::_updateEntitiesBoundsThread ( size_t  threadIdx)

Updates the bounds of only our entities from multiple threads.

To be called before _updateBounds (which is single threaded).

See also
InstanceManager::updateDirtyBatches
Parameters
threadIdxThe index of this thread, must be unique for each thread

◆ _updateRenderQueue() [1/4]

virtual void Ogre::v1::InstanceBatchHW::_updateRenderQueue ( RenderQueue queue,
Camera camera,
const Camera lodCamera 
)
virtual

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::MovableObject.

◆ _updateRenderQueue() [2/4]

virtual void Ogre::v1::InstanceBatchHW_VTF::_updateRenderQueue ( RenderQueue queue,
Camera camera,
const Camera lodCamera 
)
virtual

Overloaded to visibility on a per unit basis and finally updated the vertex texture.

Reimplemented from Ogre::v1::BaseInstanceBatchVTF.

◆ _updateRenderQueue() [3/4]

void Ogre::v1::BaseInstanceBatchVTF::_updateRenderQueue ( RenderQueue queue,
Camera camera,
const Camera lodCamera 
)
virtual

Overloaded to be able to updated the vertex texture.

Reimplemented from Ogre::MovableObject.

Reimplemented in Ogre::v1::InstanceBatchHW_VTF.

◆ _updateRenderQueue() [4/4]

void Ogre::v1::InstancedEntity::_updateRenderQueue ( RenderQueue queue,
Camera camera,
const Camera lodCamera 
)
inlinevirtual

Do nothing, InstanceBatch takes care of this.

Reimplemented from Ogre::MovableObject.

◆ build()

virtual RenderOperation Ogre::v1::InstanceBatch::build ( const SubMesh baseSubMesh)
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.

Parameters
baseSubMeshA sub mesh which the instances will be based upon from.
Remarks
Call this only ONCE. This is done automatically by Ogre::InstanceManager Caller is responsable for freeing buffers in this RenderOperation Buffers inside the RenderOp may be null if the built failed.
Returns
A render operation which is very useful to pass to other InstanceBatches (
See also
buildFrom) so that they share the same vertex buffers and indices, when possible

◆ buildFrom() [1/4]

virtual void Ogre::v1::InstanceBatch::buildFrom ( const SubMesh baseSubMesh,
const RenderOperation renderOperation 
)
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.

Parameters
renderOperationThe RenderOp to reference.
Remarks
Caller is responsable for freeing buffers passed as input arguments This function replaces the need to call build()

Reimplemented in Ogre::v1::InstanceBatchHW, Ogre::v1::InstanceBatchShader, and Ogre::v1::BaseInstanceBatchVTF.

◆ buildFrom() [2/4]

void Ogre::v1::InstanceBatchHW::buildFrom ( const SubMesh baseSubMesh,
const RenderOperation renderOperation 
)
virtual

◆ buildFrom() [3/4]

void Ogre::v1::InstanceBatchShader::buildFrom ( const SubMesh baseSubMesh,
const RenderOperation renderOperation 
)
virtual

◆ buildFrom() [4/4]

void Ogre::v1::BaseInstanceBatchVTF::buildFrom ( const SubMesh baseSubMesh,
const RenderOperation renderOperation 
)
virtual

◆ calculateMaxNumInstances() [1/5]

size_t Ogre::v1::InstanceBatchHW::calculateMaxNumInstances ( const SubMesh baseSubMesh,
uint16  flags 
) const
virtual

◆ calculateMaxNumInstances() [2/5]

size_t Ogre::v1::InstanceBatchHW_VTF::calculateMaxNumInstances ( const SubMesh baseSubMesh,
uint16  flags 
) const
virtual

◆ calculateMaxNumInstances() [3/5]

size_t Ogre::v1::InstanceBatchShader::calculateMaxNumInstances ( const SubMesh baseSubMesh,
uint16  flags 
) const
virtual

◆ calculateMaxNumInstances() [4/5]

size_t Ogre::v1::InstanceBatchVTF::calculateMaxNumInstances ( const SubMesh baseSubMesh,
uint16  flags 
) const
virtual

◆ calculateMaxNumInstances() [5/5]

virtual size_t Ogre::v1::InstanceBatch::calculateMaxNumInstances ( const SubMesh baseSubMesh,
uint16  flags 
) const
pure virtual

Some techniques have a limit on how many instances can be done.

Sometimes even depends on the material being used.

Note this is a helper function, as such it takes a submesh base to compute the parameters, instead of using the object's own. This allows querying for a technique without requiering to actually build it.
Parameters
baseSubMeshThe base submesh that will be using to build it.
flagsFlags to pass to the InstanceManager.
See also
InstanceManagerFlags
Returns
The max instances limit

Implemented in Ogre::v1::InstanceBatchHW, Ogre::v1::InstanceBatchHW_VTF, Ogre::v1::InstanceBatchShader, and Ogre::v1::InstanceBatchVTF.

◆ cleanupEmptyBatches()

void Ogre::v1::InstanceManager::cleanupEmptyBatches ( void  )

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).

◆ createInstancedEntity() [1/2]

InstancedEntity * Ogre::v1::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.

Remarks
Returns NULL if all instances are being used

◆ createInstancedEntity() [2/2]

InstancedEntity * Ogre::v1::InstanceManager::createInstancedEntity ( const String materialName,
SceneMemoryMgrTypes  sceneType = SCENE_DYNAMIC 
)

Creates an InstancedEntity based on an existing InstanceManager (.

See also
createInstanceManager)
Remarks
Return value may be null if the InstanceManger technique isn't supported Try to keep the number of entities with different materials to a minimum For more information
See also
InstancedManager
InstancedBatch,
InstancedEntity Alternatively you can call InstancedManager::createInstanceEntity using the returned pointer from createInstanceManager
Parameters
materialNameMaterial name
managerNameName of the instance manager
Returns
An InstancedEntity ready to be attached to a SceneNode

◆ defragmentBatches()

void Ogre::v1::InstanceManager::defragmentBatches ( bool  optimizeCulling)

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

Remarks
This function takes time. Make sure to call this only when you're sure there's too much of fragmentation and you won't be creating more InstancedEntities soon Also in many cases cleanupEmptyBatches() ought to be enough Defragmentation is done per material Static batches won't be defragmented. If you want to degragment them, set them to dynamic again, and switch back to static after calling this function.
Parameters
optimizeCullingWhen 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)

◆ forceOneWeight()

bool Ogre::v1::BaseInstanceBatchVTF::forceOneWeight ( ) const
inline

◆ getBoundingBox()

const AxisAlignedBox & Ogre::v1::InstancedEntity::getBoundingBox ( void  ) const

◆ getCustomParam()

const Vector4 & Ogre::v1::InstancedEntity::getCustomParam ( unsigned char  idx)

◆ getInstanceBatchIterator()

InstanceBatchIterator Ogre::v1::InstanceManager::getInstanceBatchIterator ( const String materialName,
SceneMemoryMgrTypes  sceneType 
) const

Get non-updateable iterator over instance batches for given material.

Remarks
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.

◆ getInstanceBatchMapIterator()

InstanceBatchMapIterator Ogre::v1::InstanceManager::getInstanceBatchMapIterator ( void  ) const
inline

Get non-updateable iterator over instance batches per material.

◆ getInstancedEntitiesInUse()

void Ogre::v1::InstanceBatch::getInstancedEntitiesInUse ( InstancedEntityVec outEntities,
CustomParamsVec outParams 
)

Fills the input vector with the instances that are currently being used or were requested.

Used for defragmentation,

See also
InstanceManager::defragmentBatches

◆ getInstancingTechnique()

InstancingTechnique Ogre::v1::InstanceManager::getInstancingTechnique ( ) const
inline
Returns
Instancing technique this manager was created for. Can't be changed after creation

◆ getLights()

const LightList & Ogre::v1::InstanceBatch::getLights ( void  ) const
virtual

Gets a list of lights, ordered relative to how close they are to this renderable.

Remarks
Directional lights, which have no position, will always be first on this list.

Implements Ogre::Renderable.

◆ getMaxLookupTableInstances()

virtual size_t Ogre::v1::BaseInstanceBatchVTF::getMaxLookupTableInstances ( ) const
inlinevirtual
Returns
the maximum amount of shared transform entities when using lookup table

◆ getMaxOrBestNumInstancesPerBatch()

size_t Ogre::v1::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.

Remarks
This is done automatically when creating an instanced entity, but this function in conjunction with
See also
setInstancesPerBatch allows more flexible control over the amount of instances per batch
Parameters
materialNameName of the material to base on
suggestedSizeSuggested amount of instances per batch
flagsFlags to pass to the InstanceManager.
See also
InstanceManagerFlags
Returns
The max/best amount of instances per batch given the suggested size and flags

◆ getMovableType() [1/2]

const String & Ogre::v1::InstanceBatch::getMovableType ( void  ) const
virtual

Returns the type name of this object.

Implements Ogre::MovableObject.

◆ getMovableType() [2/2]

const String & Ogre::v1::InstancedEntity::getMovableType ( void  ) const
virtual

Returns the type name of this object.

Implements Ogre::MovableObject.

◆ getName()

◆ getNumCustomParams()

unsigned char Ogre::v1::InstanceManager::getNumCustomParams ( ) const
inline

◆ getNumWorldTransforms() [1/3]

unsigned short Ogre::v1::InstanceBatchHW::getNumWorldTransforms ( void  ) const
virtual

Returns the number of world transform matrices this renderable requires.

Remarks
When a renderable uses 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.

◆ getNumWorldTransforms() [2/3]

unsigned short Ogre::v1::InstanceBatchShader::getNumWorldTransforms ( void  ) const
virtual

Returns the number of world transform matrices this renderable requires.

Remarks
When a renderable uses 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.

◆ getNumWorldTransforms() [3/3]

unsigned short Ogre::v1::BaseInstanceBatchVTF::getNumWorldTransforms ( void  ) const
virtual

Returns the number of world transform matrices this renderable requires.

Remarks
When a renderable uses 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.

◆ getRenderOperation()

void Ogre::v1::InstanceBatch::getRenderOperation ( RenderOperation op,
bool  casterPass 
)
inlinevirtual

Gets the render operation required to send this object to the frame buffer.

Implements Ogre::Renderable.

◆ getSceneManager()

SceneManager * Ogre::v1::InstanceManager::getSceneManager ( ) const
inline

◆ getSetting()

bool Ogre::v1::InstanceManager::getSetting ( BatchSettingId  id,
IdString  materialName 
) const

If settings for the given material didn't exist, default value is returned.

◆ getSkeleton()

SkeletonInstance * Ogre::v1::InstancedEntity::getSkeleton ( void  ) const
inline

◆ getSquaredViewDepth() [1/2]

Real Ogre::v1::InstanceBatch::getSquaredViewDepth ( const Camera cam) const

◆ getSquaredViewDepth() [2/2]

Real Ogre::v1::InstancedEntity::getSquaredViewDepth ( const Camera cam) const

This is used by our batch owner to get the closest entity's depth, returns infinity when not attached to a scene node.

◆ getWorldTransforms() [1/3]

void Ogre::v1::InstanceBatchHW::getWorldTransforms ( Matrix4 xform) const
virtual

Gets the world transform matrix / matrices for this renderable object.

Remarks
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 vertex blending. If it does use vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Note
Internal Ogre never supports non-affine matrix for world transform matrix/matrices, the behavior is undefined if returns non-affine matrix here.
See also
Matrix4::isAffine.

Implements Ogre::Renderable.

◆ getWorldTransforms() [2/3]

void Ogre::v1::InstanceBatchShader::getWorldTransforms ( Matrix4 xform) const
virtual

Gets the world transform matrix / matrices for this renderable object.

Remarks
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 vertex blending. If it does use vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Note
Internal Ogre never supports non-affine matrix for world transform matrix/matrices, the behavior is undefined if returns non-affine matrix here.
See also
Matrix4::isAffine.

Implements Ogre::Renderable.

◆ getWorldTransforms() [3/3]

void Ogre::v1::BaseInstanceBatchVTF::getWorldTransforms ( Matrix4 xform) const
virtual

Gets the world transform matrix / matrices for this renderable object.

Remarks
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 vertex blending. If it does use vertex blending it will fill the passed in pointer with an array of matrices, the length being the value returned from getNumWorldTransforms.
Note
Internal Ogre never supports non-affine matrix for world transform matrix/matrices, the behavior is undefined if returns non-affine matrix here.
See also
Matrix4::isAffine.

Implements Ogre::Renderable.

◆ hasSettings()

bool Ogre::v1::InstanceManager::hasSettings ( IdString  materialName) const
inline

Returns true if settings were already created for the given material name.

If false is returned, it means getSetting will return default settings.

◆ hasSkeleton()

bool Ogre::v1::InstancedEntity::hasSkeleton ( void  ) const
inline

◆ instanceBatchCullFrustumThreaded() [1/2]

virtual void Ogre::v1::InstanceBatchHW::instanceBatchCullFrustumThreaded ( const Camera frustum,
const Camera lodCamera,
uint32  combinedVisibilityFlags 
)
inlinevirtual

◆ instanceBatchCullFrustumThreaded() [2/2]

virtual void Ogre::v1::InstanceBatchHW_VTF::instanceBatchCullFrustumThreaded ( const Camera frustum,
const Camera lodCamera,
uint32  combinedVisibilityFlags 
)
inlinevirtual

◆ isBatchFull()

bool Ogre::v1::InstanceBatch::isBatchFull ( void  ) const
inline
Returns
true if it can not create more InstancedEntities (Num InstancedEntities == mInstancesPerBatch)

◆ isBatchUnused()

bool Ogre::v1::InstanceBatch::isBatchUnused ( void  ) const
inline

Returns true if it no instanced entity has been requested or all of them have been removed.

◆ isInScene()

virtual bool Ogre::v1::InstancedEntity::isInScene ( void  ) const
inlinevirtual

◆ isInUse()

bool Ogre::v1::InstancedEntity::isInUse ( ) const
inline

Tells if the entity is in use.

◆ operator()() [1/7]

bool Ogre::v1::InstanceManagerCmp::operator() ( const InstanceManager a,
const InstanceManager b 
) const
inline

◆ operator()() [2/7]

bool Ogre::v1::InstanceManagerCmp::operator() ( const InstanceManager a,
IdString  name 
) const
inline

◆ operator()() [3/7]

FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::operator() ( const MovableObject mo)

◆ operator()() [4/7]

FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::operator() ( const MovableObject mo)

◆ operator()() [5/7]

FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::operator() ( const MovableObject mo)

◆ operator()() [6/7]

FORCEINLINE void Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::operator() ( const MovableObject mo)

◆ operator()() [7/7]

bool Ogre::v1::InstanceManagerCmp::operator() ( IdString  name,
const InstanceManager a 
) const
inline

◆ removeInstancedEntity()

void Ogre::v1::InstanceBatch::removeInstancedEntity ( InstancedEntity instancedEntity)

Removes an InstancedEntity from the scene retrieved with getNewInstancedEntity, putting back into a queue.

Remarks
Throws an exception if the instanced entity wasn't created by this batch Removed instanced entities save little CPU time, but not GPU

◆ setBatchesAsStatic()

void Ogre::v1::InstanceManager::setBatchesAsStatic ( bool  bStatic)

Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.

Some implementations allow to keep culling individual instances while others may not. This option makes the batch behave pretty much like Static Geometry, plust the GPU RAM memory advantages (less VRAM, less bandwidth) but no LOD support. Very useful for billboards of trees, repeating vegetation, modular buildings, etc.

Remarks
When individual culling is disabled (or not supported) This function moves a lot of processing time from the CPU to the GPU. If the GPU is already a bottleneck, you may see a decrease in performance instead! @See updateStaticDirty if you've made a change to an InstancedEntity and wish that change to take effect. Be sure to call this after you've set all your instances and not once per change.

◆ setBoneDualQuaternions()

void Ogre::v1::BaseInstanceBatchVTF::setBoneDualQuaternions ( bool  enable)
inline

◆ setBoneMatrixLookup()

void Ogre::v1::BaseInstanceBatchVTF::setBoneMatrixLookup ( bool  enable,
size_t  maxLookupTableInstances 
)
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

◆ setCustomParam()

void Ogre::v1::InstancedEntity::setCustomParam ( unsigned char  idx,
const Vector4 newParam 
)

Sets the custom parameter for this instance.

See also
InstanceManager::setNumCustomParams Because not all techniques support custom params, and some users may not need it while using millions of InstancedEntities, the params have been detached from InstancedEntity and stored in it's InstanceBatch instead, to reduce memory overhead.
Remarks
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.
Parameters
idxof the param. In the range [0; InstanceManager::getNumCustomParams())
newParamNew parameter

◆ setForceOneWeight()

void Ogre::v1::BaseInstanceBatchVTF::setForceOneWeight ( bool  enable)
inline

◆ setInstancesPerBatch()

void Ogre::v1::InstanceManager::setInstancesPerBatch ( size_t  instancesPerBatch)

Raises an exception if trying to change it after creating the first InstancedEntity.

Remarks
The actual value may be less if the technique doesn't support having so much
See also
getMaxOrBestNumInstancesPerBatches for the usefulness of this function
Parameters
instancesPerBatchNew instances per batch number

◆ setMaxLookupTableInstances()

void Ogre::v1::InstanceManager::setMaxLookupTableInstances ( size_t  maxLookupTableInstances)

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.

Remarks
The value should be as close but not below the actual value.
Parameters
maxLookupTableInstancesNew size of the lookup table

◆ setNumCustomParams()

void Ogre::v1::InstanceManager::setNumCustomParams ( unsigned char  numCustomParams)

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).

Remarks
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.

Parameters
numCustomParamsNumber of custom parameters each instance will have. Default: 0

◆ setSetting()

void Ogre::v1::InstanceManager::setSetting ( BatchSettingId  id,
bool  enabled,
IdString  materialName = IdString() 
)

Applies a setting for all batches using the same material_ existing ones and those that will be created in the future.

For example setSetting( BatchSetting::CAST_SHADOWS, false ) disables shadow casting for all instanced entities (
See also
MovableObject::setCastShadow)
For example setSetting( BatchSetting::SHOW_BOUNDINGBOX, true, "MyMat" ) will display the bounding box of the batch (not individual InstancedEntities) from all batches using material "MyMat"
Note
If the material name hasn't been used, the settings are still stored This allows setting up batches before they get even created.
Parameters
idSetting Id to setup,
See also
BatchSettings::BatchSettingId
Parameters
enabledBoolean value. It's meaning depends on the id.
materialNameWhen Blank, the setting is applied to all existing materials

◆ setStatic()

bool Ogre::v1::InstanceBatch::setStatic ( bool  bStatic)

Tells this batch to stop updating animations, positions, rotations, and display all it's active instances.

Some implementations allow to keep culling individual instances while others may not. This option makes the batch behave pretty much like Static Geometry, plust the GPU RAM memory advantages (less VRAM, less bandwidth) but no LOD support. Very useful for billboards of trees, repeating vegetation, modular buildings, etc.

Remarks
When individual culling is disabled (or not supported) This function moves a lot of processing time from the CPU to the GPU. If the GPU is already a bottleneck, you may see a decrease in performance instead! @See updateStaticDirty if you've made a change to an InstancedEntity and wish that change to take effect. Be sure to call this after you've set all your instances and not once per change.

◆ setTransformLookupNumber()

void Ogre::v1::InstancedEntity::setTransformLookupNumber ( uint16  num)
inline

Sets the transformation look up number.

◆ setUseOneWeight()

void Ogre::v1::BaseInstanceBatchVTF::setUseOneWeight ( bool  enable)
inline

◆ shareTransformWith()

bool Ogre::v1::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"

Requirements to share trasnformations: Both InstancedEntities must have use the same skeleton An InstancedEntity can't be both "master" and "slave" at the same time
Remarks
Sharing does nothing if the original mesh doesn't have a skeleton When an InstancedEntity is removed (
See also
InstanceBatch::removeInstancedEntity), it stops sharing the transform. If the instanced entity was the master one, all it's slaves stop sharing and start having their own transform too.
Parameters
slaveThe InstancedEntity that should share with us and become our slave
Returns
true if successfully shared (may fail if they aren't skeletally animated)

◆ stopSharingTransform()

void Ogre::v1::InstancedEntity::stopSharingTransform ( )
See also
shareTransformWith Stops sharing the transform if this is a slave, and notifies the master we're no longer a slave. If this is a master, tells all it's slave to stop sharing
Remarks
This function is automatically called in InstanceBatch::removeInstancedEntity

◆ useBoneDualQuaternions()

bool Ogre::v1::BaseInstanceBatchVTF::useBoneDualQuaternions ( ) const
inline

◆ useBoneMatrixLookup()

bool Ogre::v1::BaseInstanceBatchVTF::useBoneMatrixLookup ( ) const
inline

Tells whether to use bone matrix lookup.

See also
setBoneMatrixLookup()

◆ useOneWeight()

bool Ogre::v1::BaseInstanceBatchVTF::useOneWeight ( ) const
inline

Variable Documentation

◆ boneIdxEnd [1/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::boneIdxEnd

◆ boneIdxEnd [2/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::boneIdxEnd

◆ boneIdxEnd [3/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::boneIdxEnd

◆ boneIdxStart [1/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::boneIdxStart

◆ boneIdxStart [2/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::boneIdxStart

◆ boneIdxStart [3/3]

Mesh::IndexMap::const_iterator Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::boneIdxStart

◆ mDest

float* RESTRICT_ALIAS Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mDest

◆ mEntitiesPerPadding

size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mEntitiesPerPadding

◆ mFloatsPerEntity

size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mFloatsPerEntity

◆ mInstancesWritten [1/3]

size_t Ogre::v1::InstanceBatchHW_VTF::SendAllSingleTransformsToTexture::mInstancesWritten

◆ mInstancesWritten [2/3]

size_t Ogre::v1::InstanceBatchHW_VTF::SendAllAnimatedTransformsToTexture::mInstancesWritten

◆ mInstancesWritten [3/3]

size_t Ogre::v1::InstanceBatchHW_VTF::SendAllDualQuatTexture::mInstancesWritten

◆ mWidthFloatsPadding

size_t Ogre::v1::InstanceBatchHW_VTF::TransformsToTexture::mWidthFloatsPadding

◆ mWrittenPositions

vector<bool>::type Ogre::v1::InstanceBatchHW_VTF::SendAllLUTToTexture::mWrittenPositions

◆ setting

bool Ogre::v1::InstanceManager::BatchSettings::setting[NUM_SETTINGS]

Friends

◆ BaseInstanceBatchVTF

◆ InstanceBatch

◆ InstanceBatchHW

◆ InstanceBatchHW_VTF

◆ InstanceBatchShader