mirror of
https://github.com/love2d/love.git
synced 2026-08-17 11:00:31 +02:00
made Framebuffer Volatile and fixed a few bugs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user