cmake_minimum_required(VERSION 3.15) project(D3D12_Integration) set(ENGINE_ROOT_DIR ${CMAKE_SOURCE_DIR}/engine) find_package(Python3 REQUIRED) enable_testing() # Minimal test - just verifies initialization and render loop add_executable(D3D12_Minimal WIN32 minimal/main.cpp ) target_include_directories(D3D12_Minimal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/minimal ${ENGINE_ROOT_DIR}/include ) target_compile_definitions(D3D12_Minimal PRIVATE UNICODE _UNICODE ) target_link_libraries(D3D12_Minimal PRIVATE d3d12 dxgi d3dcompiler winmm XCEngine ) # Render model test - complete rendering with model, shader, texture add_executable(D3D12_RenderModel WIN32 render_model/main.cpp ) target_include_directories(D3D12_RenderModel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/render_model ${ENGINE_ROOT_DIR}/include ${ENGINE_ROOT_DIR} ) target_compile_definitions(D3D12_RenderModel PRIVATE UNICODE _UNICODE ) target_link_libraries(D3D12_RenderModel PRIVATE d3d12 dxgi d3dcompiler winmm XCEngine ) # Copy Res folder to output directory for Minimal test add_custom_command(TARGET D3D12_Minimal POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/minimal/Res $/Res ) # Copy Res folder to output directory for RenderModel test add_custom_command(TARGET D3D12_RenderModel POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/render_model/Res $/Res ) # Copy test scripts to output directory for Minimal test add_custom_command(TARGET D3D12_Minimal POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run.bat $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/compare_ppm.py $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run_integration_test.py $/ ) # Copy test scripts to output directory for RenderModel test add_custom_command(TARGET D3D12_RenderModel POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run.bat $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/compare_ppm.py $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run_integration_test.py $/ ) # Triangle test - renders a rainbow gradient triangle add_executable(D3D12_Triangle WIN32 triangle/main.cpp ) target_include_directories(D3D12_Triangle PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/triangle ${ENGINE_ROOT_DIR}/include ) target_compile_definitions(D3D12_Triangle PRIVATE UNICODE _UNICODE ) target_link_libraries(D3D12_Triangle PRIVATE d3d12 dxgi d3dcompiler winmm XCEngine ) # Copy Res folder to output directory for Triangle test add_custom_command(TARGET D3D12_Triangle POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/triangle/Res $/Res ) # Copy test scripts to output directory for Triangle test add_custom_command(TARGET D3D12_Triangle POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run.bat $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/compare_ppm.py $/ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/run_integration_test.py $/ ) # Register integration tests with CTest add_test(NAME D3D12_Minimal_Integration COMMAND ${Python3_EXECUTABLE} $/run_integration_test.py $ minimal.ppm ${CMAKE_CURRENT_SOURCE_DIR}/minimal/GT.ppm 5 WORKING_DIRECTORY $ ) add_test(NAME D3D12_RenderModel_Integration COMMAND ${Python3_EXECUTABLE} $/run_integration_test.py $ screenshot.ppm ${CMAKE_CURRENT_SOURCE_DIR}/render_model/GT.ppm 5 WORKING_DIRECTORY $ ) add_test(NAME D3D12_Triangle_Integration COMMAND ${Python3_EXECUTABLE} $/run_integration_test.py $ triangle.ppm ${CMAKE_CURRENT_SOURCE_DIR}/triangle/GT.ppm 5 WORKING_DIRECTORY $ )