Files
esengine/packages/fairygui/src/render/IRenderBackend.ts
YHH a1e1189f9d feat(fairygui): FairyGUI 完整集成 (#314)
* feat(fairygui): FairyGUI ECS 集成核心架构

实现 FairyGUI 的 ECS 原生集成,完全替代旧 UI 系统:

核心类:
- GObject: UI 对象基类,支持变换、可见性、关联、齿轮
- GComponent: 容器组件,管理子对象和控制器
- GRoot: 根容器,管理焦点、弹窗、输入分发
- GGroup: 组容器,支持水平/垂直布局

抽象层:
- DisplayObject: 显示对象基类
- EventDispatcher: 事件分发
- Timer: 计时器
- Stage: 舞台,管理输入和缩放

布局系统:
- Relations: 约束关联管理
- RelationItem: 24 种关联类型

基础设施:
- Controller: 状态控制器
- Transition: 过渡动画
- ScrollPane: 滚动面板
- UIPackage: 包管理
- ByteBuffer: 二进制解析

* refactor(ui): 删除旧 UI 系统,使用 FairyGUI 替代

* feat(fairygui): 实现 UI 控件

- 添加显示类:Image、TextField、Graph
- 添加基础控件:GImage、GTextField、GGraph
- 添加交互控件:GButton、GProgressBar、GSlider
- 更新 IRenderCollector 支持 Graph 渲染
- 扩展 Controller 添加 selectedPageId
- 添加 STATE_CHANGED 事件类型

* feat(fairygui): 现代化架构重构

- 增强 EventDispatcher 支持类型安全、优先级和传播控制
- 添加 PropertyBinding 响应式属性绑定系统
- 添加 ServiceContainer 依赖注入容器
- 添加 UIConfig 全局配置系统
- 添加 UIObjectFactory 对象工厂
- 实现 RenderBridge 渲染桥接层
- 实现 Canvas2DBackend 作为默认渲染后端
- 扩展 IRenderCollector 支持更多图元类型

* feat(fairygui): 九宫格渲染和资源加载修复

- 修复 FGUIUpdateSystem 支持路径和 GUID 两种加载方式
- 修复 GTextInput 同时设置 _displayObject 和 _textField
- 实现九宫格渲染展开为 9 个子图元
- 添加 sourceWidth/sourceHeight 用于九宫格计算
- 添加 DOMTextRenderer 文本渲染层(临时方案)

* fix(fairygui): 修复 GGraph 颜色读取

* feat(fairygui): 虚拟节点 Inspector 和文本渲染支持

* fix(fairygui): 编辑器状态刷新和遗留引用修复

- 修复切换 FGUI 包后组件列表未刷新问题
- 修复切换组件后 viewport 未清理旧内容问题
- 修复虚拟节点在包加载后未刷新问题
- 重构为事件驱动架构,移除轮询机制
- 修复 @esengine/ui 遗留引用,统一使用 @esengine/fairygui

* fix: 移除 tsconfig 中的 @esengine/ui 引用
2025-12-22 10:52:54 +08:00

141 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { IRectangle } from '../utils/MathTypes';
import type { IRenderPrimitive } from './IRenderCollector';
/**
* Texture handle
* 纹理句柄
*/
export interface ITextureHandle {
/** Unique identifier | 唯一标识 */
readonly id: number;
/** Texture width | 纹理宽度 */
readonly width: number;
/** Texture height | 纹理高度 */
readonly height: number;
/** Is texture valid | 纹理是否有效 */
readonly isValid: boolean;
}
/**
* Font handle
* 字体句柄
*/
export interface IFontHandle {
/** Font family name | 字体名称 */
readonly family: string;
/** Is font loaded | 字体是否已加载 */
readonly isLoaded: boolean;
}
/**
* Render statistics
* 渲染统计
*/
export interface IRenderStats {
/** Draw call count | 绘制调用数 */
drawCalls: number;
/** Triangle count | 三角形数量 */
triangles: number;
/** Texture switches | 纹理切换次数 */
textureSwitches: number;
/** Batch count | 批次数量 */
batches: number;
/** Frame time in ms | 帧时间(毫秒) */
frameTime: number;
}
/**
* Render backend interface
*
* Abstract interface for graphics backend (WebGPU, WebGL, Canvas2D).
*
* 图形后端抽象接口WebGPU、WebGL、Canvas2D
*/
export interface IRenderBackend {
/** Backend name | 后端名称 */
readonly name: string;
/** Is backend initialized | 后端是否已初始化 */
readonly isInitialized: boolean;
/** Canvas width | 画布宽度 */
readonly width: number;
/** Canvas height | 画布高度 */
readonly height: number;
/**
* Initialize the backend
* 初始化后端
*/
initialize(canvas: HTMLCanvasElement): Promise<boolean>;
/**
* Begin a new frame
* 开始新帧
*/
beginFrame(): void;
/**
* End the current frame
* 结束当前帧
*/
endFrame(): void;
/**
* Submit render primitives for rendering
* 提交渲染图元进行渲染
*/
submitPrimitives(primitives: readonly IRenderPrimitive[]): void;
/**
* Set clip rectangle
* 设置裁剪矩形
*/
setClipRect(rect: IRectangle | null): void;
/**
* Create a texture from image data
* 从图像数据创建纹理
*/
createTexture(
source: ImageBitmap | HTMLImageElement | HTMLCanvasElement | ImageData
): ITextureHandle;
/**
* Destroy a texture
* 销毁纹理
*/
destroyTexture(texture: ITextureHandle): void;
/**
* Load a font
* 加载字体
*/
loadFont(family: string, url?: string): Promise<IFontHandle>;
/**
* Resize the backend
* 调整后端大小
*/
resize(width: number, height: number): void;
/**
* Get render statistics
* 获取渲染统计
*/
getStats(): IRenderStats;
/**
* Dispose the backend
* 销毁后端
*/
dispose(): void;
}
/**
* Backend factory function type
* 后端工厂函数类型
*/
export type RenderBackendFactory = () => IRenderBackend;