30 #ifndef __SceneManager_H__
31 #define __SceneManager_H__
104 const Camera* cam,
bool receiver=
true);
108 void mergeNonRenderedButInFrustum(
const AxisAlignedBox& boxBounds,
180 IRS_RENDER_RECEIVER_PASS
235 { (void)source; (void)camera; }
244 { (void)source; (void)camera; }
257 { (void)source; (void)irs; (void)v; }
271 { (void)source; (void)irs; (void)v; }
288 { (void)numberOfShadowTextures; }
304 Camera* camera,
size_t iteration)
305 { (void)light; (void)camera; (void)iteration; }
322 { (void)light; (void)frustum; }
347 { (void)lightList;
return false; }
364 :transparentShadowCastersMode(false) {}
367 bool visit(
const Pass* p);
388 virtual SceneNode* createSceneNodeImpl(
void);
505 size_t mShadowTextureCountPerType[3];
521 return light == rhs.
light && type == rhs.
type &&
527 return !(*
this == rhs);
566 virtual void initRenderQueue(
void);
580 virtual const Pass* deriveShadowCasterPass(
const Pass* pass);
589 virtual const Pass* deriveShadowReceiverPass(
const Pass* pass);
597 virtual bool validatePassForRendering(
const Pass* pass);
605 virtual bool validateRenderableForRendering(
const Pass* pass,
const Renderable* rend);
619 virtual MeshPtr createSkyboxPlane(
627 virtual MeshPtr createSkydomePlane(
631 int xsegments,
int ysegments,
int ySegmentsToKeep,
646 virtual void useRenderableViewProjMode(
const Renderable* pRend,
bool fixedFunction);
650 virtual void resetViewProjMode(
bool fixedFunction);
660 virtual void firePreRenderQueues();
662 virtual void firePostRenderQueues();
664 virtual bool fireRenderQueueStarted(
uint8 id,
const String& invocation);
666 virtual bool fireRenderQueueEnded(
uint8 id,
const String& invocation);
669 const LightList* pLightList,
bool suppressRenderStateChanges);
672 virtual void fireShadowTexturesUpdated(
size_t numberOfShadowTextures);
674 virtual void fireShadowTexturesPreCaster(
Light* light,
Camera* camera,
size_t iteration);
676 virtual void fireShadowTexturesPreReceiver(
Light* light,
Frustum* f);
678 virtual void firePreUpdateSceneGraph(
Camera* camera);
680 virtual void firePostUpdateSceneGraph(
Camera* camera);
682 virtual void firePreFindVisibleObjects(
Viewport* v);
684 virtual void firePostFindVisibleObjects(
Viewport* v);
686 virtual void fireSceneManagerDestroyed();
688 virtual void setViewport(
Viewport *vp);
694 virtual void renderVisibleObjectsDefaultSequence(
void);
698 virtual void prepareRenderQueue(
void);
716 virtual void renderSingleObject(
Renderable* rend,
const Pass* pass,
717 bool lightScissoringClipping,
bool doLightIteration,
const LightList* manualLightList = 0);
791 virtual void findLightsAffectingFrustum(
const Camera* camera);
793 virtual void initShadowVolumeMaterials(
void);
795 virtual void ensureShadowTexturesCreated();
797 virtual void destroyShadowTextures(
void);
804 void updateDirtyInstanceManagers(
void);
839 virtual void renderShadowVolumesToStencil(
const Light* light,
const Camera* cam,
846 virtual void setShadowVolumeStencilState(
bool secondpass,
bool zfail,
bool twosided);
849 Pass* pass,
const LightList *manualLightList,
unsigned long flags,
850 bool secondpass,
bool zfail,
bool twosided);
898 mCasterList(0), mIsLightInFrustum(false), mLightClipVolumeList(0),
906 mCasterList = casterList;
907 mIsLightInFrustum = lightInFrustum;
908 mLightClipVolumeList = lightClipVolumes;
911 mFarDistSquared = farDistSquared;
931 virtual void renderAdditiveStencilShadowedQueueGroupObjects(
RenderQueueGroup* group,
934 virtual void renderModulativeStencilShadowedQueueGroupObjects(
RenderQueueGroup* group,
937 virtual void renderTextureShadowCasterQueueGroupObjects(
RenderQueueGroup* group,
940 virtual void renderTextureShadowReceiverQueueGroupObjects(
RenderQueueGroup* group,
943 virtual void renderModulativeTextureShadowedQueueGroupObjects(
RenderQueueGroup* group,
947 virtual void renderAdditiveTextureShadowedQueueGroupObjects(
RenderQueueGroup* group,
952 bool doLightIteration,
const LightList* manualLightList = 0);
960 bool doLightIteration,
const LightList* manualLightList = 0);
964 virtual void updateRenderQueueSplitOptions(
void);
968 bool suppressShadows,
bool suppressRenderState);
974 virtual void resetScissor();
978 virtual void resetLightClip();
979 virtual void checkCachedLightClippingInfo();
998 virtual void useLights(
const LightList& lights,
unsigned short limit);
999 virtual void setViewMatrix(
const Matrix4& m);
1000 virtual void useLightsGpuProgram(
const Pass* pass,
const LightList* lights);
1001 virtual void bindGpuProgram(
GpuProgram* prog);
1002 virtual void updateGpuProgramParameters(
const Pass* p);
1073 virtual const String& getTypeName(
void)
const = 0;
1091 virtual bool hasCamera(
const String& name)
const;
1101 virtual void destroyCamera(
Camera *cam);
1108 virtual void destroyCamera(
const String& name);
1118 virtual void destroyAllCameras(
void);
1133 virtual Light* createLight();
1138 virtual Light* getLight(
const String& name)
const;
1142 virtual bool hasLight(
const String& name)
const;
1156 virtual void destroyLight(
const String& name);
1162 virtual void destroyLight(
Light* light);
1165 virtual void destroyAllLights(
void);
1177 virtual void _notifyLightsDirty(
void);
1199 virtual const LightList& _getLightsAffectingFrustum(
void)
const;
1271 virtual SceneNode* createSceneNode(
void);
1295 virtual void destroySceneNode(
const String& name);
1303 virtual void destroySceneNode(
SceneNode* sn);
1319 virtual SceneNode* getRootSceneNode(
void);
1332 virtual bool hasSceneNode(
const String& name)
const;
1383 virtual Entity* createEntity(
const String& entityName, PrefabType ptype);
1388 virtual Entity* createEntity(PrefabType ptype);
1395 virtual bool hasEntity(
const String& name)
const;
1405 virtual void destroyEntity(
Entity* ent);
1415 virtual void destroyEntity(
const String& name);
1426 virtual void destroyAllEntities(
void);
1444 virtual bool hasManualObject(
const String& name)
const;
1451 virtual void destroyManualObject(
const String& name);
1454 virtual void destroyAllManualObjects(
void);
1471 virtual bool hasBillboardChain(
const String& name)
const;
1478 virtual void destroyBillboardChain(
const String& name);
1481 virtual void destroyAllBillboardChains(
void);
1498 virtual bool hasRibbonTrail(
const String& name)
const;
1502 virtual void destroyRibbonTrail(
RibbonTrail* obj);
1505 virtual void destroyRibbonTrail(
const String& name);
1508 virtual void destroyAllRibbonTrails(
void);
1531 const String& templateName);
1580 virtual bool hasParticleSystem(
const String& name)
const;
1587 virtual void destroyParticleSystem(
const String& name);
1590 virtual void destroyAllParticleSystems(
void);
1597 virtual void clearScene(
void);
1632 virtual void prepareWorldGeometry(
const String& filename);
1666 virtual void setWorldGeometry(
const String& filename);
1699 { (void)filename;
return 0; }
1715 { (void)stream; (void)typeName;
return 0; }
1731 virtual ViewPoint getSuggestedViewpoint(
bool random =
false);
1747 { (void)strKey; (void)pValue;
return false; }
1763 { (void)strKey; (void)pDestValue;
return false; }
1775 { (void)strKey;
return false; }
1792 { (void)strKey; (void)refValueList;
return false; }
1801 { (void)refKeys;
return false; }
1811 virtual void _updateSceneGraph(
Camera* cam);
1830 virtual void _applySceneAnimations(
void);
1834 virtual void _renderVisibleObjects(
void);
1849 virtual void _renderScene(
Camera* camera,
Viewport* vp,
bool includeOverlays);
1854 virtual void _queueSkiesForRendering(
Camera* cam);
1866 virtual void _setDestinationRenderSystem(
RenderSystem* sys);
1921 virtual void setSkyPlane(
1924 Real tiling = 10,
bool drawFirst =
true,
Real bow = 0,
1925 int xsegments = 1,
int ysegments = 1,
1970 virtual void _setSkyPlane(
1974 int xsegments = 1,
int ysegments = 1,
2030 virtual void setSkyBox(
2031 bool enable,
const String& materialName,
Real distance = 5000,
2067 virtual void _setSkyBox(
2068 bool enable,
const String& materialName,
Real distance = 5000,
2139 virtual void setSkyDome(
2140 bool enable,
const String& materialName,
Real curvature = 10,
2141 Real tiling = 8,
Real distance = 4000,
bool drawFirst =
true,
2143 int xsegments = 16,
int ysegments = 16,
int ysegments_keep = -1,
2192 virtual void _setSkyDome(
2193 bool enable,
const String& materialName,
Real curvature = 10,
2196 int xsegments = 16,
int ysegments = 16,
int ysegments_keep = -1,
2237 Real expDensity = 0.001,
Real linearStart = 0.0,
Real linearEnd = 1.0);
2241 virtual FogMode getFogMode(
void)
const;
2245 virtual const ColourValue& getFogColour(
void)
const;
2249 virtual Real getFogStart(
void)
const;
2253 virtual Real getFogEnd(
void)
const;
2257 virtual Real getFogDensity(
void)
const;
2277 virtual BillboardSet* createBillboardSet(
const String& name,
unsigned int poolSize = 20);
2285 virtual BillboardSet* createBillboardSet(
unsigned int poolSize = 20);
2292 virtual bool hasBillboardSet(
const String& name)
const;
2308 virtual void destroyBillboardSet(
const String& name);
2319 virtual void destroyAllBillboardSets(
void);
2328 virtual void setDisplaySceneNodes(
bool display);
2360 virtual bool hasAnimation(
const String& name)
const;
2367 virtual void destroyAnimation(
const String& name);
2370 virtual void destroyAllAnimations(
void);
2407 virtual bool hasAnimationState(
const String& name)
const;
2414 virtual void destroyAnimationState(
const String& name);
2417 virtual void destroyAllAnimationStates(
void);
2444 bool doBeginEndFrame =
false) ;
2466 const Matrix4& viewMatrix,
const Matrix4& projMatrix,
bool doBeginEndFrame =
false,
bool lightScissoringClipping =
true,
2467 bool doLightIteration =
true,
const LightList* manualLightList = 0);
2508 virtual void addSpecialCaseRenderQueue(
uint8 qid);
2514 virtual void removeSpecialCaseRenderQueue(
uint8 qid);
2518 virtual void clearSpecialCaseRenderQueues(
void);
2523 virtual void setSpecialCaseRenderQueueMode(SpecialCaseRenderQueueMode mode);
2525 virtual SpecialCaseRenderQueueMode getSpecialCaseRenderQueueMode(
void);
2532 virtual bool isRenderQueueToBeProcessed(
uint8 qid);
2549 virtual void setWorldGeometryRenderQueue(
uint8 qid);
2560 virtual uint8 getWorldGeometryRenderQueue(
void);
2563 virtual void showBoundingBoxes(
bool bShow);
2566 virtual bool getShowBoundingBoxes()
const;
2569 virtual void _notifyAutotrackingSceneNode(
SceneNode* node,
bool autoTrack);
2599 createSphereQuery(
const Sphere& sphere,
uint32 mask = 0xFFFFFFFF);
2629 createRayQuery(
const Ray& ray,
uint32 mask = 0xFFFFFFFF);
2643 createIntersectionQuery(
uint32 mask = 0xFFFFFFFF);
2646 virtual void destroyQuery(
SceneQuery* query);
2668 return mAnimationStates.getAnimationStateIterator();
2719 virtual void setShadowColour(
const ColourValue& colour);
2726 virtual const ColourValue& getShadowColour(
void)
const;
2738 virtual void setShadowDirectionalLightExtrusionDistance(
Real dist);
2741 virtual Real getShadowDirectionalLightExtrusionDistance(
void)
const;
2758 virtual void setShadowFarDistance(
Real distance);
2763 {
return mDefaultShadowFarDist; }
2765 {
return mDefaultShadowFarDistSquared; }
2792 virtual void setShadowIndexBufferSize(
size_t size);
2795 {
return mShadowIndexBufferSize; }
2804 virtual void setShadowTextureSize(
unsigned short size);
2814 virtual void setShadowTextureConfig(
size_t shadowIndex,
unsigned short width,
2815 unsigned short height,
PixelFormat format,
unsigned short fsaa = 0,
uint16 depthBufferPoolId=1);
2821 virtual void setShadowTextureConfig(
size_t shadowIndex,
2838 virtual void setShadowTexturePixelFormat(
PixelFormat fmt);
2845 virtual void setShadowTextureFSAA(
unsigned short fsaa);
2854 virtual void setShadowTextureCount(
size_t count);
2868 { mShadowTextureCountPerType[type] = count; }
2871 {
return mShadowTextureCountPerType[type]; }
2881 virtual void setShadowTextureSettings(
unsigned short size,
unsigned short count,
2890 virtual const TexturePtr& getShadowTexture(
size_t shadowIndex);
2919 { mShadowTextureFadeStart = fadeStart; }
2928 { mShadowTextureFadeEnd = fadeEnd; }
2942 virtual void setShadowTextureSelfShadow(
bool selfShadow);
2946 {
return mShadowTextureSelfShadow; }
2967 virtual void setShadowTextureCasterMaterial(
const String& name);
2989 virtual void setShadowTextureReceiverMaterial(
const String& name);
3057 mShadowUseInfiniteFarPlane = enable; }
3107 virtual void addListener(Listener* s);
3110 virtual void removeListener(Listener* s);
3127 virtual bool hasStaticGeometry(
const String& name)
const;
3131 virtual void destroyStaticGeometry(
const String& name);
3133 virtual void destroyAllStaticGeometry(
void);
3150 virtual void destroyInstancedGeometry(
const String& name);
3152 virtual void destroyAllInstancedGeometry(
void);
3175 size_t numInstancesPerBatch,
uint16 flags=0,
3176 unsigned short subMeshIdx=0 );
3184 virtual bool hasInstanceManager(
const String &managerName )
const;
3192 virtual void destroyInstanceManager(
const String &name );
3193 virtual void destroyInstanceManager(
InstanceManager *instanceManager );
3195 virtual void destroyAllInstanceManagers(
void);
3209 virtual size_t getNumInstancesPerBatch(
const String &meshName,
const String &groupName,
3210 const String &materialName,
3212 size_t numInstancesPerBatch,
uint16 flags=0,
3213 unsigned short subMeshIdx=0 );
3227 const String &managerName );
3233 virtual void destroyInstancedEntity(
InstancedEntity *instancedEntity );
3268 virtual void destroyMovableObject(
const String& name,
const String& typeName);
3276 virtual void destroyAllMovableObjectsByType(
const String& typeName);
3278 virtual void destroyAllMovableObjects(
void);
3284 virtual bool hasMovableObject(
const String& name,
const String& typeName)
const;
3310 virtual void extractMovableObject(
const String& name,
const String& typeName);
3324 virtual void extractAllMovableObjectsByType(
const String& typeName);
3342 uint32 _getCombinedVisibilityMask(
void)
const;
3392 virtual void _injectRenderWithPass(
Pass *pass,
Renderable *rend,
bool shadowDerivation =
true,
3393 bool doLightIteration =
false,
const LightList* manualLightList = 0);
3413 virtual void _suppressRenderStateChanges(
bool suppress);
3419 {
return mSuppressRenderStateChanges; }
3433 virtual const Pass* _setPass(
const Pass* pass,
3434 bool evenIfSuppressed =
false,
bool shadowDerivation =
true);
3443 virtual void _markGpuParamsDirty(
uint16 mask);
3455 virtual void _suppressShadows(
bool suppress);
3461 {
return mSuppressShadows; }
3484 void setQueuedRenderableVisitor(SceneMgrQueuedRenderableVisitor* visitor);
3487 SceneMgrQueuedRenderableVisitor* getQueuedRenderableVisitor(
void)
const;
3547 void _handleLodEvents();
3643 virtual void initMetaData(
void)
const = 0;
3653 mMetaDataInit =
false;
3663 virtual void destroyInstance(
SceneManager* instance) = 0;