diff --git a/.gitignore b/.gitignore index 476f1e8..fbfc16d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ # Build dirs /build/ /cmake-build-*/ -/src/shaders/ # Build helpers build.bat diff --git a/CMakeLists.txt b/CMakeLists.txt index 049a3d1..51d0349 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,74 +38,11 @@ add_subdirectory(src) file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/bin/shaders") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/bin/assets") -string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_UPPER_BUILD_TYPE) - -if (CMAKE_UPPER_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_UPPER_BUILD_TYPE STREQUAL "RELWITHDEBINFO") - set(SHADER_DEBUG_FLAGS "-g") -else () - set(SHADER_DEBUG_FLAGS "") -endif () - -file(GLOB_RECURSE ASSETS ${CMAKE_CURRENT_SOURCE_DIR}/assets/*) - -foreach (ASSET IN LISTS ASSETS) - get_filename_component(FILENAME ${ASSET} NAME) - get_filename_component(FILE_DIRECTORY ${ASSET} DIRECTORY) - file(RELATIVE_PATH REL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets ${FILE_DIRECTORY}) - - if (NOT REL_PATH STREQUAL "") - set(REL_PATH ${REL_PATH}/) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/assets/${REL_PATH}) - endif () - - set(OUT_PATH ${CMAKE_BINARY_DIR}/bin/assets/${REL_PATH}${FILENAME}) - - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/assets/${FILENAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ASSET} ${OUT_PATH} - COMMENT " Copying ${ASSET} to ${OUT_PATH}") - - list(APPEND OUT_ASSETS ${CMAKE_BINARY_DIR}/bin/assets/${FILENAME}) - list(APPEND ADDITIONAL_CLEAN_FILES ${OUT_PATH}) -endforeach () - -file(GLOB_RECURSE SHADERS - "${CMAKE_CURRENT_SOURCE_DIR}/shaders/**.frag" - "${CMAKE_CURRENT_SOURCE_DIR}/shaders/**.vert" - "${CMAKE_CURRENT_SOURCE_DIR}/shaders/**.tesc" - "${CMAKE_CURRENT_SOURCE_DIR}/shaders/**.tese" -) - -foreach (SHADER IN LISTS SHADERS) - get_filename_component(FILENAME ${SHADER} NAME) - get_filename_component(FILE_DIRECTORY ${SHADER} DIRECTORY) - file(RELATIVE_PATH REL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/shaders ${FILE_DIRECTORY}) - - if (NOT REL_PATH STREQUAL "") - set(REL_PATH ${REL_PATH}/) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/shaders/${REL_PATH}) - endif () - - set(OUT_PATH ${CMAKE_BINARY_DIR}/bin/shaders/${REL_PATH}${FILENAME}.spv) - - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/shaders/${FILENAME}.spv - COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER_DEBUG_FLAGS} ${SHADER} -o ${OUT_PATH} DEPENDS ${SHADER} - COMMENT " Compiling ${SHADER} ") - - list(APPEND SPV_SHADERS ${CMAKE_BINARY_DIR}/bin/shaders/${FILENAME}.spv) - list(APPEND ADDITIONAL_CLEAN_FILES ${OUT_PATH}) -endforeach () - -add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) -add_custom_target(assets ALL DEPENDS ${OUT_ASSETS}) - -add_dependencies(TitorEditor shaders) -add_dependencies(TitorEditor assets) add_custom_command( OUTPUT ${CMAKE_SOURCE_DIR}/compile_commands.json COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/compile_commands.json COMMENT "Copying build commands to src dir") - SetVersionInfo() CompilerPostSetup() diff --git a/cmake_modules/common.cmake b/cmake_modules/common.cmake index b71f1da..5983963 100644 --- a/cmake_modules/common.cmake +++ b/cmake_modules/common.cmake @@ -42,3 +42,5 @@ include(versioninfo) include(profiling) include(docs) message(DEBUG "Leaving ${CMAKE_CURRENT_LIST_FILE}") + +string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_UPPER_BUILD_TYPE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d12052e..38db9ba 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,4 +3,9 @@ add_subdirectory(vma) add_subdirectory(engine) add_subdirectory(objectloaders) add_subdirectory(editor) -add_subdirectory(tests) \ No newline at end of file +add_subdirectory(tests) +add_subdirectory(shaders) +add_subdirectory(assets) + +add_dependencies(TitorEditor shaders) +add_dependencies(TitorEditor assets) diff --git a/src/assets/CMakeLists.txt b/src/assets/CMakeLists.txt new file mode 100644 index 0000000..269c228 --- /dev/null +++ b/src/assets/CMakeLists.txt @@ -0,0 +1,39 @@ +file(GLOB_RECURSE ASSETS + ${CMAKE_CURRENT_SOURCE_DIR}/**.obj + ${CMAKE_CURRENT_SOURCE_DIR}/**.png + ${CMAKE_CURRENT_SOURCE_DIR}/**.jpg + ${CMAKE_CURRENT_SOURCE_DIR}/**.glb + ${CMAKE_CURRENT_SOURCE_DIR}/**.bin + ${CMAKE_CURRENT_SOURCE_DIR}/**.gltf +) + +foreach (ASSET IN LISTS ASSETS) + get_filename_component(FILENAME ${ASSET} NAME) + get_filename_component(FILE_DIRECTORY ${ASSET} DIRECTORY) + file(RELATIVE_PATH REL_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_DIRECTORY}) + + if (NOT REL_PATH STREQUAL "") + set(REL_PATH ${REL_PATH}/) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/assets/${REL_PATH}) + endif () + + set(OUT_DIR ${CMAKE_BINARY_DIR}/bin/assets/${REL_PATH}) + set(OUT_PATH ${OUT_DIR}${FILENAME}) + + #add_custom_command(OUTPUT ${OUT_DIR} + # COMMAND ${CMAKE_COMMAND} -E make_directory ${OUT_DIR} COMMENT "Creating directory ${OUT_DIR}") + + if (EXISTS ${OUT_PATH}) + file(REMOVE ${OUT_PATH}) + endif () + + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/assets/${FILENAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ASSET} ${OUT_PATH} DEPENDS ${ASSET} + COMMENT "Copying ${ASSET} to ${OUT_PATH}") + + list(APPEND OUT_ASSETS ${CMAKE_BINARY_DIR}/bin/assets/${FILENAME}) + list(APPEND ADDITIONAL_CLEAN_FILES ${OUT_PATH}) +endforeach () + +add_custom_target(assets ALL DEPENDS ${OUT_ASSETS}) + diff --git a/assets/PhysicsTest.glb b/src/assets/PhysicsTest.glb similarity index 100% rename from assets/PhysicsTest.glb rename to src/assets/PhysicsTest.glb diff --git a/assets/PhysicsTest1.glb b/src/assets/PhysicsTest1.glb similarity index 100% rename from assets/PhysicsTest1.glb rename to src/assets/PhysicsTest1.glb diff --git a/assets/colored_cube.obj b/src/assets/colored_cube.obj similarity index 100% rename from assets/colored_cube.obj rename to src/assets/colored_cube.obj diff --git a/assets/cube.obj b/src/assets/cube.obj similarity index 100% rename from assets/cube.obj rename to src/assets/cube.obj diff --git a/assets/file.png b/src/assets/file.png similarity index 100% rename from assets/file.png rename to src/assets/file.png diff --git a/assets/flat_vase.obj b/src/assets/flat_vase.obj similarity index 100% rename from assets/flat_vase.obj rename to src/assets/flat_vase.obj diff --git a/assets/folder.png b/src/assets/folder.png similarity index 100% rename from assets/folder.png rename to src/assets/folder.png diff --git a/assets/khronos-sponza/10381718147657362067.jpg b/src/assets/khronos-sponza/10381718147657362067.jpg similarity index 100% rename from assets/khronos-sponza/10381718147657362067.jpg rename to src/assets/khronos-sponza/10381718147657362067.jpg diff --git a/assets/khronos-sponza/10388182081421875623.jpg b/src/assets/khronos-sponza/10388182081421875623.jpg similarity index 100% rename from assets/khronos-sponza/10388182081421875623.jpg rename to src/assets/khronos-sponza/10388182081421875623.jpg diff --git a/assets/khronos-sponza/11474523244911310074.jpg b/src/assets/khronos-sponza/11474523244911310074.jpg similarity index 100% rename from assets/khronos-sponza/11474523244911310074.jpg rename to src/assets/khronos-sponza/11474523244911310074.jpg diff --git a/assets/khronos-sponza/11490520546946913238.jpg b/src/assets/khronos-sponza/11490520546946913238.jpg similarity index 100% rename from assets/khronos-sponza/11490520546946913238.jpg rename to src/assets/khronos-sponza/11490520546946913238.jpg diff --git a/assets/khronos-sponza/11872827283454512094.jpg b/src/assets/khronos-sponza/11872827283454512094.jpg similarity index 100% rename from assets/khronos-sponza/11872827283454512094.jpg rename to src/assets/khronos-sponza/11872827283454512094.jpg diff --git a/assets/khronos-sponza/11968150294050148237.jpg b/src/assets/khronos-sponza/11968150294050148237.jpg similarity index 100% rename from assets/khronos-sponza/11968150294050148237.jpg rename to src/assets/khronos-sponza/11968150294050148237.jpg diff --git a/assets/khronos-sponza/1219024358953944284.jpg b/src/assets/khronos-sponza/1219024358953944284.jpg similarity index 100% rename from assets/khronos-sponza/1219024358953944284.jpg rename to src/assets/khronos-sponza/1219024358953944284.jpg diff --git a/assets/khronos-sponza/12501374198249454378.jpg b/src/assets/khronos-sponza/12501374198249454378.jpg similarity index 100% rename from assets/khronos-sponza/12501374198249454378.jpg rename to src/assets/khronos-sponza/12501374198249454378.jpg diff --git a/assets/khronos-sponza/13196865903111448057.jpg b/src/assets/khronos-sponza/13196865903111448057.jpg similarity index 100% rename from assets/khronos-sponza/13196865903111448057.jpg rename to src/assets/khronos-sponza/13196865903111448057.jpg diff --git a/assets/khronos-sponza/13824894030729245199.jpg b/src/assets/khronos-sponza/13824894030729245199.jpg similarity index 100% rename from assets/khronos-sponza/13824894030729245199.jpg rename to src/assets/khronos-sponza/13824894030729245199.jpg diff --git a/assets/khronos-sponza/13982482287905699490.jpg b/src/assets/khronos-sponza/13982482287905699490.jpg similarity index 100% rename from assets/khronos-sponza/13982482287905699490.jpg rename to src/assets/khronos-sponza/13982482287905699490.jpg diff --git a/assets/khronos-sponza/14118779221266351425.jpg b/src/assets/khronos-sponza/14118779221266351425.jpg similarity index 100% rename from assets/khronos-sponza/14118779221266351425.jpg rename to src/assets/khronos-sponza/14118779221266351425.jpg diff --git a/assets/khronos-sponza/14170708867020035030.jpg b/src/assets/khronos-sponza/14170708867020035030.jpg similarity index 100% rename from assets/khronos-sponza/14170708867020035030.jpg rename to src/assets/khronos-sponza/14170708867020035030.jpg diff --git a/assets/khronos-sponza/14267839433702832875.jpg b/src/assets/khronos-sponza/14267839433702832875.jpg similarity index 100% rename from assets/khronos-sponza/14267839433702832875.jpg rename to src/assets/khronos-sponza/14267839433702832875.jpg diff --git a/assets/khronos-sponza/14650633544276105767.jpg b/src/assets/khronos-sponza/14650633544276105767.jpg similarity index 100% rename from assets/khronos-sponza/14650633544276105767.jpg rename to src/assets/khronos-sponza/14650633544276105767.jpg diff --git a/assets/khronos-sponza/15295713303328085182.jpg b/src/assets/khronos-sponza/15295713303328085182.jpg similarity index 100% rename from assets/khronos-sponza/15295713303328085182.jpg rename to src/assets/khronos-sponza/15295713303328085182.jpg diff --git a/assets/khronos-sponza/15722799267630235092.jpg b/src/assets/khronos-sponza/15722799267630235092.jpg similarity index 100% rename from assets/khronos-sponza/15722799267630235092.jpg rename to src/assets/khronos-sponza/15722799267630235092.jpg diff --git a/assets/khronos-sponza/16275776544635328252.png b/src/assets/khronos-sponza/16275776544635328252.png similarity index 100% rename from assets/khronos-sponza/16275776544635328252.png rename to src/assets/khronos-sponza/16275776544635328252.png diff --git a/assets/khronos-sponza/16299174074766089871.jpg b/src/assets/khronos-sponza/16299174074766089871.jpg similarity index 100% rename from assets/khronos-sponza/16299174074766089871.jpg rename to src/assets/khronos-sponza/16299174074766089871.jpg diff --git a/assets/khronos-sponza/16885566240357350108.jpg b/src/assets/khronos-sponza/16885566240357350108.jpg similarity index 100% rename from assets/khronos-sponza/16885566240357350108.jpg rename to src/assets/khronos-sponza/16885566240357350108.jpg diff --git a/assets/khronos-sponza/17556969131407844942.jpg b/src/assets/khronos-sponza/17556969131407844942.jpg similarity index 100% rename from assets/khronos-sponza/17556969131407844942.jpg rename to src/assets/khronos-sponza/17556969131407844942.jpg diff --git a/assets/khronos-sponza/17876391417123941155.jpg b/src/assets/khronos-sponza/17876391417123941155.jpg similarity index 100% rename from assets/khronos-sponza/17876391417123941155.jpg rename to src/assets/khronos-sponza/17876391417123941155.jpg diff --git a/assets/khronos-sponza/2051777328469649772.jpg b/src/assets/khronos-sponza/2051777328469649772.jpg similarity index 100% rename from assets/khronos-sponza/2051777328469649772.jpg rename to src/assets/khronos-sponza/2051777328469649772.jpg diff --git a/assets/khronos-sponza/2185409758123873465.jpg b/src/assets/khronos-sponza/2185409758123873465.jpg similarity index 100% rename from assets/khronos-sponza/2185409758123873465.jpg rename to src/assets/khronos-sponza/2185409758123873465.jpg diff --git a/assets/khronos-sponza/2299742237651021498.jpg b/src/assets/khronos-sponza/2299742237651021498.jpg similarity index 100% rename from assets/khronos-sponza/2299742237651021498.jpg rename to src/assets/khronos-sponza/2299742237651021498.jpg diff --git a/assets/khronos-sponza/2374361008830720677.jpg b/src/assets/khronos-sponza/2374361008830720677.jpg similarity index 100% rename from assets/khronos-sponza/2374361008830720677.jpg rename to src/assets/khronos-sponza/2374361008830720677.jpg diff --git a/assets/khronos-sponza/2411100444841994089.jpg b/src/assets/khronos-sponza/2411100444841994089.jpg similarity index 100% rename from assets/khronos-sponza/2411100444841994089.jpg rename to src/assets/khronos-sponza/2411100444841994089.jpg diff --git a/assets/khronos-sponza/2775690330959970771.jpg b/src/assets/khronos-sponza/2775690330959970771.jpg similarity index 100% rename from assets/khronos-sponza/2775690330959970771.jpg rename to src/assets/khronos-sponza/2775690330959970771.jpg diff --git a/assets/khronos-sponza/2969916736137545357.jpg b/src/assets/khronos-sponza/2969916736137545357.jpg similarity index 100% rename from assets/khronos-sponza/2969916736137545357.jpg rename to src/assets/khronos-sponza/2969916736137545357.jpg diff --git a/assets/khronos-sponza/332936164838540657.jpg b/src/assets/khronos-sponza/332936164838540657.jpg similarity index 100% rename from assets/khronos-sponza/332936164838540657.jpg rename to src/assets/khronos-sponza/332936164838540657.jpg diff --git a/assets/khronos-sponza/3371964815757888145.jpg b/src/assets/khronos-sponza/3371964815757888145.jpg similarity index 100% rename from assets/khronos-sponza/3371964815757888145.jpg rename to src/assets/khronos-sponza/3371964815757888145.jpg diff --git a/assets/khronos-sponza/3455394979645218238.jpg b/src/assets/khronos-sponza/3455394979645218238.jpg similarity index 100% rename from assets/khronos-sponza/3455394979645218238.jpg rename to src/assets/khronos-sponza/3455394979645218238.jpg diff --git a/assets/khronos-sponza/3628158980083700836.jpg b/src/assets/khronos-sponza/3628158980083700836.jpg similarity index 100% rename from assets/khronos-sponza/3628158980083700836.jpg rename to src/assets/khronos-sponza/3628158980083700836.jpg diff --git a/assets/khronos-sponza/3827035219084910048.jpg b/src/assets/khronos-sponza/3827035219084910048.jpg similarity index 100% rename from assets/khronos-sponza/3827035219084910048.jpg rename to src/assets/khronos-sponza/3827035219084910048.jpg diff --git a/assets/khronos-sponza/4477655471536070370.jpg b/src/assets/khronos-sponza/4477655471536070370.jpg similarity index 100% rename from assets/khronos-sponza/4477655471536070370.jpg rename to src/assets/khronos-sponza/4477655471536070370.jpg diff --git a/assets/khronos-sponza/4601176305987539675.jpg b/src/assets/khronos-sponza/4601176305987539675.jpg similarity index 100% rename from assets/khronos-sponza/4601176305987539675.jpg rename to src/assets/khronos-sponza/4601176305987539675.jpg diff --git a/assets/khronos-sponza/466164707995436622.jpg b/src/assets/khronos-sponza/466164707995436622.jpg similarity index 100% rename from assets/khronos-sponza/466164707995436622.jpg rename to src/assets/khronos-sponza/466164707995436622.jpg diff --git a/assets/khronos-sponza/4675343432951571524.jpg b/src/assets/khronos-sponza/4675343432951571524.jpg similarity index 100% rename from assets/khronos-sponza/4675343432951571524.jpg rename to src/assets/khronos-sponza/4675343432951571524.jpg diff --git a/assets/khronos-sponza/4871783166746854860.jpg b/src/assets/khronos-sponza/4871783166746854860.jpg similarity index 100% rename from assets/khronos-sponza/4871783166746854860.jpg rename to src/assets/khronos-sponza/4871783166746854860.jpg diff --git a/assets/khronos-sponza/4910669866631290573.jpg b/src/assets/khronos-sponza/4910669866631290573.jpg similarity index 100% rename from assets/khronos-sponza/4910669866631290573.jpg rename to src/assets/khronos-sponza/4910669866631290573.jpg diff --git a/assets/khronos-sponza/4975155472559461469.jpg b/src/assets/khronos-sponza/4975155472559461469.jpg similarity index 100% rename from assets/khronos-sponza/4975155472559461469.jpg rename to src/assets/khronos-sponza/4975155472559461469.jpg diff --git a/assets/khronos-sponza/5061699253647017043.png b/src/assets/khronos-sponza/5061699253647017043.png similarity index 100% rename from assets/khronos-sponza/5061699253647017043.png rename to src/assets/khronos-sponza/5061699253647017043.png diff --git a/assets/khronos-sponza/5792855332885324923.jpg b/src/assets/khronos-sponza/5792855332885324923.jpg similarity index 100% rename from assets/khronos-sponza/5792855332885324923.jpg rename to src/assets/khronos-sponza/5792855332885324923.jpg diff --git a/assets/khronos-sponza/5823059166183034438.jpg b/src/assets/khronos-sponza/5823059166183034438.jpg similarity index 100% rename from assets/khronos-sponza/5823059166183034438.jpg rename to src/assets/khronos-sponza/5823059166183034438.jpg diff --git a/assets/khronos-sponza/6047387724914829168.jpg b/src/assets/khronos-sponza/6047387724914829168.jpg similarity index 100% rename from assets/khronos-sponza/6047387724914829168.jpg rename to src/assets/khronos-sponza/6047387724914829168.jpg diff --git a/assets/khronos-sponza/6151467286084645207.jpg b/src/assets/khronos-sponza/6151467286084645207.jpg similarity index 100% rename from assets/khronos-sponza/6151467286084645207.jpg rename to src/assets/khronos-sponza/6151467286084645207.jpg diff --git a/assets/khronos-sponza/6593109234861095314.jpg b/src/assets/khronos-sponza/6593109234861095314.jpg similarity index 100% rename from assets/khronos-sponza/6593109234861095314.jpg rename to src/assets/khronos-sponza/6593109234861095314.jpg diff --git a/assets/khronos-sponza/6667038893015345571.jpg b/src/assets/khronos-sponza/6667038893015345571.jpg similarity index 100% rename from assets/khronos-sponza/6667038893015345571.jpg rename to src/assets/khronos-sponza/6667038893015345571.jpg diff --git a/assets/khronos-sponza/6772804448157695701.jpg b/src/assets/khronos-sponza/6772804448157695701.jpg similarity index 100% rename from assets/khronos-sponza/6772804448157695701.jpg rename to src/assets/khronos-sponza/6772804448157695701.jpg diff --git a/assets/khronos-sponza/7056944414013900257.jpg b/src/assets/khronos-sponza/7056944414013900257.jpg similarity index 100% rename from assets/khronos-sponza/7056944414013900257.jpg rename to src/assets/khronos-sponza/7056944414013900257.jpg diff --git a/assets/khronos-sponza/715093869573992647.jpg b/src/assets/khronos-sponza/715093869573992647.jpg similarity index 100% rename from assets/khronos-sponza/715093869573992647.jpg rename to src/assets/khronos-sponza/715093869573992647.jpg diff --git a/assets/khronos-sponza/7268504077753552595.jpg b/src/assets/khronos-sponza/7268504077753552595.jpg similarity index 100% rename from assets/khronos-sponza/7268504077753552595.jpg rename to src/assets/khronos-sponza/7268504077753552595.jpg diff --git a/assets/khronos-sponza/7441062115984513793.jpg b/src/assets/khronos-sponza/7441062115984513793.jpg similarity index 100% rename from assets/khronos-sponza/7441062115984513793.jpg rename to src/assets/khronos-sponza/7441062115984513793.jpg diff --git a/assets/khronos-sponza/755318871556304029.jpg b/src/assets/khronos-sponza/755318871556304029.jpg similarity index 100% rename from assets/khronos-sponza/755318871556304029.jpg rename to src/assets/khronos-sponza/755318871556304029.jpg diff --git a/assets/khronos-sponza/759203620573749278.jpg b/src/assets/khronos-sponza/759203620573749278.jpg similarity index 100% rename from assets/khronos-sponza/759203620573749278.jpg rename to src/assets/khronos-sponza/759203620573749278.jpg diff --git a/assets/khronos-sponza/7645212358685992005.jpg b/src/assets/khronos-sponza/7645212358685992005.jpg similarity index 100% rename from assets/khronos-sponza/7645212358685992005.jpg rename to src/assets/khronos-sponza/7645212358685992005.jpg diff --git a/assets/khronos-sponza/7815564343179553343.jpg b/src/assets/khronos-sponza/7815564343179553343.jpg similarity index 100% rename from assets/khronos-sponza/7815564343179553343.jpg rename to src/assets/khronos-sponza/7815564343179553343.jpg diff --git a/assets/khronos-sponza/8006627369776289000.png b/src/assets/khronos-sponza/8006627369776289000.png similarity index 100% rename from assets/khronos-sponza/8006627369776289000.png rename to src/assets/khronos-sponza/8006627369776289000.png diff --git a/assets/khronos-sponza/8051790464816141987.jpg b/src/assets/khronos-sponza/8051790464816141987.jpg similarity index 100% rename from assets/khronos-sponza/8051790464816141987.jpg rename to src/assets/khronos-sponza/8051790464816141987.jpg diff --git a/assets/khronos-sponza/8114461559286000061.jpg b/src/assets/khronos-sponza/8114461559286000061.jpg similarity index 100% rename from assets/khronos-sponza/8114461559286000061.jpg rename to src/assets/khronos-sponza/8114461559286000061.jpg diff --git a/assets/khronos-sponza/8481240838833932244.jpg b/src/assets/khronos-sponza/8481240838833932244.jpg similarity index 100% rename from assets/khronos-sponza/8481240838833932244.jpg rename to src/assets/khronos-sponza/8481240838833932244.jpg diff --git a/assets/khronos-sponza/8503262930880235456.jpg b/src/assets/khronos-sponza/8503262930880235456.jpg similarity index 100% rename from assets/khronos-sponza/8503262930880235456.jpg rename to src/assets/khronos-sponza/8503262930880235456.jpg diff --git a/assets/khronos-sponza/8747919177698443163.jpg b/src/assets/khronos-sponza/8747919177698443163.jpg similarity index 100% rename from assets/khronos-sponza/8747919177698443163.jpg rename to src/assets/khronos-sponza/8747919177698443163.jpg diff --git a/assets/khronos-sponza/8750083169368950601.jpg b/src/assets/khronos-sponza/8750083169368950601.jpg similarity index 100% rename from assets/khronos-sponza/8750083169368950601.jpg rename to src/assets/khronos-sponza/8750083169368950601.jpg diff --git a/assets/khronos-sponza/8773302468495022225.jpg b/src/assets/khronos-sponza/8773302468495022225.jpg similarity index 100% rename from assets/khronos-sponza/8773302468495022225.jpg rename to src/assets/khronos-sponza/8773302468495022225.jpg diff --git a/assets/khronos-sponza/8783994986360286082.jpg b/src/assets/khronos-sponza/8783994986360286082.jpg similarity index 100% rename from assets/khronos-sponza/8783994986360286082.jpg rename to src/assets/khronos-sponza/8783994986360286082.jpg diff --git a/assets/khronos-sponza/9288698199695299068.jpg b/src/assets/khronos-sponza/9288698199695299068.jpg similarity index 100% rename from assets/khronos-sponza/9288698199695299068.jpg rename to src/assets/khronos-sponza/9288698199695299068.jpg diff --git a/assets/khronos-sponza/9916269861720640319.jpg b/src/assets/khronos-sponza/9916269861720640319.jpg similarity index 100% rename from assets/khronos-sponza/9916269861720640319.jpg rename to src/assets/khronos-sponza/9916269861720640319.jpg diff --git a/assets/khronos-sponza/Sponza.bin b/src/assets/khronos-sponza/Sponza.bin similarity index 100% rename from assets/khronos-sponza/Sponza.bin rename to src/assets/khronos-sponza/Sponza.bin diff --git a/assets/khronos-sponza/Sponza.gltf b/src/assets/khronos-sponza/Sponza.gltf similarity index 100% rename from assets/khronos-sponza/Sponza.gltf rename to src/assets/khronos-sponza/Sponza.gltf diff --git a/assets/khronos-sponza/white.png b/src/assets/khronos-sponza/white.png similarity index 100% rename from assets/khronos-sponza/white.png rename to src/assets/khronos-sponza/white.png diff --git a/assets/quad.obj b/src/assets/quad.obj similarity index 100% rename from assets/quad.obj rename to src/assets/quad.obj diff --git a/assets/smooth_vase.obj b/src/assets/smooth_vase.obj similarity index 100% rename from assets/smooth_vase.obj rename to src/assets/smooth_vase.obj diff --git a/assets/textures/DebugTexture.png b/src/assets/textures/DebugTexture.png similarity index 100% rename from assets/textures/DebugTexture.png rename to src/assets/textures/DebugTexture.png diff --git a/assets/textures/TestingHeightmap.png b/src/assets/textures/TestingHeightmap.png similarity index 100% rename from assets/textures/TestingHeightmap.png rename to src/assets/textures/TestingHeightmap.png diff --git a/assets/up.png b/src/assets/up.png similarity index 100% rename from assets/up.png rename to src/assets/up.png diff --git a/src/engine/shaders/Compiler.cpp b/src/engine/shaders/Compiler.cpp new file mode 100644 index 0000000..a1e60d6 --- /dev/null +++ b/src/engine/shaders/Compiler.cpp @@ -0,0 +1,94 @@ +// +// Created by kj16609 on 8/5/24. +// + +#include "Compiler.hpp" + +#include + +#include "engine/FGL_DEFINES.hpp" +#include "engine/logging/logging.hpp" + +namespace fgl::engine +{ + + inline static std::unique_ptr< shaderc::Compiler > compiler; + + shaderc::Compiler& getInstance() + { + if ( !compiler ) + { + compiler = std::make_unique< shaderc::Compiler >(); + } + + FGL_ASSERT( compiler ); + + return *compiler; + } + + shaderc_shader_kind getShaderKindFromName( const std::string_view str ) + { + if ( str.ends_with( ".frag" ) ) return shaderc_shader_kind::shaderc_fragment_shader; + if ( str.ends_with( ".vert" ) ) return shaderc_shader_kind::shaderc_vertex_shader; + + throw std::runtime_error( "Unknown shader type!" ); + } + + std::vector< std::byte > compilerShader( const std::string_view input_name, std::vector< std::byte >& input ) + { + shaderc::CompileOptions options; +#ifndef NDEBUG + options.SetOptimizationLevel( shaderc_optimization_level_zero ); +#else + options.SetOptimizationLevel( shaderc_optimization_level_performance ); +#endif + + const shaderc_shader_kind kind { getShaderKindFromName( input_name ) }; + + const auto result { compiler->CompileGlslToSpvAssembly( + reinterpret_cast< const char* >( input.data() ), input.size(), kind, input_name.data(), "main", options ) }; + + switch ( result.GetCompilationStatus() ) + { + case shaderc_compilation_status_success: + break; + default: + [[fallthrough]]; + case shaderc_compilation_status_invalid_stage: + [[fallthrough]]; + case shaderc_compilation_status_compilation_error: + [[fallthrough]]; + case shaderc_compilation_status_internal_error: + [[fallthrough]]; + case shaderc_compilation_status_null_result_object: + [[fallthrough]]; + case shaderc_compilation_status_invalid_assembly: + [[fallthrough]]; + case shaderc_compilation_status_validation_error: + [[fallthrough]]; + case shaderc_compilation_status_transformation_error: + [[fallthrough]]; + case shaderc_compilation_status_configuration_error: + log::critical( "Failed to compile shader {} with error: {}", result.GetErrorMessage() ); + throw std::runtime_error( "Failed to compile shader" ); + break; + } + + std::vector< std::byte > output {}; + output.reserve( result.cend() - result.cbegin() ); + + for ( const auto& word : result ) + { + output.insert( + output.end(), + reinterpret_cast< const std::byte* >( &word ), + reinterpret_cast< const std::byte* >( &word ) + sizeof( std::remove_reference_t< decltype( word ) > ) ); + } + + // Should be a multiple of 4 + assert( output.size() % 4 == 0 ); + + return output; + } + +} // namespace fgl::engine diff --git a/src/engine/shaders/Compiler.hpp b/src/engine/shaders/Compiler.hpp new file mode 100644 index 0000000..2283411 --- /dev/null +++ b/src/engine/shaders/Compiler.hpp @@ -0,0 +1,16 @@ +// +// Created by kj16609 on 8/5/24. +// + +#pragma once + +#include + +namespace fgl::engine +{ + + shaderc::Compiler& getInstance(); + + std::vector< std::byte > compileShader( const std::string_view str, std::vector< std::byte >& input ); + +} // namespace fgl::engine \ No newline at end of file diff --git a/src/shaders/CMakeLists.txt b/src/shaders/CMakeLists.txt new file mode 100644 index 0000000..4f98f17 --- /dev/null +++ b/src/shaders/CMakeLists.txt @@ -0,0 +1,40 @@ + + + +file(GLOB_RECURSE SHADERS + "${CMAKE_CURRENT_SOURCE_DIR}/**.frag" + "${CMAKE_CURRENT_SOURCE_DIR}/**.vert" + "${CMAKE_CURRENT_SOURCE_DIR}/**.tesc" + "${CMAKE_CURRENT_SOURCE_DIR}/**.tese" + "${CMAKE_CURRENT_SOURCE_DIR}/**.glsl" +) + +foreach (SHADER IN LISTS SHADERS) + get_filename_component(FILENAME ${SHADER} NAME) + get_filename_component(FILE_DIRECTORY ${SHADER} DIRECTORY) + file(RELATIVE_PATH REL_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_DIRECTORY}) + + if (NOT REL_PATH STREQUAL "") + set(REL_PATH ${REL_PATH}/) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/shaders/${REL_PATH}) + endif () + + set(OUT_DIR ${CMAKE_BINARY_DIR}/bin/shaders/${REL_PATH}) + set(OUT_PATH ${OUT_DIR}${FILENAME}) + + #add_custom_command(OUTPUT ${OUT_DIR} + # COMMAND ${CMAKE_COMMAND} -E make_directory ${OUT_DIR} COMMENT "Creating directory ${OUT_DIR}") + + #add_custom_command(OUTPUT ${OUT_PATH} + # COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER_DEBUG_FLAGS} ${SHADER} -o ${OUT_PATH} DEPENDS ${SHADER} ${OUT_DIR} + # COMMENT "Compiling ${SHADER} ") + + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/shaders/${FILENAME} + COMMAND ${CMAKE_COMMAND} -E copy ${SHADER} ${OUT_PATH} DEPENDS ${SHADER} + COMMENT "Copying ${ASSET} to ${OUT_PATH}") + + list(APPEND SPV_SHADERS ${CMAKE_BINARY_DIR}/bin/shaders/${FILENAME}) + list(APPEND ADDITIONAL_CLEAN_FILES ${OUT_PATH}) +endforeach () + +add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) diff --git a/shaders/composition.frag b/src/shaders/composition.frag similarity index 100% rename from shaders/composition.frag rename to src/shaders/composition.frag diff --git a/shaders/fullscreen.vert b/src/shaders/fullscreen.vert similarity index 100% rename from shaders/fullscreen.vert rename to src/shaders/fullscreen.vert diff --git a/shaders/gui-compose.frag b/src/shaders/gui-compose.frag similarity index 100% rename from shaders/gui-compose.frag rename to src/shaders/gui-compose.frag diff --git a/shaders/terrain/terrain.frag b/src/shaders/terrain/terrain.frag similarity index 100% rename from shaders/terrain/terrain.frag rename to src/shaders/terrain/terrain.frag diff --git a/shaders/terrain/terrain.tesc b/src/shaders/terrain/terrain.tesc similarity index 100% rename from shaders/terrain/terrain.tesc rename to src/shaders/terrain/terrain.tesc diff --git a/shaders/terrain/terrain.tese b/src/shaders/terrain/terrain.tese similarity index 100% rename from shaders/terrain/terrain.tese rename to src/shaders/terrain/terrain.tese diff --git a/shaders/terrain/terrain.vert b/src/shaders/terrain/terrain.vert similarity index 100% rename from shaders/terrain/terrain.vert rename to src/shaders/terrain/terrain.vert diff --git a/shaders/textured-gbuffer.frag b/src/shaders/textured-gbuffer.frag similarity index 69% rename from shaders/textured-gbuffer.frag rename to src/shaders/textured-gbuffer.frag index 67e725d..07b3276 100644 --- a/shaders/textured-gbuffer.frag +++ b/src/shaders/textured-gbuffer.frag @@ -5,7 +5,9 @@ layout (location = 0) in vec3 in_normal; layout (location = 1) in vec2 in_tex_coord; layout (location = 2) in vec3 in_world_pos; -layout (location = 3) in flat uint in_tex_idx; +layout (location = 3) in flat uint in_albedo_idx; +layout (location = 4) in flat uint in_normal_idx; +layout (location = 5) in flat uint in_metallic_roughness_idx; layout (location = 0) out vec4 out_position; layout (location = 1) out vec4 out_normal; @@ -28,15 +30,27 @@ float linearDepth(float depth) return (2.0f * NEAR_PLANE * FAR_PLANE) / (FAR_PLANE + NEAR_PLANE - z * (FAR_PLANE - NEAR_PLANE)); } +uint INVALID_TEX_ID = 0; + void main() { out_position = vec4(in_world_pos, 1.0f); - vec3 N = normalize(in_normal); + + vec3 N = vec3(0.0f); + + if (in_normal_idx == INVALID_TEX_ID) + { + N = normalize(in_normal); + } + else + { + N = texture(tex[in_normal_idx], in_tex_coord).xyz; + } out_normal = vec4(N, 1.0); - vec4 tex_value = texture(tex[in_tex_idx], in_tex_coord); + vec4 tex_value = texture(tex[in_albedo_idx], in_tex_coord); if (tex_value.a < 1.0) { diff --git a/shaders/textured-gbuffer.vert b/src/shaders/textured-gbuffer.vert similarity index 68% rename from shaders/textured-gbuffer.vert rename to src/shaders/textured-gbuffer.vert index 966eeb5..df0437c 100644 --- a/shaders/textured-gbuffer.vert +++ b/src/shaders/textured-gbuffer.vert @@ -7,12 +7,16 @@ layout (location = 2) in vec3 normal; layout (location = 3) in vec2 uv; layout (location = 4) in mat4 instance_model_matrix;// 4, 5, 6, 7 -layout (location = 8) in uint in_texture_id; +layout (location = 8) in uint in_albedo_id; +layout (location = 9) in uint in_normal_id; +layout (location = 10) in uint in_metallic_roughness_id; layout (location = 0) out vec3 out_normal; layout (location = 1) out vec2 out_tex_coord; layout (location = 2) out vec3 out_world_pos; -layout (location = 3) out flat uint out_texture_idx; +layout (location = 3) out flat uint out_albedo_id; +layout (location = 4) out flat uint out_normal_id; +layout (location = 5) out flat uint out_metallic_roughness_id; layout (set = 1, binding = 0) uniform CameraInfo { mat4 projection; @@ -33,5 +37,6 @@ void main() { out_tex_coord = uv; - out_texture_idx = in_texture_id; + out_albedo_id = in_albedo_id; + out_metallic_roughness_id = in_metallic_roughness_id; } \ No newline at end of file diff --git a/shaders/textureless-gbuffer.frag b/src/shaders/textureless-gbuffer.frag similarity index 100% rename from shaders/textureless-gbuffer.frag rename to src/shaders/textureless-gbuffer.frag diff --git a/shaders/textureless-gbuffer.vert b/src/shaders/textureless-gbuffer.vert similarity index 100% rename from shaders/textureless-gbuffer.vert rename to src/shaders/textureless-gbuffer.vert