SparrowRenderer/src/deferredpipeline.h
2016-07-11 20:06:37 +02:00

67 lines
1.6 KiB
C++

#ifndef DEFERREDPIPELINE_H
#define DEFERREDPIPELINE_H
#include "pipeline.h"
#include "framebuffer.h"
#include <unordered_map>
#include <glm/mat4x4.hpp>
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;
glm::mat4 m_orthoMatrix;
// shaders
std::vector<unsigned int> m_meshTypes;
std::vector<unsigned int> m_lightTypes;
std::unordered_map<unsigned int, Shader*> m_mesh3DShaders;
std::unordered_map<unsigned int, Shader*> m_lightShaders;
std::unordered_map<unsigned int, Shader*> m_mesh2DShaders;
ShaderSource *m_gBufferSource;
ShaderSource *m_lightingSource;
ShaderSource *m_mesh2DSource;
Shader *m_postEffectsShader; // TODELETE
// 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, ShaderSource *guiSource, 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