性能优化: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 宏未传递到编译器的问题
This commit is contained in:
SepComet
2026-06-07 18:24:36 +08:00
parent 3f6e2bab2c
commit b248bd5cff
9 changed files with 179 additions and 51 deletions
+17
View File
@@ -9,6 +9,7 @@ if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
endif()
option(USE_FRAMEBUFFER "Use Linux framebuffer instead of SDL2" OFF)
option(USE_RGB565_BACKBUFFER "Use RGB565 internal backbuffer to eliminate present conversion on RGB565 fb0" OFF)
set(CORE_SOURCES
src/Core/Asset/ObjLoader.cpp
@@ -58,6 +59,13 @@ target_include_directories(imx6u_core PUBLIC ${CORE_INCLUDE_DIRS})
if(USE_FRAMEBUFFER)
target_compile_definitions(imx6u_core PUBLIC USE_FRAMEBUFFER)
endif()
if(USE_RGB565_BACKBUFFER)
target_compile_definitions(imx6u_core PUBLIC USE_RGB565_BACKBUFFER)
endif()
if(USE_FRAMEBUFFER)
else()
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
@@ -106,6 +114,15 @@ function(imx6u_configure_app_target target_name)
"${SDL2_DLL}"
"$<TARGET_FILE_DIR:${target_name}>"
)
elseif(SDL2_image_FOUND)
add_executable(SpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES})
target_include_directories(SpriteAssetTool PRIVATE
src/Core/Asset
src/Core/RenderData
)
target_link_libraries(SpriteAssetTool PRIVATE SDL2::SDL2 SDL2_image::SDL2_image)
else()
message(STATUS "SpriteAssetTool disabled: SDL2_image was not found")
endif()
if(MSVC)