Compare commits
No commits in common. "e150b153b9a8e19606919d624f2c8bc40f781d26" and "a2c218f69040a6b309ccf1e44563db828c4c2a3c" have entirely different histories.
e150b153b9
...
a2c218f690
122
CMakeLists.txt
122
CMakeLists.txt
|
|
@ -17,28 +17,12 @@ set(CORE_SOURCES
|
||||||
src/Core/Core/FrameBuffer.cpp
|
src/Core/Core/FrameBuffer.cpp
|
||||||
src/Core/Core/Renderer.cpp
|
src/Core/Core/Renderer.cpp
|
||||||
src/Core/Draw2D/DrawContext.cpp
|
src/Core/Draw2D/DrawContext.cpp
|
||||||
src/Core/Platform/AlsaAudioInput.cpp
|
|
||||||
src/Core/Platform/AlsaAudioOutput.cpp
|
|
||||||
src/Core/Platform/EvdevButtonInput.cpp
|
|
||||||
src/Core/Rasterizer/Rasterizer.cpp
|
src/Core/Rasterizer/Rasterizer.cpp
|
||||||
src/Core/Rasterizer/TriangleRasterizer.cpp
|
src/Core/Rasterizer/TriangleRasterizer.cpp
|
||||||
src/Core/Scene/Camera.cpp
|
src/Core/Scene/Camera.cpp
|
||||||
src/Core/Shading/BlinnPhongShader.cpp
|
src/Core/Shading/BlinnPhongShader.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(USE_FRAMEBUFFER)
|
|
||||||
list(APPEND CORE_SOURCES
|
|
||||||
src/Core/Platform/FBDisplay.cpp
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
list(APPEND CORE_SOURCES
|
|
||||||
src/Core/Platform/SDLDisplay.cpp
|
|
||||||
src/Core/Platform/SdlAudioInput.cpp
|
|
||||||
src/Core/Platform/SdlAudioOutput.cpp
|
|
||||||
src/Core/Platform/SdlKeyboardButtonInput.cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CORE_INCLUDE_DIRS
|
set(CORE_INCLUDE_DIRS
|
||||||
src/Core/Platform
|
src/Core/Platform
|
||||||
src/Core/Asset
|
src/Core/Asset
|
||||||
|
|
@ -53,11 +37,22 @@ set(CORE_INCLUDE_DIRS
|
||||||
assets/sprite
|
assets/sprite
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(imx6u_core STATIC ${CORE_SOURCES})
|
set(SOURCES
|
||||||
target_include_directories(imx6u_core PUBLIC ${CORE_INCLUDE_DIRS})
|
src/Apps/Game/Main.cpp
|
||||||
|
${CORE_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
if(USE_FRAMEBUFFER)
|
if(USE_FRAMEBUFFER)
|
||||||
target_compile_definitions(imx6u_core PUBLIC USE_FRAMEBUFFER)
|
list(APPEND SOURCES src/Core/Platform/FBDisplay.cpp)
|
||||||
|
else()
|
||||||
|
list(APPEND SOURCES src/Core/Platform/SDLDisplay.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_executable(IMX6U-Game ${SOURCES})
|
||||||
|
target_include_directories(IMX6U-Game PRIVATE ${CORE_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
if(USE_FRAMEBUFFER)
|
||||||
|
target_compile_definitions(IMX6U-Game PRIVATE USE_FRAMEBUFFER)
|
||||||
else()
|
else()
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
|
@ -72,47 +67,76 @@ else()
|
||||||
set(SDL2_IMAGE_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x86/SDL2_image.dll")
|
set(SDL2_IMAGE_DLL "${CMAKE_CURRENT_SOURCE_DIR}/libs/Win/SDL_image/lib/x86/SDL2_image.dll")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(imx6u_core PUBLIC libs/Win/SDL2/include)
|
target_include_directories(IMX6U-Game PRIVATE libs/Win/SDL2/include)
|
||||||
target_link_directories(imx6u_core PUBLIC ${SDL2_LIB_DIR})
|
target_link_directories(IMX6U-Game PRIVATE ${SDL2_LIB_DIR})
|
||||||
target_link_libraries(imx6u_core PUBLIC SDL2main SDL2)
|
target_link_libraries(IMX6U-Game PRIVATE SDL2main SDL2)
|
||||||
|
|
||||||
|
add_custom_command(TARGET IMX6U-Game POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
"${SDL2_DLL}"
|
||||||
|
"$<TARGET_FILE_DIR:IMX6U-Game>"
|
||||||
|
)
|
||||||
else()
|
else()
|
||||||
find_package(SDL2 REQUIRED)
|
find_package(SDL2 REQUIRED)
|
||||||
find_package(SDL2_image QUIET)
|
find_package(SDL2_image QUIET)
|
||||||
target_link_libraries(imx6u_core PUBLIC SDL2::SDL2)
|
target_link_libraries(IMX6U-Game PRIVATE SDL2::SDL2)
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
|
||||||
find_package(ALSA QUIET)
|
|
||||||
if(ALSA_FOUND)
|
|
||||||
target_compile_definitions(imx6u_core PUBLIC PLATFORM_HAS_ALSA)
|
|
||||||
target_include_directories(imx6u_core PUBLIC ${ALSA_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(imx6u_core PUBLIC ${ALSA_LIBRARIES})
|
|
||||||
else()
|
|
||||||
message(STATUS "ALSA was not found; AlsaAudioInput and AlsaAudioOutput will be unavailable backends")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
target_compile_options(imx6u_core PRIVATE /utf-8 /W3)
|
target_compile_options(IMX6U-Game PRIVATE /utf-8 /W3)
|
||||||
|
set_property(TARGET IMX6U-Game PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
function(imx6u_configure_app_target target_name)
|
if(NOT USE_FRAMEBUFFER)
|
||||||
target_link_libraries(${target_name} PRIVATE imx6u_core)
|
set(SPRITE_ASSET_TOOL_SOURCES
|
||||||
|
src/Apps/Game/tools/asset_pipeline/SpriteAssetTool.cpp
|
||||||
|
src/Core/Asset/SpriteAssetLoader.cpp
|
||||||
|
)
|
||||||
|
|
||||||
if(WIN32 AND NOT USE_FRAMEBUFFER)
|
if(WIN32)
|
||||||
add_custom_command(TARGET ${target_name} POST_BUILD
|
add_executable(SpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES})
|
||||||
|
target_include_directories(SpriteAssetTool PRIVATE
|
||||||
|
src/Core/Asset
|
||||||
|
src/Core/RenderData
|
||||||
|
libs/Win/SDL2/include
|
||||||
|
libs/Win/SDL_image/include
|
||||||
|
)
|
||||||
|
target_link_directories(SpriteAssetTool PRIVATE ${SDL2_LIB_DIR} ${SDL2_IMAGE_LIB_DIR})
|
||||||
|
target_link_libraries(SpriteAssetTool PRIVATE SDL2main SDL2 SDL2_image)
|
||||||
|
|
||||||
|
add_custom_command(TARGET SpriteAssetTool POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
"${SDL2_DLL}"
|
"${SDL2_DLL}"
|
||||||
"$<TARGET_FILE_DIR:${target_name}>"
|
"$<TARGET_FILE_DIR:SpriteAssetTool>"
|
||||||
|
)
|
||||||
|
add_custom_command(TARGET SpriteAssetTool POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
"${SDL2_IMAGE_DLL}"
|
||||||
|
"$<TARGET_FILE_DIR:SpriteAssetTool>"
|
||||||
|
)
|
||||||
|
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(TARGET SpriteAssetTool)
|
||||||
|
add_custom_target(ConvertTomSprites
|
||||||
|
COMMAND $<TARGET_FILE:SpriteAssetTool>
|
||||||
|
--batch
|
||||||
|
"src/Apps/Game/assets/raw"
|
||||||
|
"src/Apps/Game/assets/sprites"
|
||||||
|
--preset tom-800x480
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
DEPENDS SpriteAssetTool
|
||||||
|
COMMENT "Converting PNG assets to board-ready .sprite files"
|
||||||
|
VERBATIM
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
if(MSVC)
|
|
||||||
target_compile_options(${target_name} PRIVATE /utf-8 /W3)
|
|
||||||
set_property(TARGET ${target_name} PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
add_subdirectory(src/Apps/Game)
|
|
||||||
add_subdirectory(src/Apps/Demo)
|
|
||||||
|
|
|
||||||
24
README.md
24
README.md
|
|
@ -61,17 +61,6 @@ cmake -B build-win .
|
||||||
cmake --build build-win --config Release
|
cmake --build build-win --config Release
|
||||||
```
|
```
|
||||||
|
|
||||||
只构建某个 App:
|
|
||||||
```bash
|
|
||||||
cmake --build build-win --config Release --target IMX6U-Game
|
|
||||||
cmake --build build-win --config Release --target IMX6U-Demo
|
|
||||||
```
|
|
||||||
|
|
||||||
如果 Tom 的 `.sprite` 资源缺失,先运行资源转换目标:
|
|
||||||
```bash
|
|
||||||
cmake --build build-win --config Release --target ConvertTomSprites
|
|
||||||
```
|
|
||||||
|
|
||||||
运行:
|
运行:
|
||||||
```bash
|
```bash
|
||||||
./build-win/Release/IMX6U-Game.exe
|
./build-win/Release/IMX6U-Game.exe
|
||||||
|
|
@ -91,7 +80,7 @@ cmake --build build-win --config Release --target ConvertTomSprites
|
||||||
需要系统 SDL2:
|
需要系统 SDL2:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install libsdl2-dev libsdl2-image-dev cmake g++
|
sudo apt-get install libsdl2-dev cmake g++
|
||||||
```
|
```
|
||||||
|
|
||||||
构建:
|
构建:
|
||||||
|
|
@ -100,17 +89,6 @@ cmake -B build-linux .
|
||||||
cmake --build build-linux
|
cmake --build build-linux
|
||||||
```
|
```
|
||||||
|
|
||||||
只构建某个 App:
|
|
||||||
```bash
|
|
||||||
cmake --build build-linux --target IMX6U-Game
|
|
||||||
cmake --build build-linux --target IMX6U-Demo
|
|
||||||
```
|
|
||||||
|
|
||||||
如果 Tom 的 `.sprite` 资源缺失,先运行资源转换目标:
|
|
||||||
```bash
|
|
||||||
cmake --build build-linux --target ConvertTomSprites
|
|
||||||
```
|
|
||||||
|
|
||||||
运行:
|
运行:
|
||||||
```bash
|
```bash
|
||||||
./build-linux/IMX6U-Game
|
./build-linux/IMX6U-Game
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
add_executable(IMX6U-Demo
|
|
||||||
main.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
imx6u_configure_app_target(IMX6U-Demo)
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
||||||
set(TOM_GAME_TARGET IMX6U-Game)
|
|
||||||
|
|
||||||
add_executable(${TOM_GAME_TARGET}
|
|
||||||
Main.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
imx6u_configure_app_target(${TOM_GAME_TARGET})
|
|
||||||
|
|
||||||
if(NOT USE_FRAMEBUFFER)
|
|
||||||
set(SPRITE_ASSET_TOOL_SOURCES
|
|
||||||
tools/asset_pipeline/SpriteAssetTool.cpp
|
|
||||||
${PROJECT_SOURCE_DIR}/src/Core/Asset/SpriteAssetLoader.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
add_executable(TomSpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES})
|
|
||||||
set_target_properties(TomSpriteAssetTool PROPERTIES OUTPUT_NAME SpriteAssetTool)
|
|
||||||
target_include_directories(TomSpriteAssetTool PRIVATE
|
|
||||||
${PROJECT_SOURCE_DIR}/src/Core/Asset
|
|
||||||
${PROJECT_SOURCE_DIR}/src/Core/RenderData
|
|
||||||
${PROJECT_SOURCE_DIR}/libs/Win/SDL2/include
|
|
||||||
${PROJECT_SOURCE_DIR}/libs/Win/SDL_image/include
|
|
||||||
)
|
|
||||||
target_link_directories(TomSpriteAssetTool PRIVATE
|
|
||||||
${SDL2_LIB_DIR}
|
|
||||||
${SDL2_IMAGE_LIB_DIR}
|
|
||||||
)
|
|
||||||
target_link_libraries(TomSpriteAssetTool PRIVATE SDL2main SDL2 SDL2_image)
|
|
||||||
|
|
||||||
add_custom_command(TARGET TomSpriteAssetTool POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
"${SDL2_DLL}"
|
|
||||||
"$<TARGET_FILE_DIR:TomSpriteAssetTool>"
|
|
||||||
)
|
|
||||||
add_custom_command(TARGET TomSpriteAssetTool POST_BUILD
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
||||||
"${SDL2_IMAGE_DLL}"
|
|
||||||
"$<TARGET_FILE_DIR:TomSpriteAssetTool>"
|
|
||||||
)
|
|
||||||
elseif(SDL2_image_FOUND)
|
|
||||||
add_executable(TomSpriteAssetTool ${SPRITE_ASSET_TOOL_SOURCES})
|
|
||||||
set_target_properties(TomSpriteAssetTool PROPERTIES OUTPUT_NAME SpriteAssetTool)
|
|
||||||
target_include_directories(TomSpriteAssetTool PRIVATE
|
|
||||||
${PROJECT_SOURCE_DIR}/src/Core/Asset
|
|
||||||
${PROJECT_SOURCE_DIR}/src/Core/RenderData
|
|
||||||
${SDL2_image_INCLUDE_DIRS}
|
|
||||||
${SDL2_IMAGE_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
target_link_libraries(TomSpriteAssetTool PRIVATE SDL2::SDL2)
|
|
||||||
|
|
||||||
if(TARGET SDL2_image::SDL2_image)
|
|
||||||
target_link_libraries(TomSpriteAssetTool PRIVATE SDL2_image::SDL2_image)
|
|
||||||
else()
|
|
||||||
target_link_libraries(TomSpriteAssetTool PRIVATE
|
|
||||||
${SDL2_image_LIBRARIES}
|
|
||||||
${SDL2_IMAGE_LIBRARIES}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(STATUS "SpriteAssetTool disabled: SDL2_image was not found")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(TARGET TomSpriteAssetTool)
|
|
||||||
add_custom_target(ConvertTomSprites
|
|
||||||
COMMAND $<TARGET_FILE:TomSpriteAssetTool>
|
|
||||||
--batch
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/assets/raw"
|
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/assets/sprites"
|
|
||||||
--preset tom-800x480
|
|
||||||
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
|
|
||||||
DEPENDS TomSpriteAssetTool
|
|
||||||
COMMENT "Converting Tom PNG assets to board-ready .sprite files"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
@ -25,8 +25,8 @@
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const int32_t ScreenWidth = 1024;
|
const int32_t ScreenWidth = 800;
|
||||||
const int32_t ScreenHeight = 600;
|
const int32_t ScreenHeight = 480;
|
||||||
|
|
||||||
struct ProgramOptions
|
struct ProgramOptions
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue