mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-08-08 17:57:02 +08:00
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:
61
src/render/shader_manager.cpp
Normal file
61
src/render/shader_manager.cpp
Normal 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
|
||||
Reference in New Issue
Block a user