Просмотр исходного кода

Merge branch 'master' of https://github.com/BearishSun/BansheeEngine

MarcoROG 8 лет назад
Родитель
Сommit
b4f490571f
2 измененных файлов с 18 добавлено и 7 удалено
  1. 1 1
      Source/RenderBeast/Include/BsRendererScene.h
  2. 17 6
      Source/RenderBeast/Source/BsRendererScene.cpp

+ 1 - 1
Source/RenderBeast/Include/BsRendererScene.h

@@ -129,7 +129,7 @@ namespace bs
 		 * Find the render target the camera belongs to and adds it to the relevant list. If the camera was previously
 		 * Find the render target the camera belongs to and adds it to the relevant list. If the camera was previously
 		 * registered with some other render target it will be removed from it and added to the new target.
 		 * registered with some other render target it will be removed from it and added to the new target.
 		 */
 		 */
-		void updateCameraRenderTargets(Camera* camera);
+		void updateCameraRenderTargets(Camera* camera, bool remove = false);
 
 
 		SceneInfo mInfo;
 		SceneInfo mInfo;
 		UnorderedMap<SamplerOverrideKey, MaterialSamplerOverrides*> mSamplerOverrides;
 		UnorderedMap<SamplerOverrideKey, MaterialSamplerOverrides*> mSamplerOverrides;

+ 17 - 6
Source/RenderBeast/Source/BsRendererScene.cpp

@@ -95,6 +95,8 @@ namespace bs {	namespace ct
 			// Swap current last element with the one we want to erase
 			// Swap current last element with the one we want to erase
 			std::swap(mInfo.views[cameraId], mInfo.views[lastCameraId]);
 			std::swap(mInfo.views[cameraId], mInfo.views[lastCameraId]);
 			lastCamera->setRendererId(cameraId);
 			lastCamera->setRendererId(cameraId);
+
+			mInfo.cameraToView[lastCamera] = cameraId;
 		}
 		}
 		
 		
 		// Last element is the one we want to erase
 		// Last element is the one we want to erase
@@ -107,7 +109,7 @@ namespace bs {	namespace ct
 		if(iterFind != mInfo.cameraToView.end())
 		if(iterFind != mInfo.cameraToView.end())
 			mInfo.cameraToView.erase(iterFind);
 			mInfo.cameraToView.erase(iterFind);
 
 
-		updateCameraRenderTargets(camera);
+		updateCameraRenderTargets(camera, true);
 	}
 	}
 
 
 	void RendererScene::registerLight(Light* light)
 	void RendererScene::registerLight(Light* light)
@@ -525,7 +527,7 @@ namespace bs {	namespace ct
 		return viewDesc;
 		return viewDesc;
 	}
 	}
 
 
-	void RendererScene::updateCameraRenderTargets(Camera* camera)
+	void RendererScene::updateCameraRenderTargets(Camera* camera, bool remove)
 	{
 	{
 		SPtr<RenderTarget> renderTarget = camera->getViewport()->getTarget();
 		SPtr<RenderTarget> renderTarget = camera->getViewport()->getTarget();
 
 
@@ -538,14 +540,23 @@ namespace bs {	namespace ct
 			{
 			{
 				if (camera == *iterCam)
 				if (camera == *iterCam)
 				{
 				{
-					if (renderTarget != target.target)
+					if(remove)
 					{
 					{
 						target.cameras.erase(iterCam);
 						target.cameras.erase(iterCam);
-						rtChanged = 2;
-
+						rtChanged = 1;
+						
 					}
 					}
 					else
 					else
-						rtChanged = 1;
+					{
+						if (renderTarget != target.target)
+						{
+							target.cameras.erase(iterCam);
+							rtChanged = 2;
+
+						}
+						else
+							rtChanged = 1;
+					}
 
 
 					break;
 					break;
 				}
 				}