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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user