Feature/render pipeline (#232)

* refactor(engine): 重构2D渲染管线坐标系统

* feat(engine): 完善2D渲染管线和编辑器视口功能

* feat(editor): 实现Viewport变换工具系统

* feat(editor): 优化Inspector渲染性能并修复Gizmo变换工具显示

* feat(editor): 实现Run on Device移动预览功能

* feat(editor): 添加组件属性控制和依赖关系系统

* feat(editor): 实现动画预览功能和优化SpriteAnimator编辑器

* feat(editor): 修复SpriteAnimator动画预览功能并迁移CI到pnpm

* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm

* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm

* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm

* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm

* feat(ci): 迁移项目到pnpm并修复CI构建问题

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 迁移CI工作流到pnpm并添加WASM构建支持

* chore: 移除 network 相关包

* chore: 移除 network 相关包
This commit is contained in:
YHH
2025-11-23 14:49:37 +08:00
committed by GitHub
parent b15cbab313
commit a3f7cc38b1
247 changed files with 33561 additions and 52047 deletions

View File

@@ -27,6 +27,10 @@ pub struct Renderer2D {
/// 2D camera.
/// 2D相机。
camera: Camera2D,
/// Clear color (RGBA).
/// 清除颜色 (RGBA)。
clear_color: [f32; 4],
}
impl Renderer2D {
@@ -57,6 +61,7 @@ impl Renderer2D {
sprite_batch,
shader,
camera,
clear_color: [0.1, 0.1, 0.12, 1.0],
})
}
@@ -88,7 +93,7 @@ impl Renderer2D {
/// Render the current frame.
/// 渲染当前帧。
pub fn render(&mut self, gl: &WebGl2RenderingContext) -> Result<()> {
pub fn render(&mut self, gl: &WebGl2RenderingContext, texture_manager: &TextureManager) -> Result<()> {
if self.sprite_batch.sprite_count() == 0 {
return Ok(());
}
@@ -103,8 +108,21 @@ impl Renderer2D {
// Set texture sampler | 设置纹理采样器
self.shader.set_uniform_i32(gl, "u_texture", 0);
// Flush sprite batch | 刷新精灵批处理
self.sprite_batch.flush(gl);
// Render each texture batch | 渲染每个纹理批次
// Only collect non-empty batches | 只收集非空批次
let texture_ids: Vec<u32> = self.sprite_batch.texture_batches()
.iter()
.filter(|(_, vertices)| !vertices.is_empty())
.map(|(id, _)| *id)
.collect();
for texture_id in texture_ids {
// Bind texture for this batch | 绑定此批次的纹理
texture_manager.bind_texture(texture_id, 0);
// Flush this texture's sprites | 刷新此纹理的精灵
self.sprite_batch.flush_for_texture(gl, texture_id);
}
// Clear batch for next frame | 清空批处理以供下一帧使用
self.sprite_batch.clear();
@@ -126,6 +144,18 @@ impl Renderer2D {
&self.camera
}
/// Set clear color (RGBA, each component 0.0-1.0).
/// 设置清除颜色。
pub fn set_clear_color(&mut self, r: f32, g: f32, b: f32, a: f32) {
self.clear_color = [r, g, b, a];
}
/// Get clear color.
/// 获取清除颜色。
pub fn get_clear_color(&self) -> [f32; 4] {
self.clear_color
}
/// Update camera viewport size.
/// 更新相机视口大小。
pub fn resize(&mut self, width: f32, height: f32) {