yupplemayham/YuppleMayham/include/graphics/renderer.h

74 lines
1.5 KiB
C++

#ifndef _H_RENDERER_H
#define _H_RENDERER_H
#include <unordered_map>
#include <memory>
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
#include "graphics/quad.h"
#include "graphics/drawable.h"
#include "graphics/postprocess.h"
class ResourceManager;
class Shader;
enum class RenderLayer {
Background,
Map,
GameObjects,
Effects,
HUD,
Menu
};
class Renderer
{
public:
Renderer(const std::shared_ptr<ResourceManager>&);
void clear();
void hookEventManager(const std::weak_ptr<EventManager> eventManager);
void setProjAndViewMatrix(const glm::mat4& proj, const glm::mat4& view);
void addDrawable(RenderLayer renderLayer, Drawable *drawable);
void removeDrawable(RenderLayer renderLayer, Drawable *drawable);
void render();
private:
std::unordered_map<RenderLayer, std::vector<Drawable*>> worldLayerPool;
std::unordered_map<RenderLayer, std::vector<Drawable*>> HUDLayerPool;
std::vector<RenderLayer> renderingOrder = {
RenderLayer::Background,
RenderLayer::Map,
RenderLayer::GameObjects,
RenderLayer::Effects,
RenderLayer::HUD,
RenderLayer::Menu
};
void uploadUniforms(const unsigned shaderID, const std::vector<Uniform>& uniforms);
unsigned uboMatrices;
union FrameBuffer {
unsigned int frame;
unsigned int texture;
}worldBuffer, hudBuffer;
std::unique_ptr<ScreenQuad> screenQuad;
std::shared_ptr<ResourceManager> resourceManager;
void initFrameBuffers();
void initUniformBuffers();
std::unique_ptr<Postprocessor> postProcessor;
void sortLayerPool(auto& layerPool);
void renderPool(auto& layerPool);
};
#endif