refactor: renderer (#29)

* refactor(render): move render files to subdirectory, add RAII vertex buffer/array classes

* refactor(render): encapsulate OpenGL textures into Texture class

* refactor(texture): encapsulate textures with unique_ptr and bind methods

Replace raw GLuint framebuffer textures with std::unique_ptr<Texture>. Update TextureManager to return const Texture* instead of GLuint. Use Texture::bind() for active texture binding. Add RGBA16F and RGB formats. Add texture parameter methods. Update destructors accordingly.

* refactor(render): use Texture, VertexBuffer, VertexArray classes

* feat(render): add FrameBuffer class to encapsulate framebuffer operations

* refactor(render): extract world rendering into WorldRenderer class

* refactor(render): rename projection and model matrix members for clarity

* chore(render): remove unused matrix members

* fix(texture-manager): correct delet_texture typo and add null checks for textures
This commit is contained in:
zhenyan121
2026-07-10 14:51:43 +08:00
committed by GitHub
parent b1341d7da4
commit 913809a5f0
33 changed files with 2263 additions and 1547 deletions

View File

@@ -0,0 +1,61 @@
#include "Cubed/render/shader_manager.hpp"
#include "Cubed/tools/cubed_assert.hpp"
namespace Cubed {
ShaderManager::ShaderManager() {}
ShaderManager::~ShaderManager() {}
void ShaderManager::init() {
register_shader("normal_block", "shaders/block_v_shader.glsl",
"shaders/block_f_shader.glsl");
register_shader("outline", "shaders/outline_v_shader.glsl",
"shaders/outline_f_shader.glsl");
register_shader("sky", "shaders/sky_v_shader.glsl",
"shaders/sky_f_shader.glsl");
register_shader("ui", "shaders/ui_v_shader.glsl",
"shaders/ui_f_shader.glsl");
register_shader("text", "shaders/text_v_shader.glsl",
"shaders/text_f_shader.glsl");
register_shader("under_water", "shaders/under_water_v_shader.glsl",
"shaders/under_water_f_shader.glsl");
register_shader("accum", "shaders/block_accumulation_v_shader.glsl",
"shaders/block_accumulation_f_shader.glsl");
register_shader("composite", "shaders/block_composite_v_shader.glsl",
"shaders/block_composite_f_shader.glsl");
register_shader("depth_shader", "shaders/depth_shader.glsl",
"shaders/depth_fragment_shader.glsl");
register_shader("billboard", "shaders/billboard_v_shader.glsl",
"shaders/billboard_f_shader.glsl");
register_shader("water", "shaders/water_v_shader.glsl",
"shaders/water_f_shader.glsl");
register_shader("player", "shaders/player_v_shader.glsl",
"shaders/player_f_shader.glsl");
register_shader("player_depth", "shaders/depth_player_shader.glsl",
"shaders/depth_player_fragment_shader.glsl");
}
void ShaderManager::register_shader(const std::string& name,
const std::string& v_shader,
const std::string& f_shader) {
auto [_, inserted] = m_shaders.try_emplace(name, name, v_shader, f_shader);
if (!inserted) {
std::string msg = std::format("Shader name {} already esist!", name);
ASSERT_MSG(false, msg);
throw std::runtime_error(msg);
}
}
const Shader& ShaderManager::get_shader(const std::string& name) const {
auto it = m_shaders.find(name);
if (it == m_shaders.end()) {
std::string msg = std::format("Shader name {} not find", name);
ASSERT_MSG(false, msg);
throw std::runtime_error(msg);
}
return it->second;
}
} // namespace Cubed