统一 2D 渲染链路以消除格式分叉和热路径中转
将图片主路径收口为 RGBA5551 输入、RGB565 backbuffer 输出,并删除 USE_RGB565_BACKBUFFER 双路径。sprite/tilemap 主绘制改为直接 RGBA5551 -> RGB565,透明语义固定为 1-bit alpha test。同步收口 SDL/FB present 路径、sprite 资源加载/导出规范,以及相关测试与文档。 Constraint: 运行时图片主路径需统一到 RGBA5551,不能继续保留主要 RGBA8888 分支 Constraint: 透明仅支持 1-bit 语义,不引入 alpha blending Rejected: 保留 USE_RGB565_BACKBUFFER 宏双路径 | 持续增加维护成本并掩盖真实主链路 Rejected: 主绘制继续走 RGBA5551 -> RGBA8888 -> RGB565 | 热路径存在不必要中转 Confidence: high Scope-risk: moderate Directive: 后续图片资源默认按 RGBA5551 接入;不要重新引入通用 RGBA8888 主运行时路径 Directive: 字体 atlas 目前仍属兼容输入;若继续收口,优先改成 1-bit mask 而不是新的图片分支 Tested: render_pipeline_tests;SDL Demo Release 构建;搜索确认无 USE_RGB565_BACKBUFFER 残留 Not-tested: Linux framebuffer 目标实机构建与显示验证
This commit is contained in:
@@ -321,15 +321,15 @@ IMX6U-Game/
|
||||
|
||||
### Framebuffer 性能说明
|
||||
|
||||
`FBDisplay` 是直接写 `/dev/fb0` 的对照后端。当前实现会从 CPU 侧 `FrameBuffer` 提交到系统 framebuffer,并针对常见像素格式提供快速路径:
|
||||
`FBDisplay` 是直接写 `/dev/fb0` 的对照后端。当前实现会从 CPU 侧 `RGB565 FrameBuffer` 提交到系统 framebuffer,并针对常见像素格式提供快速路径:
|
||||
|
||||
- RGB565:使用专用 RGBA -> RGB565 转换;
|
||||
- ARGB8888 / XRGB8888 类 32bpp:使用专用通道重排;
|
||||
- RGBA8888 且行宽连续时:整块 `memcpy`。
|
||||
- RGB565:直接行拷贝;
|
||||
- ARGB8888 / XRGB8888 类 32bpp:使用专用 `RGB565 -> 32-bit` 转换;
|
||||
- 其他格式:走统一 display conversion。
|
||||
|
||||
板端性能测试必须使用 Release 构建。一次测试中,未优化 ARM 构建曾导致 `Frame:81ms / Present:69ms`,开启 Release 后同一轻量 2D demo 可达到约 76 FPS。该结果说明 `/dev/fb0` 整屏提交仍是关键热点,但构建类型会极大影响结论。后续优化优先级:
|
||||
|
||||
1. 直接使用与目标 fb0 一致的 backbuffer 像素格式,例如 RGB565,减少提交时转换;
|
||||
1. 对 32-bit fb0 增加更快的 `RGB565 -> 目标格式` 批量转换;
|
||||
2. 2D 场景使用 dirty rect / 局部提交,避免每帧整屏写入;
|
||||
3. 避免无 3D 内容时清理 depth buffer;
|
||||
4. 对 tile/sprite 增加不透明行拷贝、预转换资源或专用批处理路径。
|
||||
@@ -339,7 +339,7 @@ IMX6U-Game/
|
||||
**已完成:**
|
||||
- 可旋转立方体的 3D 渲染(MVP 变换、背面剔除、扫描线填充、深度测试)
|
||||
- 双平台显示后端(SDL2 / Framebuffer)
|
||||
- 离线资源转换工具:PNG sprite -> C++ 头文件,像素字体 -> bitmap atlas/header
|
||||
- 离线资源转换工具:PNG sprite -> RGBA5551 C++ 头文件,像素字体 -> bitmap atlas/header
|
||||
- 基础 2D sprite、SpriteRegion、bitmap font 文本绘制和 tilemap 视口绘制,当前 demo 显示 FPS 文本、测试 sprite 和小型滚动 tilemap
|
||||
- Core 目录规范化,代码收敛到 `src/Core/`
|
||||
- `Core::DrawContext` 统一绘制入口,封装现有绘制能力
|
||||
|
||||
Reference in New Issue
Block a user