Compare commits

..
38 Commits
Author SHA1 Message Date
brammie15 d26f61a16f feat: add canvas rework 2026-11-01 23:16:58 +01:00
brammie15 6a85d17899 feat: add new fancy reflection 2026-11-01 23:12:00 +01:00
brammie15 08acd84404 feat: add reflection 2026-10-30 17:09:53 +01:00
brammie15 0fbc023018 feat: add export / file packing 2026-10-30 15:42:08 +01:00
brammie15 de7e489cc0 feat: update asset browser 2026-10-30 10:16:17 +01:00
brammie15 9cf9242c2a feat: add more image types to load from cooked files 2026-10-24 13:23:30 +02:00
brammie15 118016bcc7 feat: add more collider types + camera snapping fix 2026-10-24 02:34:09 +02:00
brammie15 355dfa7851 feat: make image loading async 2026-10-24 02:03:10 +02:00
brammie15 aa3eef259c feat: start loading some stuff async 2026-10-24 01:29:00 +02:00
brammie15 9c5a97cfbd feat: add JobSystem 2026-10-24 00:59:22 +02:00
brammie15 b798ed0378 feat: add simple transparency 2026-10-24 00:36:58 +02:00
brammie15 0b7cc38543 feat: add audio system 2026-10-23 22:07:52 +02:00
brammie15 a3d3da4a67 feat: move editor to project / add post processing etc 2026-10-23 20:54:12 +02:00
brammie15 f7e7c56392 feat: add click to select 2026-10-23 20:53:56 +02:00
brammie15 f055bdcbf1 feat: add selection to meshrendercomponent 2026-10-22 22:24:59 +02:00
brammie15 f99147b1a2 feat: move rendering to an imgui window 2026-10-22 22:02:57 +02:00
brammie15 dde2c7daf9 feat: add pauzing of the running game 2026-10-22 18:10:23 +02:00
brammie15 e5d37965a1 feat: add play / editor mode 2026-10-22 01:25:53 +02:00
brammie15 3df0f89343 fix: material serialization 2026-10-22 00:30:23 +02:00
brammie15 3a04c1884a feat: split tests into per-suite files 2026-10-19 00:45:29 +02:00
brammie15 92c1daf396 feat: draw meshes with instanced multi-draw indirect 2026-10-19 00:45:25 +02:00
brammie15 997844eaa7 fix: replace runtime waitIdle calls with a deletion queue 2026-10-19 00:45:24 +02:00
brammie15 36341bb5e0 feat: remove SimplePhysicsWorld 2026-10-19 00:44:29 +02:00
brammie15 ad16daea7c feat: add basic canvas / improve inspector 2026-10-18 20:42:04 +02:00
brammie15 7df65f52b5 feat: add prefabs 2026-10-18 17:51:56 +02:00
brammie15 d21c2ccfd7 feat: add ObjectRef for scene loading to not rely on runtime id's 2026-10-18 17:15:51 +02:00
brammie15 94fa2bb4b2 feat: add vec3 type to nhollman json / fix: scene serialisation stuff 2026-10-18 15:20:01 +02:00
brammie15 7223e9ce07 feat: add moving platform support + fix jolt 2026-10-18 13:34:30 +02:00
brammie15 65a7310b56 feat: add spot light shadows with a tilled buffer 2026-10-18 12:56:52 +02:00
brammie15 4bd99b25d1 feat: add imguizmo + trigger buxfix 2026-10-18 11:45:37 +02:00
brammie15 70c940c476 feat: add Activateable in Lightkeeper 2026-10-17 17:00:00 +02:00
brammie15 89a168f76d feat: Add window class 2026-10-17 16:25:09 +02:00
brammie15 67c685a158 feat: add text rendering with SDF's 2026-10-17 16:00:51 +02:00
brammie15 7dd5ee7903 feat: add interactable component and test button 2026-10-16 23:25:11 +02:00
brammie15 faba4171ec feat: revamp 2D pipeline to use SDF's for rendering 2026-10-16 23:23:26 +02:00
brammie15 469bb287b7 feat: add debug rendering for other types of colliders / split game into more logical functions / files 2026-10-16 15:08:10 +02:00
brammie15 4c9b77c948 feat: improve fps controller / add fog and ambient light to the scene 2026-10-16 09:29:59 +02:00
brammie15 21621001c2 feat: add pbr support 2026-10-13 00:57:35 +02:00
431 changed files with 79919 additions and 5392 deletions
+6
View File
@@ -51,3 +51,9 @@
[submodule "destrum/third_party/tracy"] [submodule "destrum/third_party/tracy"]
path = destrum/third_party/tracy path = destrum/third_party/tracy
url = https://github.com/wolfpld/tracy.git url = https://github.com/wolfpld/tracy.git
[submodule "destrum/third_party/imguizmo"]
path = destrum/third_party/imguizmo
url = https://github.com/CedricGuillemet/ImGuizmo.git
[submodule "destrum/third_party/openal-soft"]
path = destrum/third_party/openal-soft
url = https://github.com/kcat/openal-soft.git
+18 -1
View File
@@ -8,6 +8,12 @@ set(CMAKE_CXX_EXTENSIONS OFF)
include(CTest) include(CTest)
option(DESTRUM_ENABLE_WARNINGS "Enable warnings for first-party targets" ON) option(DESTRUM_ENABLE_WARNINGS "Enable warnings for first-party targets" ON)
option(DESTRUM_STRICT_ASSET_COOKING "Fail the build when an asset falls back to its source instead of being cooked" ON)
set(DESTRUM_CHEF_FLAGS)
if (DESTRUM_STRICT_ASSET_COOKING)
list(APPEND DESTRUM_CHEF_FLAGS --strict)
endif()
function(destrum_enable_warnings target) function(destrum_enable_warnings target)
if (NOT DESTRUM_ENABLE_WARNINGS) if (NOT DESTRUM_ENABLE_WARNINGS)
@@ -27,6 +33,7 @@ if (MSVC)
endif() endif()
add_subdirectory(destrum) add_subdirectory(destrum)
add_subdirectory(editor)
add_subdirectory(lightkeeper) add_subdirectory(lightkeeper)
add_subdirectory(TheChef) add_subdirectory(TheChef)
@@ -37,6 +44,7 @@ endif()
destrum_enable_warnings(destrum_assets) destrum_enable_warnings(destrum_assets)
destrum_enable_warnings(destrum) destrum_enable_warnings(destrum)
destrum_enable_warnings(destrum_editor)
destrum_enable_warnings(lightkeeper) destrum_enable_warnings(lightkeeper)
add_custom_target(CleanupAssets add_custom_target(CleanupAssets
@@ -53,10 +61,19 @@ add_dependencies(CookAssets
_internal_cook_engine_assets _internal_cook_engine_assets
) )
add_custom_target(Export)
add_dependencies(Export _internal_export_lightkeeper)
add_custom_target(ValidateAssets)
add_dependencies(ValidateAssets
_internal_validate_game_assets
_internal_validate_engine_assets
)
option(ENABLE_SANITIZERS "Enable Address/Undefined sanitizers" OFF) option(ENABLE_SANITIZERS "Enable Address/Undefined sanitizers" OFF)
if (ENABLE_SANITIZERS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") if (ENABLE_SANITIZERS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
foreach(target destrum lightkeeper) foreach(target destrum destrum_editor lightkeeper)
target_compile_options(${target} PRIVATE target_compile_options(${target} PRIVATE
-fsanitize=address,undefined -fsanitize=address,undefined
-fno-omit-frame-pointer -fno-omit-frame-pointer
+22 -3
View File
@@ -12,6 +12,10 @@ Destrum is a C++20 Vulkan rendering/game-engine playground. It contains the core
* Skeletal animation support * Skeletal animation support
* Skybox/cubemap rendering * Skybox/cubemap rendering
* Asset cooking pipeline for engine and game assets * Asset cooking pipeline for engine and game assets
* Editor library: docked viewport, play/pause/stop, undo/redo, click to select, gizmos, asset browser
* Stable asset ids (`.meta` files) and material files (`.dmat`)
* HDR rendering with exposure and tonemapping (ACES, Khronos PBR Neutral)
* 3D audio through OpenAL Soft (`AudioSource` / `AudioListener`, WAV and OGG)
* CMake-based build setup with third-party dependencies as submodules * CMake-based build setup with third-party dependencies as submodules
## Repository layout ## Repository layout
@@ -24,6 +28,8 @@ Destrum is a C++20 Vulkan rendering/game-engine playground. It contains the core
│ ├── src/ # Engine implementation │ ├── src/ # Engine implementation
│ ├── assets_src/ # Source engine assets │ ├── assets_src/ # Source engine assets
│ └── third_party/# Vendored/submodule dependencies │ └── third_party/# Vendored/submodule dependencies
├── editor/ # Editor library (destrum::editor), attached to a game at startup
├── docs/ # How the engine pieces work
├── lightkeeper/ # Demo/game executable using Destrum ├── lightkeeper/ # Demo/game executable using Destrum
│ ├── include/ │ ├── include/
│ ├── src/ │ ├── src/
@@ -52,7 +58,8 @@ Most dependencies are included as Git submodules:
* GLM * GLM
* nlohmann/json * nlohmann/json
* spdlog * spdlog
* stb * stb (image, vorbis)
* OpenAL Soft
* tinygltf * tinygltf
* tinyexr * tinyexr
* Assimp * Assimp
@@ -111,6 +118,16 @@ cmake --build build --target ValidateShaders
`CookAssets` processes both engine and game assets. `CleanupAssets` removes generated runtime asset output. `CookAssets` processes both engine and game assets. `CleanupAssets` removes generated runtime asset output.
`ValidateShaders` runs `spirv-val` over the cooked engine shaders when the Vulkan SDK provides it. `ValidateShaders` runs `spirv-val` over the cooked engine shaders when the Vulkan SDK provides it.
Export a folder other people can run (the game, its DLLs and every cooked asset packed into one `assets.dpak`):
```bash
cmake --build build --config Release --target Export
```
It ends up in `build/export/Release/lightkeeper/`, plus a `lightkeeper.zip` next to it. On Windows, `export.bat` does
the same and opens the folder. `TheChef --list build/export/Release/lightkeeper/assets.dpak` shows what takes up the
space. See `docs/CookedAssets.md`.
Install the application, engine library, public headers, and runtime assets: Install the application, engine library, public headers, and runtime assets:
```bash ```bash
@@ -119,7 +136,7 @@ cmake --install build --config Release
## Demo app ## Demo app
`lightkeeper` is the current demo application. It creates an SDL window, initializes the Destrum app, loads assets, sets up a scene, renders meshes, skyboxes, and a skinned animated character. `lightkeeper` is the current demo application. It loads its level from `lightkeeper/assets_src/scenes/main.scene` and starts in the editor. Press F5 to play, or run `lightkeeper --game` to skip the editor. See `docs/Editor.md`.
## Development notes ## Development notes
@@ -134,9 +151,11 @@ destrum::destrum
Game/demo targets can link against it: Game/demo targets can link against it:
```cmake ```cmake
target_link_libraries(my_game PRIVATE destrum::destrum) target_link_libraries(my_game PRIVATE destrum::destrum destrum::editor)
``` ```
The editor is optional, a game without it links only `destrum::destrum`.
## License ## License
Do what you want dawgs :pray: Do what you want dawgs :pray:
+1 -1
Submodule TheChef updated: 0273340e3b...abcec12c90
+101 -4
View File
@@ -4,6 +4,7 @@ add_subdirectory(third_party)
add_library(destrum_assets add_library(destrum_assets
"src/Assets/ModelFile.cpp" "src/Assets/ModelFile.cpp"
"src/Assets/TextureFile.cpp" "src/Assets/TextureFile.cpp"
"src/Assets/PackFile.cpp"
) )
add_library(destrum::assets ALIAS destrum_assets) add_library(destrum::assets ALIAS destrum_assets)
@@ -34,11 +35,18 @@ target_compile_definitions(destrum_assets
set(SRC_FILES set(SRC_FILES
"src/App.cpp" "src/App.cpp"
"src/Event.cpp" "src/Event.cpp"
"src/Window.cpp"
"src/Audio/AudioDecoder.cpp"
"src/Audio/AudioSystem.cpp"
"src/Components/Animator.cpp" "src/Components/Animator.cpp"
"src/Components/AudioListener.cpp"
"src/Components/AudioSource.cpp"
"src/Components/CameraComponent.cpp" "src/Components/CameraComponent.cpp"
"src/Components/LightComponent.cpp" "src/Components/LightComponent.cpp"
"src/Components/MeshRendererComponent.cpp" "src/Components/MeshRendererComponent.cpp"
"src/Components/MeshRendererInspector.cpp"
"src/Components/Rotator.cpp" "src/Components/Rotator.cpp"
"src/Components/Spinner.cpp" "src/Components/Spinner.cpp"
"src/Components/OrbitAndSpin.cpp" "src/Components/OrbitAndSpin.cpp"
@@ -47,15 +55,27 @@ set(SRC_FILES
"src/Components/Physics/BoxCollider.cpp" "src/Components/Physics/BoxCollider.cpp"
"src/Components/Physics/CapsuleCollider.cpp" "src/Components/Physics/CapsuleCollider.cpp"
"src/Components/Physics/Collider.cpp" "src/Components/Physics/Collider.cpp"
"src/Components/Physics/ConvexHullCollider.cpp"
"src/Components/Physics/CylinderCollider.cpp"
"src/Components/Physics/MeshCollider.cpp"
"src/Components/Physics/MeshShapeCollider.cpp"
"src/Components/Physics/SphereCollider.cpp" "src/Components/Physics/SphereCollider.cpp"
"src/Components/UI/Canvas.cpp"
"src/Components/UI/RectTransform.cpp"
"src/Components/UI/UIImage.cpp"
"src/Components/UI/UIText.cpp"
"src/Graphics/BindlessSetManager.cpp" "src/Graphics/BindlessSetManager.cpp"
"src/Graphics/Camera.cpp" "src/Graphics/Camera.cpp"
"src/Graphics/DebugDraw.cpp"
"src/Graphics/DeletionQueue.cpp"
"src/Graphics/ComputePipeline.cpp" "src/Graphics/ComputePipeline.cpp"
"src/Graphics/Frustum.cpp" "src/Graphics/Frustum.cpp"
"src/Graphics/GfxDevice.cpp" "src/Graphics/GfxDevice.cpp"
"src/Graphics/Caches/ImageCache.cpp" "src/Graphics/Caches/ImageCache.cpp"
"src/Graphics/ImageLoader.cpp" "src/Graphics/ImageLoader.cpp"
"src/Graphics/IndirectDrawList.cpp"
"src/Graphics/ImmediateExecuter.cpp" "src/Graphics/ImmediateExecuter.cpp"
"src/Graphics/Init.cpp" "src/Graphics/Init.cpp"
"src/Graphics/Caches/MaterialCache.cpp" "src/Graphics/Caches/MaterialCache.cpp"
@@ -65,51 +85,65 @@ set(SRC_FILES
"src/Graphics/Swapchain.cpp" "src/Graphics/Swapchain.cpp"
"src/Graphics/Util.cpp" "src/Graphics/Util.cpp"
"src/Graphics/RenderResources.cpp" "src/Graphics/RenderResources.cpp"
"src/Graphics/ResourcesInspector.cpp"
"src/Graphics/Managers/VulkanInstanceManager.cpp" "src/Graphics/Managers/VulkanInstanceManager.cpp"
"src/Graphics/Managers/MemoryManager.cpp" "src/Graphics/Managers/MemoryManager.cpp"
"src/Graphics/Managers/FrameManager.cpp" "src/Graphics/Managers/FrameManager.cpp"
"src/Graphics/Managers/ImageManager.cpp" "src/Graphics/Managers/ImageManager.cpp"
"src/Graphics/Managers/LineRenderingManager.cpp" "src/Graphics/Managers/LineRenderingManager.cpp"
"src/Graphics/Managers/QuadRenderingManager.cpp" "src/Graphics/Managers/Renderer2D.cpp"
"src/Graphics/Resources/GPUImage.cpp" "src/Graphics/Resources/GPUImage.cpp"
"src/Graphics/Resources/NBuffer.cpp" "src/Graphics/Resources/NBuffer.cpp"
"src/Graphics/Resources/Cubemap.cpp" "src/Graphics/Resources/Cubemap.cpp"
"src/Graphics/Resources/Font.cpp"
"src/Graphics/Resources/FontCache.cpp"
"src/Graphics/Resources/PrimitiveMeshes.cpp"
"src/Graphics/Pipelines/MeshPipeline.cpp" "src/Graphics/Pipelines/MeshPipeline.cpp"
"src/Graphics/Pipelines/LineRenderingPass.cpp" "src/Graphics/Pipelines/LineRenderingPass.cpp"
"src/Graphics/Pipelines/QuadRendererPass.cpp" "src/Graphics/Pipelines/Renderer2DPass.cpp"
"src/Graphics/Pipelines/SkyboxPipeline.cpp" "src/Graphics/Pipelines/SkyboxPipeline.cpp"
"src/Graphics/Pipelines/LightCullingPipeline.cpp" "src/Graphics/Pipelines/LightCullingPipeline.cpp"
"src/Graphics/Pipelines/ShadowMapPipeline.cpp" "src/Graphics/Pipelines/ShadowMapPipeline.cpp"
"src/Graphics/Pipelines/SkinningPipeline.cpp" "src/Graphics/Pipelines/SkinningPipeline.cpp"
"src/Graphics/Pipelines/ImguiPass.cpp" "src/Graphics/Pipelines/ImguiPass.cpp"
"src/Graphics/Pipelines/PostProcessPipeline.cpp"
"src/Input/InputManager.cpp" "src/Input/InputManager.cpp"
"src/ObjectModel/Component.cpp" "src/ObjectModel/Component.cpp"
"src/ObjectModel/GameObject.cpp" "src/ObjectModel/GameObject.cpp"
"src/ObjectModel/Object.cpp" "src/ObjectModel/Object.cpp"
"src/ObjectModel/ObjectRef.cpp"
"src/ObjectModel/Transform.cpp" "src/ObjectModel/Transform.cpp"
"src/Scene/Scene.cpp" "src/Scene/Scene.cpp"
"src/Scene/SceneManager.cpp" "src/Scene/SceneManager.cpp"
"src/Scene/ModelSpawner.cpp"
"src/Scene/ResourceCollector.cpp"
"src/FS/AssetFS.cpp" "src/FS/AssetFS.cpp"
"src/FS/Manifest.cpp" "src/FS/Manifest.cpp"
"src/Assets/AssetManager.cpp" "src/Assets/AssetManager.cpp"
"src/Assets/AssetDatabase.cpp"
"src/Serialization/SceneSerializer.cpp" "src/Serialization/SceneSerializer.cpp"
"src/Serialization/ObjectSerialization.cpp"
"src/Serialization/PrefabSerializer.cpp"
"src/Serialization/MaterialSerialization.cpp"
"src/Serialization/PrefabCache.cpp"
"src/Serialization/ComponentRegistry.cpp" "src/Serialization/ComponentRegistry.cpp"
"src/Serialization/Reflect.cpp"
"src/Util/DeltaTime.cpp" "src/Util/DeltaTime.cpp"
"src/Util/ImGuiUtils.cpp" "src/Util/ImGuiUtils.cpp"
"src/Threading/JobSystem.cpp"
"src/Physics/PhysicsWorld.cpp" "src/Physics/PhysicsWorld.cpp"
"src/Physics/SimplePhysicsWorld.cpp" "src/Physics/PhysicsMeshCache.cpp"
"src/Physics/PhysicsSceneBridge.cpp" "src/Physics/PhysicsSceneBridge.cpp"
"src/Physics/JoltPhysicsWorld.cpp" "src/Physics/JoltPhysicsWorld.cpp"
) )
@@ -145,12 +179,15 @@ target_link_libraries(destrum
tinygltf tinygltf
assimp assimp
imgui imgui
imguizmo
Jolt Jolt
Tracy::TracyClient Tracy::TracyClient
PRIVATE PRIVATE
freetype::freetype freetype::freetype
tinyexr tinyexr
OpenAL::OpenAL
stb::vorbis
) )
target_compile_definitions(destrum target_compile_definitions(destrum
@@ -197,10 +234,21 @@ add_custom_target(_internal_cook_engine_assets
COMMAND TheChef COMMAND TheChef
--input "${ASSETS_SRC_DIR}" --input "${ASSETS_SRC_DIR}"
--output "${ASSETS_RUNTIME_DIR}" --output "${ASSETS_RUNTIME_DIR}"
${DESTRUM_CHEF_FLAGS}
DEPENDS TheChef ${ENGINE_ASSET_SOURCES} DEPENDS TheChef ${ENGINE_ASSET_SOURCES}
VERBATIM VERBATIM
) )
add_custom_target(_internal_validate_engine_assets
COMMAND TheChef
--input "${ASSETS_SRC_DIR}"
--output "${ASSETS_RUNTIME_DIR}"
--validate
${DESTRUM_CHEF_FLAGS}
DEPENDS _internal_cook_engine_assets
VERBATIM
)
find_program(SPIRV_VAL_EXECUTABLE NAMES spirv-val spirv-val.exe) find_program(SPIRV_VAL_EXECUTABLE NAMES spirv-val spirv-val.exe)
if (SPIRV_VAL_EXECUTABLE) if (SPIRV_VAL_EXECUTABLE)
file(GLOB_RECURSE ENGINE_SHADER_SOURCES CONFIGURE_DEPENDS file(GLOB_RECURSE ENGINE_SHADER_SOURCES CONFIGURE_DEPENDS
@@ -213,6 +261,7 @@ if (SPIRV_VAL_EXECUTABLE)
file(RELATIVE_PATH shader_relative "${ASSETS_SRC_DIR}" "${shader_source}") file(RELATIVE_PATH shader_relative "${ASSETS_SRC_DIR}" "${shader_source}")
list(APPEND VALIDATE_SHADER_COMMANDS list(APPEND VALIDATE_SHADER_COMMANDS
COMMAND "${SPIRV_VAL_EXECUTABLE}" COMMAND "${SPIRV_VAL_EXECUTABLE}"
--target-env vulkan1.3 --scalar-block-layout
"${ASSETS_RUNTIME_DIR}/${shader_relative}.spv") "${ASSETS_RUNTIME_DIR}/${shader_relative}.spv")
endforeach() endforeach()
@@ -250,6 +299,54 @@ function(destrum_cook_engine_assets GAME_TARGET GAME_OUTPUT_DIR)
install(DIRECTORY "${_engine_runtime}/" DESTINATION "bin/assets/engine") install(DIRECTORY "${_engine_runtime}/" DESTINATION "bin/assets/engine")
endfunction() endfunction()
# A folder (and zip) other people can run: the game exe, its DLLs and every cooked asset packed into assets.dpak
function(destrum_add_export GAME_TARGET GAME_RUNTIME_DIR)
set(_engine_runtime "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/assets_runtime")
set(_export_root "${CMAKE_BINARY_DIR}/export/$<CONFIG>")
set(_export_dir "${_export_root}/${GAME_TARGET}")
# The release VC++ runtime ships app-local, debug builds only run where Visual Studio is installed
set(_system_libs)
if (MSVC)
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
include(InstallRequiredSystemLibraries)
set(_system_libs "$<$<NOT:$<CONFIG:Debug>>:${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}>")
endif()
add_custom_target(_internal_export_${GAME_TARGET}
COMMAND ${CMAKE_COMMAND} -E rm -rf "${_export_dir}" "${_export_dir}.zip"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_export_dir}"
COMMAND TheChef
--pack "${_export_dir}/assets.dpak"
--mount "engine=${_engine_runtime}"
--mount "game=${GAME_RUNTIME_DIR}"
COMMAND TheChef --list "${_export_dir}/assets.dpak" --top 10
COMMAND ${CMAKE_COMMAND} -E copy -t "${_export_dir}"
"$<TARGET_FILE:${GAME_TARGET}>"
"$<TARGET_RUNTIME_DLLS:${GAME_TARGET}>"
"${_system_libs}"
COMMAND ${CMAKE_COMMAND} -E chdir "${_export_root}"
${CMAKE_COMMAND} -E tar cf "${GAME_TARGET}.zip" --format=zip "${GAME_TARGET}"
COMMAND ${CMAKE_COMMAND} -E echo "Exported ${GAME_TARGET} to ${_export_dir}"
COMMAND_EXPAND_LISTS
VERBATIM
)
add_dependencies(_internal_export_${GAME_TARGET} ${GAME_TARGET})
endfunction()
# OpenAL is a DLL, every exe that links the engine needs a copy next to it
function(destrum_copy_runtime_dlls TARGET)
if (WIN32)
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_RUNTIME_DLLS:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>
COMMAND_EXPAND_LISTS
)
endif()
endfunction()
install(FILES $<TARGET_FILE:OpenAL::OpenAL> DESTINATION bin)
install(TARGETS destrum destrum_assets install(TARGETS destrum destrum_assets
ARCHIVE DESTINATION lib ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib LIBRARY DESTINATION lib
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
{
"allowFallback": [
"run.fbx"
]
}
@@ -0,0 +1,3 @@
{
"guid": "a09100c14a67b3840518b68b93fbadda"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

@@ -0,0 +1,712 @@
{
"asset": {
"version": "2.0",
"generator": "babylon.js glTF exporter for Maya 2018 v20200228.3 (with minor hand modifications)"
},
"extensionsUsed": [
"KHR_materials_transmission"
],
"scene": 0,
"scenes": [
{
"nodes": [
0,
1,
2,
3,
4,
5
]
}
],
"nodes": [
{
"mesh": 0,
"name": "Hose_low"
},
{
"mesh": 1,
"name": "RubberWood_low"
},
{
"mesh": 2,
"name": "GlassPlastic_low"
},
{
"mesh": 3,
"name": "MetalParts_low"
},
{
"mesh": 4,
"name": "LeatherParts_low"
},
{
"mesh": 5,
"name": "Lenses_low"
}
],
"meshes": [
{
"primitives": [
{
"attributes": {
"POSITION": 1,
"TANGENT": 2,
"NORMAL": 3,
"TEXCOORD_0": 4
},
"indices": 0,
"material": 0
}
],
"name": "Hose_low"
},
{
"primitives": [
{
"attributes": {
"POSITION": 6,
"TANGENT": 7,
"NORMAL": 8,
"TEXCOORD_0": 9
},
"indices": 5,
"material": 1
}
],
"name": "RubberWood_low"
},
{
"primitives": [
{
"attributes": {
"POSITION": 11,
"TANGENT": 12,
"NORMAL": 13,
"TEXCOORD_0": 14
},
"indices": 10,
"material": 2
}
],
"name": "GlassPlastic_low"
},
{
"primitives": [
{
"attributes": {
"POSITION": 16,
"TANGENT": 17,
"NORMAL": 18,
"TEXCOORD_0": 19
},
"indices": 15,
"material": 3
}
],
"name": "MetalParts_low"
},
{
"primitives": [
{
"attributes": {
"POSITION": 21,
"TANGENT": 22,
"NORMAL": 23,
"TEXCOORD_0": 24
},
"indices": 20,
"material": 4
}
],
"name": "LeatherParts_low"
},
{
"primitives": [
{
"attributes": {
"POSITION": 26,
"TANGENT": 27,
"NORMAL": 28,
"TEXCOORD_0": 29
},
"indices": 25,
"material": 5
}
],
"name": "Lenses_low"
}
],
"accessors": [
{
"bufferView": 0,
"componentType": 5123,
"count": 59040,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"componentType": 5126,
"count": 10472,
"max": [
0.10810829,
0.356580257,
0.190409869
],
"min": [
-0.07221258,
0.104120225,
-0.088394776
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"componentType": 5126,
"count": 10472,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 125664,
"componentType": 5126,
"count": 10472,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"componentType": 5126,
"count": 10472,
"type": "VEC2",
"name": "accessorUVs"
},
{
"bufferView": 0,
"byteOffset": 118080,
"componentType": 5123,
"count": 72534,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"byteOffset": 251328,
"componentType": 5126,
"count": 13638,
"max": [
0.162940636,
0.7025226,
0.200029165
],
"min": [
-0.158857465,
-2.14242937E-05,
-0.171545789
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"byteOffset": 167552,
"componentType": 5126,
"count": 13638,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 414984,
"componentType": 5126,
"count": 13638,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"byteOffset": 83776,
"componentType": 5126,
"count": 13638,
"type": "VEC2",
"name": "accessorUVs"
},
{
"bufferView": 0,
"byteOffset": 263148,
"componentType": 5123,
"count": 24408,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"byteOffset": 578640,
"componentType": 5126,
"count": 4676,
"max": [
0.140494063,
0.61828655,
0.147373646
],
"min": [
-0.140846014,
0.440957,
-0.107818365
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"byteOffset": 385760,
"componentType": 5126,
"count": 4676,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 634752,
"componentType": 5126,
"count": 4676,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"byteOffset": 192880,
"componentType": 5126,
"count": 4676,
"type": "VEC2",
"name": "accessorUVs"
},
{
"bufferView": 0,
"byteOffset": 311964,
"componentType": 5123,
"count": 60288,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"byteOffset": 690864,
"componentType": 5126,
"count": 13636,
"max": [
0.132708371,
0.6024364,
0.199477077
],
"min": [
-0.203642711,
0.02116075,
-0.147512689
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"byteOffset": 460576,
"componentType": 5126,
"count": 13636,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 854496,
"componentType": 5126,
"count": 13636,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"byteOffset": 230288,
"componentType": 5126,
"count": 13636,
"type": "VEC2",
"name": "accessorUVs"
},
{
"bufferView": 0,
"byteOffset": 432540,
"componentType": 5123,
"count": 65688,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"byteOffset": 1018128,
"componentType": 5126,
"count": 12534,
"max": [
0.124933377,
0.716000438,
0.129168555
],
"min": [
-0.125863016,
0.2958266,
-0.1541516
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"byteOffset": 678752,
"componentType": 5126,
"count": 12534,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 1168536,
"componentType": 5126,
"count": 12534,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"byteOffset": 339376,
"componentType": 5126,
"count": 12534,
"type": "VEC2",
"name": "accessorUVs"
},
{
"bufferView": 0,
"byteOffset": 563916,
"componentType": 5123,
"count": 2208,
"type": "SCALAR",
"name": "accessorIndices"
},
{
"bufferView": 1,
"byteOffset": 1318944,
"componentType": 5126,
"count": 436,
"max": [
0.101920746,
0.5936986,
0.152926728
],
"min": [
-0.101920947,
0.5300429,
0.090174824
],
"type": "VEC3",
"name": "accessorPositions"
},
{
"bufferView": 2,
"byteOffset": 879296,
"componentType": 5126,
"count": 436,
"type": "VEC4",
"name": "accessorTangents"
},
{
"bufferView": 1,
"byteOffset": 1324176,
"componentType": 5126,
"count": 436,
"type": "VEC3",
"name": "accessorNormals"
},
{
"bufferView": 3,
"byteOffset": 439648,
"componentType": 5126,
"count": 436,
"type": "VEC2",
"name": "accessorUVs"
}
],
"bufferViews": [
{
"buffer": 0,
"byteLength": 568332,
"name": "bufferViewScalar"
},
{
"buffer": 0,
"byteOffset": 568332,
"byteLength": 1329408,
"byteStride": 12,
"name": "bufferViewFloatVec3"
},
{
"buffer": 0,
"byteOffset": 1897740,
"byteLength": 886272,
"byteStride": 16,
"name": "bufferViewFloatVec4"
},
{
"buffer": 0,
"byteOffset": 2784012,
"byteLength": 443136,
"byteStride": 8,
"name": "bufferViewFloatVec2"
}
],
"buffers": [
{
"uri": "FlightHelmet.bin",
"byteLength": 3227148
}
],
"materials": [
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 2
},
"metallicRoughnessTexture": {
"index": 1
}
},
"normalTexture": {
"index": 0
},
"occlusionTexture": {
"index": 1
},
"doubleSided": true,
"name": "HoseMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 2
},
"metallicRoughnessTexture": {
"index": 1
}
},
"normalTexture": {
"index": 0
},
"occlusionTexture": {
"index": 1
},
"name": "RubberWoodMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 5
},
"metallicRoughnessTexture": {
"index": 4
}
},
"normalTexture": {
"index": 3
},
"occlusionTexture": {
"index": 4
},
"name": "GlassPlasticMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 8
},
"metallicRoughnessTexture": {
"index": 7
}
},
"normalTexture": {
"index": 6
},
"occlusionTexture": {
"index": 7
},
"name": "MetalPartsMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 11
},
"metallicRoughnessTexture": {
"index": 10
}
},
"normalTexture": {
"index": 9
},
"occlusionTexture": {
"index": 10
},
"name": "LeatherPartsMat"
},
{
"extensions": {
"KHR_materials_transmission": {
"transmissionFactor": 1
}
},
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 14
},
"metallicRoughnessTexture": {
"index": 13
}
},
"normalTexture": {
"index": 12
},
"occlusionTexture": {
"index": 13
},
"name": "LensesMat"
}
],
"textures": [
{
"sampler": 0,
"source": 0,
"name": "FlightHelmet_Materials_RubberWoodMat_Normal.png"
},
{
"sampler": 0,
"source": 1,
"name": "FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.png"
},
{
"sampler": 0,
"source": 2,
"name": "FlightHelmet_Materials_RubberWoodMat_BaseColor.png"
},
{
"sampler": 0,
"source": 3,
"name": "FlightHelmet_Materials_GlassPlasticMat_Normal.png"
},
{
"sampler": 0,
"source": 4,
"name": "FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.png"
},
{
"sampler": 0,
"source": 5,
"name": "FlightHelmet_Materials_GlassPlasticMat_BaseColor.png"
},
{
"sampler": 0,
"source": 6,
"name": "FlightHelmet_Materials_MetalPartsMat_Normal.png"
},
{
"sampler": 0,
"source": 7,
"name": "FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.png"
},
{
"sampler": 0,
"source": 8,
"name": "FlightHelmet_Materials_MetalPartsMat_BaseColor.png"
},
{
"sampler": 0,
"source": 9,
"name": "FlightHelmet_Materials_LeatherPartsMat_Normal.png"
},
{
"sampler": 0,
"source": 10,
"name": "FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.png"
},
{
"sampler": 0,
"source": 11,
"name": "FlightHelmet_Materials_LeatherPartsMat_BaseColor.png"
},
{
"sampler": 0,
"source": 12,
"name": "FlightHelmet_Materials_LensesMat_Normal.png"
},
{
"sampler": 0,
"source": 13,
"name": "FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.png"
},
{
"sampler": 0,
"source": 14,
"name": "FlightHelmet_Materials_LensesMat_BaseColor.png"
}
],
"images": [
{
"uri": "FlightHelmet_Materials_RubberWoodMat_Normal.png"
},
{
"uri": "FlightHelmet_Materials_RubberWoodMat_OcclusionRoughMetal.png"
},
{
"uri": "FlightHelmet_Materials_RubberWoodMat_BaseColor.png"
},
{
"uri": "FlightHelmet_Materials_GlassPlasticMat_Normal.png"
},
{
"uri": "FlightHelmet_Materials_GlassPlasticMat_OcclusionRoughMetal.png"
},
{
"uri": "FlightHelmet_Materials_GlassPlasticMat_BaseColor.png"
},
{
"uri": "FlightHelmet_Materials_MetalPartsMat_Normal.png"
},
{
"uri": "FlightHelmet_Materials_MetalPartsMat_OcclusionRoughMetal.png"
},
{
"uri": "FlightHelmet_Materials_MetalPartsMat_BaseColor.png"
},
{
"uri": "FlightHelmet_Materials_LeatherPartsMat_Normal.png"
},
{
"uri": "FlightHelmet_Materials_LeatherPartsMat_OcclusionRoughMetal.png"
},
{
"uri": "FlightHelmet_Materials_LeatherPartsMat_BaseColor.png"
},
{
"uri": "FlightHelmet_Materials_LensesMat_Normal.png"
},
{
"uri": "FlightHelmet_Materials_LensesMat_OcclusionRoughMetal.png"
},
{
"uri": "FlightHelmet_Materials_LensesMat_BaseColor.png"
}
],
"samplers": [
{
"magFilter": 9729,
"minFilter": 9987
}
]
}
@@ -0,0 +1,3 @@
{
"guid": "0407d177c8487bca092ffb7fd4d47aa2"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+3
View File
@@ -0,0 +1,3 @@
{
"guid": "78d91a725664c8b815531d55bc62683f"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Some files were not shown because too many files have changed in this diff Show More