From c9db8262b76388a9562f48a55bde5be97d4d4fd2 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Fri, 3 Feb 2023 19:37:56 +0800 Subject: [PATCH 1/2] Added preprocessor checks for editor --- SHADE_Application/src/Application/SBApplication.cpp | 10 ++++++---- SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h | 2 +- SHADE_Engine/src/Physics/System/SHPhysicsSystem.h | 5 +---- SHADE_Engine/src/Scripting/SHScriptEngine.cpp | 4 ++-- SHADE_Managed/src/Engine/Application.cxx | 9 ++++++++- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index e97d9eb4..ffc4bacc 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -5,6 +5,7 @@ //#define SHEDITOR #ifdef SHEDITOR #include "Editor/SHEditor.h" +#include "Physics/System/SHPhysicsDebugDrawSystem.h" //#include "Scenes/SBEditorScene.h" #endif // SHEDITOR @@ -31,7 +32,6 @@ #include "Input/SHInputManager.h" #include "Math/Transform/SHTransformSystem.h" #include "Physics/System/SHPhysicsSystem.h" -#include "Physics/System/SHPhysicsDebugDrawSystem.h" #include "Scripting/SHScriptEngine.h" #include "UI/SHUISystem.h" #include "Animation/SHAnimationSystem.h" @@ -74,12 +74,15 @@ namespace Sandbox #endif window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow, wndData); + + SHAssetManager::Load(); + // Create Systems SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); -#ifndef _PUBLISH +#ifdef SHEDITOR SHSystemManager::CreateSystem(); #endif @@ -122,7 +125,7 @@ namespace Sandbox SHSystemManager::RegisterRoutine(); SHSystemManager::RegisterRoutine(); -#ifndef _PUBLISH +#ifdef SHEDITOR SHSystemManager::RegisterRoutine(); #endif @@ -155,7 +158,6 @@ namespace Sandbox SHComponentManager::CreateComponentSparseSet(); //SHComponentManager::CreateComponentSparseSet(); - SHAssetManager::Load(); //auto font = SHAssetManager::GetData(176667660); SHSystemManager::RegisterRoutine(); diff --git a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h index 995a1cf5..d02ba3d5 100644 --- a/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h +++ b/SHADE_Engine/src/ECS_Base/Managers/SHSystemManager.h @@ -94,7 +94,7 @@ namespace SHADE if (systemContainer.find(id) == systemContainer.end()) { - std::cout << "System Manager error: System Version " << version << " does not exit." << std::endl; + std::cout << "System Manager error: System Version " << typeid(T).name() << ", " << version << " does not exist." << std::endl; return nullptr; } diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h index 312c3625..c80e5d5c 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.h @@ -169,11 +169,8 @@ namespace SHADE SHPhysicsObjectManager objectManager; SHCollisionListener collisionListener; SHRaycaster raycaster; - - // For the debug drawer to draw rays - #ifdef SHEDITOR + std::vector raycastHits; - #endif /*---------------------------------------------------------------------------------*/ /* Function Members */ diff --git a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp index 435cb6fb..e6d97f74 100644 --- a/SHADE_Engine/src/Scripting/SHScriptEngine.cpp +++ b/SHADE_Engine/src/Scripting/SHScriptEngine.cpp @@ -62,9 +62,9 @@ namespace SHADE loadFunctions(); // Generate script assembly if it hasn't been before -#ifndef _PUBLISH + #ifndef _PUBLISH BuildScriptAssembly(); -#endif + #endif // Initialise the CSharp Engine csEngineInit(); diff --git a/SHADE_Managed/src/Engine/Application.cxx b/SHADE_Managed/src/Engine/Application.cxx index 06ad632f..5bde66d2 100644 --- a/SHADE_Managed/src/Engine/Application.cxx +++ b/SHADE_Managed/src/Engine/Application.cxx @@ -28,25 +28,32 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ bool Application::IsPlaying::get() { +#ifdef SHEDITOR auto editor = SHSystemManager::GetSystem(); if (editor) return editor->editorState == SHEditor::State::PLAY || editor->editorState == SHEditor::State::PAUSE; +#endif return true; } bool Application::IsPaused::get() { +#ifdef SHEDITOR auto editor = SHSystemManager::GetSystem(); if (editor) return editor->editorState == SHEditor::State::PAUSE; - +#endif return false; } bool Application::IsEditor::get() { +#ifdef SHEDITOR return SHSystemManager::GetSystem() != nullptr; +#else + return false; +#endif } int Application::WindowWidth::get() { -- 2.40.1 From 6cde511b364e3df0b4793994eb561193678a3109 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Fri, 3 Feb 2023 20:16:42 +0800 Subject: [PATCH 2/2] Shadows update Made it less dark --- Assets/Shaders/DeferredComposite_CS.glsl | 2 +- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 8317 -> 8333 bytes Assets/Shaders/ShadowMap_FS.glsl | 10 ++++++ Assets/Shaders/ShadowMap_FS.shshaderb | Bin 0 -> 365 bytes Assets/Shaders/ShadowMap_FS.shshaderb.shmeta | 3 ++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 32 ++++++++++++------ .../MiddleEnd/Interface/SHGraphicsSystem.h | 1 + 7 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 Assets/Shaders/ShadowMap_FS.glsl create mode 100644 Assets/Shaders/ShadowMap_FS.shshaderb create mode 100644 Assets/Shaders/ShadowMap_FS.shshaderb.shmeta diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index d28eaec0..50a269ac 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -60,7 +60,7 @@ float CalcShadowValue (sampler2D shadowMap, vec4 worldSpaceFragPos, mat4 lightPV if (fragPosLightPOV.z > sampledDepth && fragPosLightPOV.w > 0.0f) { - return 0.0f; + return 0.7f; } else return 1.0f; diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index ceca4e13568ca092b20096b7eec9b7c432767466..7f06b4713f034c5c4945e920f736283fcf7fc0df 100644 GIT binary patch literal 8333 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 Yy&SR*WqWXTp^KM$;@)StiN2Np1F+75%K!iX literal 8317 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 literal 0 HcmV?d00001 diff --git a/Assets/Shaders/ShadowMap_FS.shshaderb.shmeta b/Assets/Shaders/ShadowMap_FS.shshaderb.shmeta new file mode 100644 index 00000000..902f7f6d --- /dev/null +++ b/Assets/Shaders/ShadowMap_FS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: ShadowMap_FS +ID: 45925790 +Type: 2 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 6734a77e..99685585 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -128,6 +128,7 @@ namespace SHADE SHFreetypeInstance::Init(); //SHAssetManager::CompileAsset("../../Assets/Shaders/DeferredComposite_CS.glsl", false); + //SHAssetManager::CompileAsset("../../Assets/Shaders/ShadowMap_FS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/SSAO_CS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/SSAOBlur_CS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/PureCopy_CS.glsl", false); @@ -137,6 +138,7 @@ namespace SHADE //SHAssetManager::CompileAsset("../../Assets/Shaders/UI_FS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/Text_VS.glsl", false); + // Load Built In Shaders static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); static constexpr AssetID VS_ANIM = 47911992; animtVertShader = SHResourceManager::LoadOrGet(VS_ANIM); @@ -151,7 +153,8 @@ namespace SHADE static constexpr AssetID TEXT_FS = 38024754; textFS = SHResourceManager::LoadOrGet(TEXT_FS); static constexpr AssetID RENDER_SC_VS = 48082949; renderToSwapchainVS = SHResourceManager::LoadOrGet(RENDER_SC_VS); static constexpr AssetID RENDER_SC_FS = 36869006; renderToSwapchainFS = SHResourceManager::LoadOrGet(RENDER_SC_FS); - static constexpr AssetID SHADOW_MAP_VS = 44646107; shadowMapVS = SHResourceManager::LoadOrGet(SHADOW_MAP_VS); + static constexpr AssetID SHADOW_MAP_VS = 44646107; shadowMapVS = SHResourceManager::LoadOrGet(SHADOW_MAP_VS); + static constexpr AssetID SHADOW_MAP_FS = 45925790; shadowMapFS = SHResourceManager::LoadOrGet(SHADOW_MAP_FS); } @@ -583,14 +586,21 @@ namespace SHADE #endif } - //if (SHInputManager::GetKeyDown(SHInputManager::SH_KEYCODE::B)) - //{ - // auto& lightComps = SHComponentManager::GetDense(); - // for (auto& comp : lightComps) - // { - // comp.SetEnableShadow(true); - // } - //} + static bool shadowAdded = false; + + if (shadowAdded == false/* && SHInputManager::GetKey(SHInputManager::SH_KEYCODE::B)*/) + { + shadowAdded = true; + auto& lightComps = SHComponentManager::GetDense(); + if (lightComps.size() > 2) + { + lightComps[2].SetEnableShadow(true); + } + //for (auto& comp : lightComps) + //{ + // comp.SetEnableShadow(true); + //} + } renderGraph->Begin(frameIndex); auto cmdBuffer = renderGraph->GetCommandBuffer(frameIndex); @@ -809,11 +819,11 @@ namespace SHADE tempLibrary.Init(device); tempLibrary.CreateGraphicsPipelines ( - { shadowMapVS, {} }, shadowMapNode->GetRenderpass(), newSubpass, + { shadowMapVS, shadowMapFS }, shadowMapNode->GetRenderpass(), newSubpass, SHGraphicsPredefinedData::SystemType::BATCHING, SHGraphicsPredefinedData::GetShadowMapViState(), rasterState ); - shadowMapPipeline = tempLibrary.GetGraphicsPipeline({ shadowMapVS, {} }); + shadowMapPipeline = tempLibrary.GetGraphicsPipeline({ shadowMapVS, shadowMapFS }); } newSubpass->SetCompanionSubpass(companionSubpass, shadowMapPipeline); // set companion subpass and pipeline diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index d72dfcbd..a35065bd 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -469,6 +469,7 @@ namespace SHADE Handle renderToSwapchainVS; Handle renderToSwapchainFS; Handle shadowMapVS; + Handle shadowMapFS; // Fonts Handle testFont; -- 2.40.1