Ivan Safrin 13 лет назад
Родитель
Сommit
dfd6ba1da4

+ 1 - 0
Core/Contents/Include/PolyGLTexture.h

@@ -39,6 +39,7 @@ THE SOFTWARE.
 #include <GL/glu.h>
 #endif
 
+#define FRAMEBUFFER_NULL 999999
 
 namespace Polycode {
 

+ 1 - 2
Core/Contents/Include/PolyScreen.h

@@ -169,8 +169,7 @@ namespace Polycode {
 		std::vector <ScreenEntity*> children;
 		
 		Material *filterShaderMaterial;			
-		Texture *originalSceneTexture;			
-		Texture *zBufferSceneTexture;						
+		Texture *originalSceneTexture;				
 		std::vector<ShaderBinding*> localShaderOptions;
 		bool _hasFilterShader;
 	};

+ 4 - 0
Core/Contents/Include/PolyScreenMesh.h

@@ -91,6 +91,10 @@ namespace Polycode {
 			
 			Number lineWidth;
 			
+			/**
+			* If true, will delete its Mesh upon destruction. (defaults to true)
+			*/ 			
+			bool ownsMesh;
 			
 		protected:
 		

+ 9 - 2
Core/Contents/Source/PolyCamera.cpp

@@ -29,6 +29,7 @@
 #include "PolyResourceManager.h"
 #include "PolyScene.h"
 #include "PolyShader.h"
+#include "PolyTexture.h"
 
 using namespace Polycode;
 			
@@ -37,13 +38,19 @@ Camera::Camera(Scene *parentScene) : SceneEntity() {
 	orthoMode = false;
 	fov = 45.0f;
 	originalSceneTexture = NULL;
+	zBufferSceneTexture = NULL;
 	exposureLevel = 1.0f;
 	_hasFilterShader = false;	
 	fovSet = false;
 }
 
-Camera::~Camera() {
+Camera::~Camera() {	
+	for(int i=0; i < localShaderOptions.size(); i++) {
+		delete localShaderOptions[i];
+	}
 
+	delete originalSceneTexture;
+	delete zBufferSceneTexture;
 }
 
 void Camera::setExposureLevel(Number level) {
@@ -266,7 +273,7 @@ void Camera::createPostFilter(Material *shaderMaterial) {
 //	zBufferSceneTexture = CoreServices::getInstance()->getMaterialManager()->createFramebufferTexture(CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), 0);
 
 	if(!originalSceneTexture) {
-	CoreServices::getInstance()->getRenderer()->createRenderTextures(&originalSceneTexture, &zBufferSceneTexture, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), shaderMaterial->fp16RenderTargets);
+		CoreServices::getInstance()->getRenderer()->createRenderTextures(&originalSceneTexture, &zBufferSceneTexture, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), shaderMaterial->fp16RenderTargets);
 	}
 	
 	for(int i=0; i < shaderMaterial->getNumShaders(); i++) {

+ 2 - 2
Core/Contents/Source/PolyGLTexture.cpp

@@ -33,7 +33,7 @@ extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
 OpenGLTexture::OpenGLTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, bool createMipmaps, int filteringMode, int type) : Texture(width, height, textureData,clamp, createMipmaps, type) {
 	this->filteringMode = filteringMode;
 	glTextureLoaded = false;
-	frameBufferID = 999999;
+	frameBufferID = FRAMEBUFFER_NULL;
 	
 	switch(type) {
 		case Image::IMAGE_RGB:
@@ -125,7 +125,7 @@ void OpenGLTexture::setTextureData(char *data) {
 
 OpenGLTexture::~OpenGLTexture() {
 	glDeleteTextures(1, &textureID);
-	if(frameBufferID != 999999) {
+	if(frameBufferID != FRAMEBUFFER_NULL) {
 		glDeleteFramebuffersEXT(1, &frameBufferID);
 	}	
 }

+ 8 - 2
Core/Contents/Source/PolyScreen.cpp

@@ -31,6 +31,7 @@
 #include "PolyScreenEntity.h"
 #include "PolyScreenEvent.h"
 #include "PolyShader.h"
+#include "PolyTexture.h"
 
 using namespace Polycode;
 
@@ -58,7 +59,12 @@ Screen::~Screen() {
 	} else {
 		delete rootEntity;
 	}
-	CoreServices::getInstance()->getScreenManager()->removeScreen(this);	
+	CoreServices::getInstance()->getScreenManager()->removeScreen(this);
+
+	for(int i=0; i < localShaderOptions.size(); i++) {
+		delete localShaderOptions[i];
+	}
+	delete originalSceneTexture;			
 }
 
 void Screen::setNormalizedCoordinates(bool newVal, Number yCoordinateSize) {
@@ -178,7 +184,7 @@ void Screen::setScreenShader(const String& shaderName) {
 		return;
 	
 	if(!originalSceneTexture) {
-	CoreServices::getInstance()->getRenderer()->createRenderTextures(&originalSceneTexture, NULL, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), filterShaderMaterial->fp16RenderTargets);
+		CoreServices::getInstance()->getRenderer()->createRenderTextures(&originalSceneTexture, NULL, CoreServices::getInstance()->getCore()->getXRes(), CoreServices::getInstance()->getCore()->getYRes(), filterShaderMaterial->fp16RenderTargets);
 	}
 	
 	for(int i=0; i < filterShaderMaterial->getNumShaders(); i++) {

+ 4 - 1
Core/Contents/Source/PolyScreenMesh.cpp

@@ -32,6 +32,7 @@ ScreenMesh::ScreenMesh(Mesh *mesh) : ScreenEntity(), texture(NULL) {
 	this->mesh = mesh;
 	lineSmooth = false;
 	lineWidth = 1.0;
+	ownsMesh = true;
 }
 
 ScreenMesh::ScreenMesh(const String& fileName) : ScreenEntity(), texture(NULL) {
@@ -50,7 +51,9 @@ ScreenMesh::ScreenMesh(int meshType) : ScreenEntity(), texture(NULL) {
 
 
 ScreenMesh::~ScreenMesh() {
-
+	if(ownsMesh) {
+		delete mesh;
+	}
 }
 
 Mesh *ScreenMesh::getMesh() const {