made Framebuffer Volatile and fixed a few bugs

This commit is contained in:
Bill Meltsner
2010-08-28 13:02:28 -05:00
parent ee3b74e66d
commit 769842ce6e
2 changed files with 23 additions and 8 deletions
+18 -7
View File
@@ -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
View File
@@ -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;