#ifndef DEFERREDPIPELINE_H #define DEFERREDPIPELINE_H #include "pipeline.h" #include "framebuffer.h" #include class Shader; class Camera; class GBuffer : public FrameBuffer { public: enum Buffers { NORMAL, DIFFUSE, SPECULAR, POSITION, DEPTH, NB_BUFFERS }; GBuffer(int width, int height); void bindTextures(); void unbindTextures(); }; class LightingBuffer : public FrameBuffer { public: LightingBuffer(int width, int height); }; class DeferredPipeline : public Pipeline { Camera *m_camera; int m_width; int m_height; // shaders std::vector m_meshTypes; std::vector m_lightTypes; std::unordered_map m_meshShaders; std::unordered_map m_lightShaders; ShaderSource *m_gBufferSource; ShaderSource *m_lightingSource; Shader *m_postEffectsShader; // framebuffers GBuffer *m_gBuffer; LightingBuffer *m_lightingBuffer; const FrameBuffer *m_renderTarget; public: DeferredPipeline(); void setCamera(Camera *camera) { m_camera = camera; } void setSources(ShaderSource *gBufferSource, ShaderSource *lightingSource, Shader *postEffectsShader); void setRenderTarget(const FrameBuffer *fbo) { m_renderTarget = fbo; } void refreshScene(Scene *scene); virtual void renderGL(Scene *scene); virtual void resizeGL(int w, int h); }; #endif // DEFERREDPIPELINE_H