SparrowRenderer/src/deferredpipeline.h
2016-06-24 18:54:02 +02:00

62 lines
1.4 KiB
C++

#ifndef DEFERREDPIPELINE_H
#define DEFERREDPIPELINE_H
#include "pipeline.h"
#include "framebuffer.h"
#include <unordered_map>
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<unsigned int> m_meshTypes;
std::vector<unsigned int> m_lightTypes;
std::unordered_map<unsigned int, Shader*> m_meshShaders;
std::unordered_map<unsigned int, Shader*> 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