SepComet
|
189072ba4e
|
更新文档
|
2026-06-09 10:39:10 +08:00 |
SepComet
|
0fdcb6b8ff
|
stop tracking build-check directory
|
2026-06-09 10:31:30 +08:00 |
SepComet
|
feb088a854
|
统一 Image 和 Sprite 语义到目前的 Image/Sprite 结构体而非之前的类定义
|
2026-06-09 10:28:29 +08:00 |
SepComet
|
56eec9e9d2
|
收口颜色格式,删除原来的 RGBA8888 的存储和调用
|
2026-06-09 09:00:43 +08:00 |
SepComet
|
23a5b50aec
|
收口字体渲染路径以降低 atlas 体积并直接输出 RGB565
将位图字体从 RGBA8888 atlas 改为 1-bit mask,避免继续为字体存储无效颜色信息。
生成端现在按 row-major、MSB-first 将 8 个像素打包进 1 个 uint8_t;运行时由
draw_text 提供目标颜色,并在 DrawContext 中直接把 bit=1 的像素写入 RGB565 framebuffer。同步补充了回归测试与文档,确保颜色替换、背景填充和裁剪语义保持稳定。
Constraint: 本次只收口字体路径,不改 sprite/tilemap 资源格式
Constraint: 运行时保持纯二值绘制语义,不引入 alpha blending 或抗锯齿
Rejected: 继续兼容 RGBA8888 字体输入 | 会保留双路径复杂度且无实际收益
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: 后续字体资源必须继续使用 row-major + MSB-first 的 1-bit mask;修改位序前先同步生成脚本、运行时读取和测试
Tested: cmake --build build-win --config Release
Tested: build-win/Release/render_pipeline_tests.exe
Tested: ctest -C Release --output-on-failure
Tested: font_atlas_mask 字节数校验(2808 == ceil(208*108/8))
Not-tested: Demo/设备上的人工目视文字显示效果
|
2026-06-09 08:20:38 +08:00 |
SepComet
|
5ac61dca0e
|
统一 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 目标实机构建与显示验证
|
2026-06-08 18:32:04 +08:00 |
HP
|
8785368913
|
修改Tom总流程,完善动画机的状态设置以及游戏逻辑;在core/platform新增win和板端的鼠标点击/触控的逻辑代码/驱动;测试游戏内容。
|
2026-06-08 12:53:38 +08:00 |
HP
|
24fe01af46
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-08 10:27:33 +08:00 |
HP
|
1e34e15e04
|
重构SpriteAssertTool.cpp,减少中间文件产生;重构TomGame文件夹,删去不必要的文件;修改CMakeLists,PC重构Game自动重新构建资源头文件;修改文档
|
2026-06-08 10:27:31 +08:00 |
SepComet
|
c3f12d9013
|
Triangle::get_boundingBox 消除 std::min({a,b,c}) 替换为 detail::min3f/max3f
|
2026-06-07 21:37:36 +08:00 |
SepComet
|
a8630c720e
|
TriangleRasterizer 定点化
|
2026-06-07 19:54:15 +08:00 |
SepComet
|
16d961e9f3
|
DrawLine 消除 set_pixel
|
2026-06-07 19:25:00 +08:00 |
HP
|
08088c8413
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-07 18:32:00 +08:00 |
HP
|
b26a6a78fa
|
111
|
2026-06-07 18:31:58 +08:00 |
SepComet
|
046c21d47a
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-07 18:24:50 +08:00 |
SepComet
|
b248bd5cff
|
性能优化:P0/P1 热路径优化及 DepthBuffer 定点化
- 新增 USE_RGB565_BACKBUFFER 选项,FrameBuffer 内部以 RGB565 存储,present 阶段直接 memcpy,消除逐像素格式转换
- 新增 set_pixel_unsafe / get_depth_unsafe / set_depth_unsafe 快路径,热路径去除重复边界检查
- fill_rect 改为行级批量填充,draw_text/draw_sprite_ex 改用 unsafe 写入
- DepthBuffer 从 float 迁移至 uint16_t 定点深度,clear 支持 memset 快速路径
- TriangleRasterizer 深度测试适配 uint16_t(临时桥接,待全面定点化)
- 修复 USE_RGB565_BACKBUFFER 宏未传递到编译器的问题
|
2026-06-07 18:24:36 +08:00 |
HP
|
8d8c9ed9d1
|
修复CMakeLists路径问题
|
2026-06-07 17:06:49 +08:00 |
HP
|
3f6e2bab2c
|
修复Demo的Main.cpp的问题,并修复int32-float的转换。
|
2026-06-07 17:01:27 +08:00 |
HP
|
e150b153b9
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-07 16:42:07 +08:00 |
HP
|
b82339b185
|
将CMakeLists分成主CMakeLists和分游戏CMakeLists;README里补了单独构建Tom/Demo和资源转换的命令;把残留的Gfx文案改成Core。
|
2026-06-07 16:42:05 +08:00 |
SepComet
|
a2c218f690
|
更新文档
|
2026-06-07 15:24:08 +08:00 |
HP
|
964a11a215
|
1
|
2026-06-07 14:38:42 +08:00 |
HP
|
0defa04eef
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-07 14:37:58 +08:00 |
SepComet
|
d92b890528
|
修正板端性能测试误判并加速 framebuffer 提交
板端测试发现轻量 Demo 在未优化 ARM 构建下只有十几帧,但 Release 构建后可达到约 76 FPS。问题主要来自单配置 CMake 构建未默认启用 Release,以及 fb0 提交路径逐像素通用转换成本过高。
本次变更将单配置生成器默认构建类型设为 Release,避免 ARM/fb0 性能测试误用未优化构建;同时为 FBDisplay 增加 RGB565、ARGB8888/XRGB8888、RGBA8888 连续内存等常见格式快速路径。Demo 临时移除旋转正方体,保留 2D sprite、tilemap、FPS 和 Frame/Present 耗时显示,用于定位板端 framebuffer 提交瓶颈。
Constraint: IMX6U framebuffer 性能结论必须基于 Release 构建
Constraint: 核心代码保持 C++11 兼容,不引入新依赖
Rejected: 直接判断板子性能不足 | 未优化构建会严重放大逐像素循环成本
Rejected: 继续优化 3D 正方体路径 | 当前瓶颈已由 Frame/Present 计时证明主要在 fb0 present
Confidence: high
Scope-risk: moderate
Directive: 后续板端性能测试先确认 CMAKE_BUILD_TYPE=Release,再分析算法瓶颈
Directive: 2D-only 场景不要使用会清 depth buffer 的 DrawContext::clear()
Tested: cmake --build build-win --config Release
Tested: wsl bash -lc "cd /mnt/d/source/IMX6U-Game && cmake --build build-arm-fb"
Not-tested: 实机 framebuffer 像素格式以外的非常见 fb0 layout
|
2026-06-07 14:24:32 +08:00 |
HP
|
352a1233e6
|
Merge branch 'master' of https://gitea.sepcomet.xyz/basil/IMX6U-Game
|
2026-06-07 12:34:12 +08:00 |
HP
|
c177114bf3
|
111
|
2026-06-07 12:34:07 +08:00 |
SepComet
|
a9bc9a59fb
|
update FBDisplay.h
|
2026-06-07 12:31:27 +08:00 |
HP
|
b093796e61
|
merge remote and local changes
|
2026-06-07 10:39:29 +08:00 |
HP
|
3beae16917
|
local changes before merge
|
2026-06-07 10:38:34 +08:00 |
SepComet
|
777ff96602
|
拆分时间源以稳定 IMX6U 固定步长主循环
将计时职责从显示后端中移出,新增 Platform::ITimeSource 和 Core::Timer,使主循环基于单调整数毫秒生成固定步长 tick。
这样 SDL2/fb0 只负责显示和输入,游戏逻辑不再通过 Display 获取时间,也避免用 float 秒作为核心时间源。
同时增加 30/45/60 FPS 命令行档位,并用整数余数累计生成 33/33/34、22/22/22/22/23、16/17/17 这类毫秒节奏,便于在 IMX6U 上按性能预算选择目标帧率。
Constraint: IMX6U 运行时应避免核心逻辑依赖 float deltaSeconds
Constraint: SDL2 只能作为显示/输入适配层,不能扩散到核心时间逻辑
Rejected: 继续让 IDisplay::get_time_ms 提供时间 | 显示后端职责过宽,SDL/fb0 切换会影响时间语义
Rejected: 直接固定 33ms 实现 30 FPS | 长时间运行会产生节拍漂移
Confidence: high
Scope-risk: narrow
Directive: 后续 Launcher/GameA/GameB 应通过 ITimeSource + Timer 获取 fixed_delta_ms,不要重新引入 Display 计时
Tested: cmake --build build-win --config Release
Not-tested: IMX6U 实机 clock_gettime(CLOCK_MONOTONIC) 帧时间稳定性
|
2026-06-07 10:09:07 +08:00 |
SepComet
|
20d2422650
|
加入 SpriteRegion 与基础 Tilemap 绘制
DrawContext 现在支持从 atlas 子区域绘制 SpriteRegion,并在 draw_sprite_ex 中加入屏幕裁剪,避免边缘 sprite 逐像素依赖 FrameBuffer 越界保护。新增基础 Tilemap 数据结构和 draw_tilemap,按视口可见范围遍历 tile,并在视口边缘进行像素级裁剪,支持 camera 像素级滚动时显示半个 tile。
Demo 增加小型滚动 tilemap 测试,复用现有测试 sprite 作为单 tile atlas。文档同步记录 SpriteRegion、Tilemap、viewport 裁剪语义和后续优化方向。
Constraint: IMX6U 热路径应避免全地图扫描和运行时资源解码
Constraint: 当前 tilemap 先保持单 atlas、固定 tile 尺寸的简单模型
Rejected: 直接每帧遍历整张 tilemap | 大地图上会浪费 CPU
Rejected: 立即引入复杂地图资源系统 | 当前阶段只需要验证绘制链路
Confidence: high
Scope-risk: moderate
Directive: 扩展 Tilemap 时保持 tile 范围遍历 + 像素级边缘裁剪的语义
Tested: cmake --build build-win --config Release
Not-tested: 尚未在 IMX6U 真机上验证 framebuffer/SDL 后端性能
|
2026-06-07 09:23:26 +08:00 |
SepComet
|
213fa7e961
|
加入离线 sprite 与位图字体转换流程
Demo 现在通过生成的 C++ 头文件使用测试 sprite 和像素风 bitmap font,避免在运行时解码 PNG/TTF。同步补充资源转换文档,明确源资源、生成脚本和生成头文件需要一起提交,保证后续可追溯和可重新生成。
Constraint: IMX6U 运行时路径应尽量轻量,避免图片/字体解码开销
Constraint: 生成像素沿用当前 framebuffer 的 uint32_t RGBA 格式
Rejected: 运行时加载 PNG/TTF | 会增加解码依赖和运行时成本
Confidence: high
Scope-risk: moderate
Directive: 修改 sprite 或字体时,必须同步提交源资源、转换脚本和生成头文件
Tested: cmake -B build-win .; cmake --build build-win --config Release
Not-tested: 尚未在 IMX6U 真机上验证 ARM framebuffer/SDL 后端
|
2026-06-06 23:55:27 +08:00 |
SepComet
|
3e735e27b0
|
引入 Gfx::DrawContext 统一绘制入口,封装FrameBuffer/DepthBuffer/Rasterizer/角形光栅化;main.cpp 改用 DrawContext;同步更新文档路径
|
2026-06-06 17:55:50 +08:00 |
SepComet
|
a051f6da4c
|
整理文件结构目录,Gfx 里放底层图形库相关函数,Apps 放上层的应用(启动器、游戏)
|
2026-06-06 17:31:19 +08:00 |
SepComet
|
e1a9a9770b
|
制订规范
|
2026-06-06 17:10:47 +08:00 |
SepComet
|
9a2edd59fe
|
update .gitignore, README.md
|
2026-06-06 12:45:50 +08:00 |
SepComet
|
a56bbe6f76
|
finish build in linux
|
2026-06-05 19:22:48 +08:00 |
SepComet
|
9db7e06aa1
|
init
|
2026-06-05 17:55:22 +08:00 |