67 lines
1.6 KiB
C++
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
|