Bladeren bron

Slight performance fixes

Ivan Safrin 12 jaren geleden
bovenliggende
commit
20165c8eca

+ 5 - 1
Core/Contents/Include/PolySceneManager.h

@@ -29,6 +29,7 @@ namespace Polycode {
 	
 	class Scene;
 	class SceneRenderTexture;
+	class Renderer;
 	
 	class _PolyExport SceneManager : public PolyBase {
 		public:
@@ -44,6 +45,8 @@ namespace Polycode {
 		void removeScene(Scene *scene);	
 		void registerRenderTexture(SceneRenderTexture *renderTexture);
 		void unregisterRenderTexture(SceneRenderTexture *renderTexture);
+
+		void setRenderer(Renderer *renderer);
 				
 		private:
 		
@@ -51,7 +54,8 @@ namespace Polycode {
 		
 		std::vector <Scene*> scenes;
 		std::vector <SceneRenderTexture*> renderTextures;
-			
+		
+		Renderer *renderer;
 	};
 
 }

+ 26 - 27
Core/Contents/Source/PolyCamera.cpp

@@ -34,6 +34,7 @@
 using namespace Polycode;
 			
 Camera::Camera(Scene *parentScene) : Entity() {
+	renderer = CoreServices::getInstance()->getRenderer();
 	setParentScene(parentScene);
 	orthoMode = false;
 	fov = 45.0f;
@@ -127,8 +128,8 @@ void Camera::buildFrustumPlanes() {
 	Matrix4 mvp;
 	Number t;
 
-	p = CoreServices::getInstance()->getRenderer()->getProjectionMatrix();
-    mv = CoreServices::getInstance()->getRenderer()->getModelviewMatrix();
+	p = renderer->getProjectionMatrix();
+    mv = renderer->getModelviewMatrix();
 
     //
     // Concatenate the projection matrix and the model-view matrix to produce 
@@ -295,7 +296,7 @@ void Camera::setPostFilter(Material *shaderMaterial) {
 		
 	this->filterShaderMaterial = shaderMaterial;
 	if(!originalSceneTexture) {
-		CoreServices::getInstance()->getRenderer()->createRenderTextures(&originalSceneTexture, &zBufferSceneTexture, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), shaderMaterial->fp16RenderTargets);
+		renderer->createRenderTextures(&originalSceneTexture, &zBufferSceneTexture, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), shaderMaterial->fp16RenderTargets);
 	}
 	
 	for(int i=0; i < shaderMaterial->getNumShaders(); i++) {
@@ -329,16 +330,16 @@ void Camera::drawFilter(Texture *targetTexture, Number targetTextureWidth, Numbe
 	if(targetTexture) {	
 		finalTargetColorTexture = targetColorTexture;
 		finalTargetZTexture = targetZTexture;		
-		CoreServices::getInstance()->getRenderer()->setViewportSize(targetTextureWidth, targetTextureHeight);		
+		renderer->setViewportSize(targetTextureWidth, targetTextureHeight);		
 	} else {
 		finalTargetColorTexture = originalSceneTexture;
 		finalTargetZTexture = zBufferSceneTexture;	
-		CoreServices::getInstance()->getRenderer()->setViewportSize(CoreServices::getInstance()->getRenderer()->getXRes(), CoreServices::getInstance()->getRenderer()->getYRes());
+		renderer->setViewportSize(renderer->getXRes(), renderer->getYRes());
 	}
-	CoreServices::getInstance()->getRenderer()->bindFrameBufferTexture(finalTargetColorTexture);
-	CoreServices::getInstance()->getRenderer()->bindFrameBufferTextureDepth(finalTargetZTexture);
+	renderer->bindFrameBufferTexture(finalTargetColorTexture);
+	renderer->bindFrameBufferTextureDepth(finalTargetZTexture);
 	parentScene->Render(this);
-	CoreServices::getInstance()->getRenderer()->unbindFramebuffers();
+	renderer->unbindFramebuffers();
 
 
 	ShaderBinding* materialBinding;		
@@ -357,35 +358,35 @@ void Camera::drawFilter(Texture *targetTexture, Number targetTextureWidth, Numbe
 			materialBinding->addTexture(depthBinding->name, finalTargetZTexture);
 		}
 		
-		CoreServices::getInstance()->getRenderer()->applyMaterial(filterShaderMaterial, localShaderOptions[i], i);		
+		renderer->applyMaterial(filterShaderMaterial, localShaderOptions[i], i);		
 		if(i==filterShaderMaterial->getNumShaders()-1) {
 				if(targetTexture) {
-					CoreServices::getInstance()->getRenderer()->setViewportSize(targetTextureWidth, targetTextureHeight);	
-					CoreServices::getInstance()->getRenderer()->bindFrameBufferTexture(targetTexture);								
-					CoreServices::getInstance()->getRenderer()->clearScreen();
-					CoreServices::getInstance()->getRenderer()->loadIdentity();
+					renderer->setViewportSize(targetTextureWidth, targetTextureHeight);	
+					renderer->bindFrameBufferTexture(targetTexture);								
+					renderer->clearScreen();
+					renderer->loadIdentity();
 
-					CoreServices::getInstance()->getRenderer()->drawScreenQuad(targetTextureWidth, targetTextureHeight);
-					CoreServices::getInstance()->getRenderer()->unbindFramebuffers();									
+					renderer->drawScreenQuad(targetTextureWidth, targetTextureHeight);
+					renderer->unbindFramebuffers();									
 				} else {
-					CoreServices::getInstance()->getRenderer()->setViewportSize(CoreServices::getInstance()->getRenderer()->getXRes(), CoreServices::getInstance()->getRenderer()->getYRes());
-					CoreServices::getInstance()->getRenderer()->clearScreen();
-					CoreServices::getInstance()->getRenderer()->loadIdentity();
-					CoreServices::getInstance()->getRenderer()->drawScreenQuad(CoreServices::getInstance()->getRenderer()->getXRes(), CoreServices::getInstance()->getRenderer()->getYRes());
+					renderer->setViewportSize(renderer->getXRes(), renderer->getYRes());
+					renderer->clearScreen();
+					renderer->loadIdentity();
+					renderer->drawScreenQuad(renderer->getXRes(), renderer->getYRes());
 				}
 		} else {
 			for(int j=0; j < materialBinding->getNumOutTargetBindings(); j++) {
 				Texture *bindingTexture = materialBinding->getOutTargetBinding(j)->texture;
 				if(bindingTexture) {
-					CoreServices::getInstance()->getRenderer()->setViewportSize(bindingTexture->getWidth(), bindingTexture->getHeight());
-					CoreServices::getInstance()->getRenderer()->bindFrameBufferTexture(bindingTexture);				
-					CoreServices::getInstance()->getRenderer()->drawScreenQuad(bindingTexture->getWidth(), bindingTexture->getHeight());
-					CoreServices::getInstance()->getRenderer()->unbindFramebuffers();
+					renderer->setViewportSize(bindingTexture->getWidth(), bindingTexture->getHeight());
+					renderer->bindFrameBufferTexture(bindingTexture);				
+					renderer->drawScreenQuad(bindingTexture->getWidth(), bindingTexture->getHeight());
+					renderer->unbindFramebuffers();
 				}
 			}		
 		}
-		CoreServices::getInstance()->getRenderer()->clearShader();
-		CoreServices::getInstance()->getRenderer()->loadIdentity();
+		renderer->clearShader();
+		renderer->loadIdentity();
 	}
 }
 
@@ -394,8 +395,6 @@ Matrix4 Camera::getProjectionMatrix() {
 }
 
 void Camera::doCameraTransform() {
-
-	Renderer *renderer = CoreServices::getInstance()->getRenderer();
 	renderer->setClippingPlanes(nearClipPlane, farClipPlane);
 
 	if(!orthoMode) {

+ 1 - 0
Core/Contents/Source/PolyCoreServices.cpp

@@ -157,6 +157,7 @@ Core *CoreServices::getCore() {
 
 void CoreServices::setRenderer(Renderer *renderer) {
 	this->renderer = renderer;
+	sceneManager->setRenderer(renderer);
 }
 
 Renderer *CoreServices::getRenderer() {

+ 10 - 3
Core/Contents/Source/PolyEntity.cpp

@@ -451,12 +451,19 @@ Matrix4 Entity::getConcatenatedRollMatrix() const {
 }
 
 Vector2 Entity::getScreenPosition(Matrix4 projectionMatrix, Matrix4 cameraMatrix) {
-	Vector2 pos = CoreServices::getInstance()->getRenderer()->Project(cameraMatrix, projectionMatrix, getConcatenatedMatrix().getPosition());
-	return pos;
+	if(renderer){
+		return renderer->Project(cameraMatrix, projectionMatrix, getConcatenatedMatrix().getPosition());
+	} else {
+		return Vector2();
+	}
 }
 
 Vector2 Entity::getScreenPositionForMainCamera() {
-	return getScreenPosition(CoreServices::getInstance()->getRenderer()->getProjectionMatrix(), CoreServices::getInstance()->getRenderer()->getCameraMatrix());
+	if(renderer) {
+		return getScreenPosition(renderer->getProjectionMatrix(), renderer->getCameraMatrix());
+	} else {
+		return Vector2();
+	}
 }
 
 void Entity::transformAndRender() {

+ 13 - 9
Core/Contents/Source/PolySceneManager.cpp

@@ -70,34 +70,38 @@ void SceneManager::addScene(Scene *newScene) {
 void SceneManager::updateRenderTextures(Scene *scene) {
 }
 
+void SceneManager::setRenderer(Renderer *renderer) {
+	this->renderer = renderer;
+}
+
 void SceneManager::renderVirtual() {
 	for(int i=0;i<renderTextures.size();i++) {
 		if(renderTextures[i]->enabled) {
-		CoreServices::getInstance()->getRenderer()->setViewportSize(renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight());
-		CoreServices::getInstance()->getRenderer()->loadIdentity();
+		renderer->setViewportSize(renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight());
+		renderer->loadIdentity();
 		if(renderTextures[i]->getTargetScene()->isVirtual())
 			renderTextures[i]->getTargetScene()->Update();
 						
 			if(renderTextures[i]->getTargetCamera()->hasFilterShader()) {
 				renderTextures[i]->getTargetCamera()->drawFilter(renderTextures[i]->getTargetTexture(), renderTextures[i]->getTargetTexture()->getWidth(), renderTextures[i]->getTargetTexture()->getHeight(), renderTextures[i]->getFilterColorBufferTexture(), renderTextures[i]->getFilterZBufferTexture());
 			} else {
-				CoreServices::getInstance()->getRenderer()->bindFrameBufferTexture(renderTextures[i]->getTargetTexture());
+				renderer->bindFrameBufferTexture(renderTextures[i]->getTargetTexture());
 				renderTextures[i]->getTargetScene()->Render(renderTextures[i]->getTargetCamera());
-				CoreServices::getInstance()->getRenderer()->unbindFramebuffers();		
+				renderer->unbindFramebuffers();		
 			}
 		}
 			
-		CoreServices::getInstance()->getRenderer()->clearScreen();
-		CoreServices::getInstance()->getRenderer()->loadIdentity();
+		renderer->clearScreen();
+		renderer->loadIdentity();
 	}
-	CoreServices::getInstance()->getRenderer()->setViewportSize(CoreServices::getInstance()->getRenderer()->getXRes(), CoreServices::getInstance()->getRenderer()->getYRes());
+	renderer->setViewportSize(renderer->getXRes(), renderer->getYRes());
 
 }
 
 void SceneManager::Render() {
 	for(int i=0;i<scenes.size();i++) {
 		if(scenes[i]->isEnabled() && !scenes[i]->isVirtual()) {
-			CoreServices::getInstance()->getRenderer()->loadIdentity();
+			renderer->loadIdentity();
 			Scene *scene = scenes[i];
 			if(scene->getActiveCamera()->hasFilterShader()) {
 				scene->getActiveCamera()->drawFilter();
@@ -105,7 +109,7 @@ void SceneManager::Render() {
 				scene->Render();
 			}
 		}
-		CoreServices::getInstance()->getRenderer()->loadIdentity();			
+		renderer->loadIdentity();			
 	}
 }