Files
Tower-Defense/include/render/Renderer.h
2023-06-05 13:15:27 +02:00

64 lines
1.2 KiB
C++

#pragma once
#include "Defines.h"
#include <memory>
#include "loader/GLLoader.h"
#include "render/shaders/WorldShader.h"
#include "render/shaders/EntityShader.h"
namespace td {
namespace render {
struct Camera {
Mat4f viewMatrix;
Mat4f projectionMatrix;
Mat4f InvViewMatrix;
Mat4f InvProjectionMatrix;
Vec3f CamPos;
};
class Renderer {
public:
static constexpr float m_AnimationSpeed = 2.0f;
struct Model {
GL::VertexArray* vao;
Vec3f positon;
Vec3f color = { 1, 1, 1 };
};
private:
std::unique_ptr<shader::WorldShader> m_WorldShader;
std::unique_ptr<shader::EntityShader> m_EntityShader;
Vec2i m_WindowSize;
Vec3f m_BackgroundColor;
Camera m_Camera {};
public:
Renderer();
~Renderer();
bool Init();
void Prepare();
void Resize(const int width, const int height);
void RenderVAO(const GL::VertexArray& vao);
void RenderModel(const Model& model);
void SetZoom(float zoom);
void SetCamMovement(const Vec2f& mov);
void SetCamPos(const Vec3f& newPos);
void SetBackgroundColor(const Vec3f& color) { m_BackgroundColor = color; }
Vec2f GetCursorWorldPos(const Vec2f& cursorPos, float windowWidth, float windowHeight);
private:
void InitShaders();
};
} // namespace render
} // namespace td