builds now with VCPKG and MSAA works

This commit is contained in:
Dynamitos
2023-12-10 22:27:59 +01:00
parent ff8200ab35
commit a49bab9028
39 changed files with 490 additions and 422 deletions
+1
View File
@@ -31,6 +31,7 @@ bld/
[Bb]in/
[Oo]bj/
[Ll]og/
vcpkg_installed/
# Visual Studio 2015/2017 cache/options directory
.vs/
+3
View File
@@ -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
View File
@@ -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
View File
@@ -34,8 +34,7 @@
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64" ],
"intelliSenseMode": "windows-msvc-x64",
"variables": []
"intelliSenseMode": "windows-msvc-x64"
}
]
}
+180 -170
View File
@@ -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"
#)
#
Vendored Submodule
+1
Submodule external/vcpkg added at 16ee2ecb31
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -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;
+1
View File
@@ -10,6 +10,7 @@ using namespace Seele::Math;
Camera::Camera()
: viewMatrix(Matrix4())
, bNeedsViewBuild(false)
, cameraPos(Vector())
{
yaw = 3.1415f/2;
pitch = 0;
-1
View File
@@ -30,7 +30,6 @@ struct Camera
void buildViewMatrix();
Matrix4 viewMatrix;
Vector cameraPos;
Vector cameraDirection;
//Transforms relative to actor
float yaw;
float pitch;
+1 -1
View File
@@ -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()
{
}
+2
View File
@@ -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;
+1 -1
View File
@@ -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
+11 -7
View File
@@ -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;
+4 -1
View File
@@ -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;
+4 -1
View File
@@ -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;
-70
View File
@@ -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())
{
}
+7 -46
View File
@@ -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;
};
+6 -6
View File
@@ -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
+2 -2
View File
@@ -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,
+3
View File
@@ -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
{
+37 -1
View File
@@ -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;
}
}
+2
View File
@@ -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;
+89 -11
View File
@@ -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()
+13 -5
View File
@@ -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);
+13 -1
View File
@@ -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
{
+3 -3
View File
@@ -101,7 +101,7 @@ void Window::beginFrame()
{
glfwPollEvents();
vkAcquireNextImageKHR(graphics->getDevice(), swapchain, std::numeric_limits<uint64>::max(), imageAvailableSemaphores[currentSemaphoreIndex]->getHandle(), VK_NULL_HANDLE, &currentImageIndex);
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);
+1 -1
View File
@@ -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)
+2 -1
View File
@@ -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;
+3 -3
View File
@@ -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;
}
+16 -16
View File
@@ -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
View File
@@ -0,0 +1,15 @@
{
"dependencies": [
"assimp",
"entt",
"stb",
"dp-thread-pool",
"entt",
"freetype",
"glfw3",
"glm",
"ktx",
"nlohmann-json",
"shader-slang"
]
}