74 lines
1.5 KiB
C++
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
|