From 6f258f295d5a6153ece5026b5ab384a15db08238 Mon Sep 17 00:00:00 2001 From: Anselme Date: Tue, 8 Dec 2015 00:09:14 +0100 Subject: [PATCH] changed format to screen fbo for a more explicit and safe one --- forwardmodule.h | 4 ++-- framebuffer.cpp | 41 +++++++++++++++++++++-------------------- framebuffer.h | 10 +++++++--- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/forwardmodule.h b/forwardmodule.h index 0512529..2cf3605 100644 --- a/forwardmodule.h +++ b/forwardmodule.h @@ -18,7 +18,7 @@ class ForwardModule : public Module public: ForwardModule() : shaderSources(NULL), - renderTarget(FrameBuffer::getScreen()) + renderTarget(FrameBuffer::screen) {} virtual void renderGL(Camera* myCamera, Scene* scene); @@ -47,7 +47,7 @@ private: ShaderSource* shaderSources; std::vector shaders; std::vector flags; - FrameBuffer* renderTarget; + const FrameBuffer* renderTarget; void lightPass(Camera* myCamera, Scene* scene, Light* light, unsigned int type); }; diff --git a/framebuffer.cpp b/framebuffer.cpp index ebfa6c0..36d4b93 100644 --- a/framebuffer.cpp +++ b/framebuffer.cpp @@ -2,12 +2,11 @@ #include "texture.h" #include "glassert.h" -FrameBuffer::FrameBuffer(bool isNULL) +const FrameBuffer* FrameBuffer::screen = new FrameBuffer(0); + +FrameBuffer::FrameBuffer() { - if(isNULL) - fbo = 0; - else - glAssert(glGenFramebuffers(1, &fbo)); + glAssert(glGenFramebuffers(1, &fbo)); } FrameBuffer::~FrameBuffer() @@ -18,32 +17,34 @@ FrameBuffer::~FrameBuffer() void FrameBuffer::addTexture(Texture* tex, GLenum attachment) { - textures.push_back(tex); - bindFBO(); - glAssert(glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, tex->getTarget(), tex->getId(), 0)); - attachments.push_back(attachment); + if(fbo != 0) + { + textures.push_back(tex); + bindFBO(); + glAssert(glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, tex->getTarget(), tex->getId(), 0)); + attachments.push_back(attachment); + } } void FrameBuffer::initGL() { - bindFBO(); - glAssert(glDrawBuffers(attachments.size(), attachments.data())); + if(fbo != 0) + { + bindFBO(); + glAssert(glDrawBuffers(attachments.size(), attachments.data())); + } } -void FrameBuffer::bindFBO() +void FrameBuffer::bindFBO() const { glAssert(glBindFramebuffer(GL_FRAMEBUFFER, fbo)); } Texture* FrameBuffer::getTexture(int texId) { - return textures[texId]; + if(fbo != 0) + return textures[texId]; + else + return NULL; } -FrameBuffer* FrameBuffer::getScreen() -{ - static FrameBuffer* screen = NULL; - if(screen == NULL) - screen = new FrameBuffer(true); - return screen; -} diff --git a/framebuffer.h b/framebuffer.h index ae39694..cea23c6 100644 --- a/framebuffer.h +++ b/framebuffer.h @@ -8,19 +8,23 @@ class Texture; class FrameBuffer { +private: + FrameBuffer(int id) : fbo(id) {} + protected: GLuint fbo; std::vector textures; std::vector attachments; + public: - FrameBuffer(bool isNULL = false); + FrameBuffer(); ~FrameBuffer(); void addTexture(Texture* tex, GLenum attachment); void initGL(); - void bindFBO(); + void bindFBO() const; Texture* getTexture(int texId); - static FrameBuffer* getScreen(); + static const FrameBuffer* screen; }; #endif // FRAMEBUFFER_H