-----------------------------------------------------------------------
| 922 | } |
| 923 | //----------------------------------------------------------------------- |
| 924 | void SceneManager::_renderScene(Camera* camera, Viewport* vp, bool includeOverlays) |
| 925 | { |
| 926 | assert(camera); |
| 927 | OgreProfileGroup(camera->getName(), OGREPROF_GENERAL); |
| 928 | |
| 929 | auto prevSceneManager = Root::getSingleton()._getCurrentSceneManager(); |
| 930 | Root::getSingleton()._setCurrentSceneManager(this); |
| 931 | mActiveQueuedRenderableVisitor->targetSceneMgr = this; |
| 932 | mAutoParamDataSource->setCurrentSceneManager(this); |
| 933 | |
| 934 | // preserve the previous scheme, in case this is a RTT update with an outer _renderScene pending |
| 935 | MaterialManager& matMgr = MaterialManager::getSingleton(); |
| 936 | String prevMaterialScheme = matMgr.getActiveScheme(); |
| 937 | |
| 938 | // Also set the internal viewport pointer at this point, for calls that need it |
| 939 | // However don't call setViewport just yet (see below) |
| 940 | mCurrentViewport = vp; |
| 941 | |
| 942 | // Set current draw buffer (default is CBT_BACK) |
| 943 | mDestRenderSystem->setDrawBuffer(mCurrentViewport->getDrawBuffer()); |
| 944 | |
| 945 | // reset light hash so even if light list is the same, we refresh the content every frame |
| 946 | useLights(NULL, 0); |
| 947 | |
| 948 | // Perform a quick pre-check to see whether we should override far distance |
| 949 | // When using stencil volumes we have to use infinite far distance |
| 950 | // to prevent dark caps getting clipped |
| 951 | if (isShadowTechniqueStencilBased() && |
| 952 | camera->getProjectionType() == PT_PERSPECTIVE && |
| 953 | camera->getFarClipDistance() != 0 && |
| 954 | mStencilShadowRenderer.mShadowUseInfiniteFarPlane) |
| 955 | { |
| 956 | // infinite far distance |
| 957 | camera->setFarClipDistance(0); |
| 958 | } |
| 959 | |
| 960 | mCameraInProgress = camera; |
| 961 | |
| 962 | |
| 963 | // Update controllers |
| 964 | ControllerManager::getSingleton().updateAllControllers(); |
| 965 | |
| 966 | // Update the scene, only do this once per frame |
| 967 | unsigned long thisFrameNumber = Root::getSingleton().getNextFrameNumber(); |
| 968 | if (thisFrameNumber != mLastFrameNumber) |
| 969 | { |
| 970 | // Update animations |
| 971 | _applySceneAnimations(); |
| 972 | updateDirtyInstanceManagers(); |
| 973 | mLastFrameNumber = thisFrameNumber; |
| 974 | } |
| 975 | |
| 976 | { |
| 977 | // Lock scene graph mutex, no more changes until we're ready to render |
| 978 | OGRE_LOCK_MUTEX(sceneGraphMutex); |
| 979 | |
| 980 | // Update scene graph for this camera (can happen multiple times per frame) |
| 981 | { |
nothing calls this directly
no test coverage detected