feat(渲染器): 添加基础2D渲染系统

实现核心渲染功能,包括着色器管理、批处理系统、相机控制和纹理加载

- 添加着色器管理器用于加载和管理GLSL着色器程序
- 实现批处理系统优化绘制调用
- 添加相机控制支持视图和投影矩阵
- 实现纹理加载和管理功能
- 添加基础2D渲染API包括绘制四边形和精灵
- 集成到应用系统中,支持自动初始化和清理
- 添加示例着色器用于彩色四边形和纹理精灵
- 更新构建系统包含新的渲染相关文件
This commit is contained in:
2026-02-26 13:16:31 +08:00
parent 3870220fe8
commit 6f8d1f1255
25 changed files with 1475 additions and 11 deletions

View File

@@ -0,0 +1,67 @@
#pragma once
#include <frostbite2D/graphics/types.h>
#include <frostbite2D/graphics/texture.h>
#include <frostbite2D/graphics/shader.h>
#include <frostbite2D/graphics/shader_manager.h>
#include <frostbite2D/graphics/batch.h>
#include <frostbite2D/graphics/camera.h>
#include <string>
namespace frostbite2D {
class Renderer {
public:
static Renderer& get();
bool init();
void shutdown();
void beginFrame();
void endFrame();
void flush();
void setViewport(int x, int y, int width, int height);
void setClearColor(float r, float g, float b, float a = 1.0f);
void setClearColor(const Color& color);
void clear(uint32_t flags);
void setCamera(Camera* camera);
Camera* getCamera() { return camera_; }
void drawQuad(const Vec2& pos, const Size& size, float cr = 1.0f, float cg = 1.0f,
float cb = 1.0f, float ca = 1.0f);
void drawQuad(const Vec2& pos, const Size& size, Ptr<Texture> texture);
void drawQuad(const Rect& rect, const Color& color);
void drawSprite(const Vec2& pos, const Size& size, Ptr<Texture> texture);
void drawSprite(const Vec2& pos, const Rect& srcRect, const Vec2& texSize,
Ptr<Texture> texture, const Color& color = Color(1, 1, 1, 1));
ShaderManager& getShaderManager() { return shaderManager_; }
Batch& getBatch() { return batch_; }
private:
Renderer();
~Renderer();
void setupBlendMode(BlendMode mode);
void updateUniforms();
ShaderManager shaderManager_;
Batch batch_;
Camera* camera_ = nullptr;
uint32_t clearColor_[4] = {0, 0, 0, 255};
int viewportX_ = 0;
int viewportY_ = 0;
int viewportWidth_ = 1280;
int viewportHeight_ = 720;
bool initialized_ = false;
Renderer(const Renderer&) = delete;
Renderer& operator=(const Renderer&) = delete;
};
}