diff --git a/src/modules/graphics/opengl/Framebuffer.cpp b/src/modules/graphics/opengl/Framebuffer.cpp index 34dd06bb2..0a372a1ab 100644 --- a/src/modules/graphics/opengl/Framebuffer.cpp +++ b/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 diff --git a/src/modules/graphics/opengl/Framebuffer.h b/src/modules/graphics/opengl/Framebuffer.h index 3e356c5a4..648d03026 100644 --- a/src/modules/graphics/opengl/Framebuffer.h +++ b/src/modules/graphics/opengl/Framebuffer.h @@ -2,6 +2,7 @@ #define LOVE_GRAPHICS_FRAMEBUFFER_H #include +#include #include #include #include @@ -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;