refactor(render): 抽象图形后端并迁移渲染器 (#313)

* refactor(render): 抽象图形后端并迁移渲染器

- 新增 engine-shared 包,定义 GraphicsBackend trait 抽象层
- 实现 WebGL2Backend 作为首个后端实现
- 迁移 Renderer2D、SpriteBatch、GridRenderer、GizmoRenderer 使用新抽象
- 修复 VAO 创建时索引缓冲区绑定状态泄漏问题
- 新增 create_vertex_buffer_sized 方法支持预分配缓冲区

* fix(serialization): 修复序列化循环引用导致栈溢出

- 在 serializeValue 添加 WeakSet 检测循环引用
- 跳过已访问对象避免无限递归

* refactor(serialization): 提取 ValueSerializer 统一序列化逻辑

- 新增 ValueSerializer 模块,函数式设计
- 支持可扩展类型处理器注册
- 移除 ComponentSerializer/SceneSerializer 重复代码
- 内置 Date/Map/Set 类型支持

* fix: CodeQL 类型检查警告
This commit is contained in:
YHH
2025-12-19 22:46:33 +08:00
committed by GitHub
parent 4b74db3f2d
commit 96b5403d14
31 changed files with 6096 additions and 2114 deletions

View File

@@ -35,6 +35,7 @@
use wasm_bindgen::prelude::*;
// Module declarations | 模块声明
pub mod backend;
pub mod core;
pub mod math;
pub mod platform;
@@ -45,6 +46,18 @@ pub mod input;
// Re-exports | 重新导出
pub use crate::core::{Engine, EngineConfig};
pub use crate::core::error::{EngineError, Result};
pub use crate::backend::WebGL2Backend;
// Re-export shared types for convenience | 重新导出共享类型以方便使用
pub use es_engine_shared::{
traits::backend::{GraphicsBackend, GraphicsError, GraphicsResult, GraphicsFeature, BufferUsage},
types::{
handle::{Handle, HandleMap, BufferHandle, TextureHandle, ShaderHandle, VertexArrayHandle},
vertex::{VertexLayout, VertexAttribute, VertexAttributeType, SpriteVertex},
blend::{BlendMode, RenderState, ScissorRect},
texture::{TextureDescriptor, TextureFormat, TextureFilter, TextureWrap},
},
};
/// Initialize panic hook for better error messages in console.
/// 初始化panic hook以在控制台显示更好的错误信息。
@@ -819,4 +832,28 @@ impl GameEngine {
.update_texture_region(id, x, y, width, height, pixels)
.map_err(|e| JsValue::from_str(&e.to_string()))
}
// ===== Graphics Backend Info API =====
// ===== 图形后端信息 API =====
/// Get the graphics backend name (e.g., "WebGL2").
/// 获取图形后端名称(如 "WebGL2")。
#[wasm_bindgen(js_name = getBackendName)]
pub fn get_backend_name(&self) -> String {
self.engine.backend_name().to_string()
}
/// Get the graphics backend version string.
/// 获取图形后端版本字符串。
#[wasm_bindgen(js_name = getBackendVersion)]
pub fn get_backend_version(&self) -> String {
self.engine.backend_version().to_string()
}
/// Get maximum texture size supported by the backend.
/// 获取后端支持的最大纹理尺寸。
#[wasm_bindgen(js_name = getMaxTextureSize)]
pub fn get_max_texture_size(&self) -> u32 {
self.engine.max_texture_size()
}
}