mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-17 16:17:02 +08:00
110 lines
2.7 KiB
C++
110 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include "Cubed/constants.hpp"
|
|
#include "Cubed/primitive_data.hpp"
|
|
#include "Cubed/shader.hpp"
|
|
#include "Cubed/ui/text.hpp"
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <vector>
|
|
namespace Cubed {
|
|
|
|
class Camera;
|
|
class TextureManager;
|
|
class World;
|
|
class DevPanel;
|
|
class Renderer {
|
|
public:
|
|
constexpr static int NUM_VAO = 7;
|
|
|
|
Renderer(const Camera& camera, World& world,
|
|
const TextureManager& texture_manager, DevPanel& dev_panel);
|
|
~Renderer();
|
|
void hot_reload();
|
|
void init();
|
|
const Shader& get_shader(const std::string& name) const;
|
|
void render();
|
|
void update(float delta_time);
|
|
void update_fov(float fov);
|
|
void update_proj_matrix(float aspect, float width, float height);
|
|
void updata_framebuffer(int width, int height);
|
|
float& ambient_strength();
|
|
|
|
private:
|
|
static constexpr glm::vec3 SUNLIGHT_COLOR{1.0f, 1.0f, 1.0f};
|
|
static constexpr glm::vec3 SUN_COLOR{1.00f, 0.95f, 0.80f};
|
|
static constexpr glm::vec3 MOON_COLOR{0.75f, 0.80f, 1.00f};
|
|
static constexpr glm::vec3 SKY_COLOR{0.529, 0.808, 0.922};
|
|
static constexpr float FAR_PLANE = 1000.0f;
|
|
static constexpr float NEAR_PLANE = 0.1f;
|
|
static constexpr float SUN_SIZE = 50.0f;
|
|
static constexpr float MOON_SIZE = 50.0f;
|
|
static constexpr float DEPTH_MAP_SIZE = 4096.0f;
|
|
float m_ambient_strength = 0.1f;
|
|
|
|
const Camera& m_camera;
|
|
DevPanel& m_dev_panel;
|
|
const TextureManager& m_texture_manager;
|
|
World& m_world;
|
|
|
|
float m_aspect = 0.0f;
|
|
float m_fov = DEFAULT_FOV;
|
|
|
|
float m_delta_time = 0.0f;
|
|
|
|
float m_width = 0.0f;
|
|
float m_height = 0.0f;
|
|
|
|
glm::mat4 m_p_mat, m_v_mat, m_m_mat, m_mv_mat, m_mvp_mat, m_norm_mat;
|
|
|
|
GLuint m_mv_loc = 0;
|
|
GLuint m_proj_loc = 0;
|
|
|
|
GLuint m_sky_vbo = 0;
|
|
GLuint m_text_vbo = 0;
|
|
GLuint m_outline_indices_vbo = 0;
|
|
GLuint m_outline_vbo = 0;
|
|
GLuint m_ui_vbo = 0;
|
|
|
|
GLuint m_fbo = 0;
|
|
GLuint m_screen_texture = 0;
|
|
GLuint m_depth_render_buffer = 0;
|
|
|
|
GLuint m_oit_fbo = 0;
|
|
GLuint m_accum_texture = 0;
|
|
GLuint m_reveal_texture = 0;
|
|
GLuint m_oit_depth_render_buffer = 0;
|
|
|
|
GLuint m_depth_map_fbo = 0;
|
|
GLuint m_depth_map_texture = 0;
|
|
|
|
GLuint m_quad_vbo = 0;
|
|
|
|
glm::mat4 m_ui_proj;
|
|
glm::mat4 m_ui_m_matrix;
|
|
std::unordered_map<std::size_t, Shader> m_shaders;
|
|
|
|
/*
|
|
0 - quad vao
|
|
1 - sky vao
|
|
2 - outline vao
|
|
3 - ui vao
|
|
4 - text vao
|
|
|
|
*/
|
|
std::vector<GLuint> m_vao;
|
|
std::vector<Vertex2D> m_ui;
|
|
|
|
void init_quad();
|
|
void init_text();
|
|
|
|
void render_outline();
|
|
void render_sky();
|
|
void render_text();
|
|
void render_ui();
|
|
void render_world();
|
|
void render_underwater();
|
|
void render_dev_panel();
|
|
};
|
|
|
|
} // namespace Cubed
|