Browse Source

made Framebuffer Volatile and fixed a few bugs

Bill Meltsner 15 years ago
parent
commit
769842ce6e

+ 18 - 7
src/modules/graphics/opengl/Framebuffer.cpp

@@ -99,9 +99,9 @@ namespace {
 		}
 		virtual void deleteFBO(GLuint framebuffer, GLuint depthbuffer, GLuint img)
 		{
-			glDeleteTextures(1, &framebuffer);
+			glDeleteTextures(1, &img);
 			glDeleteRenderbuffers(1, &depthbuffer);
-			glDeleteFramebuffers(1, &img);
+			glDeleteFramebuffers(1, &framebuffer);
 		}
 
 		virtual void bindFBO(GLuint framebuffer)
@@ -117,7 +117,7 @@ namespace {
 		{
 			// generate depth buffer
 			glGenRenderbuffersEXT(1, &depthbuffer);
-			glBindRenderbuffer(GL_RENDERBUFFER_EXT, depthbuffer);
+			glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer);
 			glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, width, height);
 			glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
 
@@ -146,9 +146,9 @@ namespace {
 
 		virtual void deleteFBO(GLuint framebuffer, GLuint depthbuffer, GLuint img)
 		{
-			glDeleteTextures(1, &framebuffer);
+			glDeleteTextures(1, &img);
 			glDeleteRenderbuffersEXT(1, &depthbuffer);
-			glDeleteFramebuffersEXT(1, &img);
+			glDeleteFramebuffersEXT(1, &framebuffer);
 		}
 
 		virtual void bindFBO(GLuint framebuffer)
@@ -205,7 +205,7 @@ namespace opengl
 			
 		}
 
-		status = strategy->createFBO(fbo, depthbuffer, img, width, height);
+		loadVolatile();
 	}
 
 	Framebuffer::~Framebuffer()
@@ -214,7 +214,7 @@ namespace opengl
 		if (current == this)
 			stopGrab();
 
-		strategy->deleteFBO(fbo, depthbuffer, img);
+		unloadVolatile();
 	}
 
 	void Framebuffer::bindDefaultBuffer()
@@ -307,6 +307,17 @@ namespace opengl
 
 		return img;
 	}
+	
+	bool Framebuffer::loadVolatile()
+	{
+		status = strategy->createFBO(fbo, depthbuffer, img, width, height);
+		return (status == GL_FRAMEBUFFER_COMPLETE);
+	}
+	
+	void Framebuffer::unloadVolatile()
+	{
+		strategy->deleteFBO(fbo, depthbuffer, img);
+	}
 
 } // opengl
 } // graphics

+ 5 - 1
src/modules/graphics/opengl/Framebuffer.h

@@ -2,6 +2,7 @@
 #define LOVE_GRAPHICS_FRAMEBUFFER_H
 
 #include <graphics/Drawable.h>
+#include <graphics/Volatile.h>
 #include <image/Image.h>
 #include <image/ImageData.h>
 #include <common/math.h>
@@ -15,7 +16,7 @@ namespace graphics
 namespace opengl
 {
 
-	class Framebuffer : public Drawable
+	class Framebuffer : public Drawable, public Volatile
 	{
 	public:
 		Framebuffer(int width, int height);
@@ -31,6 +32,9 @@ namespace opengl
 
 		virtual void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
 		love::image::ImageData * getImageData(love::image::Image * image);
+		
+		bool loadVolatile();
+		void unloadVolatile();
 
 	private:
 		GLsizei width;