00001 /*------------------------------------------------------------------------- 00002 This source file is a part of OGRE 00003 (Object-oriented Graphics Rendering Engine) 00004 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2000-2012 Torus Knot Software Ltd 00008 Permission is hereby granted, free of charge, to any person obtaining a copy 00009 of this software and associated documentation files (the "Software"), to deal 00010 in the Software without restriction, including without limitation the rights 00011 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00012 copies of the Software, and to permit persons to whom the Software is 00013 furnished to do so, subject to the following conditions: 00014 00015 The above copyright notice and this permission notice shall be included in 00016 all copies or substantial portions of the Software. 00017 00018 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00019 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00020 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00021 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00022 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00023 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00024 THE SOFTWARE 00025 00026 You may alternatively use this source under the terms of a specific version of 00027 the OGRE Unrestricted License provided you have obtained such a license from 00028 Torus Knot Software Ltd. 00029 -------------------------------------------------------------------------*/ 00030 #ifndef __SceneManager_H__ 00031 #define __SceneManager_H__ 00032 00033 // Precompiler options 00034 #include "OgrePrerequisites.h" 00035 00036 #include "OgreString.h" 00037 #include "OgreSceneNode.h" 00038 #include "OgrePlane.h" 00039 #include "OgreQuaternion.h" 00040 #include "OgreColourValue.h" 00041 #include "OgreCommon.h" 00042 #include "OgreSceneQuery.h" 00043 #include "OgreAutoParamDataSource.h" 00044 #include "OgreAnimationState.h" 00045 #include "OgreRenderQueue.h" 00046 #include "OgreRenderQueueSortingGrouping.h" 00047 #include "OgreRectangle2D.h" 00048 #include "OgrePixelFormat.h" 00049 #include "OgreResourceGroupManager.h" 00050 #include "OgreTexture.h" 00051 #include "OgreShadowCameraSetup.h" 00052 #include "OgreShadowTextureManager.h" 00053 #include "OgreCamera.h" 00054 #include "OgreInstancedGeometry.h" 00055 #include "OgreLodListener.h" 00056 #include "OgreInstanceManager.h" 00057 #include "OgreRenderSystem.h" 00058 namespace Ogre { 00067 struct ViewPoint 00068 { 00069 Vector3 position; 00070 Quaternion orientation; 00071 }; 00072 00073 // Forward declarations 00074 class DefaultIntersectionSceneQuery; 00075 class DefaultRaySceneQuery; 00076 class DefaultSphereSceneQuery; 00077 class DefaultAxisAlignedBoxSceneQuery; 00078 class CompositorChain; 00079 00083 struct _OgreExport VisibleObjectsBoundsInfo 00084 { 00086 AxisAlignedBox aabb; 00088 AxisAlignedBox receiverAabb; 00090 Real minDistance; 00092 Real maxDistance; 00094 Real minDistanceInFrustum; 00096 Real maxDistanceInFrustum; 00097 00098 VisibleObjectsBoundsInfo(); 00099 void reset(); 00100 void merge(const AxisAlignedBox& boxBounds, const Sphere& sphereBounds, 00101 const Camera* cam, bool receiver=true); 00105 void mergeNonRenderedButInFrustum(const AxisAlignedBox& boxBounds, 00106 const Sphere& sphereBounds, const Camera* cam); 00107 00108 00109 }; 00110 00140 class _OgreExport SceneManager : public SceneMgtAlloc 00141 { 00142 public: 00144 static uint32 WORLD_GEOMETRY_TYPE_MASK; 00146 static uint32 ENTITY_TYPE_MASK; 00148 static uint32 FX_TYPE_MASK; 00150 static uint32 STATICGEOMETRY_TYPE_MASK; 00152 static uint32 LIGHT_TYPE_MASK; 00154 static uint32 FRUSTUM_TYPE_MASK; 00156 static uint32 USER_TYPE_MASK_LIMIT; 00159 struct materialLess 00160 { 00161 _OgreExport bool operator()(const Material* x, const Material* y) const; 00162 }; 00164 struct lightLess 00165 { 00166 _OgreExport bool operator()(const Light* a, const Light* b) const; 00167 }; 00168 00170 enum IlluminationRenderStage 00171 { 00173 IRS_NONE, 00175 IRS_RENDER_TO_TEXTURE, 00177 IRS_RENDER_RECEIVER_PASS 00178 }; 00179 00184 enum SpecialCaseRenderQueueMode 00185 { 00187 SCRQM_INCLUDE, 00189 SCRQM_EXCLUDE 00190 }; 00191 00192 struct SkyDomeGenParameters 00193 { 00194 Real skyDomeCurvature; 00195 Real skyDomeTiling; 00196 Real skyDomeDistance; 00197 int skyDomeXSegments; 00198 int skyDomeYSegments; 00199 int skyDomeYSegments_keep; 00200 }; 00201 00202 struct SkyPlaneGenParameters 00203 { 00204 Real skyPlaneScale; 00205 Real skyPlaneTiling; 00206 Real skyPlaneBow; 00207 int skyPlaneXSegments; 00208 int skyPlaneYSegments; 00209 }; 00210 00211 struct SkyBoxGenParameters 00212 { 00213 Real skyBoxDistance; 00214 }; 00215 00219 class Listener 00220 { 00221 public: 00222 Listener() {} 00223 virtual ~Listener() {} 00224 00231 virtual void preUpdateSceneGraph(SceneManager* source, Camera* camera) 00232 { (void)source; (void)camera; } 00233 00240 virtual void postUpdateSceneGraph(SceneManager* source, Camera* camera) 00241 { (void)source; (void)camera; } 00242 00252 virtual void preFindVisibleObjects(SceneManager* source, 00253 IlluminationRenderStage irs, Viewport* v) 00254 { (void)source; (void)irs; (void)v; } 00255 00266 virtual void postFindVisibleObjects(SceneManager* source, 00267 IlluminationRenderStage irs, Viewport* v) 00268 { (void)source; (void)irs; (void)v; } 00269 00284 virtual void shadowTexturesUpdated(size_t numberOfShadowTextures) 00285 { (void)numberOfShadowTextures; } 00286 00300 virtual void shadowTextureCasterPreViewProj(Light* light, 00301 Camera* camera, size_t iteration) 00302 { (void)light; (void)camera; (void)iteration; } 00303 00317 virtual void shadowTextureReceiverPreViewProj(Light* light, 00318 Frustum* frustum) 00319 { (void)light; (void)frustum; } 00320 00343 virtual bool sortLightsAffectingFrustum(LightList& lightList) 00344 { (void)lightList; return false; } 00345 00347 virtual void sceneManagerDestroyed(SceneManager* source) 00348 { (void)source; } 00349 }; 00350 00354 class _OgreExport SceneMgrQueuedRenderableVisitor : public QueuedRenderableVisitor 00355 { 00356 protected: 00358 const Pass* mUsedPass; 00359 public: 00360 SceneMgrQueuedRenderableVisitor() 00361 :transparentShadowCastersMode(false) {} 00362 ~SceneMgrQueuedRenderableVisitor() {} 00363 void visit(Renderable* r); 00364 bool visit(const Pass* p); 00365 void visit(RenderablePass* rp); 00366 00368 SceneManager* targetSceneMgr; 00370 bool transparentShadowCastersMode; 00372 bool autoLights; 00374 const LightList* manualLightList; 00376 bool scissoring; 00377 00378 }; 00380 friend class SceneMgrQueuedRenderableVisitor; 00381 00382 protected: 00383 00385 virtual SceneNode* createSceneNodeImpl(void); 00387 virtual SceneNode* createSceneNodeImpl(const String& name); 00388 00390 String mName; 00391 00393 RenderQueue* mRenderQueue; 00394 bool mLastRenderQueueInvocationCustom; 00395 00397 ColourValue mAmbientLight; 00398 00400 RenderSystem *mDestRenderSystem; 00401 00402 typedef map<String, Camera* >::type CameraList; 00403 00406 CameraList mCameras; 00407 00408 typedef map<String, StaticGeometry* >::type StaticGeometryList; 00409 StaticGeometryList mStaticGeometryList; 00410 typedef map<String, InstancedGeometry* >::type InstancedGeometryList; 00411 InstancedGeometryList mInstancedGeometryList; 00412 00413 typedef map<String, InstanceManager*>::type InstanceManagerMap; 00414 InstanceManagerMap mInstanceManagerMap; 00415 00416 typedef map<String, SceneNode*>::type SceneNodeList; 00417 00424 SceneNodeList mSceneNodes; 00425 00427 Camera* mCameraInProgress; 00429 Viewport* mCurrentViewport; 00430 00432 SceneNode* mSceneRoot; 00433 00435 typedef set<SceneNode*>::type AutoTrackingSceneNodes; 00436 AutoTrackingSceneNodes mAutoTrackingSceneNodes; 00437 00438 // Sky params 00439 // Sky plane 00440 Entity* mSkyPlaneEntity; 00441 Entity* mSkyDomeEntity[5]; 00442 ManualObject* mSkyBoxObj; 00443 00444 SceneNode* mSkyPlaneNode; 00445 SceneNode* mSkyDomeNode; 00446 SceneNode* mSkyBoxNode; 00447 00448 // Sky plane 00449 bool mSkyPlaneEnabled; 00450 uint8 mSkyPlaneRenderQueue; 00451 Plane mSkyPlane; 00452 SkyPlaneGenParameters mSkyPlaneGenParameters; 00453 // Sky box 00454 bool mSkyBoxEnabled; 00455 uint8 mSkyBoxRenderQueue; 00456 Quaternion mSkyBoxOrientation; 00457 SkyBoxGenParameters mSkyBoxGenParameters; 00458 // Sky dome 00459 bool mSkyDomeEnabled; 00460 uint8 mSkyDomeRenderQueue; 00461 Quaternion mSkyDomeOrientation; 00462 SkyDomeGenParameters mSkyDomeGenParameters; 00463 00464 // Fog 00465 FogMode mFogMode; 00466 ColourValue mFogColour; 00467 Real mFogStart; 00468 Real mFogEnd; 00469 Real mFogDensity; 00470 00471 typedef set<uint8>::type SpecialCaseRenderQueueList; 00472 SpecialCaseRenderQueueList mSpecialCaseQueueList; 00473 SpecialCaseRenderQueueMode mSpecialCaseQueueMode; 00474 uint8 mWorldGeometryRenderQueue; 00475 00476 unsigned long mLastFrameNumber; 00477 Matrix4 mTempXform[256]; 00478 bool mResetIdentityView; 00479 bool mResetIdentityProj; 00480 00481 bool mNormaliseNormalsOnScale; 00482 bool mFlipCullingOnNegativeScale; 00483 CullingMode mPassCullingMode; 00484 00485 protected: 00486 00494 typedef map< const Camera*, VisibleObjectsBoundsInfo>::type CamVisibleObjectsMap; 00495 CamVisibleObjectsMap mCamVisibleObjectsMap; 00496 00498 typedef map< const Camera*, const Light* >::type ShadowCamLightMapping; 00499 ShadowCamLightMapping mShadowCamLightMapping; 00500 00502 size_t mShadowTextureCountPerType[3]; 00503 00505 vector<size_t>::type mShadowTextureIndexLightList; 00506 00508 struct _OgreExport LightInfo 00509 { 00510 Light* light; // Just a pointer for comparison, the light might destroyed for some reason 00511 int type; // Use int instead of Light::LightTypes to avoid header file dependence 00512 Real range; // Sets to zero if directional light 00513 Vector3 position; // Sets to zero if directional light 00514 uint32 lightMask; // Light mask 00515 00516 bool operator== (const LightInfo& rhs) const 00517 { 00518 return light == rhs.light && type == rhs.type && 00519 range == rhs.range && position == rhs.position && lightMask == rhs.lightMask; 00520 } 00521 00522 bool operator!= (const LightInfo& rhs) const 00523 { 00524 return !(*this == rhs); 00525 } 00526 }; 00527 00528 typedef vector<LightInfo>::type LightInfoList; 00529 00530 LightList mLightsAffectingFrustum; 00531 LightInfoList mCachedLightInfos; 00532 LightInfoList mTestLightInfos; // potentially new list 00533 ulong mLightsDirtyCounter; 00534 LightList mShadowTextureCurrentCasterLightList; 00535 00536 typedef map<String, MovableObject*>::type MovableObjectMap; 00538 struct MovableObjectCollection 00539 { 00540 MovableObjectMap map; 00541 OGRE_MUTEX(mutex) 00542 }; 00543 typedef map<String, MovableObjectCollection*>::type MovableObjectCollectionMap; 00544 MovableObjectCollectionMap mMovableObjectCollectionMap; 00545 NameGenerator mMovableNameGenerator; 00550 MovableObjectCollection* getMovableObjectCollection(const String& typeName); 00555 const MovableObjectCollection* getMovableObjectCollection(const String& typeName) const; 00557 OGRE_MUTEX(mMovableObjectCollectionMapMutex) 00558 00559 00563 virtual void initRenderQueue(void); 00565 Pass* mShadowCasterPlainBlackPass; 00567 Pass* mShadowReceiverPass; 00577 virtual const Pass* deriveShadowCasterPass(const Pass* pass); 00586 virtual const Pass* deriveShadowReceiverPass(const Pass* pass); 00587 00594 virtual bool validatePassForRendering(const Pass* pass); 00595 00602 virtual bool validateRenderableForRendering(const Pass* pass, const Renderable* rend); 00603 00604 enum BoxPlane 00605 { 00606 BP_FRONT = 0, 00607 BP_BACK = 1, 00608 BP_LEFT = 2, 00609 BP_RIGHT = 3, 00610 BP_UP = 4, 00611 BP_DOWN = 5 00612 }; 00613 00614 /* Internal utility method for creating the planes of a skybox. 00615 */ 00616 virtual MeshPtr createSkyboxPlane( 00617 BoxPlane bp, 00618 Real distance, 00619 const Quaternion& orientation, 00620 const String& groupName); 00621 00622 /* Internal utility method for creating the planes of a skydome. 00623 */ 00624 virtual MeshPtr createSkydomePlane( 00625 BoxPlane bp, 00626 Real curvature, Real tiling, Real distance, 00627 const Quaternion& orientation, 00628 int xsegments, int ysegments, int ySegmentsToKeep, 00629 const String& groupName); 00630 00631 // Flag indicating whether SceneNodes will be rendered as a set of 3 axes 00632 bool mDisplayNodes; 00633 00635 typedef map<String, Animation*>::type AnimationList; 00636 AnimationList mAnimationsList; 00637 OGRE_MUTEX(mAnimationsListMutex) 00638 AnimationStateSet mAnimationStates; 00639 00640 00643 virtual void useRenderableViewProjMode(const Renderable* pRend, bool fixedFunction); 00644 00647 virtual void resetViewProjMode(bool fixedFunction); 00648 00649 typedef vector<RenderQueueListener*>::type RenderQueueListenerList; 00650 RenderQueueListenerList mRenderQueueListeners; 00651 00652 typedef vector<RenderObjectListener*>::type RenderObjectListenerList; 00653 RenderObjectListenerList mRenderObjectListeners; 00654 typedef vector<Listener*>::type ListenerList; 00655 ListenerList mListeners; 00657 virtual void firePreRenderQueues(); 00659 virtual void firePostRenderQueues(); 00661 virtual bool fireRenderQueueStarted(uint8 id, const String& invocation); 00663 virtual bool fireRenderQueueEnded(uint8 id, const String& invocation); 00665 virtual void fireRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, 00666 const LightList* pLightList, bool suppressRenderStateChanges); 00667 00669 virtual void fireShadowTexturesUpdated(size_t numberOfShadowTextures); 00671 virtual void fireShadowTexturesPreCaster(Light* light, Camera* camera, size_t iteration); 00673 virtual void fireShadowTexturesPreReceiver(Light* light, Frustum* f); 00675 virtual void firePreUpdateSceneGraph(Camera* camera); 00677 virtual void firePostUpdateSceneGraph(Camera* camera); 00679 virtual void firePreFindVisibleObjects(Viewport* v); 00681 virtual void firePostFindVisibleObjects(Viewport* v); 00683 virtual void fireSceneManagerDestroyed(); 00685 virtual void setViewport(Viewport *vp); 00686 00688 bool mShowBoundingBoxes; 00689 00691 virtual void renderVisibleObjectsDefaultSequence(void); 00693 virtual void renderVisibleObjectsCustomSequence(RenderQueueInvocationSequence* s); 00695 virtual void prepareRenderQueue(void); 00696 00697 00713 virtual void renderSingleObject(Renderable* rend, const Pass* pass, 00714 bool lightScissoringClipping, bool doLightIteration, const LightList* manualLightList = 0); 00715 00717 virtual AutoParamDataSource* createAutoParamDataSource(void) const 00718 { 00719 return OGRE_NEW AutoParamDataSource(); 00720 } 00721 00723 AutoParamDataSource* mAutoParamDataSource; 00724 00725 CompositorChain* mActiveCompositorChain; 00726 bool mLateMaterialResolving; 00727 00728 ShadowTechnique mShadowTechnique; 00729 bool mDebugShadows; 00730 ColourValue mShadowColour; 00731 Pass* mShadowDebugPass; 00732 Pass* mShadowStencilPass; 00733 Pass* mShadowModulativePass; 00734 bool mShadowMaterialInitDone; 00735 HardwareIndexBufferSharedPtr mShadowIndexBuffer; 00736 size_t mShadowIndexBufferSize; 00737 Rectangle2D* mFullScreenQuad; 00738 Real mShadowDirLightExtrudeDist; 00739 IlluminationRenderStage mIlluminationStage; 00740 ShadowTextureConfigList mShadowTextureConfigList; 00741 bool mShadowTextureConfigDirty; 00742 ShadowTextureList mShadowTextures; 00743 TexturePtr mNullShadowTexture; 00744 typedef vector<Camera*>::type ShadowTextureCameraList; 00745 ShadowTextureCameraList mShadowTextureCameras; 00746 Texture* mCurrentShadowTexture; 00747 bool mShadowUseInfiniteFarPlane; 00748 bool mShadowCasterRenderBackFaces; 00749 bool mShadowAdditiveLightClip; 00751 struct LightClippingInfo 00752 { 00753 RealRect scissorRect; 00754 PlaneList clipPlanes; 00755 bool scissorValid; 00756 unsigned long clipPlanesValid; 00757 LightClippingInfo() : scissorValid(false), clipPlanesValid(false) {} 00758 00759 }; 00760 typedef map<Light*, LightClippingInfo>::type LightClippingInfoMap; 00761 LightClippingInfoMap mLightClippingInfoMap; 00762 unsigned long mLightClippingInfoMapFrameNumber; 00763 00765 ShadowCameraSetupPtr mDefaultShadowCameraSetup; 00766 00775 struct lightsForShadowTextureLess 00776 { 00777 _OgreExport bool operator()(const Light* l1, const Light* l2) const; 00778 }; 00779 00780 00787 virtual void findLightsAffectingFrustum(const Camera* camera); 00789 virtual void initShadowVolumeMaterials(void); 00791 virtual void ensureShadowTexturesCreated(); 00793 virtual void destroyShadowTextures(void); 00794 00795 typedef vector<InstanceManager*>::type InstanceManagerVec; 00796 InstanceManagerVec mDirtyInstanceManagers; 00797 InstanceManagerVec mDirtyInstanceMgrsTmp; 00798 00800 void updateDirtyInstanceManagers(void); 00801 00802 public: 00806 virtual void prepareShadowTextures(Camera* cam, Viewport* vp, const LightList* lightList = 0); 00807 00808 //A render context, used to store internal data for pausing/resuming rendering 00809 struct RenderContext 00810 { 00811 RenderQueue* renderQueue; 00812 Viewport* viewport; 00813 Camera* camera; 00814 CompositorChain* activeChain; 00815 RenderSystem::RenderSystemContext* rsContext; 00816 }; 00817 00821 virtual RenderContext* _pauseRendering(); 00825 virtual void _resumeRendering(RenderContext* context); 00826 00827 protected: 00835 virtual void renderShadowVolumesToStencil(const Light* light, const Camera* cam, 00836 bool calcScissor); 00842 virtual void setShadowVolumeStencilState(bool secondpass, bool zfail, bool twosided); 00844 void renderShadowVolumeObjects(ShadowCaster::ShadowRenderableListIterator iShadowRenderables, 00845 Pass* pass, const LightList *manualLightList, unsigned long flags, 00846 bool secondpass, bool zfail, bool twosided); 00847 typedef vector<ShadowCaster*>::type ShadowCasterList; 00848 ShadowCasterList mShadowCasterList; 00849 SphereSceneQuery* mShadowCasterSphereQuery; 00850 AxisAlignedBoxSceneQuery* mShadowCasterAABBQuery; 00851 Real mDefaultShadowFarDist; 00852 Real mDefaultShadowFarDistSquared; 00853 Real mShadowTextureOffset; // proportion of texture offset in view direction e.g. 0.4 00854 Real mShadowTextureFadeStart; // as a proportion e.g. 0.6 00855 Real mShadowTextureFadeEnd; // as a proportion e.g. 0.9 00856 bool mShadowTextureSelfShadow; 00857 Pass* mShadowTextureCustomCasterPass; 00858 Pass* mShadowTextureCustomReceiverPass; 00859 String mShadowTextureCustomCasterVertexProgram; 00860 String mShadowTextureCustomCasterFragmentProgram; 00861 String mShadowTextureCustomReceiverVertexProgram; 00862 String mShadowTextureCustomReceiverFragmentProgram; 00863 GpuProgramParametersSharedPtr mShadowTextureCustomCasterVPParams; 00864 GpuProgramParametersSharedPtr mShadowTextureCustomCasterFPParams; 00865 GpuProgramParametersSharedPtr mShadowTextureCustomReceiverVPParams; 00866 GpuProgramParametersSharedPtr mShadowTextureCustomReceiverFPParams; 00867 00869 uint32 mVisibilityMask; 00870 bool mFindVisibleObjects; 00871 00873 bool mSuppressRenderStateChanges; 00875 bool mSuppressShadows; 00876 00877 00878 GpuProgramParametersSharedPtr mInfiniteExtrusionParams; 00879 GpuProgramParametersSharedPtr mFiniteExtrusionParams; 00880 00882 class _OgreExport ShadowCasterSceneQueryListener : public SceneQueryListener, public SceneMgtAlloc 00883 { 00884 protected: 00885 SceneManager* mSceneMgr; 00886 ShadowCasterList* mCasterList; 00887 bool mIsLightInFrustum; 00888 const PlaneBoundedVolumeList* mLightClipVolumeList; 00889 const Camera* mCamera; 00890 const Light* mLight; 00891 Real mFarDistSquared; 00892 public: 00893 ShadowCasterSceneQueryListener(SceneManager* sm) : mSceneMgr(sm), 00894 mCasterList(0), mIsLightInFrustum(false), mLightClipVolumeList(0), 00895 mCamera(0) {} 00896 // Prepare the listener for use with a set of parameters 00897 void prepare(bool lightInFrustum, 00898 const PlaneBoundedVolumeList* lightClipVolumes, 00899 const Light* light, const Camera* cam, ShadowCasterList* casterList, 00900 Real farDistSquared) 00901 { 00902 mCasterList = casterList; 00903 mIsLightInFrustum = lightInFrustum; 00904 mLightClipVolumeList = lightClipVolumes; 00905 mCamera = cam; 00906 mLight = light; 00907 mFarDistSquared = farDistSquared; 00908 } 00909 bool queryResult(MovableObject* object); 00910 bool queryResult(SceneQuery::WorldFragment* fragment); 00911 }; 00912 00913 ShadowCasterSceneQueryListener* mShadowCasterQueryListener; 00914 00921 virtual const ShadowCasterList& findShadowCastersForLight(const Light* light, 00922 const Camera* camera); 00924 virtual void renderBasicQueueGroupObjects(RenderQueueGroup* pGroup, 00925 QueuedRenderableCollection::OrganisationMode om); 00927 virtual void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* group, 00928 QueuedRenderableCollection::OrganisationMode om); 00930 virtual void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* group, 00931 QueuedRenderableCollection::OrganisationMode om); 00933 virtual void renderTextureShadowCasterQueueGroupObjects(RenderQueueGroup* group, 00934 QueuedRenderableCollection::OrganisationMode om); 00936 virtual void renderTextureShadowReceiverQueueGroupObjects(RenderQueueGroup* group, 00937 QueuedRenderableCollection::OrganisationMode om); 00939 virtual void renderModulativeTextureShadowedQueueGroupObjects(RenderQueueGroup* group, 00940 QueuedRenderableCollection::OrganisationMode om); 00941 00943 virtual void renderAdditiveTextureShadowedQueueGroupObjects(RenderQueueGroup* group, 00944 QueuedRenderableCollection::OrganisationMode om); 00946 virtual void renderObjects(const QueuedRenderableCollection& objs, 00947 QueuedRenderableCollection::OrganisationMode om, bool lightScissoringClipping, 00948 bool doLightIteration, const LightList* manualLightList = 0); 00954 virtual void renderTransparentShadowCasterObjects(const QueuedRenderableCollection& objs, 00955 QueuedRenderableCollection::OrganisationMode om, bool lightScissoringClipping, 00956 bool doLightIteration, const LightList* manualLightList = 0); 00957 00960 virtual void updateRenderQueueSplitOptions(void); 00963 virtual void updateRenderQueueGroupSplitOptions(RenderQueueGroup* group, 00964 bool suppressShadows, bool suppressRenderState); 00965 00967 virtual ClipResult buildAndSetScissor(const LightList& ll, const Camera* cam); 00969 virtual void buildScissor(const Light* l, const Camera* cam, RealRect& rect); 00970 virtual void resetScissor(); 00972 virtual ClipResult buildAndSetLightClip(const LightList& ll); 00973 virtual void buildLightClip(const Light* l, PlaneList& planes); 00974 virtual void resetLightClip(); 00975 virtual void checkCachedLightClippingInfo(); 00976 00978 SceneMgrQueuedRenderableVisitor* mActiveQueuedRenderableVisitor; 00980 SceneMgrQueuedRenderableVisitor mDefaultQueuedRenderableVisitor; 00981 00983 bool mCameraRelativeRendering; 00984 Matrix4 mCachedViewMatrix; 00985 Vector3 mCameraRelativePosition; 00986 00988 uint32 mLastLightHash; 00989 unsigned short mLastLightLimit; 00990 uint32 mLastLightHashGpuProgram; 00992 uint16 mGpuParamsDirty; 00993 00994 virtual void useLights(const LightList& lights, unsigned short limit); 00995 virtual void setViewMatrix(const Matrix4& m); 00996 virtual void useLightsGpuProgram(const Pass* pass, const LightList* lights); 00997 virtual void bindGpuProgram(GpuProgram* prog); 00998 virtual void updateGpuProgramParameters(const Pass* p); 00999 01000 01001 01002 01003 01004 01005 01006 01008 typedef set<LodListener*>::type LodListenerSet; 01009 LodListenerSet mLodListeners; 01010 01012 typedef vector<MovableObjectLodChangedEvent>::type MovableObjectLodChangedEventList; 01013 MovableObjectLodChangedEventList mMovableObjectLodChangedEvents; 01014 01016 typedef vector<EntityMeshLodChangedEvent>::type EntityMeshLodChangedEventList; 01017 EntityMeshLodChangedEventList mEntityMeshLodChangedEvents; 01018 01020 typedef vector<EntityMaterialLodChangedEvent>::type EntityMaterialLodChangedEventList; 01021 EntityMaterialLodChangedEventList mEntityMaterialLodChangedEvents; 01022 01023 public: 01026 SceneManager(const String& instanceName); 01027 01030 virtual ~SceneManager(); 01031 01032 01058 OGRE_MUTEX(sceneGraphMutex) 01059 01060 01061 const String& getName(void) const { return mName; } 01062 01069 virtual const String& getTypeName(void) const = 0; 01070 01078 virtual Camera* createCamera(const String& name); 01079 01083 virtual Camera* getCamera(const String& name) const; 01084 01087 virtual bool hasCamera(const String& name) const; 01088 01097 virtual void destroyCamera(Camera *cam); 01098 01104 virtual void destroyCamera(const String& name); 01105 01114 virtual void destroyAllCameras(void); 01115 01126 virtual Light* createLight(const String& name); 01127 01129 virtual Light* createLight(); 01130 01134 virtual Light* getLight(const String& name) const; 01135 01138 virtual bool hasLight(const String& name) const; 01139 01142 virtual const PlaneList& getLightClippingPlanes(Light* l); 01143 01146 virtual const RealRect& getLightScissorRect(Light* l, const Camera* cam); 01147 01152 virtual void destroyLight(const String& name); 01153 01158 virtual void destroyLight(Light* light); 01161 virtual void destroyAllLights(void); 01162 01173 virtual void _notifyLightsDirty(void); 01174 01187 ulong _getLightsDirtyCounter(void) const { return mLightsDirtyCounter; } 01188 01195 virtual const LightList& _getLightsAffectingFrustum(void) const; 01196 01219 virtual void _populateLightList(const Vector3& position, Real radius, LightList& destList, uint32 lightMask = 0xFFFFFFFF); 01220 01249 virtual void _populateLightList(const SceneNode* sn, Real radius, LightList& destList, uint32 lightMask = 0xFFFFFFFF); 01250 01267 virtual SceneNode* createSceneNode(void); 01268 01283 virtual SceneNode* createSceneNode(const String& name); 01284 01291 virtual void destroySceneNode(const String& name); 01292 01299 virtual void destroySceneNode(SceneNode* sn); 01315 virtual SceneNode* getRootSceneNode(void); 01316 01324 virtual SceneNode* getSceneNode(const String& name) const; 01325 01328 virtual bool hasSceneNode(const String& name) const; 01329 01330 01338 virtual Entity* createEntity(const String& entityName, const String& meshName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME ); 01339 01346 virtual Entity* createEntity(const String& entityName, const MeshPtr& pMesh ); 01347 01353 virtual Entity* createEntity(const String& meshName); 01354 01359 virtual Entity* createEntity(const MeshPtr& pMesh); 01360 01367 enum PrefabType { 01368 PT_PLANE, 01369 PT_CUBE, 01370 PT_SPHERE 01371 }; 01372 01379 virtual Entity* createEntity(const String& entityName, PrefabType ptype); 01380 01384 virtual Entity* createEntity(PrefabType ptype); 01388 virtual Entity* getEntity(const String& name) const; 01391 virtual bool hasEntity(const String& name) const; 01392 01401 virtual void destroyEntity(Entity* ent); 01402 01411 virtual void destroyEntity(const String& name); 01412 01422 virtual void destroyAllEntities(void); 01423 01429 virtual ManualObject* createManualObject(const String& name); 01433 virtual ManualObject* createManualObject(); 01437 virtual ManualObject* getManualObject(const String& name) const; 01440 virtual bool hasManualObject(const String& name) const; 01441 01444 virtual void destroyManualObject(ManualObject* obj); 01447 virtual void destroyManualObject(const String& name); 01450 virtual void destroyAllManualObjects(void); 01456 virtual BillboardChain* createBillboardChain(const String& name); 01460 virtual BillboardChain* createBillboardChain(); 01464 virtual BillboardChain* getBillboardChain(const String& name) const; 01467 virtual bool hasBillboardChain(const String& name) const; 01468 01471 virtual void destroyBillboardChain(BillboardChain* obj); 01474 virtual void destroyBillboardChain(const String& name); 01477 virtual void destroyAllBillboardChains(void); 01483 virtual RibbonTrail* createRibbonTrail(const String& name); 01487 virtual RibbonTrail* createRibbonTrail(); 01491 virtual RibbonTrail* getRibbonTrail(const String& name) const; 01494 virtual bool hasRibbonTrail(const String& name) const; 01495 01498 virtual void destroyRibbonTrail(RibbonTrail* obj); 01501 virtual void destroyRibbonTrail(const String& name); 01504 virtual void destroyAllRibbonTrails(void); 01505 01526 virtual ParticleSystem* createParticleSystem(const String& name, 01527 const String& templateName); 01547 virtual ParticleSystem* createParticleSystem(const String& name, 01548 size_t quota = 500, 01549 const String& resourceGroup = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01550 01568 virtual ParticleSystem* createParticleSystem(size_t quota = 500, 01569 const String& resourceGroup = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01573 virtual ParticleSystem* getParticleSystem(const String& name) const; 01576 virtual bool hasParticleSystem(const String& name) const; 01577 01580 virtual void destroyParticleSystem(ParticleSystem* obj); 01583 virtual void destroyParticleSystem(const String& name); 01586 virtual void destroyAllParticleSystems(void); 01587 01593 virtual void clearScene(void); 01594 01607 void setAmbientLight(const ColourValue& colour); 01608 01611 const ColourValue& getAmbientLight(void) const; 01612 01628 virtual void prepareWorldGeometry(const String& filename); 01629 01647 virtual void prepareWorldGeometry(DataStreamPtr& stream, 01648 const String& typeName = StringUtil::BLANK); 01649 01662 virtual void setWorldGeometry(const String& filename); 01663 01679 virtual void setWorldGeometry(DataStreamPtr& stream, 01680 const String& typeName = StringUtil::BLANK); 01681 01694 virtual size_t estimateWorldGeometry(const String& filename) 01695 { (void)filename; return 0; } 01696 01709 virtual size_t estimateWorldGeometry(DataStreamPtr& stream, 01710 const String& typeName = StringUtil::BLANK) 01711 { (void)stream; (void)typeName; return 0; } 01712 01727 virtual ViewPoint getSuggestedViewpoint(bool random = false); 01728 01742 virtual bool setOption( const String& strKey, const void* pValue ) 01743 { (void)strKey; (void)pValue; return false; } 01744 01758 virtual bool getOption( const String& strKey, void* pDestValue ) 01759 { (void)strKey; (void)pDestValue; return false; } 01760 01770 virtual bool hasOption( const String& strKey ) const 01771 { (void)strKey; return false; } 01772 01787 virtual bool getOptionValues( const String& strKey, StringVector& refValueList ) 01788 { (void)strKey; (void)refValueList; return false; } 01789 01796 virtual bool getOptionKeys( StringVector& refKeys ) 01797 { (void)refKeys; return false; } 01798 01807 virtual void _updateSceneGraph(Camera* cam); 01808 01820 virtual void _findVisibleObjects(Camera* cam, VisibleObjectsBoundsInfo* visibleBounds, bool onlyShadowCasters); 01821 01826 virtual void _applySceneAnimations(void); 01827 01830 virtual void _renderVisibleObjects(void); 01831 01845 virtual void _renderScene(Camera* camera, Viewport* vp, bool includeOverlays); 01846 01850 virtual void _queueSkiesForRendering(Camera* cam); 01851 01852 01853 01862 virtual void _setDestinationRenderSystem(RenderSystem* sys); 01863 01917 virtual void setSkyPlane( 01918 bool enable, 01919 const Plane& plane, const String& materialName, Real scale = 1000, 01920 Real tiling = 10, bool drawFirst = true, Real bow = 0, 01921 int xsegments = 1, int ysegments = 1, 01922 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01966 virtual void _setSkyPlane( 01967 bool enable, 01968 const Plane& plane, const String& materialName, Real scale = 1000, 01969 Real tiling = 10, uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, Real bow = 0, 01970 int xsegments = 1, int ysegments = 1, 01971 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01972 01974 virtual void setSkyPlaneEnabled(bool enable) { mSkyPlaneEnabled = enable; } 01975 01977 virtual bool isSkyPlaneEnabled(void) const { return mSkyPlaneEnabled; } 01978 01980 virtual SceneNode* getSkyPlaneNode(void) const { return mSkyPlaneNode; } 01981 01983 virtual const SkyPlaneGenParameters& getSkyPlaneGenParameters(void) const { return mSkyPlaneGenParameters; } 01984 02026 virtual void setSkyBox( 02027 bool enable, const String& materialName, Real distance = 5000, 02028 bool drawFirst = true, const Quaternion& orientation = Quaternion::IDENTITY, 02029 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02030 02063 virtual void _setSkyBox( 02064 bool enable, const String& materialName, Real distance = 5000, 02065 uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, const Quaternion& orientation = Quaternion::IDENTITY, 02066 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02067 02069 virtual void setSkyBoxEnabled(bool enable) { mSkyBoxEnabled = enable; } 02070 02072 virtual bool isSkyBoxEnabled(void) const { return mSkyBoxEnabled; } 02073 02075 virtual SceneNode* getSkyBoxNode(void) const { return mSkyBoxNode; } 02076 02078 virtual const SkyBoxGenParameters& getSkyBoxGenParameters(void) const { return mSkyBoxGenParameters; } 02079 02135 virtual void setSkyDome( 02136 bool enable, const String& materialName, Real curvature = 10, 02137 Real tiling = 8, Real distance = 4000, bool drawFirst = true, 02138 const Quaternion& orientation = Quaternion::IDENTITY, 02139 int xsegments = 16, int ysegments = 16, int ysegments_keep = -1, 02140 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02141 02188 virtual void _setSkyDome( 02189 bool enable, const String& materialName, Real curvature = 10, 02190 Real tiling = 8, Real distance = 4000, uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, 02191 const Quaternion& orientation = Quaternion::IDENTITY, 02192 int xsegments = 16, int ysegments = 16, int ysegments_keep = -1, 02193 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02194 02196 virtual void setSkyDomeEnabled(bool enable) { mSkyDomeEnabled = enable; } 02197 02199 virtual bool isSkyDomeEnabled(void) const { return mSkyDomeEnabled; } 02200 02202 virtual SceneNode* getSkyDomeNode(void) const { return mSkyDomeNode; } 02203 02205 virtual const SkyDomeGenParameters& getSkyDomeGenParameters(void) const { return mSkyDomeGenParameters; } 02206 02231 void setFog( 02232 FogMode mode = FOG_NONE, const ColourValue& colour = ColourValue::White, 02233 Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0); 02234 02237 virtual FogMode getFogMode(void) const; 02238 02241 virtual const ColourValue& getFogColour(void) const; 02242 02245 virtual Real getFogStart(void) const; 02246 02249 virtual Real getFogEnd(void) const; 02250 02253 virtual Real getFogDensity(void) const; 02254 02255 02273 virtual BillboardSet* createBillboardSet(const String& name, unsigned int poolSize = 20); 02274 02281 virtual BillboardSet* createBillboardSet(unsigned int poolSize = 20); 02285 virtual BillboardSet* getBillboardSet(const String& name) const; 02288 virtual bool hasBillboardSet(const String& name) const; 02289 02296 virtual void destroyBillboardSet(BillboardSet* set); 02297 02304 virtual void destroyBillboardSet(const String& name); 02305 02315 virtual void destroyAllBillboardSets(void); 02316 02324 virtual void setDisplaySceneNodes(bool display); 02326 virtual bool getDisplaySceneNodes(void) const {return mDisplayNodes;} 02327 02348 virtual Animation* createAnimation(const String& name, Real length); 02349 02353 virtual Animation* getAnimation(const String& name) const; 02356 virtual bool hasAnimation(const String& name) const; 02357 02363 virtual void destroyAnimation(const String& name); 02364 02366 virtual void destroyAllAnimations(void); 02367 02395 virtual AnimationState* createAnimationState(const String& animName); 02396 02400 virtual AnimationState* getAnimationState(const String& animName) const; 02403 virtual bool hasAnimationState(const String& name) const; 02404 02410 virtual void destroyAnimationState(const String& name); 02411 02413 virtual void destroyAllAnimationStates(void); 02414 02438 virtual void manualRender(RenderOperation* rend, Pass* pass, Viewport* vp, 02439 const Matrix4& worldMatrix, const Matrix4& viewMatrix, const Matrix4& projMatrix, 02440 bool doBeginEndFrame = false) ; 02441 02462 virtual void manualRender(Renderable* rend, const Pass* pass, Viewport* vp, 02463 const Matrix4& viewMatrix, const Matrix4& projMatrix, bool doBeginEndFrame = false, bool lightScissoringClipping = true, 02464 bool doLightIteration = true, const LightList* manualLightList = 0); 02465 02476 virtual RenderQueue* getRenderQueue(void); 02477 02481 virtual void addRenderQueueListener(RenderQueueListener* newListener); 02482 02484 virtual void removeRenderQueueListener(RenderQueueListener* delListener); 02485 02488 virtual void addRenderObjectListener(RenderObjectListener* newListener); 02490 virtual void removeRenderObjectListener(RenderObjectListener* delListener); 02491 02505 virtual void addSpecialCaseRenderQueue(uint8 qid); 02511 virtual void removeSpecialCaseRenderQueue(uint8 qid); 02515 virtual void clearSpecialCaseRenderQueues(void); 02520 virtual void setSpecialCaseRenderQueueMode(SpecialCaseRenderQueueMode mode); 02522 virtual SpecialCaseRenderQueueMode getSpecialCaseRenderQueueMode(void); 02529 virtual bool isRenderQueueToBeProcessed(uint8 qid); 02530 02546 virtual void setWorldGeometryRenderQueue(uint8 qid); 02557 virtual uint8 getWorldGeometryRenderQueue(void); 02558 02560 virtual void showBoundingBoxes(bool bShow); 02561 02563 virtual bool getShowBoundingBoxes() const; 02564 02566 virtual void _notifyAutotrackingSceneNode(SceneNode* node, bool autoTrack); 02567 02568 02581 virtual AxisAlignedBoxSceneQuery* 02582 createAABBQuery(const AxisAlignedBox& box, unsigned long mask = 0xFFFFFFFF); 02595 virtual SphereSceneQuery* 02596 createSphereQuery(const Sphere& sphere, unsigned long mask = 0xFFFFFFFF); 02609 virtual PlaneBoundedVolumeListSceneQuery* 02610 createPlaneBoundedVolumeQuery(const PlaneBoundedVolumeList& volumes, unsigned long mask = 0xFFFFFFFF); 02611 02612 02625 virtual RaySceneQuery* 02626 createRayQuery(const Ray& ray, unsigned long mask = 0xFFFFFFFF); 02627 //PyramidSceneQuery* createPyramidQuery(const Pyramid& p, unsigned long mask = 0xFFFFFFFF); 02639 virtual IntersectionSceneQuery* 02640 createIntersectionQuery(unsigned long mask = 0xFFFFFFFF); 02641 02643 virtual void destroyQuery(SceneQuery* query); 02644 02645 typedef MapIterator<CameraList> CameraIterator; 02646 typedef MapIterator<AnimationList> AnimationIterator; 02647 02650 CameraIterator getCameraIterator(void) { 02651 return CameraIterator(mCameras.begin(), mCameras.end()); 02652 } 02655 const CameraList& getCameras() const { return mCameras; } 02657 AnimationIterator getAnimationIterator(void) { 02658 return AnimationIterator(mAnimationsList.begin(), mAnimationsList.end()); 02659 } 02662 const AnimationList& getAnimations() const { return mAnimationsList; } 02664 AnimationStateIterator getAnimationStateIterator(void) { 02665 return mAnimationStates.getAnimationStateIterator(); 02666 } 02667 02700 virtual void setShadowTechnique(ShadowTechnique technique); 02701 02703 virtual ShadowTechnique getShadowTechnique(void) const { return mShadowTechnique; } 02704 02706 virtual void setShowDebugShadows(bool debug) { mDebugShadows = debug; } 02708 virtual bool getShowDebugShadows(void ) const { return mDebugShadows; } 02709 02716 virtual void setShadowColour(const ColourValue& colour); 02723 virtual const ColourValue& getShadowColour(void) const; 02735 virtual void setShadowDirectionalLightExtrusionDistance(Real dist); 02738 virtual Real getShadowDirectionalLightExtrusionDistance(void) const; 02755 virtual void setShadowFarDistance(Real distance); 02759 virtual Real getShadowFarDistance(void) const 02760 { return mDefaultShadowFarDist; } 02761 virtual Real getShadowFarDistanceSquared(void) const 02762 { return mDefaultShadowFarDistSquared; } 02763 02789 virtual void setShadowIndexBufferSize(size_t size); 02791 virtual size_t getShadowIndexBufferSize(void) const 02792 { return mShadowIndexBufferSize; } 02801 virtual void setShadowTextureSize(unsigned short size); 02802 02811 virtual void setShadowTextureConfig(size_t shadowIndex, unsigned short width, 02812 unsigned short height, PixelFormat format, unsigned short fsaa = 0, uint16 depthBufferPoolId=1); 02818 virtual void setShadowTextureConfig(size_t shadowIndex, 02819 const ShadowTextureConfig& config); 02820 02822 ConstShadowTextureConfigIterator getShadowTextureConfigIterator() const; 02823 02835 virtual void setShadowTexturePixelFormat(PixelFormat fmt); 02842 virtual void setShadowTextureFSAA(unsigned short fsaa); 02843 02851 virtual void setShadowTextureCount(size_t count); 02853 size_t getShadowTextureCount(void) const {return mShadowTextureConfigList.size(); } 02854 02864 void setShadowTextureCountPerLightType(Light::LightTypes type, size_t count) 02865 { mShadowTextureCountPerType[type] = count; } 02867 size_t getShadowTextureCountPerLightType(Light::LightTypes type) const 02868 {return mShadowTextureCountPerType[type]; } 02869 02878 virtual void setShadowTextureSettings(unsigned short size, unsigned short count, 02879 PixelFormat fmt = PF_X8R8G8B8, unsigned short fsaa = 0, uint16 depthBufferPoolId=1); 02880 02887 virtual const TexturePtr& getShadowTexture(size_t shadowIndex); 02888 02903 virtual void setShadowDirLightTextureOffset(Real offset) { mShadowTextureOffset = offset;} 02907 virtual Real getShadowDirLightTextureOffset(void) const { return mShadowTextureOffset; } 02915 virtual void setShadowTextureFadeStart(Real fadeStart) 02916 { mShadowTextureFadeStart = fadeStart; } 02924 virtual void setShadowTextureFadeEnd(Real fadeEnd) 02925 { mShadowTextureFadeEnd = fadeEnd; } 02926 02939 virtual void setShadowTextureSelfShadow(bool selfShadow); 02940 02942 virtual bool getShadowTextureSelfShadow(void) const 02943 { return mShadowTextureSelfShadow; } 02964 virtual void setShadowTextureCasterMaterial(const String& name); 02986 virtual void setShadowTextureReceiverMaterial(const String& name); 02987 02998 virtual void setShadowCasterRenderBackFaces(bool bf) { mShadowCasterRenderBackFaces = bf; } 02999 03003 virtual bool getShadowCasterRenderBackFaces() const { return mShadowCasterRenderBackFaces; } 03004 03009 virtual void setShadowCameraSetup(const ShadowCameraSetupPtr& shadowSetup); 03010 03015 virtual const ShadowCameraSetupPtr& getShadowCameraSetup() const; 03016 03053 virtual void setShadowUseInfiniteFarPlane(bool enable) { 03054 mShadowUseInfiniteFarPlane = enable; } 03055 03057 virtual bool isShadowTechniqueStencilBased(void) const 03058 { return (mShadowTechnique & SHADOWDETAILTYPE_STENCIL) != 0; } 03060 virtual bool isShadowTechniqueTextureBased(void) const 03061 { return (mShadowTechnique & SHADOWDETAILTYPE_TEXTURE) != 0; } 03063 virtual bool isShadowTechniqueModulative(void) const 03064 { return (mShadowTechnique & SHADOWDETAILTYPE_MODULATIVE) != 0; } 03066 virtual bool isShadowTechniqueAdditive(void) const 03067 { return (mShadowTechnique & SHADOWDETAILTYPE_ADDITIVE) != 0; } 03069 virtual bool isShadowTechniqueIntegrated(void) const 03070 { return (mShadowTechnique & SHADOWDETAILTYPE_INTEGRATED) != 0; } 03072 virtual bool isShadowTechniqueInUse(void) const 03073 { return mShadowTechnique != SHADOWTYPE_NONE; } 03077 virtual void setShadowUseLightClipPlanes(bool enabled) { mShadowAdditiveLightClip = enabled; } 03081 virtual bool getShadowUseLightClipPlanes() const { return mShadowAdditiveLightClip; } 03082 03086 virtual void _setActiveCompositorChain(CompositorChain* chain) { mActiveCompositorChain = chain; } 03087 03093 virtual void setLateMaterialResolving(bool isLate) { mLateMaterialResolving = isLate; } 03094 03097 virtual bool isLateMaterialResolving() const { return mLateMaterialResolving; } 03098 03100 virtual CompositorChain* _getActiveCompositorChain() const { return mActiveCompositorChain; } 03101 03104 virtual void addListener(Listener* s); 03107 virtual void removeListener(Listener* s); 03108 03118 virtual StaticGeometry* createStaticGeometry(const String& name); 03122 virtual StaticGeometry* getStaticGeometry(const String& name) const; 03124 virtual bool hasStaticGeometry(const String& name) const; 03126 virtual void destroyStaticGeometry(StaticGeometry* geom); 03128 virtual void destroyStaticGeometry(const String& name); 03130 virtual void destroyAllStaticGeometry(void); 03131 03141 virtual InstancedGeometry* createInstancedGeometry(const String& name); 03143 virtual InstancedGeometry* getInstancedGeometry(const String& name) const; 03145 virtual void destroyInstancedGeometry(InstancedGeometry* geom); 03147 virtual void destroyInstancedGeometry(const String& name); 03149 virtual void destroyAllInstancedGeometry(void); 03150 03169 virtual InstanceManager* createInstanceManager( const String &customName, const String &meshName, 03170 const String &groupName, 03171 InstanceManager::InstancingTechnique technique, 03172 size_t numInstancesPerBatch, uint16 flags=0, 03173 unsigned short subMeshIdx=0 ); 03174 03178 virtual InstanceManager* getInstanceManager( const String &managerName ) const; 03179 03181 virtual bool hasInstanceManager( const String &managerName ) const; 03182 03189 virtual void destroyInstanceManager( const String &name ); 03190 virtual void destroyInstanceManager( InstanceManager *instanceManager ); 03191 03192 virtual void destroyAllInstanceManagers(void); 03193 03206 virtual size_t getNumInstancesPerBatch( const String &meshName, const String &groupName, 03207 const String &materialName, 03208 InstanceManager::InstancingTechnique technique, 03209 size_t numInstancesPerBatch, uint16 flags=0, 03210 unsigned short subMeshIdx=0 ); 03211 03223 virtual InstancedEntity* createInstancedEntity( const String &materialName, 03224 const String &managerName ); 03225 03230 virtual void destroyInstancedEntity( InstancedEntity *instancedEntity ); 03231 03236 void _addDirtyInstanceManager( InstanceManager *dirtyManager ); 03237 03248 virtual MovableObject* createMovableObject(const String& name, 03249 const String& typeName, const NameValuePairList* params = 0); 03259 virtual MovableObject* createMovableObject(const String& typeName, const NameValuePairList* params = 0); 03265 virtual void destroyMovableObject(const String& name, const String& typeName); 03271 virtual void destroyMovableObject(MovableObject* m); 03273 virtual void destroyAllMovableObjectsByType(const String& typeName); 03275 virtual void destroyAllMovableObjects(void); 03279 virtual MovableObject* getMovableObject(const String& name, const String& typeName) const; 03281 virtual bool hasMovableObject(const String& name, const String& typeName) const; 03282 typedef MapIterator<MovableObjectMap> MovableObjectIterator; 03288 virtual MovableObjectIterator getMovableObjectIterator(const String& typeName); 03300 virtual void injectMovableObject(MovableObject* m); 03307 virtual void extractMovableObject(const String& name, const String& typeName); 03314 virtual void extractMovableObject(MovableObject* m); 03321 virtual void extractAllMovableObjectsByType(const String& typeName); 03322 03329 virtual void setVisibilityMask(uint32 vmask) { mVisibilityMask = vmask; } 03330 03334 virtual uint32 getVisibilityMask(void) { return mVisibilityMask; } 03335 03339 uint32 _getCombinedVisibilityMask(void) const; 03340 03347 virtual void setFindVisibleObjects(bool find) { mFindVisibleObjects = find; } 03348 03352 virtual bool getFindVisibleObjects(void) { return mFindVisibleObjects; } 03353 03362 virtual void setNormaliseNormalsOnScale(bool n) { mNormaliseNormalsOnScale = n; } 03363 03367 virtual bool getNormaliseNormalsOnScale() const { return mNormaliseNormalsOnScale; } 03368 03377 virtual void setFlipCullingOnNegativeScale(bool n) { mFlipCullingOnNegativeScale = n; } 03378 03382 virtual bool getFlipCullingOnNegativeScale() const { return mFlipCullingOnNegativeScale; } 03383 03389 virtual void _injectRenderWithPass(Pass *pass, Renderable *rend, bool shadowDerivation = true, 03390 bool doLightIteration = false, const LightList* manualLightList = 0); 03391 03410 virtual void _suppressRenderStateChanges(bool suppress); 03411 03415 virtual bool _areRenderStateChangesSuppressed(void) const 03416 { return mSuppressRenderStateChanges; } 03417 03430 virtual const Pass* _setPass(const Pass* pass, 03431 bool evenIfSuppressed = false, bool shadowDerivation = true); 03432 03440 virtual void _markGpuParamsDirty(uint16 mask); 03441 03442 03452 virtual void _suppressShadows(bool suppress); 03453 03457 virtual bool _areShadowsSuppressed(void) const 03458 { return mSuppressShadows; } 03459 03463 virtual void _renderQueueGroupObjects(RenderQueueGroup* group, 03464 QueuedRenderableCollection::OrganisationMode om); 03465 03481 void setQueuedRenderableVisitor(SceneMgrQueuedRenderableVisitor* visitor); 03482 03484 SceneMgrQueuedRenderableVisitor* getQueuedRenderableVisitor(void) const; 03485 03486 03490 RenderSystem *getDestinationRenderSystem(); 03491 03494 Viewport* getCurrentViewport(void) const { return mCurrentViewport; } 03495 03497 const VisibleObjectsBoundsInfo& getVisibleObjectsBoundsInfo(const Camera* cam) const; 03498 03500 const VisibleObjectsBoundsInfo& getShadowCasterBoundsInfo(const Light* light, size_t iteration = 0) const; 03501 03516 virtual void setCameraRelativeRendering(bool rel) { mCameraRelativeRendering = rel; } 03517 03521 virtual bool getCameraRelativeRendering() const { return mCameraRelativeRendering; } 03522 03523 03525 void addLodListener(LodListener *listener); 03526 03532 void removeLodListener(LodListener *listener); 03533 03535 void _notifyMovableObjectLodChanged(MovableObjectLodChangedEvent& evt); 03536 03538 void _notifyEntityMeshLodChanged(EntityMeshLodChangedEvent& evt); 03539 03541 void _notifyEntityMaterialLodChanged(EntityMaterialLodChangedEvent& evt); 03542 03544 void _handleLodEvents(); 03545 }; 03546 03548 class _OgreExport DefaultIntersectionSceneQuery : 03549 public IntersectionSceneQuery 03550 { 03551 public: 03552 DefaultIntersectionSceneQuery(SceneManager* creator); 03553 ~DefaultIntersectionSceneQuery(); 03554 03556 void execute(IntersectionSceneQueryListener* listener); 03557 }; 03558 03560 class _OgreExport DefaultRaySceneQuery : public RaySceneQuery 03561 { 03562 public: 03563 DefaultRaySceneQuery(SceneManager* creator); 03564 ~DefaultRaySceneQuery(); 03565 03567 void execute(RaySceneQueryListener* listener); 03568 }; 03570 class _OgreExport DefaultSphereSceneQuery : public SphereSceneQuery 03571 { 03572 public: 03573 DefaultSphereSceneQuery(SceneManager* creator); 03574 ~DefaultSphereSceneQuery(); 03575 03577 void execute(SceneQueryListener* listener); 03578 }; 03580 class _OgreExport DefaultPlaneBoundedVolumeListSceneQuery : public PlaneBoundedVolumeListSceneQuery 03581 { 03582 public: 03583 DefaultPlaneBoundedVolumeListSceneQuery(SceneManager* creator); 03584 ~DefaultPlaneBoundedVolumeListSceneQuery(); 03585 03587 void execute(SceneQueryListener* listener); 03588 }; 03590 class _OgreExport DefaultAxisAlignedBoxSceneQuery : public AxisAlignedBoxSceneQuery 03591 { 03592 public: 03593 DefaultAxisAlignedBoxSceneQuery(SceneManager* creator); 03594 ~DefaultAxisAlignedBoxSceneQuery(); 03595 03597 void execute(SceneQueryListener* listener); 03598 }; 03599 03600 03602 typedef uint16 SceneTypeMask; 03603 03607 enum SceneType 03608 { 03609 ST_GENERIC = 1, 03610 ST_EXTERIOR_CLOSE = 2, 03611 ST_EXTERIOR_FAR = 4, 03612 ST_EXTERIOR_REAL_FAR = 8, 03613 ST_INTERIOR = 16 03614 }; 03615 03617 struct SceneManagerMetaData 03618 { 03620 String typeName; 03622 String description; 03624 SceneTypeMask sceneTypeMask; 03626 bool worldGeometrySupported; 03627 }; 03628 03629 03630 03632 class _OgreExport SceneManagerFactory : public SceneMgtAlloc 03633 { 03634 protected: 03635 mutable SceneManagerMetaData mMetaData; 03636 mutable bool mMetaDataInit; 03638 virtual void initMetaData(void) const = 0; 03639 public: 03640 SceneManagerFactory() : mMetaDataInit(true) {} 03641 virtual ~SceneManagerFactory() {} 03643 virtual const SceneManagerMetaData& getMetaData(void) const 03644 { 03645 if (mMetaDataInit) 03646 { 03647 initMetaData(); 03648 mMetaDataInit = false; 03649 } 03650 return mMetaData; 03651 } 03656 virtual SceneManager* createInstance(const String& instanceName) = 0; 03658 virtual void destroyInstance(SceneManager* instance) = 0; 03659 03660 }; 03661 03666 } // Namespace 03667 03668 03669 03670 #endif
Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:36:26 2012