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-2013 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 #include "OgreHeaderPrefix.h" 00059 #include "OgreNameGenerator.h" 00060 00061 namespace Ogre { 00070 struct ViewPoint 00071 { 00072 Vector3 position; 00073 Quaternion orientation; 00074 }; 00075 00076 // Forward declarations 00077 class DefaultIntersectionSceneQuery; 00078 class DefaultRaySceneQuery; 00079 class DefaultSphereSceneQuery; 00080 class DefaultAxisAlignedBoxSceneQuery; 00081 class CompositorChain; 00082 00086 struct _OgreExport VisibleObjectsBoundsInfo 00087 { 00089 AxisAlignedBox aabb; 00091 AxisAlignedBox receiverAabb; 00093 Real minDistance; 00095 Real maxDistance; 00097 Real minDistanceInFrustum; 00099 Real maxDistanceInFrustum; 00100 00101 VisibleObjectsBoundsInfo(); 00102 void reset(); 00103 void merge(const AxisAlignedBox& boxBounds, const Sphere& sphereBounds, 00104 const Camera* cam, bool receiver=true); 00108 void mergeNonRenderedButInFrustum(const AxisAlignedBox& boxBounds, 00109 const Sphere& sphereBounds, const Camera* cam); 00110 00111 00112 }; 00113 00143 class _OgreExport SceneManager : public SceneMgtAlloc 00144 { 00145 public: 00147 static uint32 WORLD_GEOMETRY_TYPE_MASK; 00149 static uint32 ENTITY_TYPE_MASK; 00151 static uint32 FX_TYPE_MASK; 00153 static uint32 STATICGEOMETRY_TYPE_MASK; 00155 static uint32 LIGHT_TYPE_MASK; 00157 static uint32 FRUSTUM_TYPE_MASK; 00159 static uint32 USER_TYPE_MASK_LIMIT; 00162 struct materialLess 00163 { 00164 _OgreExport bool operator()(const Material* x, const Material* y) const; 00165 }; 00167 struct lightLess 00168 { 00169 _OgreExport bool operator()(const Light* a, const Light* b) const; 00170 }; 00171 00173 enum IlluminationRenderStage 00174 { 00176 IRS_NONE, 00178 IRS_RENDER_TO_TEXTURE, 00180 IRS_RENDER_RECEIVER_PASS 00181 }; 00182 00187 enum SpecialCaseRenderQueueMode 00188 { 00190 SCRQM_INCLUDE, 00192 SCRQM_EXCLUDE 00193 }; 00194 00195 struct SkyDomeGenParameters 00196 { 00197 Real skyDomeCurvature; 00198 Real skyDomeTiling; 00199 Real skyDomeDistance; 00200 int skyDomeXSegments; 00201 int skyDomeYSegments; 00202 int skyDomeYSegments_keep; 00203 }; 00204 00205 struct SkyPlaneGenParameters 00206 { 00207 Real skyPlaneScale; 00208 Real skyPlaneTiling; 00209 Real skyPlaneBow; 00210 int skyPlaneXSegments; 00211 int skyPlaneYSegments; 00212 }; 00213 00214 struct SkyBoxGenParameters 00215 { 00216 Real skyBoxDistance; 00217 }; 00218 00222 class Listener 00223 { 00224 public: 00225 Listener() {} 00226 virtual ~Listener() {} 00227 00234 virtual void preUpdateSceneGraph(SceneManager* source, Camera* camera) 00235 { (void)source; (void)camera; } 00236 00243 virtual void postUpdateSceneGraph(SceneManager* source, Camera* camera) 00244 { (void)source; (void)camera; } 00245 00255 virtual void preFindVisibleObjects(SceneManager* source, 00256 IlluminationRenderStage irs, Viewport* v) 00257 { (void)source; (void)irs; (void)v; } 00258 00269 virtual void postFindVisibleObjects(SceneManager* source, 00270 IlluminationRenderStage irs, Viewport* v) 00271 { (void)source; (void)irs; (void)v; } 00272 00287 virtual void shadowTexturesUpdated(size_t numberOfShadowTextures) 00288 { (void)numberOfShadowTextures; } 00289 00303 virtual void shadowTextureCasterPreViewProj(Light* light, 00304 Camera* camera, size_t iteration) 00305 { (void)light; (void)camera; (void)iteration; } 00306 00320 virtual void shadowTextureReceiverPreViewProj(Light* light, 00321 Frustum* frustum) 00322 { (void)light; (void)frustum; } 00323 00346 virtual bool sortLightsAffectingFrustum(LightList& lightList) 00347 { (void)lightList; return false; } 00348 00350 virtual void sceneManagerDestroyed(SceneManager* source) 00351 { (void)source; } 00352 }; 00353 00357 class _OgreExport SceneMgrQueuedRenderableVisitor : public QueuedRenderableVisitor 00358 { 00359 protected: 00361 const Pass* mUsedPass; 00362 public: 00363 SceneMgrQueuedRenderableVisitor() 00364 :transparentShadowCastersMode(false) {} 00365 ~SceneMgrQueuedRenderableVisitor() {} 00366 void visit(Renderable* r); 00367 bool visit(const Pass* p); 00368 void visit(RenderablePass* rp); 00369 00371 SceneManager* targetSceneMgr; 00373 bool transparentShadowCastersMode; 00375 bool autoLights; 00377 const LightList* manualLightList; 00379 bool scissoring; 00380 00381 }; 00383 friend class SceneMgrQueuedRenderableVisitor; 00384 00385 protected: 00386 00388 virtual SceneNode* createSceneNodeImpl(void); 00390 virtual SceneNode* createSceneNodeImpl(const String& name); 00391 00393 String mName; 00394 00396 RenderQueue* mRenderQueue; 00397 bool mLastRenderQueueInvocationCustom; 00398 00400 ColourValue mAmbientLight; 00401 00403 RenderSystem *mDestRenderSystem; 00404 00405 typedef map<String, Camera* >::type CameraList; 00406 00409 CameraList mCameras; 00410 00411 typedef map<String, StaticGeometry* >::type StaticGeometryList; 00412 StaticGeometryList mStaticGeometryList; 00413 typedef map<String, InstancedGeometry* >::type InstancedGeometryList; 00414 InstancedGeometryList mInstancedGeometryList; 00415 00416 typedef map<String, InstanceManager*>::type InstanceManagerMap; 00417 InstanceManagerMap mInstanceManagerMap; 00418 00419 typedef map<String, SceneNode*>::type SceneNodeList; 00420 00427 SceneNodeList mSceneNodes; 00428 00430 Camera* mCameraInProgress; 00432 Viewport* mCurrentViewport; 00433 00435 SceneNode* mSceneRoot; 00436 00438 typedef set<SceneNode*>::type AutoTrackingSceneNodes; 00439 AutoTrackingSceneNodes mAutoTrackingSceneNodes; 00440 00441 // Sky params 00442 // Sky plane 00443 Entity* mSkyPlaneEntity; 00444 Entity* mSkyDomeEntity[5]; 00445 ManualObject* mSkyBoxObj; 00446 00447 SceneNode* mSkyPlaneNode; 00448 SceneNode* mSkyDomeNode; 00449 SceneNode* mSkyBoxNode; 00450 00451 // Sky plane 00452 bool mSkyPlaneEnabled; 00453 uint8 mSkyPlaneRenderQueue; 00454 Plane mSkyPlane; 00455 SkyPlaneGenParameters mSkyPlaneGenParameters; 00456 // Sky box 00457 bool mSkyBoxEnabled; 00458 uint8 mSkyBoxRenderQueue; 00459 Quaternion mSkyBoxOrientation; 00460 SkyBoxGenParameters mSkyBoxGenParameters; 00461 // Sky dome 00462 bool mSkyDomeEnabled; 00463 uint8 mSkyDomeRenderQueue; 00464 Quaternion mSkyDomeOrientation; 00465 SkyDomeGenParameters mSkyDomeGenParameters; 00466 00467 // Fog 00468 FogMode mFogMode; 00469 ColourValue mFogColour; 00470 Real mFogStart; 00471 Real mFogEnd; 00472 Real mFogDensity; 00473 00474 typedef set<uint8>::type SpecialCaseRenderQueueList; 00475 SpecialCaseRenderQueueList mSpecialCaseQueueList; 00476 SpecialCaseRenderQueueMode mSpecialCaseQueueMode; 00477 uint8 mWorldGeometryRenderQueue; 00478 00479 unsigned long mLastFrameNumber; 00480 Matrix4 mTempXform[256]; 00481 bool mResetIdentityView; 00482 bool mResetIdentityProj; 00483 00484 bool mNormaliseNormalsOnScale; 00485 bool mFlipCullingOnNegativeScale; 00486 CullingMode mPassCullingMode; 00487 00488 protected: 00489 00497 typedef map< const Camera*, VisibleObjectsBoundsInfo>::type CamVisibleObjectsMap; 00498 CamVisibleObjectsMap mCamVisibleObjectsMap; 00499 00501 typedef map< const Camera*, const Light* >::type ShadowCamLightMapping; 00502 ShadowCamLightMapping mShadowCamLightMapping; 00503 00505 size_t mShadowTextureCountPerType[3]; 00506 00508 vector<size_t>::type mShadowTextureIndexLightList; 00509 00511 struct _OgreExport LightInfo 00512 { 00513 Light* light; 00514 int type; 00515 Real range; 00516 Vector3 position; 00517 uint32 lightMask; 00518 00519 bool operator== (const LightInfo& rhs) const 00520 { 00521 return light == rhs.light && type == rhs.type && 00522 range == rhs.range && position == rhs.position && lightMask == rhs.lightMask; 00523 } 00524 00525 bool operator!= (const LightInfo& rhs) const 00526 { 00527 return !(*this == rhs); 00528 } 00529 }; 00530 00531 typedef vector<LightInfo>::type LightInfoList; 00532 00533 LightList mLightsAffectingFrustum; 00534 LightInfoList mCachedLightInfos; 00535 LightInfoList mTestLightInfos; // potentially new list 00536 ulong mLightsDirtyCounter; 00537 LightList mShadowTextureCurrentCasterLightList; 00538 00539 typedef map<String, MovableObject*>::type MovableObjectMap; 00541 struct MovableObjectCollection 00542 { 00543 MovableObjectMap map; 00544 OGRE_MUTEX(mutex); 00545 }; 00546 typedef map<String, MovableObjectCollection*>::type MovableObjectCollectionMap; 00547 MovableObjectCollectionMap mMovableObjectCollectionMap; 00548 NameGenerator mMovableNameGenerator; 00553 MovableObjectCollection* getMovableObjectCollection(const String& typeName); 00558 const MovableObjectCollection* getMovableObjectCollection(const String& typeName) const; 00560 OGRE_MUTEX(mMovableObjectCollectionMapMutex); 00561 00566 virtual void initRenderQueue(void); 00568 Pass* mShadowCasterPlainBlackPass; 00570 Pass* mShadowReceiverPass; 00580 virtual const Pass* deriveShadowCasterPass(const Pass* pass); 00589 virtual const Pass* deriveShadowReceiverPass(const Pass* pass); 00590 00597 virtual bool validatePassForRendering(const Pass* pass); 00598 00605 virtual bool validateRenderableForRendering(const Pass* pass, const Renderable* rend); 00606 00607 enum BoxPlane 00608 { 00609 BP_FRONT = 0, 00610 BP_BACK = 1, 00611 BP_LEFT = 2, 00612 BP_RIGHT = 3, 00613 BP_UP = 4, 00614 BP_DOWN = 5 00615 }; 00616 00617 /* Internal utility method for creating the planes of a skybox. 00618 */ 00619 virtual MeshPtr createSkyboxPlane( 00620 BoxPlane bp, 00621 Real distance, 00622 const Quaternion& orientation, 00623 const String& groupName); 00624 00625 /* Internal utility method for creating the planes of a skydome. 00626 */ 00627 virtual MeshPtr createSkydomePlane( 00628 BoxPlane bp, 00629 Real curvature, Real tiling, Real distance, 00630 const Quaternion& orientation, 00631 int xsegments, int ysegments, int ySegmentsToKeep, 00632 const String& groupName); 00633 00635 bool mDisplayNodes; 00636 00638 typedef map<String, Animation*>::type AnimationList; 00639 AnimationList mAnimationsList; 00640 OGRE_MUTEX(mAnimationsListMutex); 00641 AnimationStateSet mAnimationStates; 00642 00643 00646 virtual void useRenderableViewProjMode(const Renderable* pRend, bool fixedFunction); 00647 00650 virtual void resetViewProjMode(bool fixedFunction); 00651 00652 typedef vector<RenderQueueListener*>::type RenderQueueListenerList; 00653 RenderQueueListenerList mRenderQueueListeners; 00654 00655 typedef vector<RenderObjectListener*>::type RenderObjectListenerList; 00656 RenderObjectListenerList mRenderObjectListeners; 00657 typedef vector<Listener*>::type ListenerList; 00658 ListenerList mListeners; 00660 virtual void firePreRenderQueues(); 00662 virtual void firePostRenderQueues(); 00664 virtual bool fireRenderQueueStarted(uint8 id, const String& invocation); 00666 virtual bool fireRenderQueueEnded(uint8 id, const String& invocation); 00668 virtual void fireRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, 00669 const LightList* pLightList, bool suppressRenderStateChanges); 00670 00672 virtual void fireShadowTexturesUpdated(size_t numberOfShadowTextures); 00674 virtual void fireShadowTexturesPreCaster(Light* light, Camera* camera, size_t iteration); 00676 virtual void fireShadowTexturesPreReceiver(Light* light, Frustum* f); 00678 virtual void firePreUpdateSceneGraph(Camera* camera); 00680 virtual void firePostUpdateSceneGraph(Camera* camera); 00682 virtual void firePreFindVisibleObjects(Viewport* v); 00684 virtual void firePostFindVisibleObjects(Viewport* v); 00686 virtual void fireSceneManagerDestroyed(); 00688 virtual void setViewport(Viewport *vp); 00689 00691 bool mShowBoundingBoxes; 00692 00694 virtual void renderVisibleObjectsDefaultSequence(void); 00696 virtual void renderVisibleObjectsCustomSequence(RenderQueueInvocationSequence* s); 00698 virtual void prepareRenderQueue(void); 00699 00700 00716 virtual void renderSingleObject(Renderable* rend, const Pass* pass, 00717 bool lightScissoringClipping, bool doLightIteration, const LightList* manualLightList = 0); 00718 00720 virtual AutoParamDataSource* createAutoParamDataSource(void) const 00721 { 00722 return OGRE_NEW AutoParamDataSource(); 00723 } 00724 00726 AutoParamDataSource* mAutoParamDataSource; 00727 00728 CompositorChain* mActiveCompositorChain; 00729 bool mLateMaterialResolving; 00730 00731 ShadowTechnique mShadowTechnique; 00732 bool mDebugShadows; 00733 ColourValue mShadowColour; 00734 Pass* mShadowDebugPass; 00735 Pass* mShadowStencilPass; 00736 Pass* mShadowModulativePass; 00737 bool mShadowMaterialInitDone; 00738 HardwareIndexBufferSharedPtr mShadowIndexBuffer; 00739 size_t mShadowIndexBufferSize; 00740 size_t mShadowIndexBufferUsedSize; 00741 Rectangle2D* mFullScreenQuad; 00742 Real mShadowDirLightExtrudeDist; 00743 IlluminationRenderStage mIlluminationStage; 00744 ShadowTextureConfigList mShadowTextureConfigList; 00745 bool mShadowTextureConfigDirty; 00746 ShadowTextureList mShadowTextures; 00747 TexturePtr mNullShadowTexture; 00748 typedef vector<Camera*>::type ShadowTextureCameraList; 00749 ShadowTextureCameraList mShadowTextureCameras; 00750 Texture* mCurrentShadowTexture; 00751 bool mShadowUseInfiniteFarPlane; 00752 bool mShadowCasterRenderBackFaces; 00753 bool mShadowAdditiveLightClip; 00755 struct LightClippingInfo 00756 { 00757 RealRect scissorRect; 00758 PlaneList clipPlanes; 00759 bool scissorValid; 00760 unsigned long clipPlanesValid; 00761 LightClippingInfo() : scissorValid(false), clipPlanesValid(false) {} 00762 00763 }; 00764 typedef map<Light*, LightClippingInfo>::type LightClippingInfoMap; 00765 LightClippingInfoMap mLightClippingInfoMap; 00766 unsigned long mLightClippingInfoMapFrameNumber; 00767 00769 ShadowCameraSetupPtr mDefaultShadowCameraSetup; 00770 00779 struct lightsForShadowTextureLess 00780 { 00781 _OgreExport bool operator()(const Light* l1, const Light* l2) const; 00782 }; 00783 00784 00791 virtual void findLightsAffectingFrustum(const Camera* camera); 00793 virtual void initShadowVolumeMaterials(void); 00795 virtual void ensureShadowTexturesCreated(); 00797 virtual void destroyShadowTextures(void); 00798 00799 typedef vector<InstanceManager*>::type InstanceManagerVec; 00800 InstanceManagerVec mDirtyInstanceManagers; 00801 InstanceManagerVec mDirtyInstanceMgrsTmp; 00802 00804 void updateDirtyInstanceManagers(void); 00805 00806 public: 00810 virtual void prepareShadowTextures(Camera* cam, Viewport* vp, const LightList* lightList = 0); 00811 00812 //A render context, used to store internal data for pausing/resuming rendering 00813 struct RenderContext 00814 { 00815 RenderQueue* renderQueue; 00816 Viewport* viewport; 00817 Camera* camera; 00818 CompositorChain* activeChain; 00819 RenderSystem::RenderSystemContext* rsContext; 00820 }; 00821 00825 virtual RenderContext* _pauseRendering(); 00829 virtual void _resumeRendering(RenderContext* context); 00830 00831 protected: 00839 virtual void renderShadowVolumesToStencil(const Light* light, const Camera* cam, 00840 bool calcScissor); 00846 virtual void setShadowVolumeStencilState(bool secondpass, bool zfail, bool twosided); 00848 void renderShadowVolumeObjects(ShadowCaster::ShadowRenderableListIterator iShadowRenderables, 00849 Pass* pass, const LightList *manualLightList, unsigned long flags, 00850 bool secondpass, bool zfail, bool twosided); 00851 typedef vector<ShadowCaster*>::type ShadowCasterList; 00852 ShadowCasterList mShadowCasterList; 00853 SphereSceneQuery* mShadowCasterSphereQuery; 00854 AxisAlignedBoxSceneQuery* mShadowCasterAABBQuery; 00855 Real mDefaultShadowFarDist; 00856 Real mDefaultShadowFarDistSquared; 00857 Real mShadowTextureOffset; 00858 Real mShadowTextureFadeStart; 00859 Real mShadowTextureFadeEnd; 00860 bool mShadowTextureSelfShadow; 00861 Pass* mShadowTextureCustomCasterPass; 00862 Pass* mShadowTextureCustomReceiverPass; 00863 String mShadowTextureCustomCasterVertexProgram; 00864 String mShadowTextureCustomCasterFragmentProgram; 00865 String mShadowTextureCustomReceiverVertexProgram; 00866 String mShadowTextureCustomReceiverFragmentProgram; 00867 GpuProgramParametersSharedPtr mShadowTextureCustomCasterVPParams; 00868 GpuProgramParametersSharedPtr mShadowTextureCustomCasterFPParams; 00869 GpuProgramParametersSharedPtr mShadowTextureCustomReceiverVPParams; 00870 GpuProgramParametersSharedPtr mShadowTextureCustomReceiverFPParams; 00871 00873 uint32 mVisibilityMask; 00874 bool mFindVisibleObjects; 00875 00877 bool mSuppressRenderStateChanges; 00879 bool mSuppressShadows; 00880 00881 00882 GpuProgramParametersSharedPtr mInfiniteExtrusionParams; 00883 GpuProgramParametersSharedPtr mFiniteExtrusionParams; 00884 00886 class _OgreExport ShadowCasterSceneQueryListener : public SceneQueryListener, public SceneMgtAlloc 00887 { 00888 protected: 00889 SceneManager* mSceneMgr; 00890 ShadowCasterList* mCasterList; 00891 bool mIsLightInFrustum; 00892 const PlaneBoundedVolumeList* mLightClipVolumeList; 00893 const Camera* mCamera; 00894 const Light* mLight; 00895 Real mFarDistSquared; 00896 public: 00897 ShadowCasterSceneQueryListener(SceneManager* sm) : mSceneMgr(sm), 00898 mCasterList(0), mIsLightInFrustum(false), mLightClipVolumeList(0), 00899 mCamera(0) {} 00900 // Prepare the listener for use with a set of parameters 00901 void prepare(bool lightInFrustum, 00902 const PlaneBoundedVolumeList* lightClipVolumes, 00903 const Light* light, const Camera* cam, ShadowCasterList* casterList, 00904 Real farDistSquared) 00905 { 00906 mCasterList = casterList; 00907 mIsLightInFrustum = lightInFrustum; 00908 mLightClipVolumeList = lightClipVolumes; 00909 mCamera = cam; 00910 mLight = light; 00911 mFarDistSquared = farDistSquared; 00912 } 00913 bool queryResult(MovableObject* object); 00914 bool queryResult(SceneQuery::WorldFragment* fragment); 00915 }; 00916 00917 ShadowCasterSceneQueryListener* mShadowCasterQueryListener; 00918 00925 virtual const ShadowCasterList& findShadowCastersForLight(const Light* light, 00926 const Camera* camera); 00928 virtual void renderBasicQueueGroupObjects(RenderQueueGroup* pGroup, 00929 QueuedRenderableCollection::OrganisationMode om); 00931 virtual void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* group, 00932 QueuedRenderableCollection::OrganisationMode om); 00934 virtual void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* group, 00935 QueuedRenderableCollection::OrganisationMode om); 00937 virtual void renderTextureShadowCasterQueueGroupObjects(RenderQueueGroup* group, 00938 QueuedRenderableCollection::OrganisationMode om); 00940 virtual void renderTextureShadowReceiverQueueGroupObjects(RenderQueueGroup* group, 00941 QueuedRenderableCollection::OrganisationMode om); 00943 virtual void renderModulativeTextureShadowedQueueGroupObjects(RenderQueueGroup* group, 00944 QueuedRenderableCollection::OrganisationMode om); 00945 00947 virtual void renderAdditiveTextureShadowedQueueGroupObjects(RenderQueueGroup* group, 00948 QueuedRenderableCollection::OrganisationMode om); 00950 virtual void renderObjects(const QueuedRenderableCollection& objs, 00951 QueuedRenderableCollection::OrganisationMode om, bool lightScissoringClipping, 00952 bool doLightIteration, const LightList* manualLightList = 0); 00958 virtual void renderTransparentShadowCasterObjects(const QueuedRenderableCollection& objs, 00959 QueuedRenderableCollection::OrganisationMode om, bool lightScissoringClipping, 00960 bool doLightIteration, const LightList* manualLightList = 0); 00961 00964 virtual void updateRenderQueueSplitOptions(void); 00967 virtual void updateRenderQueueGroupSplitOptions(RenderQueueGroup* group, 00968 bool suppressShadows, bool suppressRenderState); 00969 00971 virtual ClipResult buildAndSetScissor(const LightList& ll, const Camera* cam); 00973 virtual void buildScissor(const Light* l, const Camera* cam, RealRect& rect); 00974 virtual void resetScissor(); 00976 virtual ClipResult buildAndSetLightClip(const LightList& ll); 00977 virtual void buildLightClip(const Light* l, PlaneList& planes); 00978 virtual void resetLightClip(); 00979 virtual void checkCachedLightClippingInfo(); 00980 00982 SceneMgrQueuedRenderableVisitor* mActiveQueuedRenderableVisitor; 00984 SceneMgrQueuedRenderableVisitor mDefaultQueuedRenderableVisitor; 00985 00987 bool mCameraRelativeRendering; 00988 Matrix4 mCachedViewMatrix; 00989 Vector3 mCameraRelativePosition; 00990 00992 uint32 mLastLightHash; 00993 unsigned short mLastLightLimit; 00994 uint32 mLastLightHashGpuProgram; 00996 uint16 mGpuParamsDirty; 00997 00998 virtual void useLights(const LightList& lights, unsigned short limit); 00999 virtual void setViewMatrix(const Matrix4& m); 01000 virtual void useLightsGpuProgram(const Pass* pass, const LightList* lights); 01001 virtual void bindGpuProgram(GpuProgram* prog); 01002 virtual void updateGpuProgramParameters(const Pass* p); 01003 01004 01005 01006 01007 01008 01009 01010 01012 typedef set<LodListener*>::type LodListenerSet; 01013 LodListenerSet mLodListeners; 01014 01016 typedef vector<MovableObjectLodChangedEvent>::type MovableObjectLodChangedEventList; 01017 MovableObjectLodChangedEventList mMovableObjectLodChangedEvents; 01018 01020 typedef vector<EntityMeshLodChangedEvent>::type EntityMeshLodChangedEventList; 01021 EntityMeshLodChangedEventList mEntityMeshLodChangedEvents; 01022 01024 typedef vector<EntityMaterialLodChangedEvent>::type EntityMaterialLodChangedEventList; 01025 EntityMaterialLodChangedEventList mEntityMaterialLodChangedEvents; 01026 01027 public: 01030 SceneManager(const String& instanceName); 01031 01034 virtual ~SceneManager(); 01035 01036 01062 OGRE_MUTEX(sceneGraphMutex); 01063 01065 const String& getName(void) const { return mName; } 01066 01073 virtual const String& getTypeName(void) const = 0; 01074 01082 virtual Camera* createCamera(const String& name); 01083 01087 virtual Camera* getCamera(const String& name) const; 01088 01091 virtual bool hasCamera(const String& name) const; 01092 01101 virtual void destroyCamera(Camera *cam); 01102 01108 virtual void destroyCamera(const String& name); 01109 01118 virtual void destroyAllCameras(void); 01119 01130 virtual Light* createLight(const String& name); 01131 01133 virtual Light* createLight(); 01134 01138 virtual Light* getLight(const String& name) const; 01139 01142 virtual bool hasLight(const String& name) const; 01143 01146 virtual const PlaneList& getLightClippingPlanes(Light* l); 01147 01150 virtual const RealRect& getLightScissorRect(Light* l, const Camera* cam); 01151 01156 virtual void destroyLight(const String& name); 01157 01162 virtual void destroyLight(Light* light); 01165 virtual void destroyAllLights(void); 01166 01177 virtual void _notifyLightsDirty(void); 01178 01191 ulong _getLightsDirtyCounter(void) const { return mLightsDirtyCounter; } 01192 01199 virtual const LightList& _getLightsAffectingFrustum(void) const; 01200 01223 virtual void _populateLightList(const Vector3& position, Real radius, LightList& destList, uint32 lightMask = 0xFFFFFFFF); 01224 01253 virtual void _populateLightList(const SceneNode* sn, Real radius, LightList& destList, uint32 lightMask = 0xFFFFFFFF); 01254 01271 virtual SceneNode* createSceneNode(void); 01272 01287 virtual SceneNode* createSceneNode(const String& name); 01288 01295 virtual void destroySceneNode(const String& name); 01296 01303 virtual void destroySceneNode(SceneNode* sn); 01319 virtual SceneNode* getRootSceneNode(void); 01320 01328 virtual SceneNode* getSceneNode(const String& name) const; 01329 01332 virtual bool hasSceneNode(const String& name) const; 01333 01334 01342 virtual Entity* createEntity(const String& entityName, const String& meshName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME ); 01343 01350 virtual Entity* createEntity(const String& entityName, const MeshPtr& pMesh ); 01351 01357 virtual Entity* createEntity(const String& meshName); 01358 01363 virtual Entity* createEntity(const MeshPtr& pMesh); 01364 01371 enum PrefabType { 01372 PT_PLANE, 01373 PT_CUBE, 01374 PT_SPHERE 01375 }; 01376 01383 virtual Entity* createEntity(const String& entityName, PrefabType ptype); 01384 01388 virtual Entity* createEntity(PrefabType ptype); 01392 virtual Entity* getEntity(const String& name) const; 01395 virtual bool hasEntity(const String& name) const; 01396 01405 virtual void destroyEntity(Entity* ent); 01406 01415 virtual void destroyEntity(const String& name); 01416 01426 virtual void destroyAllEntities(void); 01427 01433 virtual ManualObject* createManualObject(const String& name); 01437 virtual ManualObject* createManualObject(); 01441 virtual ManualObject* getManualObject(const String& name) const; 01444 virtual bool hasManualObject(const String& name) const; 01445 01448 virtual void destroyManualObject(ManualObject* obj); 01451 virtual void destroyManualObject(const String& name); 01454 virtual void destroyAllManualObjects(void); 01460 virtual BillboardChain* createBillboardChain(const String& name); 01464 virtual BillboardChain* createBillboardChain(); 01468 virtual BillboardChain* getBillboardChain(const String& name) const; 01471 virtual bool hasBillboardChain(const String& name) const; 01472 01475 virtual void destroyBillboardChain(BillboardChain* obj); 01478 virtual void destroyBillboardChain(const String& name); 01481 virtual void destroyAllBillboardChains(void); 01487 virtual RibbonTrail* createRibbonTrail(const String& name); 01491 virtual RibbonTrail* createRibbonTrail(); 01495 virtual RibbonTrail* getRibbonTrail(const String& name) const; 01498 virtual bool hasRibbonTrail(const String& name) const; 01499 01502 virtual void destroyRibbonTrail(RibbonTrail* obj); 01505 virtual void destroyRibbonTrail(const String& name); 01508 virtual void destroyAllRibbonTrails(void); 01509 01530 virtual ParticleSystem* createParticleSystem(const String& name, 01531 const String& templateName); 01551 virtual ParticleSystem* createParticleSystem(const String& name, 01552 size_t quota = 500, 01553 const String& resourceGroup = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01554 01572 virtual ParticleSystem* createParticleSystem(size_t quota = 500, 01573 const String& resourceGroup = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01577 virtual ParticleSystem* getParticleSystem(const String& name) const; 01580 virtual bool hasParticleSystem(const String& name) const; 01581 01584 virtual void destroyParticleSystem(ParticleSystem* obj); 01587 virtual void destroyParticleSystem(const String& name); 01590 virtual void destroyAllParticleSystems(void); 01591 01597 virtual void clearScene(void); 01598 01611 void setAmbientLight(const ColourValue& colour); 01612 01615 const ColourValue& getAmbientLight(void) const; 01616 01632 virtual void prepareWorldGeometry(const String& filename); 01633 01651 virtual void prepareWorldGeometry(DataStreamPtr& stream, 01652 const String& typeName = StringUtil::BLANK); 01653 01666 virtual void setWorldGeometry(const String& filename); 01667 01683 virtual void setWorldGeometry(DataStreamPtr& stream, 01684 const String& typeName = StringUtil::BLANK); 01685 01698 virtual size_t estimateWorldGeometry(const String& filename) 01699 { (void)filename; return 0; } 01700 01713 virtual size_t estimateWorldGeometry(DataStreamPtr& stream, 01714 const String& typeName = StringUtil::BLANK) 01715 { (void)stream; (void)typeName; return 0; } 01716 01731 virtual ViewPoint getSuggestedViewpoint(bool random = false); 01732 01746 virtual bool setOption( const String& strKey, const void* pValue ) 01747 { (void)strKey; (void)pValue; return false; } 01748 01762 virtual bool getOption( const String& strKey, void* pDestValue ) 01763 { (void)strKey; (void)pDestValue; return false; } 01764 01774 virtual bool hasOption( const String& strKey ) const 01775 { (void)strKey; return false; } 01776 01791 virtual bool getOptionValues( const String& strKey, StringVector& refValueList ) 01792 { (void)strKey; (void)refValueList; return false; } 01793 01800 virtual bool getOptionKeys( StringVector& refKeys ) 01801 { (void)refKeys; return false; } 01802 01811 virtual void _updateSceneGraph(Camera* cam); 01812 01824 virtual void _findVisibleObjects(Camera* cam, VisibleObjectsBoundsInfo* visibleBounds, bool onlyShadowCasters); 01825 01830 virtual void _applySceneAnimations(void); 01831 01834 virtual void _renderVisibleObjects(void); 01835 01849 virtual void _renderScene(Camera* camera, Viewport* vp, bool includeOverlays); 01850 01854 virtual void _queueSkiesForRendering(Camera* cam); 01855 01856 01857 01866 virtual void _setDestinationRenderSystem(RenderSystem* sys); 01867 01921 virtual void setSkyPlane( 01922 bool enable, 01923 const Plane& plane, const String& materialName, Real scale = 1000, 01924 Real tiling = 10, bool drawFirst = true, Real bow = 0, 01925 int xsegments = 1, int ysegments = 1, 01926 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01970 virtual void _setSkyPlane( 01971 bool enable, 01972 const Plane& plane, const String& materialName, Real scale = 1000, 01973 Real tiling = 10, uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, Real bow = 0, 01974 int xsegments = 1, int ysegments = 1, 01975 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 01976 01978 virtual void setSkyPlaneEnabled(bool enable) { mSkyPlaneEnabled = enable; } 01979 01981 virtual bool isSkyPlaneEnabled(void) const { return mSkyPlaneEnabled; } 01982 01984 virtual SceneNode* getSkyPlaneNode(void) const { return mSkyPlaneNode; } 01985 01987 virtual const SkyPlaneGenParameters& getSkyPlaneGenParameters(void) const { return mSkyPlaneGenParameters; } 01988 02030 virtual void setSkyBox( 02031 bool enable, const String& materialName, Real distance = 5000, 02032 bool drawFirst = true, const Quaternion& orientation = Quaternion::IDENTITY, 02033 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02034 02067 virtual void _setSkyBox( 02068 bool enable, const String& materialName, Real distance = 5000, 02069 uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, const Quaternion& orientation = Quaternion::IDENTITY, 02070 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02071 02073 virtual void setSkyBoxEnabled(bool enable) { mSkyBoxEnabled = enable; } 02074 02076 virtual bool isSkyBoxEnabled(void) const { return mSkyBoxEnabled; } 02077 02079 virtual SceneNode* getSkyBoxNode(void) const { return mSkyBoxNode; } 02080 02082 virtual const SkyBoxGenParameters& getSkyBoxGenParameters(void) const { return mSkyBoxGenParameters; } 02083 02139 virtual void setSkyDome( 02140 bool enable, const String& materialName, Real curvature = 10, 02141 Real tiling = 8, Real distance = 4000, bool drawFirst = true, 02142 const Quaternion& orientation = Quaternion::IDENTITY, 02143 int xsegments = 16, int ysegments = 16, int ysegments_keep = -1, 02144 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02145 02192 virtual void _setSkyDome( 02193 bool enable, const String& materialName, Real curvature = 10, 02194 Real tiling = 8, Real distance = 4000, uint8 renderQueue = RENDER_QUEUE_SKIES_EARLY, 02195 const Quaternion& orientation = Quaternion::IDENTITY, 02196 int xsegments = 16, int ysegments = 16, int ysegments_keep = -1, 02197 const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 02198 02200 virtual void setSkyDomeEnabled(bool enable) { mSkyDomeEnabled = enable; } 02201 02203 virtual bool isSkyDomeEnabled(void) const { return mSkyDomeEnabled; } 02204 02206 virtual SceneNode* getSkyDomeNode(void) const { return mSkyDomeNode; } 02207 02209 virtual const SkyDomeGenParameters& getSkyDomeGenParameters(void) const { return mSkyDomeGenParameters; } 02210 02235 void setFog( 02236 FogMode mode = FOG_NONE, const ColourValue& colour = ColourValue::White, 02237 Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0); 02238 02241 virtual FogMode getFogMode(void) const; 02242 02245 virtual const ColourValue& getFogColour(void) const; 02246 02249 virtual Real getFogStart(void) const; 02250 02253 virtual Real getFogEnd(void) const; 02254 02257 virtual Real getFogDensity(void) const; 02258 02259 02277 virtual BillboardSet* createBillboardSet(const String& name, unsigned int poolSize = 20); 02278 02285 virtual BillboardSet* createBillboardSet(unsigned int poolSize = 20); 02289 virtual BillboardSet* getBillboardSet(const String& name) const; 02292 virtual bool hasBillboardSet(const String& name) const; 02293 02300 virtual void destroyBillboardSet(BillboardSet* set); 02301 02308 virtual void destroyBillboardSet(const String& name); 02309 02319 virtual void destroyAllBillboardSets(void); 02320 02328 virtual void setDisplaySceneNodes(bool display); 02330 virtual bool getDisplaySceneNodes(void) const {return mDisplayNodes;} 02331 02352 virtual Animation* createAnimation(const String& name, Real length); 02353 02357 virtual Animation* getAnimation(const String& name) const; 02360 virtual bool hasAnimation(const String& name) const; 02361 02367 virtual void destroyAnimation(const String& name); 02368 02370 virtual void destroyAllAnimations(void); 02371 02399 virtual AnimationState* createAnimationState(const String& animName); 02400 02404 virtual AnimationState* getAnimationState(const String& animName) const; 02407 virtual bool hasAnimationState(const String& name) const; 02408 02414 virtual void destroyAnimationState(const String& name); 02415 02417 virtual void destroyAllAnimationStates(void); 02418 02442 virtual void manualRender(RenderOperation* rend, Pass* pass, Viewport* vp, 02443 const Matrix4& worldMatrix, const Matrix4& viewMatrix, const Matrix4& projMatrix, 02444 bool doBeginEndFrame = false) ; 02445 02465 virtual void manualRender(Renderable* rend, const Pass* pass, Viewport* vp, 02466 const Matrix4& viewMatrix, const Matrix4& projMatrix, bool doBeginEndFrame = false, bool lightScissoringClipping = true, 02467 bool doLightIteration = true, const LightList* manualLightList = 0); 02468 02479 virtual RenderQueue* getRenderQueue(void); 02480 02484 virtual void addRenderQueueListener(RenderQueueListener* newListener); 02485 02487 virtual void removeRenderQueueListener(RenderQueueListener* delListener); 02488 02491 virtual void addRenderObjectListener(RenderObjectListener* newListener); 02493 virtual void removeRenderObjectListener(RenderObjectListener* delListener); 02494 02508 virtual void addSpecialCaseRenderQueue(uint8 qid); 02514 virtual void removeSpecialCaseRenderQueue(uint8 qid); 02518 virtual void clearSpecialCaseRenderQueues(void); 02523 virtual void setSpecialCaseRenderQueueMode(SpecialCaseRenderQueueMode mode); 02525 virtual SpecialCaseRenderQueueMode getSpecialCaseRenderQueueMode(void); 02532 virtual bool isRenderQueueToBeProcessed(uint8 qid); 02533 02549 virtual void setWorldGeometryRenderQueue(uint8 qid); 02560 virtual uint8 getWorldGeometryRenderQueue(void); 02561 02563 virtual void showBoundingBoxes(bool bShow); 02564 02566 virtual bool getShowBoundingBoxes() const; 02567 02569 virtual void _notifyAutotrackingSceneNode(SceneNode* node, bool autoTrack); 02570 02571 02584 virtual AxisAlignedBoxSceneQuery* 02585 createAABBQuery(const AxisAlignedBox& box, uint32 mask = 0xFFFFFFFF); 02598 virtual SphereSceneQuery* 02599 createSphereQuery(const Sphere& sphere, uint32 mask = 0xFFFFFFFF); 02612 virtual PlaneBoundedVolumeListSceneQuery* 02613 createPlaneBoundedVolumeQuery(const PlaneBoundedVolumeList& volumes, uint32 mask = 0xFFFFFFFF); 02614 02615 02628 virtual RaySceneQuery* 02629 createRayQuery(const Ray& ray, uint32 mask = 0xFFFFFFFF); 02630 //PyramidSceneQuery* createPyramidQuery(const Pyramid& p, unsigned long mask = 0xFFFFFFFF); 02642 virtual IntersectionSceneQuery* 02643 createIntersectionQuery(uint32 mask = 0xFFFFFFFF); 02644 02646 virtual void destroyQuery(SceneQuery* query); 02647 02648 typedef MapIterator<CameraList> CameraIterator; 02649 typedef MapIterator<AnimationList> AnimationIterator; 02650 02653 CameraIterator getCameraIterator(void) { 02654 return CameraIterator(mCameras.begin(), mCameras.end()); 02655 } 02658 const CameraList& getCameras() const { return mCameras; } 02660 AnimationIterator getAnimationIterator(void) { 02661 return AnimationIterator(mAnimationsList.begin(), mAnimationsList.end()); 02662 } 02665 const AnimationList& getAnimations() const { return mAnimationsList; } 02667 AnimationStateIterator getAnimationStateIterator(void) { 02668 return mAnimationStates.getAnimationStateIterator(); 02669 } 02670 02703 virtual void setShadowTechnique(ShadowTechnique technique); 02704 02706 virtual ShadowTechnique getShadowTechnique(void) const { return mShadowTechnique; } 02707 02709 virtual void setShowDebugShadows(bool debug) { mDebugShadows = debug; } 02711 virtual bool getShowDebugShadows(void ) const { return mDebugShadows; } 02712 02719 virtual void setShadowColour(const ColourValue& colour); 02726 virtual const ColourValue& getShadowColour(void) const; 02738 virtual void setShadowDirectionalLightExtrusionDistance(Real dist); 02741 virtual Real getShadowDirectionalLightExtrusionDistance(void) const; 02758 virtual void setShadowFarDistance(Real distance); 02762 virtual Real getShadowFarDistance(void) const 02763 { return mDefaultShadowFarDist; } 02764 virtual Real getShadowFarDistanceSquared(void) const 02765 { return mDefaultShadowFarDistSquared; } 02766 02792 virtual void setShadowIndexBufferSize(size_t size); 02794 virtual size_t getShadowIndexBufferSize(void) const 02795 { return mShadowIndexBufferSize; } 02804 virtual void setShadowTextureSize(unsigned short size); 02805 02815 virtual void setShadowTextureConfig(size_t shadowIndex, unsigned short width, 02816 unsigned short height, PixelFormat format, unsigned short fsaa = 0, uint16 depthBufferPoolId=1); 02822 virtual void setShadowTextureConfig(size_t shadowIndex, 02823 const ShadowTextureConfig& config); 02824 02826 ConstShadowTextureConfigIterator getShadowTextureConfigIterator() const; 02827 02839 virtual void setShadowTexturePixelFormat(PixelFormat fmt); 02846 virtual void setShadowTextureFSAA(unsigned short fsaa); 02847 02855 virtual void setShadowTextureCount(size_t count); 02857 size_t getShadowTextureCount(void) const {return mShadowTextureConfigList.size(); } 02858 02868 void setShadowTextureCountPerLightType(Light::LightTypes type, size_t count) 02869 { mShadowTextureCountPerType[type] = count; } 02871 size_t getShadowTextureCountPerLightType(Light::LightTypes type) const 02872 {return mShadowTextureCountPerType[type]; } 02873 02881 virtual void setShadowTextureSettings(unsigned short size, unsigned short count, 02882 PixelFormat fmt = PF_X8R8G8B8, unsigned short fsaa = 0, uint16 depthBufferPoolId=1); 02883 02890 virtual const TexturePtr& getShadowTexture(size_t shadowIndex); 02891 02906 virtual void setShadowDirLightTextureOffset(Real offset) { mShadowTextureOffset = offset;} 02910 virtual Real getShadowDirLightTextureOffset(void) const { return mShadowTextureOffset; } 02918 virtual void setShadowTextureFadeStart(Real fadeStart) 02919 { mShadowTextureFadeStart = fadeStart; } 02927 virtual void setShadowTextureFadeEnd(Real fadeEnd) 02928 { mShadowTextureFadeEnd = fadeEnd; } 02929 02942 virtual void setShadowTextureSelfShadow(bool selfShadow); 02943 02945 virtual bool getShadowTextureSelfShadow(void) const 02946 { return mShadowTextureSelfShadow; } 02967 virtual void setShadowTextureCasterMaterial(const String& name); 02989 virtual void setShadowTextureReceiverMaterial(const String& name); 02990 03001 virtual void setShadowCasterRenderBackFaces(bool bf) { mShadowCasterRenderBackFaces = bf; } 03002 03006 virtual bool getShadowCasterRenderBackFaces() const { return mShadowCasterRenderBackFaces; } 03007 03012 virtual void setShadowCameraSetup(const ShadowCameraSetupPtr& shadowSetup); 03013 03018 virtual const ShadowCameraSetupPtr& getShadowCameraSetup() const; 03019 03056 virtual void setShadowUseInfiniteFarPlane(bool enable) { 03057 mShadowUseInfiniteFarPlane = enable; } 03058 03060 virtual bool isShadowTechniqueStencilBased(void) const 03061 { return (mShadowTechnique & SHADOWDETAILTYPE_STENCIL) != 0; } 03063 virtual bool isShadowTechniqueTextureBased(void) const 03064 { return (mShadowTechnique & SHADOWDETAILTYPE_TEXTURE) != 0; } 03066 virtual bool isShadowTechniqueModulative(void) const 03067 { return (mShadowTechnique & SHADOWDETAILTYPE_MODULATIVE) != 0; } 03069 virtual bool isShadowTechniqueAdditive(void) const 03070 { return (mShadowTechnique & SHADOWDETAILTYPE_ADDITIVE) != 0; } 03072 virtual bool isShadowTechniqueIntegrated(void) const 03073 { return (mShadowTechnique & SHADOWDETAILTYPE_INTEGRATED) != 0; } 03075 virtual bool isShadowTechniqueInUse(void) const 03076 { return mShadowTechnique != SHADOWTYPE_NONE; } 03080 virtual void setShadowUseLightClipPlanes(bool enabled) { mShadowAdditiveLightClip = enabled; } 03084 virtual bool getShadowUseLightClipPlanes() const { return mShadowAdditiveLightClip; } 03085 03089 virtual void _setActiveCompositorChain(CompositorChain* chain) { mActiveCompositorChain = chain; } 03090 03096 virtual void setLateMaterialResolving(bool isLate) { mLateMaterialResolving = isLate; } 03097 03100 virtual bool isLateMaterialResolving() const { return mLateMaterialResolving; } 03101 03103 virtual CompositorChain* _getActiveCompositorChain() const { return mActiveCompositorChain; } 03104 03107 virtual void addListener(Listener* s); 03110 virtual void removeListener(Listener* s); 03111 03121 virtual StaticGeometry* createStaticGeometry(const String& name); 03125 virtual StaticGeometry* getStaticGeometry(const String& name) const; 03127 virtual bool hasStaticGeometry(const String& name) const; 03129 virtual void destroyStaticGeometry(StaticGeometry* geom); 03131 virtual void destroyStaticGeometry(const String& name); 03133 virtual void destroyAllStaticGeometry(void); 03134 03144 virtual InstancedGeometry* createInstancedGeometry(const String& name); 03146 virtual InstancedGeometry* getInstancedGeometry(const String& name) const; 03148 virtual void destroyInstancedGeometry(InstancedGeometry* geom); 03150 virtual void destroyInstancedGeometry(const String& name); 03152 virtual void destroyAllInstancedGeometry(void); 03153 03172 virtual InstanceManager* createInstanceManager( const String &customName, const String &meshName, 03173 const String &groupName, 03174 InstanceManager::InstancingTechnique technique, 03175 size_t numInstancesPerBatch, uint16 flags=0, 03176 unsigned short subMeshIdx=0 ); 03177 03181 virtual InstanceManager* getInstanceManager( const String &managerName ) const; 03182 03184 virtual bool hasInstanceManager( const String &managerName ) const; 03185 03192 virtual void destroyInstanceManager( const String &name ); 03193 virtual void destroyInstanceManager( InstanceManager *instanceManager ); 03194 03195 virtual void destroyAllInstanceManagers(void); 03196 03209 virtual size_t getNumInstancesPerBatch( const String &meshName, const String &groupName, 03210 const String &materialName, 03211 InstanceManager::InstancingTechnique technique, 03212 size_t numInstancesPerBatch, uint16 flags=0, 03213 unsigned short subMeshIdx=0 ); 03214 03226 virtual InstancedEntity* createInstancedEntity( const String &materialName, 03227 const String &managerName ); 03228 03233 virtual void destroyInstancedEntity( InstancedEntity *instancedEntity ); 03234 03239 void _addDirtyInstanceManager( InstanceManager *dirtyManager ); 03240 03251 virtual MovableObject* createMovableObject(const String& name, 03252 const String& typeName, const NameValuePairList* params = 0); 03262 virtual MovableObject* createMovableObject(const String& typeName, const NameValuePairList* params = 0); 03268 virtual void destroyMovableObject(const String& name, const String& typeName); 03274 virtual void destroyMovableObject(MovableObject* m); 03276 virtual void destroyAllMovableObjectsByType(const String& typeName); 03278 virtual void destroyAllMovableObjects(void); 03282 virtual MovableObject* getMovableObject(const String& name, const String& typeName) const; 03284 virtual bool hasMovableObject(const String& name, const String& typeName) const; 03285 typedef MapIterator<MovableObjectMap> MovableObjectIterator; 03291 virtual MovableObjectIterator getMovableObjectIterator(const String& typeName); 03303 virtual void injectMovableObject(MovableObject* m); 03310 virtual void extractMovableObject(const String& name, const String& typeName); 03317 virtual void extractMovableObject(MovableObject* m); 03324 virtual void extractAllMovableObjectsByType(const String& typeName); 03325 03332 virtual void setVisibilityMask(uint32 vmask) { mVisibilityMask = vmask; } 03333 03337 virtual uint32 getVisibilityMask(void) { return mVisibilityMask; } 03338 03342 uint32 _getCombinedVisibilityMask(void) const; 03343 03350 virtual void setFindVisibleObjects(bool find) { mFindVisibleObjects = find; } 03351 03355 virtual bool getFindVisibleObjects(void) { return mFindVisibleObjects; } 03356 03365 virtual void setNormaliseNormalsOnScale(bool n) { mNormaliseNormalsOnScale = n; } 03366 03370 virtual bool getNormaliseNormalsOnScale() const { return mNormaliseNormalsOnScale; } 03371 03380 virtual void setFlipCullingOnNegativeScale(bool n) { mFlipCullingOnNegativeScale = n; } 03381 03385 virtual bool getFlipCullingOnNegativeScale() const { return mFlipCullingOnNegativeScale; } 03386 03392 virtual void _injectRenderWithPass(Pass *pass, Renderable *rend, bool shadowDerivation = true, 03393 bool doLightIteration = false, const LightList* manualLightList = 0); 03394 03413 virtual void _suppressRenderStateChanges(bool suppress); 03414 03418 virtual bool _areRenderStateChangesSuppressed(void) const 03419 { return mSuppressRenderStateChanges; } 03420 03433 virtual const Pass* _setPass(const Pass* pass, 03434 bool evenIfSuppressed = false, bool shadowDerivation = true); 03435 03443 virtual void _markGpuParamsDirty(uint16 mask); 03444 03445 03455 virtual void _suppressShadows(bool suppress); 03456 03460 virtual bool _areShadowsSuppressed(void) const 03461 { return mSuppressShadows; } 03462 03466 virtual void _renderQueueGroupObjects(RenderQueueGroup* group, 03467 QueuedRenderableCollection::OrganisationMode om); 03468 03484 void setQueuedRenderableVisitor(SceneMgrQueuedRenderableVisitor* visitor); 03485 03487 SceneMgrQueuedRenderableVisitor* getQueuedRenderableVisitor(void) const; 03488 03489 03493 RenderSystem *getDestinationRenderSystem(); 03494 03497 Viewport* getCurrentViewport(void) const { return mCurrentViewport; } 03498 03500 const VisibleObjectsBoundsInfo& getVisibleObjectsBoundsInfo(const Camera* cam) const; 03501 03503 const VisibleObjectsBoundsInfo& getShadowCasterBoundsInfo(const Light* light, size_t iteration = 0) const; 03504 03519 virtual void setCameraRelativeRendering(bool rel) { mCameraRelativeRendering = rel; } 03520 03524 virtual bool getCameraRelativeRendering() const { return mCameraRelativeRendering; } 03525 03526 03528 void addLodListener(LodListener *listener); 03529 03535 void removeLodListener(LodListener *listener); 03536 03538 void _notifyMovableObjectLodChanged(MovableObjectLodChangedEvent& evt); 03539 03541 void _notifyEntityMeshLodChanged(EntityMeshLodChangedEvent& evt); 03542 03544 void _notifyEntityMaterialLodChanged(EntityMaterialLodChangedEvent& evt); 03545 03547 void _handleLodEvents(); 03548 03549 IlluminationRenderStage _getCurrentRenderStage() {return mIlluminationStage;} 03550 }; 03551 03553 class _OgreExport DefaultIntersectionSceneQuery : 03554 public IntersectionSceneQuery 03555 { 03556 public: 03557 DefaultIntersectionSceneQuery(SceneManager* creator); 03558 ~DefaultIntersectionSceneQuery(); 03559 03561 void execute(IntersectionSceneQueryListener* listener); 03562 }; 03563 03565 class _OgreExport DefaultRaySceneQuery : public RaySceneQuery 03566 { 03567 public: 03568 DefaultRaySceneQuery(SceneManager* creator); 03569 ~DefaultRaySceneQuery(); 03570 03572 void execute(RaySceneQueryListener* listener); 03573 }; 03575 class _OgreExport DefaultSphereSceneQuery : public SphereSceneQuery 03576 { 03577 public: 03578 DefaultSphereSceneQuery(SceneManager* creator); 03579 ~DefaultSphereSceneQuery(); 03580 03582 void execute(SceneQueryListener* listener); 03583 }; 03585 class _OgreExport DefaultPlaneBoundedVolumeListSceneQuery : public PlaneBoundedVolumeListSceneQuery 03586 { 03587 public: 03588 DefaultPlaneBoundedVolumeListSceneQuery(SceneManager* creator); 03589 ~DefaultPlaneBoundedVolumeListSceneQuery(); 03590 03592 void execute(SceneQueryListener* listener); 03593 }; 03595 class _OgreExport DefaultAxisAlignedBoxSceneQuery : public AxisAlignedBoxSceneQuery 03596 { 03597 public: 03598 DefaultAxisAlignedBoxSceneQuery(SceneManager* creator); 03599 ~DefaultAxisAlignedBoxSceneQuery(); 03600 03602 void execute(SceneQueryListener* listener); 03603 }; 03604 03605 03607 typedef uint16 SceneTypeMask; 03608 03612 enum SceneType 03613 { 03614 ST_GENERIC = 1, 03615 ST_EXTERIOR_CLOSE = 2, 03616 ST_EXTERIOR_FAR = 4, 03617 ST_EXTERIOR_REAL_FAR = 8, 03618 ST_INTERIOR = 16 03619 }; 03620 03622 struct SceneManagerMetaData 03623 { 03625 String typeName; 03627 String description; 03629 SceneTypeMask sceneTypeMask; 03631 bool worldGeometrySupported; 03632 }; 03633 03634 03635 03637 class _OgreExport SceneManagerFactory : public SceneMgtAlloc 03638 { 03639 protected: 03640 mutable SceneManagerMetaData mMetaData; 03641 mutable bool mMetaDataInit; 03643 virtual void initMetaData(void) const = 0; 03644 public: 03645 SceneManagerFactory() : mMetaDataInit(true) {} 03646 virtual ~SceneManagerFactory() {} 03648 virtual const SceneManagerMetaData& getMetaData(void) const 03649 { 03650 if (mMetaDataInit) 03651 { 03652 initMetaData(); 03653 mMetaDataInit = false; 03654 } 03655 return mMetaData; 03656 } 03661 virtual SceneManager* createInstance(const String& instanceName) = 0; 03663 virtual void destroyInstance(SceneManager* instance) = 0; 03664 03665 }; 03666 03671 } // Namespace 03672 03673 #include "OgreHeaderSuffix.h" 03674 03675 #endif
Copyright © 2012 Torus Knot Software Ltd

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:45