Skip to content

Commit

Permalink
Merge pull request #108 from vilbeyli/staging
Browse files Browse the repository at this point in the history
v0.5.0 - Scenes, Model Importing, GPU Markers & DPI-awareness
  • Loading branch information
vilbeyli authored Sep 15, 2020
2 parents a0352a0 + c86a961 commit 3236d49
Show file tree
Hide file tree
Showing 85 changed files with 6,693 additions and 1,188 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -344,4 +344,7 @@ $RECYCLE.BIN/
# EXCEPTIONS
!Data/Models/*/*.obj
!Tools/7z.exe
!Tools/wget.exe
!Tools/wget.exe
!Libs/WinPixEventRuntime/bin
!Libs/WinPixEventRuntime/bin/x64/
!Libs/WinPixEventRuntime/bin/x64/*
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@
[submodule "Libs/D3D12MA"]
path = Libs/D3D12MA
url = https://github.com/vilbeyli/D3D12MemoryAllocator.git
[submodule "Libs/assimp"]
path = Libs/assimp
url = https://github.com/assimp/assimp.git
[submodule "Data/Models"]
path = Data/Models
url = https://github.com/vilbeyli/VQModels.git
17 changes: 15 additions & 2 deletions Build/GenerateProjectFiles.bat
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,20 @@ exit /b 0
::
:RunCmake

cmake ..\.. -G "Visual Studio 16 2019" -A x64
:: assimp importers
set ASSIMP_IMPORT_FORMATS=-DASSIMP_BUILD_OBJ_IMPORTER=TRUE
set ASSIMP_IMPORT_FORMATS=!ASSIMP_IMPORT_FORMATS! -DASSIMP_BUILD_GLTF_IMPORTER=TRUE
:: assimp build options
set CMAKE_ASSIMP_PARAMETERS=-DASSIMP_BUILD_ASSIMP_TOOLS=OFF
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! -DASSIMP_NO_EXPORT=ON
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! -DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! -DBUILD_SHARED_LIBS=OFF
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! -DASSIMP_BUILD_TESTS=OFF
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! -DASSIMP_INSTALL=OFF
set CMAKE_ASSIMP_PARAMETERS=!CMAKE_ASSIMP_PARAMETERS! !ASSIMP_IMPORT_FORMATS!


cmake ..\.. -G "Visual Studio 16 2019" -A x64 !CMAKE_ASSIMP_PARAMETERS!

if !errorlevel! EQU 0 (
echo [VQBuild] Success!
Expand All @@ -140,7 +153,7 @@ if !errorlevel! EQU 0 (
echo [VQBuild] cmake VS2019 failed, retrying with VS 2017...
echo [VQBuild] removing %~dp0SolutionFiles ...
rmdir /S /Q %~dp0SolutionFiles
cmake ..\.. -G "Visual Studio 15 2017" -A x64
cmake ..\.. -G "Visual Studio 15 2017" -A x64 !CMAKE_ASSIMP_PARAMETERS!
if !errorlevel! NEQ 0 (
echo [VQBuild] cmake VS2017 failed, retrying without specifying VS version...
echo [VQBuild] removing %~dp0SolutionFiles ...
Expand Down
61 changes: 39 additions & 22 deletions Build/PackageEngine.bat
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,17 @@ set SKIP_DOWNLOADS=0
set DBG_BUILD_DIRECTORY=../Bin/DEBUG
set RLS_BUILD_DIRECTORY=../Bin/RELEASE
set RWD_BUILD_DIRECTORY=../Bin/RELWITHDEBINFO
set SHADER_DIRECTORY=../Source/Shaders
set SHADER_DIRECTORY=../Shaders
set DATA_DIRECTORY=../Data

::prepare ignore directory list
pushd %cd%
cd ../Data/Icons
set IGNORE_DIRS=%cd%
cd ../Resources
set IGNORE_DIRS=%IGNORE_DIRS% %cd%
popd

:: Keep track of # build tasks. build, clean, copy/move, etc.
:: assume 2 for build+copy, add more depending on prebuild+clean tasks
set BUILD_NUM_TASKS=2
Expand Down Expand Up @@ -77,7 +85,7 @@ for %%i IN (%*) DO (
::echo SkipMSBuildFind=!MSBUILD_FIND!
if !MSBUILD_FIND! equ 1 (
call :FindMSBuild
if %ERRORLEVEL% neq 0 (
if !ERRORLEVEL! neq 0 (
echo [VQPackage] Error: Couldn't find MSBuild
exit /b -1
)
Expand Down Expand Up @@ -116,7 +124,7 @@ if !NO_BUILD! equ 0 (
:: Package the engine
call :ExecBuildTask_Build

if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL%
if !ERRORLEVEL! neq 0 exit /b !ERRORLEVEL!
)

:: move build artifacts into destination folder
Expand Down Expand Up @@ -183,7 +191,7 @@ if not exist !SOLUTION_FILE_PATH! (
echo **********************************************************************
echo.
call %~dp0GenerateProjectFiles.bat -noVS
if %ERRORLEVEL% neq 0 (
if !ERRORLEVEL! neq 0 (
echo [VQPackage] Error: Couldn't generate project files.
exit /b -1
)
Expand All @@ -210,20 +218,25 @@ exit /b 0
:ExecBuildTask_Build
::echo [VQPackage] ENGINE_BUILD_COMMAND = !ENGINE_BUILD_COMMAND!
:: ---------------------- Build Release ----------------------
call :PrintBuildStage Release
call !ENGINE_BUILD_COMMAND! /p:Configuration=Release
set /A ERR_REL=!ERRORLEVEL!
set /A BUILD_NUM_CURR_TASK=!BUILD_NUM_CURR_TASK!+1
if !BUILD_CONFIG_RELEASE! neq 0 (
call :PrintBuildStage Release
call !ENGINE_BUILD_COMMAND! /p:Configuration=Release
if !ERRORLEVEL! neq 0 (
echo ERROR: BUILD ERROR
exit /b -1
)
set /A BUILD_NUM_CURR_TASK=!BUILD_NUM_CURR_TASK!+1
)
:: ---------------------- Build Release ----------------------
:: ---------------------- Build Debug ----------------------
if !BUILD_CONFIG_DEBUG! neq 0 (
call :PrintBuildStage Debug
call !ENGINE_BUILD_COMMAND! /p:Configuration=Debug
set /A BUILD_NUM_CURR_TASK=!BUILD_NUM_CURR_TASK!+1
if %ERRORLEVEL% neq 0 (
if !ERRORLEVEL! neq 0 (
echo ERROR: BUILD ERROR
exit /b -1
)
set /A BUILD_NUM_CURR_TASK=!BUILD_NUM_CURR_TASK!+1
)
:: ---------------------- Build Debug ----------------------
:: ---------------------- Build RelWithDebInfo----------------
Expand Down Expand Up @@ -280,16 +293,17 @@ exit /b 0
:PackageBuild
set SRC=%~1
set DST=%~2
::prepare ignore directory list
pushd %cd%
cd !SRC!/Data/Icons
set IGNORE_DIRS=%cd%
cd ../Resources
set IGNORE_DIRS=%IGNORE_DIRS% %cd%
popd
:: move files to final destination
robocopy !SRC! !DST! /xf *.lib *.ilk /E /xd !IGNORE_DIRS!
exit /b 0

::
:: PackageBuild(source, dest)
::
:PackageResources
set DST=%~1
robocopy !SHADER_DIRECTORY! !DST!/Shaders /E
robocopy !DATA_DIRECTORY! !DST!/Data /E /xd !IGNORE_DIRS!
exit /b 0

::
Expand All @@ -307,14 +321,17 @@ if exist !ENGINE_PACKAGE_OUTPUT_DIRECTORY! (
rmdir /S /Q !ENGINE_PACKAGE_OUTPUT_DIRECTORY!
)

:: make artifacts directory
:: create artifacts directory
mkdir !ENGINE_PACKAGE_OUTPUT_DIRECTORY!

:: move builds
:: move data
call :PackageResources !ENGINE_PACKAGE_OUTPUT_DIRECTORY!

:: move built binaries
echo [VQPackage] Moving build artifacts to package output directory...
call :PackageBuild !RLS_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!/Win64
if !BUILD_CONFIG_DEBUG! NEQ 0 call :PackageBuild !DBG_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!/Win64-Debug
if !BUILD_CONFIG_REL_WITH_DBG! NEQ 0 call :PackageBuild !RWD_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!/Win64-PDB
call :PackageBuild !RLS_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!
if !BUILD_CONFIG_DEBUG! NEQ 0 call :PackageBuild !DBG_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!
if !BUILD_CONFIG_REL_WITH_DBG! NEQ 0 call :PackageBuild !RWD_BUILD_DIRECTORY!, !ENGINE_PACKAGE_OUTPUT_DIRECTORY!
exit /b 0

:: --------------------------------------------------------------------------
Expand Down
113 changes: 90 additions & 23 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,39 @@ add_compile_options(/MP)

set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})

# ouput exe to bin directory
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/Bin)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_HOME_DIRECTORY}/Bin/${OUTPUTCONFIG} )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

set (Resource
"Data/Resources/VQE.rc"
"Data/Resources/resource.h"
"Data/Icons/VQE32.ico"
)

set (Scenes
"Data/Levels/Default.xml"
"Data/Levels/Sponza.xml"
"Data/Levels/GeometryUnitTest.xml"
"Data/Levels/StressTest.xml"
"Source/Scenes/Scenes.h"
"Source/Scenes/DefaultScene.cpp"
"Source/Scenes/SponzaScene.cpp"
"Source/Scenes/GeometryUnitTestScene.cpp"
"Source/Scenes/StressTestScene.cpp"
)

set (Config
"Data/EngineSettings.ini"
"Data/RendererSettings.ini"
"Data/HDRDisplayProfiles.ini"
"Data/EnvironmentMaps.ini"
"Data/Scenes.ini"
)

set (Shaders
"Source/Shaders/hello-triangle.hlsl"
"Source/Shaders/hello-cube.hlsl"
"Source/Shaders/FullscreenTriangle.hlsl"
"Source/Shaders/Tonemapper.hlsl"
"Source/Shaders/Skydome.hlsl"
"Shaders/hello-triangle.hlsl"
"Shaders/hello-cube.hlsl"
"Shaders/FullscreenTriangle.hlsl"
"Shaders/Tonemapper.hlsl"
"Shaders/Skydome.hlsl"
"Shaders/Object.hlsl"
)

set (HeaderVQE
Expand All @@ -48,11 +55,19 @@ set (HeaderVQE
"Source/Application/VQEngine.h"
"Source/Application/Events.h"
"Source/Application/Mesh.h"
"Source/Application/Material.h"
"Source/Application/Model.h"
"Source/Application/Geometry.h"
"Source/Application/Transform.h"
"Source/Application/Quaternion.h"
"Source/Application/Camera.h"
"Source/Application/Input.h"
"Source/Application/AssetLoader.h"
"Source/Application/Scene.h"
"Source/Application/Light.h"
"Source/Application/GameObject.h"
"Source/Application/Memory.h"
"Source/Application/GPUMarker.h"
)

set (SourceVQE
Expand All @@ -64,53 +79,105 @@ set (SourceVQE
"Source/Application/VQEngine_Update.cpp"
"Source/Application/VQEngine_WindowEvents.cpp"
"Source/Application/VQEngine_EventHandlers.cpp"
"Source/Application/FileParser.cpp"
"Source/Application/Events.cpp"
"Source/Application/Mesh.cpp"
"Source/Application/Material.cpp"
"Source/Application/Model.cpp"
"Source/Application/Geometry.cpp"
"Source/Application/Transform.cpp"
"Source/Application/Math.cpp"
"Source/Application/Quaternion.cpp"
"Source/Application/Camera.cpp"
"Source/Application/Input.cpp"
"Source/Application/AssetLoader.cpp"
"Source/Application/Scene.cpp"
"Source/Application/Light.cpp"
"Source/Application/GameObject.cpp"
"Source/Application/Memory.cpp"
"Source/Application/GPUMarker.cpp"
)

add_link_options(/SUBSYSTEM:WINDOWS)
set (PIXIncl
"Libs/WinPixEventRuntime/Include"
)

# ouput exe to bin directory
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_HOME_DIRECTORY}/Bin/${OUTPUTCONFIG} )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

add_link_options(/SUBSYSTEM:WINDOWS)

# add submodules
add_subdirectory(Libs/VQUtils)
add_subdirectory(Libs/D3D12MA)
add_subdirectory(Source/Renderer)

#add_definitions(
# -DASSIMP_BUILD_ASSIMP_TOOLS=OFF
# -DASSIMP_NO_EXPORT=ON
# -DBUILD_SHARED_LIBS=OFF
# -DASSIMP_BUILD_TESTS=OFF
# -DASSIMP_INSTALL=OFF
#)
add_subdirectory(Libs/assimp)

source_group("Config" FILES ${Config})
source_group("Resource" FILES ${Resource})
source_group("Icons" FILES ${Icons})
source_group("Shaders" FILES ${Shaders})
source_group("Scenes" FILES ${Scenes})

set_source_files_properties(${Config} PROPERTIES VS_TOOL_OVERRIDE "Text")
set_source_files_properties(${Scenes} PROPERTIES VS_TOOL_OVERRIDE "Text")
set_source_files_properties(${Shaders} PROPERTIES VS_TOOL_OVERRIDE "Text")
set_source_files_properties(Data/Resources/VQE.rc PROPERTIES VS_TOOL_OVERRIDE "Resource compiler")
set_source_files_properties(Data/Icons/VQE32.ico PROPERTIES VS_TOOL_OVERRIDE "Image")

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/Libs/VQUtils/Bin/)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/Libs/WinPixEventRuntime/bin/x64)

# Create a library with the project name that is build with the Headers and Source files
add_executable( ${PROJECT_NAME} ${HeaderVQE} ${SourceVQE} ${Config} ${Resource} ${Shaders} )
add_executable( ${PROJECT_NAME} ${HeaderVQE} ${SourceVQE} ${Config} ${Scenes} ${Resource} ${Shaders} )

set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY} )

set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/Bin/ )

# set target executable name for debug/releasewithdebug builds, release is VQE.exe
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
if (${OUTPUTCONFIG} MATCHES "DEBUG")
set_target_properties(${PROJECT_NAME} PROPERTIES ${OUTPUTCONFIG}_OUTPUT_NAME "VQE-d")
elseif (${OUTPUTCONFIG} MATCHES "RELWITHDEBINFO")
set_target_properties(${PROJECT_NAME} PROPERTIES ${OUTPUTCONFIG}_OUTPUT_NAME "VQE-rwd")
add_compile_definitions(PROFILE_BUILD)
endif()
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Data ${CMAKE_SOURCE_DIR}/Bin/Data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Source/Shaders ${CMAKE_SOURCE_DIR}/Bin/Shaders)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Data $<TARGET_FILE_DIR:${PROJECT_NAME}>/Data)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Source/Shaders $<TARGET_FILE_DIR:${PROJECT_NAME}>/Shaders)
set_target_properties(assimp PROPERTIES FOLDER Libs/assimp)
set_target_properties(IrrXML PROPERTIES FOLDER Libs/assimp)
set_target_properties(uninstall PROPERTIES FOLDER Libs/assimp)
set_target_properties(UpdateAssimpLibsDebugSymbolsAndDLLs PROPERTIES FOLDER Libs/assimp)
set_target_properties(zlibstatic PROPERTIES FOLDER Libs/assimp)

# TODO: the above commands must run even if the project is up to date which is not the case now.
# if Data/EngineSettings.ini is updated, the copy in the target destination of the commands above
# is not updated.
#set_target_properties(VQRenderer PROPERTIES FOLDER Libs)
#set_target_properties(VQUtils PROPERTIES FOLDER Libs)
set_target_properties(D3D12MA PROPERTIES FOLDER Libs)

# Make sure the compiler can find include files for the libraries
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${Includes})
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${PIXIncl})

target_link_libraries(${PROJECT_NAME} PRIVATE VQUtils VQRenderer assimp WinPixEventRuntime)


target_link_libraries(${PROJECT_NAME} PRIVATE VQUtils VQRenderer )
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/Libs/WinPixEventRuntime/bin/x64/WinPixEventRuntime.dll"
$<TARGET_FILE_DIR:${PROJECT_NAME}>
)
3 changes: 2 additions & 1 deletion Data/EngineSettings.ini
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ RenderScale=1.0
TripleBuffer=true
AntiAliasing=true
MaxFrameRate=Auto
HDR=true
HDR=false

[Engine]
Width=768
Height=432
DisplayMode=Windowed
PreferredDisplay=0
Scene=StressTest

DebugWindow=false
DebugWindowWidth=450
Expand Down
Loading

0 comments on commit 3236d49

Please sign in to comment.