diff --git a/SHADE_Application/SHADE_Application.vcxproj b/SHADE_Application/SHADE_Application.vcxproj
index 11bbb48f..ab1ac84c 100644
--- a/SHADE_Application/SHADE_Application.vcxproj
+++ b/SHADE_Application/SHADE_Application.vcxproj
@@ -59,8 +59,8 @@
Use
SBpch.h
Level4
- _DEBUG;%(PreprocessorDefinitions)
- ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories)
+ NOMINMAX;_DEBUG;%(PreprocessorDefinitions)
+ ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories)
EditAndContinue
Disabled
false
@@ -79,8 +79,8 @@
Use
SBpch.h
Level4
- _RELEASE;%(PreprocessorDefinitions)
- ..\Dependencies\spdlog\include;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories)
+ NOMINMAX;_RELEASE;%(PreprocessorDefinitions)
+ ..\Dependencies\spdlog\include;$(VULKAN_SDK)\include;..\Dependencies\VMA\include;$(VULKAN_SDK)\Source\SPIRV-Reflect;..\SHADE_Engine\src;src;%(AdditionalIncludeDirectories)
Full
true
true
diff --git a/SHADE_Application/premake5.lua b/SHADE_Application/premake5.lua
index c10b1002..74a3d0de 100644
--- a/SHADE_Application/premake5.lua
+++ b/SHADE_Application/premake5.lua
@@ -14,7 +14,8 @@ project "SHADE_Application"
files
{
"%{prj.location}/src/**.h",
- "%{prj.location}/src/**.c",
+ "%{prj.location}/src/**.hpp",
+ "%{prj.location}/src/**.c",
"%{prj.location}/src/**.cpp",
"%{prj.location}/src/**.glsl",
}
@@ -22,6 +23,9 @@ project "SHADE_Application"
includedirs
{
"%{IncludeDir.spdlog}/include",
+ "%{IncludeDir.VULKAN}/include",
+ "%{IncludeDir.VMA}/include",
+ "%{IncludeDir.VULKAN}/Source/SPIRV-Reflect",
"../SHADE_Engine/src",
"src"
}
@@ -39,6 +43,11 @@ project "SHADE_Application"
postbuildcommands
{
}
+
+ defines
+ {
+ "NOMINMAX"
+ }
warnings 'Extra'
diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp
index 184b9611..69662415 100644
--- a/SHADE_Application/src/Application/SBApplication.cpp
+++ b/SHADE_Application/src/Application/SBApplication.cpp
@@ -1,5 +1,6 @@
#include "SBpch.h"
#include "SBApplication.h"
+#include "Engine/ECS_Base/System/SHSystemManager.h"
#ifdef SHEDITOR
#include "Editor/SHEditor.h"
@@ -23,6 +24,11 @@ namespace Sandbox
{
window.Create(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
+ SHADE::SHSystemManager::CreateSystem("Graphics System");
+ SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem("Graphics System"));
+ graphicsSystem->SetWindow(&window);
+
+ SHADE::SHSystemManager::Init();
#ifdef SHEDITOR
#else
@@ -32,18 +38,24 @@ namespace Sandbox
void SBApplication::Update(void)
{
+ SHADE::SHGraphicsSystem* graphicsSystem = static_cast(SHADE::SHSystemManager::GetSystem("Graphics System"));
+
//TODO: Change true to window is open
while (!window.WindowShouldClose())
{
+ graphicsSystem->BeginRender();
#ifdef SHEDITOR
#else
#endif
- }
+ graphicsSystem->EndRender();
+ }
}
void SBApplication::Exit(void)
{
+ SHADE::SHSystemManager::Exit();
+
#ifdef SHEDITOR
#else
#endif
diff --git a/SHADE_Application/src/Application/SBApplication.h b/SHADE_Application/src/Application/SBApplication.h
index a1bf11eb..94e296b1 100644
--- a/SHADE_Application/src/Application/SBApplication.h
+++ b/SHADE_Application/src/Application/SBApplication.h
@@ -1,6 +1,7 @@
#ifndef SB_APPLICATION_H
#define SB_APPLICATION_H
#include
+#include "Graphics/MiddleEnd/Interface/SHGraphicsSystem.h"
//using namespace SHADE;
namespace Sandbox
diff --git a/SHADE_Engine/SHADE_Engine.vcxproj b/SHADE_Engine/SHADE_Engine.vcxproj
index 71ffb25f..3d1c506f 100644
--- a/SHADE_Engine/SHADE_Engine.vcxproj
+++ b/SHADE_Engine/SHADE_Engine.vcxproj
@@ -173,8 +173,11 @@
+
+
+
diff --git a/SHADE_Engine/SHADE_Engine.vcxproj.filters b/SHADE_Engine/SHADE_Engine.vcxproj.filters
index f38a78a9..ceb9b80f 100644
--- a/SHADE_Engine/SHADE_Engine.vcxproj.filters
+++ b/SHADE_Engine/SHADE_Engine.vcxproj.filters
@@ -321,12 +321,21 @@
Resource
+
+ Resource
+
Resource
+
+ Resource
+
Resource
+
+ Resource
+
Scene
diff --git a/SHADE_Engine/premake5.lua b/SHADE_Engine/premake5.lua
index a94284df..fbc800d3 100644
--- a/SHADE_Engine/premake5.lua
+++ b/SHADE_Engine/premake5.lua
@@ -12,10 +12,10 @@ project "SHADE_Engine"
files
{
"%{prj.location}/src/**.h",
+ "%{prj.location}/src/**.hpp",
"%{prj.location}/src/**.c",
"%{prj.location}/src/**.cpp",
- "%{prj.location}/src/**.glsl",
- "%{wks.location}/Dependencies/stb_image/**.cpp"
+ "%{prj.location}/src/**.glsl"
}
includedirs
diff --git a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp
index 511af8fc..d815fb7e 100644
--- a/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp
+++ b/SHADE_Engine/src/Graphics/Devices/SHVkPhysicalDeviceLibrary.cpp
@@ -180,10 +180,10 @@ namespace SHADE
return;
}
- SHLOG_ERROR("Successfully queried Physical Devices:");
+ SHLOG_TRACE("Successfully queried Physical Devices:");
for (auto const& device : physicalDevices)
{
- SHLOG_ERROR(std::string_view (std::string("\t-") + GetDeviceTypeName(device.getProperties().deviceType) + device.getProperties().deviceName.operator std::string()));
+ SHLOG_TRACE(std::string_view (std::string("\t-") + GetDeviceTypeName(device.getProperties().deviceType) + device.getProperties().deviceName.operator std::string()));
}
}
}
diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp
index ad70a18f..7bc2f9ee 100644
--- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp
+++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp
@@ -25,11 +25,8 @@ namespace SHADE
/*---------------------------------------------------------------------------------*/
/* Constructor/Destructors */
/*---------------------------------------------------------------------------------*/
- SHGraphicsSystem::SHGraphicsSystem(SHWindow& window)
+ void SHGraphicsSystem::Init(void)
{
- // Save the SHWindow
- this->window = &window;
-
// Set Up Instance
SHVkInstance::Init(true, true, true);
@@ -39,10 +36,10 @@ namespace SHADE
device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice);
// Construct surface
- surface = device->CreateSurface(window.GetHWND());
+ surface = device->CreateSurface(window->GetHWND());
// Construct Swapchain
- auto windowDims = window.GetWindowSize();
+ auto windowDims = window->GetWindowSize();
swapchain = device->CreateSwapchain(surface, windowDims.first, windowDims.second, SHSwapchainParams
{
.surfaceImageFormats {vk::Format::eB8G8R8A8Unorm, vk::Format::eR8G8B8A8Unorm, vk::Format::eB8G8R8Unorm, vk::Format::eR8G8B8Unorm},
@@ -51,7 +48,7 @@ namespace SHADE
.vsyncOn = false, // TODO: Set to true when shipping game
});
- window.RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height)
+ window->RegisterWindowSizeCallback([&]([[maybe_unused]] uint32_t width, [[maybe_unused]] uint32_t height)
{
renderContext.SetIsResized(true);
});
@@ -127,7 +124,13 @@ namespace SHADE
/* RENDERGRAPH END TESTING */
/*-----------------------------------------------------------------------*/
}
- SHGraphicsSystem::~SHGraphicsSystem()
+
+ void SHGraphicsSystem::Run(float dt)
+ {
+
+ }
+
+ void SHGraphicsSystem::Exit(void)
{
//renderPass.Free();
renderContext.Destroy();
@@ -235,4 +238,10 @@ namespace SHADE
void SHGraphicsSystem::RemoveSegment(Handle segment)
{
}
+
+ void SHGraphicsSystem::SetWindow(SHWindow* wind) noexcept
+ {
+ window = wind;
+ }
+
}
diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h
index e1dff379..322ad98f 100644
--- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h
+++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h
@@ -21,6 +21,7 @@ of DigiPen Institute of Technology is prohibited.
#include "Graphics/SHVulkanIncludes.h"
#include "Graphics/MiddleEnd/PerFrame/SHRenderContext.h"
#include "Graphics/RenderGraph/SHRenderGraph.h"
+#include "Engine/ECS_Base/System/SHSystem.h"
namespace SHADE
{
@@ -61,7 +62,7 @@ namespace SHADE
portions of the screen.
*/
/***********************************************************************************/
- class SHGraphicsSystem
+ class SHGraphicsSystem : public SHSystem
{
public:
/*-----------------------------------------------------------------------------*/
@@ -72,8 +73,15 @@ namespace SHADE
/*-----------------------------------------------------------------------------*/
/* Constructor/Destructors */
/*-----------------------------------------------------------------------------*/
- SHGraphicsSystem(SHWindow& window);
- ~SHGraphicsSystem();
+ SHGraphicsSystem (void) = default;
+ ~SHGraphicsSystem(void) noexcept = default;
+
+ /*-----------------------------------------------------------------------------*/
+ /* SHSystem overrides */
+ /*-----------------------------------------------------------------------------*/
+ virtual void Init(void) override;
+ virtual void Run (float dt) override;
+ virtual void Exit(void) override;
/*-----------------------------------------------------------------------------*/
/* Lifecycle Functions */
@@ -93,6 +101,11 @@ namespace SHADE
Handle AddSegment(const VkViewport& viewport, Handle imageToUse);
void RemoveSegment(Handle segment);
+ /*-----------------------------------------------------------------------------*/
+ /* Setters */
+ /*-----------------------------------------------------------------------------*/
+ void SetWindow (SHWindow* wind) noexcept;
+
/*-----------------------------------------------------------------------------*/
/* Getters (Temporary) */
/*-----------------------------------------------------------------------------*/
diff --git a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp
index 4dd6f9d6..f46d5d17 100644
--- a/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp
+++ b/SHADE_Engine/src/Graphics/Swapchain/SHVkSwapchain.cpp
@@ -19,10 +19,14 @@ namespace SHADE
vkPresentModes = physicalDeviceHdl->GetVkPhysicalDevice().getSurfacePresentModesKHR(surfaceHdl->GetVkSurface());
if (vkSurfaceFormats.size() == 0)
+ {
SHLOG_ERROR("Failed to get surface formats from the physical device. ");
+ }
if (vkPresentModes.size() == 0)
+ {
SHLOG_ERROR("Failed to get present modes from the physical device. ");
+ }
}
vk::SurfaceFormatKHR SHVkSwapchain::ChooseSwapSurfaceFormat(std::vector const& surfaceFormats) const noexcept
diff --git a/SHADE_Engine/src/Resource/Handle.h b/SHADE_Engine/src/Resource/Handle.h
index 34662112..afaec8e1 100644
--- a/SHADE_Engine/src/Resource/Handle.h
+++ b/SHADE_Engine/src/Resource/Handle.h
@@ -139,7 +139,7 @@ namespace SHADE
/*-----------------------------------------------------------------------------*/
/* Data Members */
/*-----------------------------------------------------------------------------*/
- ResourceLibrary* library;
+ ResourceLibrary* library = nullptr;
/*-----------------------------------------------------------------------------*/
/* Friend Declarations */
diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.h b/SHADE_Engine/src/Resource/ResourceLibrary.h
index b05dc499..01a78d16 100644
--- a/SHADE_Engine/src/Resource/ResourceLibrary.h
+++ b/SHADE_Engine/src/Resource/ResourceLibrary.h
@@ -69,7 +69,7 @@ namespace SHADE
/* Helper Functions */
/*-----------------------------------------------------------------------------*/
void assertHandleValid(Handle handle) const;
- int getAvailableFreeIndex();
+ uint32_t getAvailableFreeIndex();
};
///
diff --git a/SHADE_Engine/src/Resource/ResourceLibrary.hpp b/SHADE_Engine/src/Resource/ResourceLibrary.hpp
index 2ad856c6..9aa72ead 100644
--- a/SHADE_Engine/src/Resource/ResourceLibrary.hpp
+++ b/SHADE_Engine/src/Resource/ResourceLibrary.hpp
@@ -35,13 +35,13 @@ namespace SHADE
}
else
{
- handle.id.Data.Version = 0;
- versionCounts.insert(handle.id.Data.Index, handle.id.Data.Version);
+ handle.id.Data.Version = 0U;
+ versionCounts.insert(static_cast(handle.id.Data.Index), handle.id.Data.Version);
}
handle.library = this;
// Create the resource
- [[maybe_unused]] T& obj = objects.insert(handle.id.Data.Index, std::forward(args) ...);
+ [[maybe_unused]] T& obj = objects.insert(static_cast(handle.id.Data.Index), std::forward(args) ...);
// Handling SelfHandle assignment
if constexpr (std::is_base_of_v, T>)
@@ -89,7 +89,7 @@ namespace SHADE
}
template
- inline int ResourceLibrary::getAvailableFreeIndex()
+ inline uint32_t ResourceLibrary::getAvailableFreeIndex()
{
// Get from the free list if present
if (!freeList.empty())
diff --git a/SHADE_Engine/src/Resource/SparseSet.hpp b/SHADE_Engine/src/Resource/SparseSet.hpp
index 70e15f29..5afcdee7 100644
--- a/SHADE_Engine/src/Resource/SparseSet.hpp
+++ b/SHADE_Engine/src/Resource/SparseSet.hpp
@@ -56,7 +56,7 @@ namespace SHADE
throw std::invalid_argument("An element at this index does not exist!");
// Swap with the last element
- const int BACK_IDX = denseArray.size() - 1;
+ const auto BACK_IDX = denseArray.size() - 1;
std::swap(denseArray[sparseArray[idx]], denseArray.back());
denseArray.pop_back();
// Update the sparse set by swapping the indices
@@ -110,7 +110,7 @@ namespace SHADE
// We need to resize the array
if (idx >= sparseArray.size())
{
- const int NEW_SIZE = idx + 1;
+ const auto NEW_SIZE = idx + 1;
sparseArray.resize(NEW_SIZE, INVALID);
inverseSparseArray.resize(NEW_SIZE, INVALID);
}
@@ -123,7 +123,7 @@ namespace SHADE
auto& insertedElem = denseArray.emplace_back(std::forward(args) ...);
// Update sparse and inverse sparse arrays
- const index_type DENSE_IDX = denseArray.size() - 1;
+ const auto DENSE_IDX = static_cast(denseArray.size()) - 1;
sparseArray[idx] = DENSE_IDX;
inverseSparseArray[DENSE_IDX] = idx;