mirror of
https://github.com/love2d/love.git
synced 2026-08-21 13:09:56 +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)
|
virtual void deleteFBO(GLuint framebuffer, GLuint depthbuffer, GLuint img)
|
||||||
{
|
{
|
||||||
glDeleteTextures(1, &framebuffer);
|
glDeleteTextures(1, &img);
|
||||||
glDeleteRenderbuffers(1, &depthbuffer);
|
glDeleteRenderbuffers(1, &depthbuffer);
|
||||||
glDeleteFramebuffers(1, &img);
|
glDeleteFramebuffers(1, &framebuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void bindFBO(GLuint framebuffer)
|
virtual void bindFBO(GLuint framebuffer)
|
||||||
@@ -117,7 +117,7 @@ namespace {
|
|||||||
{
|
{
|
||||||
// generate depth buffer
|
// generate depth buffer
|
||||||
glGenRenderbuffersEXT(1, &depthbuffer);
|
glGenRenderbuffersEXT(1, &depthbuffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER_EXT, depthbuffer);
|
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer);
|
||||||
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, width, height);
|
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, width, height);
|
||||||
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
|
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
|
||||||
|
|
||||||
@@ -146,9 +146,9 @@ namespace {
|
|||||||
|
|
||||||
virtual void deleteFBO(GLuint framebuffer, GLuint depthbuffer, GLuint img)
|
virtual void deleteFBO(GLuint framebuffer, GLuint depthbuffer, GLuint img)
|
||||||
{
|
{
|
||||||
glDeleteTextures(1, &framebuffer);
|
glDeleteTextures(1, &img);
|
||||||
glDeleteRenderbuffersEXT(1, &depthbuffer);
|
glDeleteRenderbuffersEXT(1, &depthbuffer);
|
||||||
glDeleteFramebuffersEXT(1, &img);
|
glDeleteFramebuffersEXT(1, &framebuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void bindFBO(GLuint framebuffer)
|
virtual void bindFBO(GLuint framebuffer)
|
||||||
@@ -205,7 +205,7 @@ namespace opengl
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
|
loadVolatile();
|
||||||
}
|
}
|
||||||
|
|
||||||
Framebuffer::~Framebuffer()
|
Framebuffer::~Framebuffer()
|
||||||
@@ -214,7 +214,7 @@ namespace opengl
|
|||||||
if (current == this)
|
if (current == this)
|
||||||
stopGrab();
|
stopGrab();
|
||||||
|
|
||||||
strategy->deleteFBO(fbo, depthbuffer, img);
|
unloadVolatile();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Framebuffer::bindDefaultBuffer()
|
void Framebuffer::bindDefaultBuffer()
|
||||||
@@ -308,6 +308,17 @@ namespace opengl
|
|||||||
return img;
|
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
|
} // opengl
|
||||||
} // graphics
|
} // graphics
|
||||||
} // love
|
} // love
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define LOVE_GRAPHICS_FRAMEBUFFER_H
|
#define LOVE_GRAPHICS_FRAMEBUFFER_H
|
||||||
|
|
||||||
#include <graphics/Drawable.h>
|
#include <graphics/Drawable.h>
|
||||||
|
#include <graphics/Volatile.h>
|
||||||
#include <image/Image.h>
|
#include <image/Image.h>
|
||||||
#include <image/ImageData.h>
|
#include <image/ImageData.h>
|
||||||
#include <common/math.h>
|
#include <common/math.h>
|
||||||
@@ -15,7 +16,7 @@ namespace graphics
|
|||||||
namespace opengl
|
namespace opengl
|
||||||
{
|
{
|
||||||
|
|
||||||
class Framebuffer : public Drawable
|
class Framebuffer : public Drawable, public Volatile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Framebuffer(int width, int height);
|
Framebuffer(int width, int height);
|
||||||
@@ -32,6 +33,9 @@ namespace opengl
|
|||||||
virtual void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
|
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);
|
love::image::ImageData * getImageData(love::image::Image * image);
|
||||||
|
|
||||||
|
bool loadVolatile();
|
||||||
|
void unloadVolatile();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GLsizei width;
|
GLsizei width;
|
||||||
GLsizei height;
|
GLsizei height;
|
||||||
|
|||||||
Reference in New Issue
Block a user