From fbc9a5d037ebb2a9b950d0b2e87aa654e4570f0e Mon Sep 17 00:00:00 2001 From: Anselme Date: Mon, 7 Dec 2015 07:18:57 +0100 Subject: [PATCH] added posteffectmodule --- forwardmodule.cpp | 9 +++++++++ forwardmodule.h | 9 ++++++++- framebuffer.cpp | 18 +++++++++++++++--- framebuffer.h | 3 ++- posteffectmodule.cpp | 12 ++++++++++++ posteffectmodule.h | 17 +++++++++++++++++ 6 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 posteffectmodule.cpp create mode 100644 posteffectmodule.h diff --git a/forwardmodule.cpp b/forwardmodule.cpp index 2d117db..0c58bfa 100644 --- a/forwardmodule.cpp +++ b/forwardmodule.cpp @@ -25,6 +25,9 @@ const char* const ForwardModule::lightStr[] = void ForwardModule::renderGL(Camera* myCamera, Scene* scene) { + // bind target + renderTarget->bindFBO(); + // render ambient lighting glAssert(glClearColor(0, 0.1f, 0.05f, 1.)); // add attribute, and setter for clear color glAssert(glClearDepth(1.0)); @@ -163,3 +166,9 @@ void ForwardModule::compileShaders(Scene* scene) } } } + +void ForwardModule::setRenderTarget(FrameBuffer* target) +{ + if(target != NULL) + renderTarget = target; +} diff --git a/forwardmodule.h b/forwardmodule.h index 4651445..0512529 100644 --- a/forwardmodule.h +++ b/forwardmodule.h @@ -7,6 +7,7 @@ #include #include "shadersource.h" #include "material.h" +#include "framebuffer.h" class Light; class Scene; @@ -15,7 +16,10 @@ class PhongEntity; class ForwardModule : public Module { public: - ForwardModule() : shaderSources(NULL) {} + ForwardModule() : + shaderSources(NULL), + renderTarget(FrameBuffer::getScreen()) + {} virtual void renderGL(Camera* myCamera, Scene* scene); virtual bool requiresModernOpenGL() {return true;} // write some compatibility code to change that to false @@ -25,6 +29,8 @@ public: void setShaderSource(ShaderSource* source); void compileShaders(Scene* scene); + void setRenderTarget(FrameBuffer* target); + private: enum { // light flags @@ -41,6 +47,7 @@ private: ShaderSource* shaderSources; std::vector shaders; std::vector flags; + FrameBuffer* renderTarget; void lightPass(Camera* myCamera, Scene* scene, Light* light, unsigned int type); }; diff --git a/framebuffer.cpp b/framebuffer.cpp index 04bc564..8dd200e 100644 --- a/framebuffer.cpp +++ b/framebuffer.cpp @@ -2,14 +2,18 @@ #include "texture.h" #include "glassert.h" -FrameBuffer::FrameBuffer() +FrameBuffer::FrameBuffer(bool isNULL) { - glAssert(glGenFramebuffers(1, &fbo)); + if(isNULL) + fbo = 0; + else + glAssert(glGenFramebuffers(1, &fbo)); } FrameBuffer::~FrameBuffer() { - glAssert(glDeleteFramebuffers(1, &fbo)); + if(fbo != 0) + glAssert(glDeleteFramebuffers(1, &fbo)); } void FrameBuffer::addTexture(Texture* tex, GLenum attachment) @@ -35,3 +39,11 @@ Texture* FrameBuffer::getTexture(int texId) { return textures[texId]; } + +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 f5b35da..ae39694 100644 --- a/framebuffer.h +++ b/framebuffer.h @@ -13,13 +13,14 @@ protected: std::vector textures; std::vector attachments; public: - FrameBuffer(); + FrameBuffer(bool isNULL = false); ~FrameBuffer(); void addTexture(Texture* tex, GLenum attachment); void initGL(); void bindFBO(); Texture* getTexture(int texId); + static FrameBuffer* getScreen(); }; #endif // FRAMEBUFFER_H diff --git a/posteffectmodule.cpp b/posteffectmodule.cpp new file mode 100644 index 0000000..79b2c5b --- /dev/null +++ b/posteffectmodule.cpp @@ -0,0 +1,12 @@ +#include "posteffectmodule.h" + +PostEffectModule::PostEffectModule() +{ + +} + +PostEffectModule::~PostEffectModule() +{ + +} + diff --git a/posteffectmodule.h b/posteffectmodule.h new file mode 100644 index 0000000..ff76ac5 --- /dev/null +++ b/posteffectmodule.h @@ -0,0 +1,17 @@ +#ifndef POSTEFFECTMODULE_H +#define POSTEFFECTMODULE_H + +#include "module.h" + +class FrameBuffer; + +class PostEffectModule : public Module +{ + FrameBuffer* inputFBO; + FrameBuffer* outputFBO; +public: + PostEffectModule(); + ~PostEffectModule(); +}; + +#endif // POSTEFFECTMODULE_H