Integrated into SBApplication and accounted for case where number of points to draw is 0.
This commit is contained in:
parent
550b8d85f0
commit
57027da80b
|
@ -31,6 +31,7 @@
|
||||||
#include "FRC/SHFramerateController.h"
|
#include "FRC/SHFramerateController.h"
|
||||||
#include "AudioSystem/SHAudioSystem.h"
|
#include "AudioSystem/SHAudioSystem.h"
|
||||||
#include "Camera/SHCameraSystem.h"
|
#include "Camera/SHCameraSystem.h"
|
||||||
|
#include "Graphics/MiddleEnd/Interface/SHDebugDrawSystem.h"
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
#include "Graphics/MiddleEnd/Interface/SHRenderable.h"
|
#include "Graphics/MiddleEnd/Interface/SHRenderable.h"
|
||||||
|
@ -69,6 +70,7 @@ namespace Sandbox
|
||||||
SHGraphicsSystem* graphicsSystem = static_cast<SHGraphicsSystem*>(SHSystemManager::GetSystem<SHGraphicsSystem>());
|
SHGraphicsSystem* graphicsSystem = static_cast<SHGraphicsSystem*>(SHSystemManager::GetSystem<SHGraphicsSystem>());
|
||||||
SHSystemManager::CreateSystem<SHAudioSystem>();
|
SHSystemManager::CreateSystem<SHAudioSystem>();
|
||||||
SHSystemManager::CreateSystem<SHCameraSystem>();
|
SHSystemManager::CreateSystem<SHCameraSystem>();
|
||||||
|
SHSystemManager::CreateSystem<SHDebugDrawSystem>();
|
||||||
|
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
SDL_Init(SDL_INIT_VIDEO);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
@ -90,6 +92,7 @@ namespace Sandbox
|
||||||
SHSystemManager::RegisterRoutine<SHPhysicsSystem, SHPhysicsSystem::PhysicsPostUpdate>();
|
SHSystemManager::RegisterRoutine<SHPhysicsSystem, SHPhysicsSystem::PhysicsPostUpdate>();
|
||||||
|
|
||||||
SHSystemManager::RegisterRoutine<SHTransformSystem, SHTransformSystem::TransformPostPhysicsUpdate>();
|
SHSystemManager::RegisterRoutine<SHTransformSystem, SHTransformSystem::TransformPostPhysicsUpdate>();
|
||||||
|
SHSystemManager::RegisterRoutine<SHDebugDrawSystem, SHDebugDrawSystem::ProcessPointsRoutine>();
|
||||||
|
|
||||||
SHSystemManager::RegisterRoutine<SHGraphicsSystem, SHGraphicsSystem::BatcherDispatcherRoutine>();
|
SHSystemManager::RegisterRoutine<SHGraphicsSystem, SHGraphicsSystem::BatcherDispatcherRoutine>();
|
||||||
SHSystemManager::RegisterRoutine<SHGraphicsSystem, SHGraphicsSystem::BeginRoutine>();
|
SHSystemManager::RegisterRoutine<SHGraphicsSystem, SHGraphicsSystem::BeginRoutine>();
|
||||||
|
|
|
@ -25,11 +25,11 @@ namespace SHADE
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* DrawRoutine */
|
/* DrawRoutine */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
SHDebugDrawSystem::DrawRoutine::DrawRoutine()
|
SHDebugDrawSystem::ProcessPointsRoutine::ProcessPointsRoutine()
|
||||||
: SHSystemRoutine("Debug Draw")
|
: SHSystemRoutine("Debug Draw")
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void SHDebugDrawSystem::DrawRoutine::Execute(double dt) noexcept
|
void SHDebugDrawSystem::ProcessPointsRoutine::Execute(double dt) noexcept
|
||||||
{
|
{
|
||||||
auto gfxSys = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
auto gfxSys = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
||||||
if (gfxSys)
|
if (gfxSys)
|
||||||
|
@ -40,8 +40,12 @@ namespace SHADE
|
||||||
|
|
||||||
// Create the buffer if it doesn't exist or just update it
|
// Create the buffer if it doesn't exist or just update it
|
||||||
SHDebugDrawSystem* system = static_cast<SHDebugDrawSystem*>(GetSystem());
|
SHDebugDrawSystem* system = static_cast<SHDebugDrawSystem*>(GetSystem());
|
||||||
|
system->numPoints = system->points.size();
|
||||||
const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size();
|
const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size();
|
||||||
SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer);
|
if (DATA_SIZE > 0)
|
||||||
|
{
|
||||||
|
SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
// Reset for next frame
|
// Reset for next frame
|
||||||
system->points.clear();
|
system->points.clear();
|
||||||
|
@ -59,6 +63,10 @@ namespace SHADE
|
||||||
auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw");
|
auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw");
|
||||||
subPass->AddExteriorDrawCalls([&](Handle<SHVkCommandBuffer>& cmdBuffer)
|
subPass->AddExteriorDrawCalls([&](Handle<SHVkCommandBuffer>& cmdBuffer)
|
||||||
{
|
{
|
||||||
|
// Don't draw if no points
|
||||||
|
if (numPoints <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline());
|
cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline());
|
||||||
cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0);
|
cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0);
|
||||||
cmdBuffer->DrawArrays(static_cast<uint32_t>(points.size()), 1, 0, 0);
|
cmdBuffer->DrawArrays(static_cast<uint32_t>(points.size()), 1, 0, 0);
|
||||||
|
@ -67,7 +75,10 @@ namespace SHADE
|
||||||
|
|
||||||
void SHDebugDrawSystem::Exit()
|
void SHDebugDrawSystem::Exit()
|
||||||
{
|
{
|
||||||
|
if (vertexBuffer)
|
||||||
|
{
|
||||||
|
vertexBuffer.Free();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -21,14 +21,10 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "ECS_Base/System/SHSystem.h"
|
#include "ECS_Base/System/SHSystem.h"
|
||||||
#include "ECS_Base/System/SHSystemRoutine.h"
|
#include "ECS_Base/System/SHSystemRoutine.h"
|
||||||
#include "Resource/SHHandle.h"
|
#include "Resource/SHHandle.h"
|
||||||
|
#include "Graphics/Buffers/SHVkBuffer.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
/* Forward Declarations */
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
|
||||||
class SHVkBuffer;
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Type Definitions */
|
/* Type Definitions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
@ -44,10 +40,10 @@ namespace SHADE
|
||||||
/*-------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------*/
|
||||||
/* System Routines */
|
/* System Routines */
|
||||||
/*-------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------*/
|
||||||
class SH_API DrawRoutine final : public SHSystemRoutine
|
class SH_API ProcessPointsRoutine final : public SHSystemRoutine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DrawRoutine();
|
ProcessPointsRoutine();
|
||||||
virtual void Execute(double dt) noexcept override final;
|
virtual void Execute(double dt) noexcept override final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -73,7 +69,7 @@ namespace SHADE
|
||||||
/*-------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------*/
|
||||||
/* Type Definitions */
|
/* Type Definitions */
|
||||||
/*-------------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------------*/
|
||||||
struct PointVertex
|
struct SH_API PointVertex
|
||||||
{
|
{
|
||||||
SHVec3 Position;
|
SHVec3 Position;
|
||||||
SHVec4 Color;
|
SHVec4 Color;
|
||||||
|
@ -85,6 +81,7 @@ namespace SHADE
|
||||||
std::vector<PointVertex> points;
|
std::vector<PointVertex> points;
|
||||||
// GPU Buffers
|
// GPU Buffers
|
||||||
Handle<SHVkBuffer> vertexBuffer;
|
Handle<SHVkBuffer> vertexBuffer;
|
||||||
|
uint32_t numPoints = 0;
|
||||||
// Cached Points for polygon drawing
|
// Cached Points for polygon drawing
|
||||||
std::vector<SHVec3> spherePoints;
|
std::vector<SHVec3> spherePoints;
|
||||||
};
|
};
|
||||||
|
|
|
@ -204,12 +204,15 @@ namespace SHADE
|
||||||
auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl");
|
auto pureCopyShader = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl");
|
||||||
gBufferNode->AddNodeCompute(pureCopyShader, { "Scene Pre-Process", "Scene" });
|
gBufferNode->AddNodeCompute(pureCopyShader, { "Scene Pre-Process", "Scene" });
|
||||||
|
|
||||||
|
// Set up Debug Draw Pass
|
||||||
|
auto debugDrawNode = worldRenderGraph->AddNode("Debug Draw", { "Scene" }, { "G-Buffer" });
|
||||||
|
auto debugDrawSubpass = debugDrawNode->AddSubpass("Debug Draw");
|
||||||
|
debugDrawSubpass->AddColorOutput("Scene");
|
||||||
|
|
||||||
auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"G-Buffer"}); // no predecessors
|
auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, {"Debug Draw"}); // no predecessors
|
||||||
auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass");
|
auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass");
|
||||||
dummySubpass->AddInput("Scene");
|
dummySubpass->AddInput("Scene");
|
||||||
|
|
||||||
|
|
||||||
// Generate world render graph
|
// Generate world render graph
|
||||||
worldRenderGraph->Generate();
|
worldRenderGraph->Generate();
|
||||||
|
|
||||||
|
@ -224,6 +227,24 @@ namespace SHADE
|
||||||
|
|
||||||
defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferSubpass);
|
defaultMaterial = AddMaterial(cubeVS, cubeFS, gBufferSubpass);
|
||||||
|
|
||||||
|
// Create debug draw pipeline
|
||||||
|
auto debugDrawVS = shaderModuleLibrary.GetShaderModule("DebugDrawVs.glsl");
|
||||||
|
auto debugDrawFS = shaderModuleLibrary.GetShaderModule("DebugDrawFs.glsl");
|
||||||
|
|
||||||
|
auto debugDrawPipelineLayout = resourceManager.Create<SHVkPipelineLayout>
|
||||||
|
(
|
||||||
|
device, SHPipelineLayoutParams
|
||||||
|
{
|
||||||
|
.shaderModules = { debugDrawVS, debugDrawFS },
|
||||||
|
.globalDescSetLayouts = SHGraphicsGlobalData::GetDescSetLayouts()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
debugDrawPipeline = resourceManager.Create<SHVkPipeline>(device, debugDrawPipelineLayout);
|
||||||
|
debugDrawPipeline->GetPipelineState().SetRasterizationState(SHRasterizationState
|
||||||
|
{
|
||||||
|
.polygonMode = vk::PolygonMode::eLine,
|
||||||
|
.cull_mode = vk::CullModeFlagBits::eNone
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHGraphicsSystem::InitMiddleEnd(void) noexcept
|
void SHGraphicsSystem::InitMiddleEnd(void) noexcept
|
||||||
|
|
Loading…
Reference in New Issue