builds now with VCPKG and MSAA works
This commit is contained in:
@@ -31,6 +31,7 @@ bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
vcpkg_installed/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
|
||||
@@ -40,3 +40,6 @@
|
||||
[submodule "external/odeint"]
|
||||
path = external/odeint
|
||||
url = https://github.com/headmyshoulder/odeint-v2.git
|
||||
[submodule "external/vcpkg"]
|
||||
path = external/vcpkg
|
||||
url = https://github.com/Microsoft/vcpkg.git
|
||||
|
||||
+23
-41
@@ -1,5 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.7...3.23)
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.12)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
endif()
|
||||
@@ -15,24 +14,12 @@ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
|
||||
set(ENGINE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/src/Engine)
|
||||
set(EXTERNAL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/external)
|
||||
set(ASSIMP_ROOT ${EXTERNAL_ROOT}/assimp)
|
||||
set(BOOST_ROOT ${EXTERNAL_ROOT}/boost)
|
||||
set(SLANG_ROOT ${EXTERNAL_ROOT}/slang)
|
||||
set(GLM_ROOT ${EXTERNAL_ROOT}/glm)
|
||||
set(GLFW_ROOT ${EXTERNAL_ROOT}/glfw)
|
||||
set(CRCPP_ROOT ${EXTERNAL_ROOT}/CRCpp)
|
||||
set(JSON_ROOT ${EXTERNAL_ROOT}/json)
|
||||
set(KTX_ROOT ${EXTERNAL_ROOT}/ktx)
|
||||
set(STB_ROOT ${EXTERNAL_ROOT}/stb)
|
||||
set(TTFPARSER_ROOT ${EXTERNAL_ROOT}/ttf-parser)
|
||||
set(FREETYPE_ROOT ${EXTERNAL_ROOT}/freetype)
|
||||
set(SPIRV_ROOT ${EXTERNAL_ROOT}/SPIRV-Cross)
|
||||
set(ENTT_ROOT ${EXTERNAL_ROOT}/entt)
|
||||
set(ODEINT_ROOT ${EXTERNAL_ROOT}/odeint)
|
||||
set(THREADPOOL_ROOT ${EXTERNAL_ROOT}/thread-pool)
|
||||
set(ZLIB_ROOT ${EXTERNAL_ROOT}/zlib)
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/)
|
||||
set(CMAKE_TOOLCHAIN_FILE ${EXTERNAL_ROOT}/vcpkg/scripts/buildsystems/vcpkg.cmake)
|
||||
|
||||
set(CRCPP_ROOT ${EXTERNAL_ROOT}/CRCpp)
|
||||
set(TTFPARSER_ROOT ${EXTERNAL_ROOT}/ttf-parser)
|
||||
|
||||
set(Boost_NO_WARN_NEW_VERSIONS 1)
|
||||
|
||||
project (Seele)
|
||||
@@ -50,6 +37,15 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
||||
|
||||
find_package(Vulkan REQUIRED)
|
||||
find_package(assimp CONFIG REQUIRED)
|
||||
find_package(Stb REQUIRED)
|
||||
find_package(thread-pool CONFIG REQUIRED)
|
||||
find_package(EnTT CONFIG REQUIRED)
|
||||
find_package(FreeType CONFIG REQUIRED)
|
||||
find_package(glfw3 CONFIG REQUIRED)
|
||||
find_package(glm CONFIG REQUIRED)
|
||||
find_package(Ktx CONFIG REQUIRED)
|
||||
find_package(nlohmann_json CONFIG REQUIRED)
|
||||
|
||||
if(UNIX)
|
||||
find_package(Threads REQUIRED)
|
||||
@@ -66,17 +62,14 @@ target_include_directories(Engine PRIVATE src/Engine)
|
||||
target_link_libraries(Engine PUBLIC Vulkan::Vulkan)
|
||||
target_link_libraries(Engine PUBLIC EnTT::EnTT)
|
||||
target_link_libraries(Engine PUBLIC glfw)
|
||||
target_link_libraries(Engine PUBLIC glm)
|
||||
target_link_libraries(Engine PUBLIC glm::glm)
|
||||
target_link_libraries(Engine PUBLIC freetype)
|
||||
target_link_libraries(Engine PUBLIC slang)
|
||||
target_link_libraries(Engine PUBLIC assimp)
|
||||
target_link_libraries(Engine PUBLIC ktx)
|
||||
target_link_libraries(Engine PUBLIC stb)
|
||||
target_link_libraries(Engine PUBLIC assimp::assimp)
|
||||
target_link_libraries(Engine PUBLIC KTX::ktx)
|
||||
target_link_libraries(Engine PUBLIC nlohmann_json::nlohmann_json)
|
||||
target_link_libraries(Engine PUBLIC dp::thread-pool)
|
||||
target_link_libraries(Engine PUBLIC crcpp)
|
||||
target_link_libraries(Engine PUBLIC odeint)
|
||||
target_link_libraries(Engine PUBLIC zlib)
|
||||
target_link_libraries(Engine PUBLIC shader-slang)
|
||||
if(UNIX)
|
||||
target_link_libraries(Engine PUBLIC Threads::Threads)
|
||||
target_link_libraries(Engine PUBLIC dl)
|
||||
@@ -85,6 +78,7 @@ endif()
|
||||
add_executable(Editor "")
|
||||
target_link_libraries(Editor PRIVATE Engine)
|
||||
target_include_directories(Editor PRIVATE src/Editor)
|
||||
target_include_directories(Editor PRIVATE ${Stb_INCLUDE_DIR})
|
||||
target_compile_definitions(Editor PRIVATE EDITOR=1)
|
||||
|
||||
add_executable(AssetViewer "")
|
||||
@@ -109,8 +103,8 @@ target_precompile_headers(Engine
|
||||
|
||||
if(MSVC)
|
||||
set(_CRT_SECURE_NO_WARNINGS)
|
||||
target_compile_options(Engine PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG "/WX-")
|
||||
target_compile_options(Editor PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG "/WX-")
|
||||
target_compile_options(Engine PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG /wd4505)
|
||||
target_compile_options(Editor PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG)
|
||||
target_sources(Engine INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Seele.natvis>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/Seele.natvis>
|
||||
@@ -131,7 +125,7 @@ if(WIN32)
|
||||
add_custom_target(dll_copy ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_RUNTIME_DLLS:Engine> $<TARGET_FILE_DIR:Editor>
|
||||
COMMAND_EXPAND_LISTS
|
||||
DEPENDS Editor slang-build)
|
||||
DEPENDS Editor)
|
||||
else()
|
||||
add_custom_target(dll_copy ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E true)
|
||||
@@ -140,26 +134,14 @@ endif()
|
||||
add_custom_target(SeeleEngine ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/res $<TARGET_FILE_DIR:Engine>
|
||||
COMMAND_EXPAND_LISTS
|
||||
DEPENDS Editor slang-build dll_copy)
|
||||
DEPENDS Editor dll_copy)
|
||||
|
||||
install(
|
||||
TARGETS
|
||||
AssetViewer
|
||||
Editor
|
||||
Engine
|
||||
EnTT
|
||||
glfw
|
||||
glm
|
||||
freetype
|
||||
assimp
|
||||
ktx
|
||||
stb
|
||||
crcpp
|
||||
nlohmann_json
|
||||
ThreadPool
|
||||
zlib
|
||||
IrrXML
|
||||
odeint
|
||||
EXPORT
|
||||
EngineTargets
|
||||
FILE_SET HEADERS
|
||||
|
||||
+1
-2
@@ -34,8 +34,7 @@
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": "",
|
||||
"inheritEnvironments": [ "msvc_x64" ],
|
||||
"intelliSenseMode": "windows-msvc-x64",
|
||||
"variables": []
|
||||
"intelliSenseMode": "windows-msvc-x64"
|
||||
}
|
||||
]
|
||||
}
|
||||
+180
-170
@@ -1,154 +1,177 @@
|
||||
include (ExternalProject)
|
||||
|
||||
#--------------ZLIB------------------------------
|
||||
add_subdirectory(${ZLIB_ROOT} ${ZLIB_ROOT})
|
||||
#add_subdirectory(${ZLIB_ROOT} ${ZLIB_ROOT})
|
||||
|
||||
#--------------FreeType------------------------------
|
||||
add_subdirectory(${FREETYPE_ROOT})
|
||||
#add_subdirectory(${FREETYPE_ROOT})
|
||||
|
||||
#------------ASSIMP---------------
|
||||
set(ASSIMP_BUILD_TESTS OFF CACHE INTERNAL "")
|
||||
set(ASSIMP_BUILD_SAMPLES OFF CACHE INTERNAL "")
|
||||
set(ASSIMP_BUILD_OVERALLS OFF CACHE INTERNAL "")
|
||||
set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE INTERNAL "")
|
||||
add_subdirectory(${ASSIMP_ROOT})
|
||||
target_compile_definitions(assimp PRIVATE _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
|
||||
if(WIN32)
|
||||
target_compile_options(assimp PRIVATE /WX- /MP14)
|
||||
else()
|
||||
target_compile_options(assimp PRIVATE -Wno-error -fPIC)
|
||||
target_compile_options(IrrXML PRIVATE -fPIC)
|
||||
endif()
|
||||
#set(ASSIMP_BUILD_TESTS OFF CACHE INTERNAL "")
|
||||
#set(ASSIMP_BUILD_SAMPLES OFF CACHE INTERNAL "")
|
||||
#set(ASSIMP_BUILD_OVERALLS OFF CACHE INTERNAL "")
|
||||
#set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE INTERNAL "")
|
||||
#add_subdirectory(${ASSIMP_ROOT})
|
||||
#target_compile_definitions(assimp PRIVATE _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
|
||||
#if(WIN32)
|
||||
# target_compile_options(assimp PRIVATE /WX- /MP14)
|
||||
#else()
|
||||
# target_compile_options(assimp PRIVATE -Wno-error -fPIC)
|
||||
# target_compile_options(IrrXML PRIVATE -fPIC)
|
||||
#endif()
|
||||
|
||||
#-----------------KTX----------------------------
|
||||
set(KTX_FEATURE_TESTS off)
|
||||
set(KTX_FEATURE_TOOLS off)
|
||||
|
||||
add_subdirectory(${KTX_ROOT})
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(ktx PRIVATE /WX-)
|
||||
else()
|
||||
target_compile_options(ktx PRIVATE -Wno-error)
|
||||
endif()
|
||||
#set(KTX_FEATURE_TESTS off)
|
||||
#set(KTX_FEATURE_TOOLS off)
|
||||
#
|
||||
#add_subdirectory(${KTX_ROOT})
|
||||
#
|
||||
#if(MSVC)
|
||||
# target_compile_options(ktx PRIVATE /WX-)
|
||||
#else()
|
||||
# target_compile_options(ktx PRIVATE -Wno-error)
|
||||
#endif()
|
||||
|
||||
#--------------------JSON------------------
|
||||
set(JSON_MultipleHeaders ON CACHE INTERNAL "")
|
||||
set(JSON_BuildTests OFF CACHE INTERNAL "")
|
||||
set(JSON_Install ON CACHE INTERNAL "")
|
||||
|
||||
add_subdirectory(${JSON_ROOT})
|
||||
#set(JSON_MultipleHeaders ON CACHE INTERNAL "")
|
||||
#set(JSON_BuildTests OFF CACHE INTERNAL "")
|
||||
#set(JSON_Install ON CACHE INTERNAL "")
|
||||
#
|
||||
#add_subdirectory(${JSON_ROOT})
|
||||
|
||||
|
||||
#--------------GLFW------------------------------
|
||||
set(ENKITS_BUILD_EXAMPLES OFF CACHE BOOL "Build basic example applications" )
|
||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "GLFW lib only" )
|
||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "GLFW lib only" )
|
||||
set(GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW lib only" )
|
||||
set(GLFW_BUILD_INSTALL OFF CACHE BOOL "GLFW lib only" )
|
||||
set(GLFW_VULKAN_STATIC OFF CACHE BOOL "GLFW vulkan static")
|
||||
|
||||
add_subdirectory(${GLFW_ROOT})
|
||||
#set(ENKITS_BUILD_EXAMPLES OFF CACHE BOOL "Build basic example applications" )
|
||||
#set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "GLFW lib only" )
|
||||
#set(GLFW_BUILD_TESTS OFF CACHE BOOL "GLFW lib only" )
|
||||
#set(GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW lib only" )
|
||||
#set(GLFW_BUILD_INSTALL OFF CACHE BOOL "GLFW lib only" )
|
||||
#set(GLFW_VULKAN_STATIC OFF CACHE BOOL "GLFW vulkan static")
|
||||
#
|
||||
#add_subdirectory(${GLFW_ROOT})
|
||||
|
||||
#--------------EnTT------------------------------
|
||||
add_subdirectory(${ENTT_ROOT})
|
||||
#add_subdirectory(${ENTT_ROOT})
|
||||
|
||||
#--------------thread-pool------------------------------
|
||||
set(TP_BUILD_TESTS OFF)
|
||||
set(TP_BUILD_EXAMPLES OFF)
|
||||
set(TP_BUILD_BENCHMARKS OFF)
|
||||
#set(TP_BUILD_TESTS OFF)
|
||||
#set(TP_BUILD_EXAMPLES OFF)
|
||||
#set(TP_BUILD_BENCHMARKS OFF)
|
||||
#
|
||||
#add_subdirectory(${THREADPOOL_ROOT})
|
||||
|
||||
add_subdirectory(${THREADPOOL_ROOT})
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(ThreadPool INTERFACE /W0)
|
||||
endif()
|
||||
#if(MSVC)
|
||||
# target_compile_options(ThreadPool INTERFACE /W0)
|
||||
#endif()
|
||||
|
||||
#--------------SLang------------------------------
|
||||
string(TOLOWER release_x64 SLANG_CONFIG)
|
||||
add_library(shader-slang-glslang SHARED IMPORTED)
|
||||
add_library(shader-slang SHARED IMPORTED)
|
||||
if(WIN32)
|
||||
string(TOLOWER ${SLANG_ROOT}/bin/windows-x64/release SLANG_BINARY_DIR)
|
||||
ExternalProject_Add(slang-build
|
||||
SOURCE_DIR ${SLANG_ROOT}
|
||||
BINARY_DIR ${SLANG_ROOT}
|
||||
CONFIGURE_COMMAND ${SLANG_ROOT}/premake.bat vs2019 --file=${SLANG_ROOT}/premake5.lua --arch=x64 --deps=true
|
||||
BUILD_COMMAND msbuild -p:PlatformToolset=v143 -p:Configuration=Release -p:Platform=x64 slang.sln
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
elseif(UNIX)
|
||||
set(SLANG_BINARY_DIR ${SLANG_ROOT}/bin/linux-x64/release)
|
||||
ExternalProject_Add(slang-build
|
||||
SOURCE_DIR ${SLANG_ROOT}
|
||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
||||
CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/premake5 --file=${CMAKE_SOURCE_DIR}/external/slang/premake5.lua gmake2 --arch=x64 --deps=true --build-location=build/linux
|
||||
BUILD_COMMAND make -C ${CMAKE_SOURCE_DIR}/external/slang/build/linux config=${SLANG_CONFIG}
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(slang-llvm SHARED IMPORTED)
|
||||
if(WIN32)
|
||||
target_link_libraries(slang-llvm INTERFACE
|
||||
$<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
)
|
||||
set_target_properties(slang-llvm PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-llvm.dll)
|
||||
set(SLANG_ROOT ${EXTERNAL_ROOT}/vcpkg/packages/shader-slang_x64-windows/)
|
||||
set_target_properties(shader-slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_ROOT}/bin/slang-glslang.dll)
|
||||
set_target_properties(shader-slang-glslang PROPERTIES IMPORTED_IMPLIB ${SLANG_ROOT}/lib/slang.lib)
|
||||
set_target_properties(shader-slang PROPERTIES IMPORTED_LOCATION ${SLANG_ROOT}/bin/slang.dll)
|
||||
set_target_properties(shader-slang PROPERTIES IMPORTED_IMPLIB ${SLANG_ROOT}/lib/slang.lib)
|
||||
target_link_libraries(shader-slang INTERFACE shader-slang-glslang)
|
||||
install(FILES
|
||||
${SLANG_ROOT}/bin/slang-glslang.dll
|
||||
${SLANG_ROOT}/bin/slang.dll
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
install(FILES
|
||||
${SLANG_ROOT}/lib/slang.lib
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
|
||||
else()
|
||||
set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-llvm.so)
|
||||
|
||||
endif()
|
||||
|
||||
add_library(slang-glslang SHARED IMPORTED)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(slang-glslang INTERFACE
|
||||
$<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
)
|
||||
set_target_properties(slang-glslang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-glslang.dll)
|
||||
else()
|
||||
set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-glslang.so)
|
||||
endif()
|
||||
|
||||
add_library(slang SHARED IMPORTED)
|
||||
|
||||
target_include_directories(slang INTERFACE
|
||||
$<BUILD_INTERFACE:${SLANG_ROOT}/>
|
||||
target_include_directories(shader-slang INTERFACE
|
||||
$<BUILD_INTERFACE:${SLANG_ROOT}/include/>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
if(WIN32)
|
||||
target_link_libraries(slang INTERFACE
|
||||
$<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
)
|
||||
set_target_properties(slang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang.dll)
|
||||
else()
|
||||
set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang.so)
|
||||
endif()
|
||||
target_link_libraries(slang INTERFACE slang-glslang)
|
||||
target_link_libraries(slang INTERFACE slang-llvm)
|
||||
|
||||
install(DIRECTORY
|
||||
${SLANG_ROOT}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
FILES_MATCHING PATTERN "*.h"
|
||||
)
|
||||
|
||||
install(FILES
|
||||
$<TARGET_PROPERTY:slang,IMPORTED_IMPLIB>
|
||||
$<TARGET_PROPERTY:slang-glslang,IMPORTED_IMPLIB>
|
||||
$<TARGET_PROPERTY:slang-llvm,IMPORTED_IMPLIB>
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
|
||||
)
|
||||
|
||||
install(FILES
|
||||
$<TARGET_PROPERTY:slang,IMPORTED_LOCATION>
|
||||
$<TARGET_PROPERTY:slang-glslang,IMPORTED_LOCATION>
|
||||
$<TARGET_PROPERTY:slang-llvm,IMPORTED_LOCATION>
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
|
||||
)
|
||||
#string(TOLOWER release_x64 SLANG_CONFIG)
|
||||
#if(WIN32)
|
||||
#string(TOLOWER ${SLANG_ROOT}/bin/windows-x64/release SLANG_BINARY_DIR)
|
||||
#ExternalProject_Add(slang-build
|
||||
# SOURCE_DIR ${SLANG_ROOT}
|
||||
# BINARY_DIR ${SLANG_ROOT}
|
||||
# CONFIGURE_COMMAND ${SLANG_ROOT}/premake.bat vs2019 --file=${SLANG_ROOT}/premake5.lua --arch=x64 --deps=true
|
||||
# BUILD_COMMAND msbuild -p:PlatformToolset=v143 -p:Configuration=Release -p:Platform=x64 slang.sln
|
||||
# INSTALL_COMMAND ""
|
||||
#)
|
||||
#elseif(UNIX)
|
||||
#set(SLANG_BINARY_DIR ${SLANG_ROOT}/bin/linux-x64/release)
|
||||
#ExternalProject_Add(slang-build
|
||||
# SOURCE_DIR ${SLANG_ROOT}
|
||||
# BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
||||
# CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/premake5 --file=${CMAKE_SOURCE_DIR}/external/slang/premake5.lua gmake2 --arch=x64 --deps=true --build-location=build/linux
|
||||
# BUILD_COMMAND make -C ${CMAKE_SOURCE_DIR}/external/slang/build/linux config=${SLANG_CONFIG}
|
||||
# INSTALL_COMMAND ""
|
||||
#)
|
||||
#endif()
|
||||
#
|
||||
#add_library(slang-llvm SHARED IMPORTED)
|
||||
#if(WIN32)
|
||||
# target_link_libraries(slang-llvm INTERFACE
|
||||
# $<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
# $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
# )
|
||||
# set_target_properties(slang-llvm PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
# set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-llvm.dll)
|
||||
#else()
|
||||
# set_target_properties(slang-llvm PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-llvm.so)
|
||||
#endif()
|
||||
#
|
||||
#add_library(slang-glslang SHARED IMPORTED)
|
||||
#
|
||||
#if(WIN32)
|
||||
# target_link_libraries(slang-glslang INTERFACE
|
||||
# $<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
# $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
# )
|
||||
# set_target_properties(slang-glslang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
# set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang-glslang.dll)
|
||||
#else()
|
||||
# set_target_properties(slang-glslang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang-glslang.so)
|
||||
#endif()
|
||||
#
|
||||
#add_library(slang SHARED IMPORTED)
|
||||
#
|
||||
#target_include_directories(slang INTERFACE
|
||||
# $<BUILD_INTERFACE:${SLANG_ROOT}/>
|
||||
# $<INSTALL_INTERFACE:include>
|
||||
#)
|
||||
#if(WIN32)
|
||||
# target_link_libraries(slang INTERFACE
|
||||
# $<BUILD_INTERFACE:${SLANG_BINARY_DIR}/slang.lib>
|
||||
# $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/lib/slang.lib>
|
||||
# )
|
||||
# set_target_properties(slang PROPERTIES IMPORTED_IMPLIB ${SLANG_BINARY_DIR}/slang.lib)
|
||||
# set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/slang.dll)
|
||||
#else()
|
||||
# set_target_properties(slang PROPERTIES IMPORTED_LOCATION ${SLANG_BINARY_DIR}/libslang.so)
|
||||
#endif()
|
||||
#target_link_libraries(slang INTERFACE slang-glslang)
|
||||
#target_link_libraries(slang INTERFACE slang-llvm)
|
||||
#
|
||||
#install(DIRECTORY
|
||||
# ${SLANG_ROOT}
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
# FILES_MATCHING PATTERN "*.h"
|
||||
#)
|
||||
#
|
||||
#install(FILES
|
||||
# $<TARGET_PROPERTY:slang,IMPORTED_IMPLIB>
|
||||
# $<TARGET_PROPERTY:slang-glslang,IMPORTED_IMPLIB>
|
||||
# $<TARGET_PROPERTY:slang-llvm,IMPORTED_IMPLIB>
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
|
||||
#)
|
||||
#
|
||||
#install(FILES
|
||||
# $<TARGET_PROPERTY:slang,IMPORTED_LOCATION>
|
||||
# $<TARGET_PROPERTY:slang-glslang,IMPORTED_LOCATION>
|
||||
# $<TARGET_PROPERTY:slang-llvm,IMPORTED_LOCATION>
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
|
||||
#)
|
||||
|
||||
#--------------CRC++------------------------------
|
||||
add_library(crcpp INTERFACE)
|
||||
@@ -164,48 +187,35 @@ install(FILES
|
||||
)
|
||||
|
||||
#--------------GLM------------------------------
|
||||
add_library(glm INTERFACE)
|
||||
target_include_directories(glm INTERFACE
|
||||
$<BUILD_INTERFACE:${GLM_ROOT}>
|
||||
$<INSTALL_INTERFACE:include/glm>
|
||||
)
|
||||
|
||||
install(DIRECTORY
|
||||
${GLM_ROOT}/glm
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
FILES_MATCHING PATTERN "*.h*"
|
||||
)
|
||||
|
||||
install(DIRECTORY
|
||||
${GLM_ROOT}/glm
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
FILES_MATCHING PATTERN "*.inl"
|
||||
)
|
||||
|
||||
#--------------STB-----------------------------------
|
||||
add_library(stb INTERFACE)
|
||||
|
||||
target_include_directories(stb INTERFACE
|
||||
$<BUILD_INTERFACE:${STB_ROOT}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
install(DIRECTORY
|
||||
${STB_ROOT}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
FILES_MATCHING PATTERN "*.h"
|
||||
)
|
||||
|
||||
#--------------ODEINT-----------------------------------
|
||||
add_library(odeint INTERFACE)
|
||||
|
||||
target_include_directories(odeint INTERFACE
|
||||
$<BUILD_INTERFACE:${ODEINT_ROOT}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
install(DIRECTORY
|
||||
${ODEINT_ROOT}
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
FILES_MATCHING PATTERN "*.hpp"
|
||||
)
|
||||
#add_library(glm INTERFACE)
|
||||
#target_include_directories(glm INTERFACE
|
||||
# $<BUILD_INTERFACE:${GLM_ROOT}>
|
||||
# $<INSTALL_INTERFACE:include/glm>
|
||||
#)
|
||||
#
|
||||
#install(DIRECTORY
|
||||
# ${GLM_ROOT}/glm
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
# FILES_MATCHING PATTERN "*.h*"
|
||||
#)
|
||||
#
|
||||
#install(DIRECTORY
|
||||
# ${GLM_ROOT}/glm
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
# FILES_MATCHING PATTERN "*.inl"
|
||||
#)
|
||||
#
|
||||
##--------------STB-----------------------------------
|
||||
#add_library(stb INTERFACE)
|
||||
#
|
||||
#target_include_directories(stb INTERFACE
|
||||
# $<BUILD_INTERFACE:${STB_ROOT}>
|
||||
# $<INSTALL_INTERFACE:include>
|
||||
#)
|
||||
#
|
||||
#install(DIRECTORY
|
||||
# ${STB_ROOT}
|
||||
# DESTINATION ${CMAKE_INSTALL_PREFIX}/include
|
||||
# FILES_MATCHING PATTERN "*.h"
|
||||
#)
|
||||
#
|
||||
+1
Submodule external/vcpkg added at 16ee2ecb31
+1
-1
@@ -222,7 +222,6 @@ int main()
|
||||
mainWindowInfo.title = "SeeleEngine";
|
||||
mainWindowInfo.width = 1920;
|
||||
mainWindowInfo.height = 1080;
|
||||
mainWindowInfo.numSamples = 1;
|
||||
mainWindowInfo.preferredFormat = Gfx::SE_FORMAT_B8G8R8A8_SRGB;
|
||||
auto window = windowManager->addWindow(graphics, mainWindowInfo);
|
||||
ViewportCreateInfo sceneViewInfo;
|
||||
@@ -230,6 +229,7 @@ int main()
|
||||
sceneViewInfo.dimensions.size.y = 1080;
|
||||
sceneViewInfo.dimensions.offset.x = 0;
|
||||
sceneViewInfo.dimensions.offset.y = 0;
|
||||
sceneViewInfo.numSamples = Gfx::SE_SAMPLE_COUNT_1_BIT;
|
||||
OGameView sceneView = new Editor::PlayView(graphics, window, sceneViewInfo, binaryPath.generic_string());
|
||||
|
||||
//ViewportCreateInfo inspectorViewInfo;
|
||||
|
||||
@@ -10,6 +10,7 @@ using namespace Seele::Math;
|
||||
Camera::Camera()
|
||||
: viewMatrix(Matrix4())
|
||||
, bNeedsViewBuild(false)
|
||||
, cameraPos(Vector())
|
||||
{
|
||||
yaw = 3.1415f/2;
|
||||
pitch = 0;
|
||||
|
||||
@@ -30,7 +30,6 @@ struct Camera
|
||||
void buildViewMatrix();
|
||||
Matrix4 viewMatrix;
|
||||
Vector cameraPos;
|
||||
Vector cameraDirection;
|
||||
//Transforms relative to actor
|
||||
float yaw;
|
||||
float pitch;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "Graphics.h"
|
||||
#include "Shader.h"
|
||||
#include "Graphics.h"
|
||||
|
||||
using namespace Seele::Gfx;
|
||||
|
||||
@@ -11,4 +12,3 @@ Graphics::Graphics()
|
||||
Graphics::~Graphics()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -82,6 +82,8 @@ public:
|
||||
virtual ODescriptorLayout createDescriptorLayout(const std::string& name = "") = 0;
|
||||
virtual OPipelineLayout createPipelineLayout(PPipelineLayout baseLayout = nullptr) = 0;
|
||||
|
||||
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) = 0;
|
||||
|
||||
bool supportMeshShading() const { return meshShadingEnabled; }
|
||||
protected:
|
||||
QueueFamilyMapping queueMapping;
|
||||
|
||||
@@ -64,7 +64,7 @@ struct TextureCreateInfo
|
||||
uint32 layers = 1;
|
||||
uint32 elements = 1;
|
||||
uint32 samples = 1;
|
||||
Gfx::SeImageUsageFlagBits usage = Gfx::SE_IMAGE_USAGE_SAMPLED_BIT;
|
||||
Gfx::SeImageUsageFlags usage = Gfx::SE_IMAGE_USAGE_SAMPLED_BIT;
|
||||
Gfx::SeMemoryPropertyFlags memoryProps = Gfx::SE_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
||||
};
|
||||
struct SamplerCreateInfo
|
||||
|
||||
@@ -71,6 +71,7 @@ void BasePass::render()
|
||||
tLightGrid->pipelineBarrier(
|
||||
Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||
Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
colorBuffer->changeLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||
|
||||
descriptorSets[INDEX_VIEW_PARAMS] = viewParamsSet;
|
||||
descriptorSets[INDEX_LIGHT_ENV] = scene->getLightEnvironment()->getDescriptorSet();
|
||||
@@ -131,7 +132,7 @@ void BasePass::render()
|
||||
pipelineInfo.pipelineLayout = std::move(layout);
|
||||
pipelineInfo.renderPass = renderPass;
|
||||
pipelineInfo.depthStencilState.depthCompareOp = Gfx::SE_COMPARE_OP_LESS_OR_EQUAL;
|
||||
pipelineInfo.rasterizationState.lineWidth = 10.f;
|
||||
pipelineInfo.multisampleState.samples = viewport->getSamples();
|
||||
Gfx::PGraphicsPipeline pipeline = graphics->createGraphicsPipeline(std::move(pipelineInfo));
|
||||
command->bindPipeline(pipeline);
|
||||
}
|
||||
@@ -143,6 +144,7 @@ void BasePass::render()
|
||||
pipelineInfo.pipelineLayout = std::move(layout);
|
||||
pipelineInfo.renderPass = renderPass;
|
||||
pipelineInfo.depthStencilState.depthCompareOp = Gfx::SE_COMPARE_OP_LESS_OR_EQUAL;
|
||||
pipelineInfo.multisampleState.samples = viewport->getSamples();
|
||||
Gfx::PGraphicsPipeline pipeline = graphics->createGraphicsPipeline(std::move(pipelineInfo));
|
||||
command->bindPipeline(pipeline);
|
||||
}
|
||||
@@ -185,22 +187,24 @@ void BasePass::endFrame()
|
||||
void BasePass::publishOutputs()
|
||||
{
|
||||
colorBuffer = graphics->createTexture2D(TextureCreateInfo{
|
||||
.format = viewport->getOwner()->getBackBuffer()->getFormat(),
|
||||
.width = viewport->getWidth(),
|
||||
.height = viewport->getHeight(),
|
||||
.samples = viewport->getSamples(),
|
||||
.usage = Gfx::SE_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
|
||||
.memoryProps = Gfx::SE_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | Gfx::SE_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,
|
||||
.usage = Gfx::SE_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
||||
});
|
||||
colorAttachment = new Gfx::RenderTargetAttachment(colorBuffer, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_DONT_CARE);
|
||||
resolveAttachment = new Gfx::SwapchainAttachment(viewport->getOwner(), Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
|
||||
resources->registerRenderPassOutput("BASEPASS_COLOR", resolveAttachment);
|
||||
colorAttachment = new Gfx::RenderTargetAttachment(colorBuffer, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
|
||||
resources->registerRenderPassOutput("BASEPASS_COLOR", colorAttachment);
|
||||
}
|
||||
|
||||
void BasePass::createRenderPass()
|
||||
{
|
||||
Gfx::PRenderTargetAttachment depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_DEPTH");
|
||||
depthAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout(colorAttachment, depthAttachment, resolveAttachment);
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
|
||||
.colorAttachments = { colorAttachment },
|
||||
.depthAttachment = depthAttachment,
|
||||
};
|
||||
renderPass = graphics->createRenderPass(std::move(layout), viewport);
|
||||
oLightIndexList = resources->requestBuffer("LIGHTCULLING_OLIGHTLIST");
|
||||
tLightIndexList = resources->requestBuffer("LIGHTCULLING_TLIGHTLIST");
|
||||
|
||||
@@ -19,7 +19,6 @@ public:
|
||||
virtual void createRenderPass() override;
|
||||
static void modifyRenderPassMacros(Map<const char*, const char*>& defines);
|
||||
private:
|
||||
Gfx::ORenderTargetAttachment resolveAttachment;
|
||||
Gfx::ORenderTargetAttachment colorAttachment;
|
||||
Gfx::OTexture2D colorBuffer;
|
||||
Gfx::PTexture2D depthBuffer;
|
||||
|
||||
@@ -91,6 +91,7 @@ void DepthPrepass::render()
|
||||
pipelineInfo.pipelineLayout = std::move(layout);
|
||||
pipelineInfo.renderPass = renderPass;
|
||||
pipelineInfo.depthStencilState.depthCompareOp = Gfx::SE_COMPARE_OP_LESS_OR_EQUAL;
|
||||
pipelineInfo.multisampleState.samples = viewport->getSamples();
|
||||
Gfx::PGraphicsPipeline pipeline = graphics->createGraphicsPipeline(std::move(pipelineInfo));
|
||||
command->bindPipeline(pipeline);
|
||||
}
|
||||
@@ -102,6 +103,7 @@ void DepthPrepass::render()
|
||||
pipelineInfo.pipelineLayout = std::move(layout);
|
||||
pipelineInfo.renderPass = renderPass;
|
||||
pipelineInfo.depthStencilState.depthCompareOp = Gfx::SE_COMPARE_OP_LESS_OR_EQUAL;
|
||||
pipelineInfo.multisampleState.samples = viewport->getSamples();
|
||||
Gfx::PGraphicsPipeline pipeline = graphics->createGraphicsPipeline(std::move(pipelineInfo));
|
||||
command->bindPipeline(pipeline);
|
||||
}
|
||||
@@ -120,7 +122,7 @@ void DepthPrepass::render()
|
||||
{
|
||||
command->bindIndexBuffer(vertexData->getIndexBuffer());
|
||||
uint32 instanceOffset = 0;
|
||||
for (const auto& [instance, meshData] : instance.meshes)
|
||||
for (const auto& [_, meshData] : instance.meshes)
|
||||
{
|
||||
if (meshData.numIndices > 0)
|
||||
{
|
||||
@@ -148,25 +150,30 @@ void DepthPrepass::publishOutputs()
|
||||
.format = Gfx::SE_FORMAT_D32_SFLOAT,
|
||||
.width = viewport->getOwner()->getFramebufferWidth(),
|
||||
.height = viewport->getOwner()->getFramebufferHeight(),
|
||||
.samples = viewport->getSamples(),
|
||||
.usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
|
||||
};
|
||||
depthBuffer = graphics->createTexture2D(depthBufferInfo);
|
||||
depthAttachment =
|
||||
new Gfx::RenderTargetAttachment(depthBuffer, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
|
||||
depthAttachment->clear.depthStencil.depth = 1.0f;
|
||||
depthBufferInfo.samples = Gfx::SE_SAMPLE_COUNT_1_BIT;
|
||||
depthResolveBuffer = graphics->createTexture2D(depthBufferInfo);
|
||||
depthResolveAttachment =
|
||||
new Gfx::RenderTargetAttachment(depthResolveBuffer, Gfx::SE_ATTACHMENT_LOAD_OP_DONT_CARE, Gfx::SE_ATTACHMENT_STORE_OP_STORE);
|
||||
resources->registerRenderPassOutput("DEPTHPREPASS_DEPTH", depthAttachment);
|
||||
resources->registerRenderPassOutput("DEPTHPREPASS_RESOLVED_DEPTH", depthResolveAttachment);
|
||||
}
|
||||
|
||||
void DepthPrepass::createRenderPass()
|
||||
{
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout(depthAttachment);
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
|
||||
.depthAttachment = depthAttachment,
|
||||
.depthResolveAttachment = depthResolveAttachment,
|
||||
};
|
||||
renderPass = graphics->createRenderPass(std::move(layout), viewport);
|
||||
}
|
||||
|
||||
void DepthPrepass::modifyRenderPassMacros(Map<const char*, const char*>& defines)
|
||||
{
|
||||
defines["INDEX_VIEW_PARAMS"] = "0";
|
||||
defines["INDEX_MATERIAL"] = "1";
|
||||
defines["INDEX_VERTEX_DATA"] = "2";
|
||||
defines["INDEX_SCENE_DATA"] = "3";
|
||||
}
|
||||
|
||||
@@ -19,7 +19,9 @@ public:
|
||||
static void modifyRenderPassMacros(Map<const char*, const char*>& defines);
|
||||
private:
|
||||
Gfx::ORenderTargetAttachment depthAttachment;
|
||||
Gfx::ORenderTargetAttachment depthResolveAttachment;
|
||||
Gfx::OTexture2D depthBuffer;
|
||||
Gfx::OTexture2D depthResolveBuffer;
|
||||
|
||||
Array<Gfx::PDescriptorSet> descriptorSets;
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@ void LightCullingPass::publishOutputs()
|
||||
|
||||
void LightCullingPass::createRenderPass()
|
||||
{
|
||||
depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_DEPTH")->getTexture();
|
||||
depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_RESOLVED_DEPTH")->getTexture();
|
||||
}
|
||||
|
||||
void LightCullingPass::modifyRenderPassMacros(Map<const char*, const char*>&)
|
||||
|
||||
@@ -25,13 +25,6 @@ void SkyboxRenderPass::beginFrame(const Component::Camera& cam)
|
||||
RenderPass::beginFrame(cam);
|
||||
DataSource uniformUpdate;
|
||||
|
||||
viewParams.viewMatrix = cam.getViewMatrix();
|
||||
viewParams.projectionMatrix = viewport->getProjectionMatrix();
|
||||
viewParams.cameraPosition = Vector4(cam.getCameraPosition(), 1);
|
||||
viewParams.screenDimensions = Vector2(static_cast<float>(viewport->getWidth()), static_cast<float>(viewport->getHeight()));
|
||||
uniformUpdate.size = sizeof(ViewParameter);
|
||||
uniformUpdate.data = (uint8*)&viewParams;
|
||||
viewParamsBuffer->updateContents(uniformUpdate);
|
||||
skyboxDataLayout->reset();
|
||||
textureLayout->reset();
|
||||
skyboxDataSet = skyboxDataLayout->allocateDescriptorSet();
|
||||
@@ -54,6 +47,8 @@ void SkyboxRenderPass::render()
|
||||
renderCommand->draw(36, 1, 0, 0);
|
||||
graphics->executeCommands(Array{ renderCommand });
|
||||
graphics->endRenderPass();
|
||||
baseColorAttachment->getTexture()->changeLayout(Gfx::SE_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
graphics->resolveTexture(baseColorAttachment->getTexture(), viewport->getOwner()->getBackBuffer());
|
||||
}
|
||||
|
||||
void SkyboxRenderPass::endFrame()
|
||||
@@ -63,15 +58,6 @@ void SkyboxRenderPass::endFrame()
|
||||
|
||||
void SkyboxRenderPass::publishOutputs()
|
||||
{
|
||||
UniformBufferCreateInfo viewCreateInfo = {
|
||||
.sourceData = DataSource {
|
||||
.size = sizeof(ViewParameter),
|
||||
.data = nullptr,
|
||||
},
|
||||
.dynamic = true
|
||||
};
|
||||
viewParamsBuffer = graphics->createUniformBuffer(viewCreateInfo);
|
||||
|
||||
skyboxDataLayout = graphics->createDescriptorLayout("SkyboxDescLayout");
|
||||
skyboxDataLayout->addDescriptorBinding(0, Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
|
||||
skyboxDataLayout->create();
|
||||
@@ -86,11 +72,14 @@ void SkyboxRenderPass::publishOutputs()
|
||||
|
||||
void SkyboxRenderPass::createRenderPass()
|
||||
{
|
||||
Gfx::PRenderTargetAttachment baseColorAttachment = resources->requestRenderTarget("BASEPASS_COLOR");
|
||||
baseColorAttachment = resources->requestRenderTarget("BASEPASS_COLOR");
|
||||
baseColorAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
|
||||
Gfx::PRenderTargetAttachment depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_DEPTH");
|
||||
depthAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout(baseColorAttachment, depthAttachment);
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
|
||||
.colorAttachments = { baseColorAttachment },
|
||||
.depthAttachment = depthAttachment
|
||||
};
|
||||
renderPass = graphics->createRenderPass(std::move(layout), viewport);
|
||||
|
||||
ShaderCreateInfo createInfo;
|
||||
@@ -118,5 +107,6 @@ void SkyboxRenderPass::createRenderPass()
|
||||
gfxInfo.topology = Gfx::SE_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
|
||||
gfxInfo.pipelineLayout = std::move(pipelineLayout);
|
||||
gfxInfo.renderPass = renderPass;
|
||||
gfxInfo.multisampleState.samples = viewport->getSamples();
|
||||
pipeline = graphics->createGraphicsPipeline(std::move(gfxInfo));
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ public:
|
||||
virtual void publishOutputs() override;
|
||||
virtual void createRenderPass() override;
|
||||
private:
|
||||
Gfx::PRenderTargetAttachment baseColorAttachment;
|
||||
Gfx::OVertexBuffer cubeBuffer;
|
||||
Gfx::OUniformBuffer viewParamsBuffer;
|
||||
Gfx::ODescriptorLayout skyboxDataLayout;
|
||||
Gfx::PDescriptorSet skyboxDataSet;
|
||||
Gfx::ODescriptorLayout textureLayout;
|
||||
|
||||
@@ -158,7 +158,10 @@ void TextPass::createRenderPass()
|
||||
.size = sizeof(TextData)});
|
||||
pipelineLayout->create();
|
||||
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout(renderTarget, depthAttachment);
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
|
||||
.colorAttachments = {renderTarget},
|
||||
.depthAttachment = depthAttachment
|
||||
};
|
||||
renderPass = graphics->createRenderPass(std::move(layout), viewport);
|
||||
|
||||
Gfx::LegacyPipelineCreateInfo pipelineInfo;
|
||||
|
||||
@@ -136,7 +136,10 @@ void UIPass::createRenderPass()
|
||||
pipelineLayout->addDescriptorLayout(0, descriptorLayout);
|
||||
pipelineLayout->create();
|
||||
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout(std::move(renderTarget), std::move(depthAttachment));
|
||||
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
|
||||
.colorAttachments = { renderTarget },
|
||||
.depthAttachment = depthAttachment
|
||||
};
|
||||
renderPass = graphics->createRenderPass(std::move(layout), viewport);
|
||||
|
||||
Gfx::LegacyPipelineCreateInfo pipelineInfo;
|
||||
|
||||
@@ -21,73 +21,3 @@ RenderTargetAttachment::RenderTargetAttachment(PTexture2D texture,
|
||||
RenderTargetAttachment::~RenderTargetAttachment()
|
||||
{
|
||||
}
|
||||
|
||||
SwapchainAttachment::SwapchainAttachment(PWindow owner,
|
||||
SeAttachmentLoadOp loadOp,
|
||||
SeAttachmentStoreOp storeOp,
|
||||
SeAttachmentLoadOp stencilLoadOp,
|
||||
SeAttachmentStoreOp stencilStoreOp)
|
||||
: RenderTargetAttachment(nullptr, loadOp, storeOp, stencilLoadOp, stencilStoreOp), owner(owner)
|
||||
{
|
||||
clear.color.float32[0] = 0.0f;
|
||||
clear.color.float32[1] = 0.0f;
|
||||
clear.color.float32[2] = 0.0f;
|
||||
clear.color.float32[3] = 1.0f;
|
||||
componentFlags = SE_COLOR_COMPONENT_R_BIT | SE_COLOR_COMPONENT_G_BIT | SE_COLOR_COMPONENT_B_BIT | SE_COLOR_COMPONENT_A_BIT;
|
||||
}
|
||||
|
||||
SwapchainAttachment::~SwapchainAttachment()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
RenderTargetLayout::RenderTargetLayout()
|
||||
: inputAttachments()
|
||||
, colorAttachments()
|
||||
, depthAttachment()
|
||||
, width(0)
|
||||
, height(0)
|
||||
{
|
||||
}
|
||||
|
||||
RenderTargetLayout::RenderTargetLayout(PRenderTargetAttachment depthAttachment)
|
||||
: inputAttachments()
|
||||
, colorAttachments()
|
||||
, depthAttachment(depthAttachment)
|
||||
, width(depthAttachment->getTexture()->getWidth())
|
||||
, height(depthAttachment->getTexture()->getHeight())
|
||||
{
|
||||
}
|
||||
|
||||
RenderTargetLayout::RenderTargetLayout(PRenderTargetAttachment colorAttachment, PRenderTargetAttachment depthAttachment)
|
||||
: colorAttachments({colorAttachment})
|
||||
, depthAttachment(depthAttachment)
|
||||
, width(depthAttachment->getTexture()->getWidth())
|
||||
, height(depthAttachment->getTexture()->getHeight())
|
||||
{
|
||||
}
|
||||
RenderTargetLayout::RenderTargetLayout(Array<PRenderTargetAttachment> colorAttachments, PRenderTargetAttachment depthAttachment)
|
||||
: inputAttachments()
|
||||
, colorAttachments(colorAttachments)
|
||||
, depthAttachment(depthAttachment)
|
||||
, width(depthAttachment->getTexture()->getWidth())
|
||||
, height(depthAttachment->getTexture()->getHeight())
|
||||
{
|
||||
}
|
||||
RenderTargetLayout::RenderTargetLayout(Array<PRenderTargetAttachment> inputAttachments, Array<PRenderTargetAttachment> colorAttachments, PRenderTargetAttachment depthAttachment)
|
||||
: inputAttachments(inputAttachments)
|
||||
, colorAttachments(colorAttachments)
|
||||
, depthAttachment(depthAttachment)
|
||||
, width(depthAttachment->getTexture()->getWidth())
|
||||
, height(depthAttachment->getTexture()->getHeight())
|
||||
{
|
||||
}
|
||||
|
||||
RenderTargetLayout::RenderTargetLayout(PRenderTargetAttachment colorAttachment, PRenderTargetAttachment depthAttachment, PRenderTargetAttachment resolveAttachment)
|
||||
: colorAttachments({ colorAttachment })
|
||||
, depthAttachment(depthAttachment)
|
||||
, resolveAttachments({ resolveAttachment })
|
||||
, width(depthAttachment->getTexture()->getWidth())
|
||||
, height(depthAttachment->getTexture()->getHeight())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -15,24 +15,24 @@ public:
|
||||
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
||||
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE);
|
||||
virtual ~RenderTargetAttachment();
|
||||
virtual PTexture2D getTexture()
|
||||
~RenderTargetAttachment();
|
||||
PTexture2D getTexture()
|
||||
{
|
||||
return texture;
|
||||
}
|
||||
virtual SeFormat getFormat() const
|
||||
SeFormat getFormat() const
|
||||
{
|
||||
return texture->getFormat();
|
||||
}
|
||||
virtual SeSampleCountFlags getNumSamples() const
|
||||
SeSampleCountFlags getNumSamples() const
|
||||
{
|
||||
return texture->getNumSamples();
|
||||
}
|
||||
virtual uint32 getWidth() const
|
||||
uint32 getWidth() const
|
||||
{
|
||||
return texture->getWidth();
|
||||
}
|
||||
virtual uint32 getHeight() const
|
||||
uint32 getHeight() const
|
||||
{
|
||||
return texture->getHeight();
|
||||
}
|
||||
@@ -51,53 +51,14 @@ protected:
|
||||
};
|
||||
DEFINE_REF(RenderTargetAttachment)
|
||||
|
||||
class SwapchainAttachment : public RenderTargetAttachment
|
||||
{
|
||||
public:
|
||||
SwapchainAttachment(PWindow owner,
|
||||
SeAttachmentLoadOp loadOp = SE_ATTACHMENT_LOAD_OP_LOAD,
|
||||
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
||||
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE);
|
||||
virtual ~SwapchainAttachment();
|
||||
virtual PTexture2D getTexture() override
|
||||
{
|
||||
return owner->getBackBuffer();
|
||||
}
|
||||
virtual SeFormat getFormat() const override
|
||||
{
|
||||
return owner->getSwapchainFormat();
|
||||
}
|
||||
virtual SeSampleCountFlags getNumSamples() const override
|
||||
{
|
||||
return Gfx::SE_SAMPLE_COUNT_1_BIT;
|
||||
}
|
||||
virtual uint32 getWidth() const
|
||||
{
|
||||
return owner->getFramebufferWidth();
|
||||
}
|
||||
virtual uint32 getHeight() const
|
||||
{
|
||||
return owner->getFramebufferHeight();
|
||||
}
|
||||
private:
|
||||
PWindow owner;
|
||||
};
|
||||
DEFINE_REF(SwapchainAttachment)
|
||||
|
||||
class RenderTargetLayout
|
||||
{
|
||||
public:
|
||||
RenderTargetLayout();
|
||||
RenderTargetLayout(PRenderTargetAttachment depthAttachment);
|
||||
RenderTargetLayout(PRenderTargetAttachment colorAttachment, PRenderTargetAttachment depthAttachment);
|
||||
RenderTargetLayout(Array<PRenderTargetAttachment> colorAttachments, PRenderTargetAttachment depthAttachmet);
|
||||
RenderTargetLayout(Array<PRenderTargetAttachment> inputAttachments, Array<PRenderTargetAttachment> colorAttachments, PRenderTargetAttachment depthAttachment);
|
||||
RenderTargetLayout(PRenderTargetAttachment colorAttachment, PRenderTargetAttachment depthAttachment, PRenderTargetAttachment resolveAttachment);
|
||||
Array<PRenderTargetAttachment> inputAttachments;
|
||||
Array<PRenderTargetAttachment> colorAttachments;
|
||||
Array<PRenderTargetAttachment> resolveAttachments;
|
||||
PRenderTargetAttachment depthAttachment;
|
||||
PRenderTargetAttachment depthResolveAttachment;
|
||||
uint32 width;
|
||||
uint32 height;
|
||||
};
|
||||
|
||||
@@ -71,36 +71,36 @@ struct ShaderPermutation
|
||||
{
|
||||
std::memset(taskFile, 0, sizeof(taskFile));
|
||||
hasTaskShader = 1;
|
||||
std::strncpy(taskFile, name.data(), 32);
|
||||
strncpy_s(taskFile, sizeof(taskFile), name.data(), 32);
|
||||
}
|
||||
void setVertexFile(std::string_view name)
|
||||
{
|
||||
std::memset(vertexMeshFile, 0, sizeof(vertexMeshFile));
|
||||
useMeshShading = 0;
|
||||
std::strncpy(vertexMeshFile, name.data(), 32);
|
||||
strncpy_s(vertexMeshFile, sizeof(vertexMeshFile), name.data(), 32);
|
||||
}
|
||||
void setMeshFile(std::string_view name)
|
||||
{
|
||||
std::memset(vertexMeshFile, 0, sizeof(vertexMeshFile));
|
||||
useMeshShading = 1;
|
||||
std::strncpy(vertexMeshFile, name.data(), 32);
|
||||
strncpy_s(vertexMeshFile, sizeof(vertexMeshFile), name.data(), 32);
|
||||
}
|
||||
void setFragmentFile(std::string_view name)
|
||||
{
|
||||
std::memset(fragmentFile, 0, sizeof(fragmentFile));
|
||||
hasFragment = 1;
|
||||
std::strncpy(fragmentFile, name.data(), 32);
|
||||
strncpy_s(fragmentFile, sizeof(fragmentFile), name.data(), 32);
|
||||
}
|
||||
void setVertexData(std::string_view name)
|
||||
{
|
||||
std::memset(vertexDataName, 0, sizeof(vertexDataName));
|
||||
std::strncpy(vertexDataName, name.data(), 32);
|
||||
strncpy_s(vertexDataName, sizeof(vertexDataName), name.data(), 32);
|
||||
}
|
||||
void setMaterial(std::string_view name)
|
||||
{
|
||||
std::memset(materialName, 0, sizeof(materialName));
|
||||
useMaterial = 1;
|
||||
std::strncpy(materialName, name.data(), 32);
|
||||
strncpy_s(materialName, sizeof(materialName), name.data(), 32);
|
||||
}
|
||||
};
|
||||
//Hashed ShaderPermutation for fast lookup
|
||||
|
||||
@@ -201,9 +201,9 @@ VertexData* Seele::VertexData::findByTypeName(std::string name)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void Seele::VertexData::init(Gfx::PGraphics graphics)
|
||||
void Seele::VertexData::init(Gfx::PGraphics _graphics)
|
||||
{
|
||||
this->graphics = graphics;
|
||||
graphics = _graphics;
|
||||
verticesAllocated = NUM_DEFAULT_ELEMENTS;
|
||||
instanceDataLayout = graphics->createDescriptorLayout("VertexDataInstanceLayout");
|
||||
instanceDataLayout->addDescriptorBinding(0, Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER);
|
||||
|
||||
@@ -33,6 +33,14 @@ Framebuffer::Framebuffer(PGraphics graphics, PRenderPass renderPass, Gfx::PRende
|
||||
width = std::max(width, vkColorAttachment->getWidth());
|
||||
height = std::max(height, vkColorAttachment->getHeight());
|
||||
}
|
||||
for (auto resolveAttachment : layout->resolveAttachments)
|
||||
{
|
||||
PTexture2D vkResolveAttachment = resolveAttachment->getTexture().cast<Texture2D>();
|
||||
attachments.add(vkResolveAttachment->getView());
|
||||
description.resolveAttachments[description.numResolveAttachments++] = vkResolveAttachment->getView();
|
||||
width = std::max(width, vkResolveAttachment->getWidth());
|
||||
height = std::max(height, vkResolveAttachment->getHeight());
|
||||
}
|
||||
if (layout->depthAttachment != nullptr)
|
||||
{
|
||||
PTexture2D vkDepthAttachment = layout->depthAttachment->getTexture().cast<Texture2D>();
|
||||
@@ -41,6 +49,14 @@ Framebuffer::Framebuffer(PGraphics graphics, PRenderPass renderPass, Gfx::PRende
|
||||
width = std::max(width, vkDepthAttachment->getWidth());
|
||||
height = std::max(height, vkDepthAttachment->getHeight());
|
||||
}
|
||||
if (layout->depthResolveAttachment != nullptr)
|
||||
{
|
||||
PTexture2D vkDepthAttachment = layout->depthResolveAttachment->getTexture().cast<Texture2D>();
|
||||
attachments.add(vkDepthAttachment->getView());
|
||||
description.depthResolveAttachment = vkDepthAttachment->getView();
|
||||
width = std::max(width, vkDepthAttachment->getWidth());
|
||||
height = std::max(height, vkDepthAttachment->getHeight());
|
||||
}
|
||||
VkFramebufferCreateInfo createInfo = {
|
||||
.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
|
||||
@@ -12,9 +12,12 @@ struct FramebufferDescription
|
||||
{
|
||||
StaticArray<VkImageView, 16> inputAttachments;
|
||||
StaticArray<VkImageView, 16> colorAttachments;
|
||||
StaticArray<VkImageView, 16> resolveAttachments;
|
||||
VkImageView depthAttachment;
|
||||
VkImageView depthResolveAttachment;
|
||||
uint32 numInputAttachments;
|
||||
uint32 numColorAttachments;
|
||||
uint32 numResolveAttachments;
|
||||
};
|
||||
class Framebuffer
|
||||
{
|
||||
|
||||
@@ -237,6 +237,42 @@ Gfx::OPipelineLayout Graphics::createPipelineLayout(Gfx::PPipelineLayout baseLay
|
||||
return new PipelineLayout(this, baseLayout);
|
||||
}
|
||||
|
||||
void Graphics::resolveTexture(Gfx::PTexture source, Gfx::PTexture destination)
|
||||
{
|
||||
PTextureBase sourceTex = source.cast<TextureBase>();
|
||||
PTextureBase destinationTex = destination.cast<TextureBase>();
|
||||
VkImageResolve resolve = {
|
||||
.srcSubresource = VkImageSubresourceLayers {
|
||||
.aspectMask = sourceTex->getAspect(),
|
||||
.mipLevel = 0,
|
||||
.baseArrayLayer = 0,
|
||||
.layerCount = 1,
|
||||
},
|
||||
.srcOffset = VkOffset3D {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
},
|
||||
.dstSubresource = VkImageSubresourceLayers {
|
||||
.aspectMask = sourceTex->getAspect(),
|
||||
.mipLevel = 0,
|
||||
.baseArrayLayer = 0,
|
||||
.layerCount = 1,
|
||||
},
|
||||
.dstOffset = VkOffset3D {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.z = 0,
|
||||
},
|
||||
.extent = VkExtent3D {
|
||||
.width = sourceTex->getWidth(),
|
||||
.height = sourceTex->getHeight(),
|
||||
.depth = sourceTex->getDepth(),
|
||||
},
|
||||
};
|
||||
vkCmdResolveImage(getGraphicsCommands()->getCommands()->getHandle(), sourceTex->getImage(), cast(sourceTex->getLayout()), destinationTex->getImage(), cast(destinationTex->getLayout()), 1, &resolve);
|
||||
}
|
||||
|
||||
void Graphics::vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ)
|
||||
{
|
||||
cmdDrawMeshTasks(handle, groupX, groupY, groupZ);
|
||||
@@ -410,7 +446,7 @@ void Graphics::pickPhysicalDevice()
|
||||
{
|
||||
if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0)
|
||||
{
|
||||
//meshShadingEnabled = true;
|
||||
meshShadingEnabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,8 @@ public:
|
||||
virtual Gfx::ODescriptorLayout createDescriptorLayout(const std::string& name = "") override;
|
||||
virtual Gfx::OPipelineLayout createPipelineLayout(Gfx::PPipelineLayout baseLayout = nullptr) override;
|
||||
|
||||
virtual void resolveTexture(Gfx::PTexture source, Gfx::PTexture destination) override;
|
||||
|
||||
void vkCmdDrawMeshTasksEXT(VkCommandBuffer handle, uint32 groupX, uint32 groupY, uint32 groupZ);
|
||||
protected:
|
||||
PFN_vkCmdDrawMeshTasksEXT cmdDrawMeshTasks;
|
||||
|
||||
@@ -17,15 +17,20 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
renderArea.offset.x = viewport->getOffsetX();
|
||||
renderArea.offset.y = viewport->getOffsetY();
|
||||
subpassContents = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS;
|
||||
Array<VkAttachmentDescription> attachments;
|
||||
Array<VkAttachmentReference> inputRefs;
|
||||
Array<VkAttachmentReference> colorRefs;
|
||||
VkAttachmentReference depthRef;
|
||||
Array<VkAttachmentDescription2> attachments;
|
||||
Array<VkAttachmentReference2> inputRefs;
|
||||
Array<VkAttachmentReference2> colorRefs;
|
||||
Array<VkAttachmentReference2> resolveRefs;
|
||||
VkAttachmentReference2 depthRef;
|
||||
VkAttachmentReference2 depthResolveRef;
|
||||
|
||||
uint32 attachmentCounter = 0;
|
||||
for (auto& inputAttachment : layout->inputAttachments)
|
||||
{
|
||||
PTexture2D image = inputAttachment->getTexture().cast<Texture2D>();
|
||||
VkAttachmentDescription& desc = attachments.add() = {
|
||||
VkAttachmentDescription2& desc = attachments.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.format = cast(image->getFormat()),
|
||||
.loadOp = cast(inputAttachment->getLoadOp()),
|
||||
@@ -33,7 +38,7 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
.stencilLoadOp = cast(inputAttachment->getStencilLoadOp()),
|
||||
.stencilStoreOp = cast(inputAttachment->getStencilStoreOp()),
|
||||
.initialLayout = image->isDepthStencil() ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.finalLayout = desc.initialLayout,
|
||||
.finalLayout = image->isDepthStencil() ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
|
||||
inputRefs.add() = {
|
||||
@@ -44,6 +49,8 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
for (auto& colorAttachment : layout->colorAttachments)
|
||||
{
|
||||
attachments.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.format = cast(colorAttachment->getFormat()),
|
||||
.samples = (VkSampleCountFlagBits)colorAttachment->getNumSamples(),
|
||||
@@ -62,6 +69,37 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
}
|
||||
|
||||
colorRefs.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
|
||||
.pNext = nullptr,
|
||||
.attachment = attachmentCounter++,
|
||||
.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
}
|
||||
for (auto& resolveAttachment : layout->resolveAttachments)
|
||||
{
|
||||
attachments.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.format = cast(resolveAttachment->getFormat()),
|
||||
.samples = (VkSampleCountFlagBits)resolveAttachment->getNumSamples(),
|
||||
.loadOp = cast(resolveAttachment->getLoadOp()),
|
||||
.storeOp = cast(resolveAttachment->getStoreOp()),
|
||||
.stencilLoadOp = cast(resolveAttachment->getStencilLoadOp()),
|
||||
.stencilStoreOp = cast(resolveAttachment->getStencilStoreOp()),
|
||||
.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
|
||||
VkClearValue& clearValue = clearValues.add();
|
||||
if (attachments.back().loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR)
|
||||
{
|
||||
clearValue = cast(resolveAttachment->clear);
|
||||
}
|
||||
|
||||
resolveRefs.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
|
||||
.pNext = nullptr,
|
||||
.attachment = attachmentCounter++,
|
||||
.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
@@ -70,6 +108,8 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
{
|
||||
PTexture2D image = layout->depthAttachment->getTexture().cast<Texture2D>();
|
||||
attachments.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.format = cast(image->getFormat()),
|
||||
.samples = (VkSampleCountFlagBits)image->getNumSamples(),
|
||||
@@ -88,20 +128,58 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
}
|
||||
|
||||
depthRef = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
|
||||
.pNext = nullptr,
|
||||
.attachment = attachmentCounter++,
|
||||
.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
}
|
||||
VkSubpassDescription subPassDesc = {
|
||||
if (layout->depthResolveAttachment != nullptr)
|
||||
{
|
||||
PTexture2D image = layout->depthResolveAttachment->getTexture().cast<Texture2D>();
|
||||
attachments.add() = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
|
||||
.pNext = nullptr,
|
||||
.flags = 0,
|
||||
.format = cast(image->getFormat()),
|
||||
.samples = (VkSampleCountFlagBits)image->getNumSamples(),
|
||||
.loadOp = cast(layout->depthResolveAttachment->getLoadOp()),
|
||||
.storeOp = cast(layout->depthResolveAttachment->getStoreOp()),
|
||||
.stencilLoadOp = cast(layout->depthResolveAttachment->getStencilLoadOp()),
|
||||
.stencilStoreOp = cast(layout->depthResolveAttachment->getStencilStoreOp()),
|
||||
.initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
depthResolveRef = {
|
||||
.sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
|
||||
.pNext = nullptr,
|
||||
.attachment = attachmentCounter++,
|
||||
.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
};
|
||||
}
|
||||
|
||||
VkSubpassDescriptionDepthStencilResolve depthResolve = {
|
||||
.sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,
|
||||
.pNext = nullptr,
|
||||
.depthResolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
|
||||
.stencilResolveMode = VK_RESOLVE_MODE_AVERAGE_BIT,
|
||||
.pDepthStencilResolveAttachment = &depthResolveRef,
|
||||
};
|
||||
VkSubpassDescription2 subPassDesc = {
|
||||
.sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,
|
||||
.pNext = layout->depthResolveAttachment != nullptr ? &depthResolve : nullptr,
|
||||
.flags = 0,
|
||||
.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
.inputAttachmentCount = (uint32)inputRefs.size(),
|
||||
.pInputAttachments = inputRefs.data(),
|
||||
.colorAttachmentCount = (uint32)colorRefs.size(),
|
||||
.pColorAttachments = colorRefs.data(),
|
||||
.pResolveAttachments = resolveRefs.size() > 0 ? resolveRefs.data() : nullptr,
|
||||
.pDepthStencilAttachment = &depthRef,
|
||||
};
|
||||
VkSubpassDependency dependency = {
|
||||
VkSubpassDependency2 dependency = {
|
||||
.sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
|
||||
.pNext = nullptr,
|
||||
.srcSubpass = VK_SUBPASS_EXTERNAL,
|
||||
.dstSubpass = 0,
|
||||
.srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
@@ -110,8 +188,8 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
};
|
||||
|
||||
VkRenderPassCreateInfo info = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
|
||||
VkRenderPassCreateInfo2 info = {
|
||||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
|
||||
.pNext = nullptr,
|
||||
.attachmentCount = (uint32)attachments.size(),
|
||||
.pAttachments = attachments.data(),
|
||||
@@ -121,7 +199,7 @@ RenderPass::RenderPass(PGraphics graphics, Gfx::ORenderTargetLayout _layout, Gfx
|
||||
.pDependencies = &dependency,
|
||||
};
|
||||
|
||||
VK_CHECK(vkCreateRenderPass(graphics->getDevice(), &info, nullptr, &renderPass));
|
||||
VK_CHECK(vkCreateRenderPass2(graphics->getDevice(), &info, nullptr, &renderPass));
|
||||
}
|
||||
|
||||
RenderPass::~RenderPass()
|
||||
|
||||
@@ -71,6 +71,13 @@ TextureBase::TextureBase(PGraphics graphics, VkImageViewType viewType,
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if ((usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) == 0)
|
||||
{
|
||||
usage = usage
|
||||
| VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
||||
| VK_IMAGE_USAGE_TRANSFER_SRC_BIT
|
||||
| VK_IMAGE_USAGE_SAMPLED_BIT;
|
||||
}
|
||||
VkImageCreateInfo info = {
|
||||
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
||||
.pNext = nullptr,
|
||||
@@ -86,10 +93,7 @@ TextureBase::TextureBase(PGraphics graphics, VkImageViewType viewType,
|
||||
.arrayLayers = arrayCount * layerCount,
|
||||
.samples = (VkSampleCountFlagBits)samples,
|
||||
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
||||
.usage = usage
|
||||
| VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
||||
| VK_IMAGE_USAGE_TRANSFER_SRC_BIT
|
||||
| VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
.usage = usage,
|
||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||
.initialLayout = cast(layout),
|
||||
};
|
||||
@@ -112,7 +116,7 @@ TextureBase::TextureBase(PGraphics graphics, VkImageViewType viewType,
|
||||
};
|
||||
vkGetImageMemoryRequirements2(graphics->getDevice(), &reqInfo, &requirements);
|
||||
|
||||
allocation = pool->allocate(requirements, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, image);
|
||||
allocation = pool->allocate(requirements, createInfo.memoryProps, image);
|
||||
vkBindImageMemory(graphics->getDevice(), image, allocation->getHandle(), allocation->getOffset());
|
||||
}
|
||||
|
||||
@@ -158,6 +162,10 @@ TextureBase::TextureBase(PGraphics graphics, VkImageViewType viewType,
|
||||
{
|
||||
changeLayout(Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||
}
|
||||
else if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
|
||||
{
|
||||
changeLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
changeLayout(Gfx::SE_IMAGE_LAYOUT_GENERAL);
|
||||
|
||||
@@ -14,7 +14,18 @@ public:
|
||||
TextureBase(PGraphics graphics, VkImageViewType viewType,
|
||||
const TextureCreateInfo& createInfo, Gfx::QueueType& owner, VkImage existingImage = VK_NULL_HANDLE);
|
||||
virtual ~TextureBase();
|
||||
|
||||
uint32 getWidth() const
|
||||
{
|
||||
return width;
|
||||
}
|
||||
uint32 getHeight() const
|
||||
{
|
||||
return height;
|
||||
}
|
||||
uint32 getDepth() const
|
||||
{
|
||||
return depth;
|
||||
}
|
||||
constexpr VkImage getImage() const
|
||||
{
|
||||
return image;
|
||||
@@ -78,6 +89,7 @@ protected:
|
||||
uint8 ownsImage;
|
||||
friend class Graphics;
|
||||
};
|
||||
DEFINE_REF(TextureBase)
|
||||
|
||||
class Texture2D : public Gfx::Texture2D, public TextureBase
|
||||
{
|
||||
|
||||
@@ -101,7 +101,7 @@ void Window::beginFrame()
|
||||
{
|
||||
glfwPollEvents();
|
||||
vkAcquireNextImageKHR(graphics->getDevice(), swapchain, std::numeric_limits<uint64>::max(), imageAvailableSemaphores[currentSemaphoreIndex]->getHandle(), VK_NULL_HANDLE, ¤tImageIndex);
|
||||
swapChainTextures[currentImageIndex]->changeLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||
swapChainTextures[currentImageIndex]->changeLayout(Gfx::SE_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
graphics->getGraphicsCommands()->getCommands()->waitForSemaphore(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, imageAvailableSemaphores[currentSemaphoreIndex]);
|
||||
}
|
||||
|
||||
@@ -299,7 +299,7 @@ void Window::createSwapChain()
|
||||
.imageColorSpace = format.colorSpace,
|
||||
.imageExtent = extent,
|
||||
.imageArrayLayers = 1,
|
||||
.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
||||
.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT,
|
||||
.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
||||
.preTransform = capabilities.currentTransform,
|
||||
.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
||||
@@ -322,7 +322,7 @@ void Window::createSwapChain()
|
||||
.layers = 1,
|
||||
.elements = 1,
|
||||
.samples = 1,
|
||||
.usage = Gfx::SE_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
||||
.usage = Gfx::SE_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | Gfx::SE_IMAGE_USAGE_TRANSFER_DST_BIT,
|
||||
}, swapChainImages[i]);
|
||||
imageAvailableSemaphores[i] = new Semaphore(graphics);
|
||||
renderingDoneSemaphores[i] = new Semaphore(graphics);
|
||||
|
||||
@@ -223,7 +223,7 @@ void SamplerParameter::save(ArchiveBuffer& buffer) const
|
||||
void SamplerParameter::load(ArchiveBuffer& buffer)
|
||||
{
|
||||
ShaderParameter::load(buffer);
|
||||
data = buffer.getGraphics()->createSampler({});
|
||||
data = buffer.getGraphics()->createSampler(SamplerCreateInfo{});
|
||||
}
|
||||
|
||||
CombinedTextureParameter::CombinedTextureParameter(std::string name, uint32 byteOffset, uint32 binding)
|
||||
|
||||
@@ -31,8 +31,9 @@ struct ExpressionOutput
|
||||
void load(ArchiveBuffer& buffer);
|
||||
};
|
||||
DECLARE_REF(ShaderExpression);
|
||||
struct ShaderExpression
|
||||
class ShaderExpression
|
||||
{
|
||||
public:
|
||||
Map<std::string, ExpressionInput> inputs;
|
||||
ExpressionOutput output;
|
||||
std::string key;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "PhysicsSystem.h"
|
||||
#include <boost/numeric/odeint.hpp>
|
||||
#include <random>
|
||||
|
||||
using namespace Seele;
|
||||
@@ -214,8 +213,9 @@ Array<PhysicsSystem::Body> PhysicsSystem::integratePhysics(const Array<Body>& bo
|
||||
*xdot++ = result[i].torque.z;
|
||||
}
|
||||
};
|
||||
boost::numeric::odeint::stepper_rk4<Array<float>, float> stepper;
|
||||
boost::numeric::odeint::integrate_const(stepper, dxdt, buffer, t0, tdelta, tdelta);
|
||||
//TODO
|
||||
//boost::numeric::odeint::runge_kutta4<Array<float>, float> stepper;
|
||||
//boost::numeric::odeint::integrate_const(stepper, dxdt, buffer, t0, tdelta, tdelta);
|
||||
deserializeArray(result, buffer);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -17,24 +17,24 @@ public:
|
||||
private:
|
||||
struct Body
|
||||
{
|
||||
entt::entity id;
|
||||
float inverseMass;
|
||||
Vector centerOfMass;
|
||||
Matrix3 iBody, iBodyInv;
|
||||
Vector scale;
|
||||
entt::entity id = entt::entity();
|
||||
float inverseMass = 0.0f;
|
||||
Vector centerOfMass = Vector();
|
||||
Matrix3 iBody = Matrix3(), iBodyInv = Matrix3();
|
||||
Vector scale = Vector();
|
||||
|
||||
Vector x;
|
||||
Quaternion q;
|
||||
Vector P;
|
||||
Vector L;
|
||||
Vector x = Vector();
|
||||
Quaternion q = Quaternion();
|
||||
Vector P = Vector();
|
||||
Vector L = Vector();
|
||||
|
||||
Matrix3 iInv;
|
||||
Matrix3 R;
|
||||
Vector v;
|
||||
Vector omega;
|
||||
Vector force;
|
||||
Vector torque;
|
||||
Matrix4 matrix;
|
||||
Matrix3 iInv = Matrix3();
|
||||
Matrix3 R = Matrix3();
|
||||
Vector v = Vector();
|
||||
Vector omega = Vector();
|
||||
Vector force = Vector();
|
||||
Vector torque = Vector();
|
||||
Matrix4 matrix = Matrix4();
|
||||
Vector ptVelocity(Vector p) const {return v + glm::cross(omega, p - x + centerOfMass);}
|
||||
void updateMatrix() {
|
||||
Matrix4 scaleMatrix = glm::scale(Matrix4(1), scale);
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"dependencies": [
|
||||
"assimp",
|
||||
"entt",
|
||||
"stb",
|
||||
"dp-thread-pool",
|
||||
"entt",
|
||||
"freetype",
|
||||
"glfw3",
|
||||
"glm",
|
||||
"ktx",
|
||||
"nlohmann-json",
|
||||
"shader-slang"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user