OGRE
13.6
Object-Oriented Graphics Rendering Engine
|
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) This implementation has the following advantages: More...
#include <OgreInstanceBatchVTF.h>
Public Member Functions | |
BaseInstanceBatchVTF (InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap, const String &batchName) | |
virtual | ~BaseInstanceBatchVTF () |
void | _updateRenderQueue (RenderQueue *queue) override |
Overloaded to be able to updated the vertex texture. More... | |
void | buildFrom (const SubMesh *baseSubMesh, const RenderOperation &renderOperation) override |
bool | forceOneWeight () const |
virtual size_t | getMaxLookupTableInstances () const |
void | getWorldTransforms (Matrix4 *xform) const override |
Gets the world transform matrix / matrices for this renderable object. More... | |
void | setBoneDualQuaternions (bool enable) |
void | setBoneMatrixLookup (bool enable, size_t maxLookupTableInstances) |
Sets the state of the usage of bone matrix lookup. More... | |
void | setForceOneWeight (bool enable) |
void | setUseOneWeight (bool enable) |
bool | useBoneDualQuaternions () const |
bool | useBoneMatrixLookup () const |
Tells whether to use bone matrix lookup. More... | |
bool | useBoneWorldMatrices () const override |
bool | useOneWeight () const |
Public Member Functions inherited from Ogre::InstanceBatch | |
InstanceBatch (InstanceManager *creator, MeshPtr &meshReference, const MaterialPtr &material, size_t instancesPerBatch, const Mesh::IndexMap *indexToBoneMap, const String &batchName) | |
virtual | ~InstanceBatch () |
virtual void | _boundsDirty (void) |
Called by InstancedEntity(s) to tell us we need to update the bounds (we touch the SceneNode so the SceneManager aknowledges such change) More... | |
void | _defragmentBatch (bool optimizeCulling, InstancedEntityVec &usedEntities, CustomParamsVec &usedParams) |
void | _defragmentBatchDiscard (void) |
const Vector4f & | _getCustomParam (InstancedEntity *instancedEntity, unsigned char idx) |
const Mesh::IndexMap * | _getIndexToBoneMap () const |
MeshPtr & | _getMeshRef () |
const Ogre::MeshPtr & | _getMeshReference (void) const |
void | _markTransformSharingDirty () |
Tells that the list of entity instances with shared transforms has changed. More... | |
void | _notifyCurrentCamera (Camera *cam) override |
Internal method to notify the object of the camera to be used for the next rendering operation. More... | |
void | _setCustomParam (InstancedEntity *instancedEntity, unsigned char idx, const Vector4f &newParam) |
void | _setInstancesPerBatch (size_t instancesPerBatch) |
Raises an exception if trying to change it after being built. More... | |
bool | _supportsSkeletalAnimation () const |
Returns true if this technique supports skeletal animation. More... | |
void | _updateBounds (void) |
virtual RenderOperation | build (const SubMesh *baseSubMesh) |
Constructs all the data needed to use this batch, as well as the InstanceEntities. More... | |
virtual size_t | calculateMaxNumInstances (const SubMesh *baseSubMesh, uint16 flags) const =0 |
Some techniques have a limit on how many instances can be done. More... | |
InstancedEntity * | createInstancedEntity () |
Returns a pointer to a new InstancedEntity ready to use Note it's actually preallocated, so no memory allocation happens at this point. More... | |
const AxisAlignedBox & | getBoundingBox (void) const override |
Retrieves the local axis-aligned bounding box for this object. More... | |
Real | getBoundingRadius (void) const override |
Retrieves the radius of the origin-centered bounding sphere for this object. More... | |
void | getInstancedEntitiesInUse (InstancedEntityVec &outEntities, CustomParamsVec &outParams) |
Fills the input vector with the instances that are currently being used or were requested. More... | |
const LightList & | getLights (void) const override |
Gets a list of lights, ordered relative to how close they are to this renderable. More... | |
const MaterialPtr & | getMaterial (void) const override |
Retrieves a weak reference to the material this renderable object uses. More... | |
const String & | getMovableType (void) const override |
Returns the type name of this object. More... | |
void | getRenderOperation (RenderOperation &op) override |
Gets the render operation required to send this object to the frame buffer. More... | |
Real | getSquaredViewDepth (const Camera *cam) const override |
Returns the squared distance between the camera and this renderable. More... | |
Technique * | getTechnique (void) const override |
Retrieves a pointer to the Material Technique this renderable object uses. More... | |
const Any & | getUserAny (void) const |
bool | isBatchFull (void) const |
bool | isBatchUnused (void) const |
Returns true if it no instanced entity has been requested or all of them have been removed. More... | |
virtual bool | isStatic () const |
Returns true if this batch was set as static. More... | |
void | removeInstancedEntity (InstancedEntity *instancedEntity) |
Removes an InstancedEntity from the scene retrieved with getNewInstancedEntity, putting back into a queue. More... | |
virtual void | setStaticAndUpdate (bool bStatic) |
Tells this batch to stop updating animations, positions, rotations, and display all it's active instances. More... | |
void | setUserAny (const Any &anything) |
void | visitRenderables (Renderable::Visitor *visitor, bool debugRenderables=false) override |
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. More... | |
Public Member Functions inherited from Ogre::Renderable | |
Renderable () | |
virtual | ~Renderable () |
Virtual destructor needed as class has virtual methods. More... | |
virtual void | _updateCustomGpuParameter (const GpuProgramParameters::AutoConstantEntry &constantEntry, GpuProgramParameters *params) const |
Update a custom GpuProgramParameters constant which is derived from information only this Renderable knows. More... | |
virtual bool | getCastsShadows (void) const |
Method which reports whether this renderable would normally cast a shadow. More... | |
const Vector4f & | getCustomParameter (size_t index) const |
Gets the custom value associated with this Renderable at the given index. More... | |
virtual uint16 | getNumWorldTransforms (void) const |
Returns the number of world transform matrices this renderable requires. More... | |
bool | getPolygonModeOverrideable (void) const |
Gets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting. More... | |
bool | getUseIdentityProjection (void) const |
Returns whether or not to use an 'identity' projection. More... | |
bool | getUseIdentityView (void) const |
Returns whether or not to use an 'identity' view. More... | |
const Any & | getUserAny (void) const |
UserObjectBindings & | getUserObjectBindings () |
Class that provides convenient interface to establish a linkage between custom user application objects and Ogre core classes. More... | |
const UserObjectBindings & | getUserObjectBindings () const |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
bool | hasCustomParameter (size_t index) const |
Checks whether a custom value is associated with this Renderable at the given index. More... | |
virtual void | postRender (SceneManager *sm, RenderSystem *rsys) |
Called immediately after the Renderable has been rendered. More... | |
virtual bool | preRender (SceneManager *sm, RenderSystem *rsys) |
Called just prior to the Renderable being rendered. More... | |
void | removeCustomParameter (size_t index) |
Removes a custom value which is associated with this Renderable at the given index. More... | |
void | setCustomParameter (size_t index, const Vector4f &value) |
Sets a custom parameter for this Renderable, which may be used to drive calculations for this specific Renderable, like GPU program parameters. More... | |
void | setPolygonModeOverrideable (bool override) |
Sets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting. More... | |
void | setUseIdentityProjection (bool useIdentityProjection) |
Sets whether or not to use an 'identity' projection. More... | |
void | setUseIdentityView (bool useIdentityView) |
Sets whether or not to use an 'identity' view. More... | |
void | setUserAny (const Any &anything) |
Public Member Functions inherited from Ogre::MovableObject | |
MovableObject () | |
Constructor. More... | |
MovableObject (const String &name) | |
Named constructor. More... | |
virtual | ~MovableObject () |
Virtual destructor - read Scott Meyers if you don't know why this is needed. More... | |
MovableObjectFactory * | _getCreator (void) const |
Get the creator of this object, if any (internal use only) More... | |
LightList * | _getLightList () |
Returns a pointer to the current list of lights for this object. More... | |
SceneManager * | _getManager (void) const |
Get the manager of this object, if any (internal use only) More... | |
virtual const Affine3 & | _getParentNodeFullTransform (void) const |
Return the full transformation of the parent sceneNode or the attachingPoint node. More... | |
virtual void | _notifyAttached (Node *parent, bool isTagPoint=false) |
Internal method called to notify the object that it has been attached to a node. More... | |
virtual void | _notifyCreator (MovableObjectFactory *fact) |
Notify the object of it's creator (internal use only) More... | |
virtual void | _notifyManager (SceneManager *man) |
Notify the object of it's manager (internal use only) More... | |
virtual void | _notifyMoved (void) |
Internal method called to notify the object that it has been moved. More... | |
virtual void | _releaseManualHardwareResources () |
Notifies the movable object that hardware resources were lost. More... | |
virtual void | _restoreManualHardwareResources () |
Notifies the movable object that hardware resources should be restored. More... | |
void | addQueryFlags (uint32 flags) |
As setQueryFlags, except the flags passed as parameters are appended to the existing flags on this object. More... | |
void | addVisibilityFlags (uint32 flags) |
As setVisibilityFlags, except the flags passed as parameters are appended to the existing flags on this object. More... | |
void | detachFromParent (void) |
Detaches an object from a parent SceneNode or TagPoint, if attached. More... | |
Real | getBoundingRadiusScaled () const |
as getBoundingRadius, but with scaling applied More... | |
bool | getCastShadows (void) const override |
Returns whether shadow casting is enabled for this object. More... | |
const AxisAlignedBox & | getDarkCapBounds (const Light &light, Real dirLightExtrusionDist) const override |
Gets the world space bounding box of the dark cap, as extruded using the light provided. More... | |
EdgeData * | getEdgeList (void) override |
Returns details of the edges which might be used to determine a silhouette. More... | |
const AxisAlignedBox & | getLightCapBounds (void) const override |
Gets the world space bounding box of the light cap. More... | |
uint32 | getLightMask () const |
Get a bitwise mask which will filter the lights affecting this object. More... | |
Listener * | getListener (void) const |
Gets the current listener for this object. More... | |
const String & | getName (void) const |
Returns the name of this object. More... | |
Node * | getParentNode (void) const |
Returns the node to which this object is attached. More... | |
SceneNode * | getParentSceneNode (void) const |
Returns the scene node to which this object is attached. More... | |
Real | getPointExtrusionDistance (const Light *l) const override |
Get the distance to extrude for a point/spot light. More... | |
virtual uint32 | getQueryFlags (void) const |
Returns the query flags relevant for this object. More... | |
bool | getReceivesShadows () |
Returns whether the Material of any Renderable that this MovableObject will add to the render queue will receive shadows. More... | |
Real | getRenderingDistance (void) const |
Gets the distance at which batches are no longer rendered. More... | |
Real | getRenderingMinPixelSize () const |
Returns the minimum pixel size an object needs to be in both screen axes in order to be rendered. More... | |
uint8 | getRenderQueueGroup (void) const |
Gets the queue group for this entity. More... | |
const ShadowRenderableList & | getShadowVolumeRenderableList (const Light *light, const HardwareIndexBufferPtr &indexBuffer, size_t &indexBufferUsedSize, float extrusionDist, int flags=0) override |
Define a default implementation of method from ShadowCaster which implements no shadows. More... | |
virtual uint32 | getTypeFlags (void) const |
Get the 'type flags' for this MovableObject. More... | |
const Any & | getUserAny (void) const |
UserObjectBindings & | getUserObjectBindings () |
Class that provides convenient interface to establish a linkage between custom user application objects and Ogre core classes. More... | |
const UserObjectBindings & | getUserObjectBindings () const |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More... | |
virtual uint32 | getVisibilityFlags (void) const |
Returns the visibility flags relevant for this object. More... | |
bool | getVisible (void) const |
Gets this object whether to be visible or not, if it has a renderable component. More... | |
const AxisAlignedBox & | getWorldBoundingBox (bool derive=false) const override |
Retrieves the axis-aligned bounding box for this object in world coordinates. More... | |
virtual const Sphere & | getWorldBoundingSphere (bool derive=false) const |
Retrieves the worldspace bounding sphere for this object. More... | |
bool | isAttached (void) const |
Returns true if this object is attached to a SceneNode or TagPoint. More... | |
bool | isDebugDisplayEnabled (void) const |
Gets whether debug display of this object is enabled. More... | |
virtual bool | isInScene (void) const |
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. More... | |
bool | isParentTagPoint () const |
Gets whether the parent node is a TagPoint (or a SceneNode) More... | |
virtual bool | isVisible (void) const |
Returns whether or not this object is supposed to be visible or not. More... | |
const LightList & | queryLights (void) const |
Gets a list of lights, ordered relative to how close they are to this movable object. More... | |
void | removeQueryFlags (uint32 flags) |
As setQueryFlags, except the flags passed as parameters are removed from the existing flags on this object. More... | |
void | removeVisibilityFlags (uint32 flags) |
As setVisibilityFlags, except the flags passed as parameters are removed from the existing flags on this object. More... | |
void | setCastShadows (bool enabled) |
Sets whether or not this object will cast shadows. More... | |
void | setDebugDisplayEnabled (bool enabled) |
Sets whether or not the debug display of this object is enabled. More... | |
void | setLightMask (uint32 lightMask) |
Set a bitwise mask which will filter the lights affecting this object. More... | |
void | setListener (Listener *listener) |
Sets a listener for this object. More... | |
void | setQueryFlags (uint32 flags) |
Sets the query flags for this object. More... | |
void | setRenderingDistance (Real dist) |
Sets the distance at which the object is no longer rendered. More... | |
void | setRenderingMinPixelSize (Real pixelSize) |
Sets the minimum pixel size an object needs to be in both screen axes in order to be rendered. More... | |
virtual void | setRenderQueueGroup (uint8 queueID) |
Sets the render queue group this entity will be rendered through. More... | |
virtual void | setRenderQueueGroupAndPriority (uint8 queueID, ushort priority) |
Sets the render queue group and group priority this entity will be rendered through. More... | |
void | setUserAny (const Any &anything) |
void | setVisibilityFlags (uint32 flags) |
Sets the visibility flags for this object. More... | |
void | setVisible (bool visible) |
Tells this object whether to be visible or not, if it has a renderable component. More... | |
Public Member Functions inherited from Ogre::ShadowCaster | |
virtual | ~ShadowCaster () |
bool | hasEdgeList () |
Returns whether the object has a valid edge list. More... | |
Public Member Functions inherited from Ogre::AnimableObject | |
AnimableObject () | |
virtual | ~AnimableObject () |
virtual AnimableValuePtr | createAnimableValue (const String &valueName) |
Create a reference-counted AnimableValuePtr for the named value. More... | |
const StringVector & | getAnimableValueNames (void) const |
Gets a list of animable value names for this object. More... | |
Additional Inherited Members | |
Public Types inherited from Ogre::InstanceBatch | |
typedef std::vector< Vector4f > | CustomParamsVec |
typedef std::vector< InstancedEntity * > | InstancedEntityVec |
Public Types inherited from Ogre::Renderable | |
enum | { DEFAULT_PRIORITY = 100 } |
Public Types inherited from Ogre::ShadowCaster | |
typedef Ogre::ShadowRenderableList | ShadowRenderableList |
typedef VectorIterator< ShadowRenderableList > | ShadowRenderableListIterator |
Static Public Member Functions inherited from Ogre::MovableObject | |
static uint32 | getDefaultQueryFlags () |
Get the default query flags for all future MovableObject instances. More... | |
static uint32 | getDefaultVisibilityFlags () |
Get the default visibility flags for all future MovableObject instances. More... | |
static void | setDefaultQueryFlags (uint32 flags) |
Set the default query flags for all future MovableObject instances. More... | |
static void | setDefaultVisibilityFlags (uint32 flags) |
Set the default visibility flags for all future MovableObject instances. More... | |
Static Public Member Functions inherited from Ogre::ShadowCaster | |
static void | clearShadowRenderableList (ShadowRenderableList &shadowRenderables) |
Common implementation of releasing shadow renderables. More... | |
static void | extrudeVertices (const HardwareVertexBufferSharedPtr &vertexBuffer, size_t originalVertexCount, const Vector4 &lightPos, Real extrudeDist) |
Utility method for extruding vertices based on a light. More... | |
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) This implementation has the following advantages:
But beware the disadvantages:
Whether this performs great or bad depends on the hardware. It improved up to 4x performance on a Intel Core 2 Quad Core X9650 GeForce 8600 GTS, and in an Intel Core 2 Duo P7350 ATI Mobility Radeon HD 4650, but went 0.75x slower on an AthlonX2 5000+ integrated nForce 6150 SE Each BaseInstanceBatchVTF has it's own texture, which occupies memory in VRAM. Approx VRAM usage can be computed by doing 12 bytes * 3 * numInstances * numBones Use flag IM_VTFBESTFIT to avoid wasting VRAM (but may reduce amount of instances per batch).
The material requires at least a texture unit stage named InstancingVTF