Added SHDebugDrawSystem class
This commit is contained in:
parent
632df80d06
commit
550b8d85f0
|
@ -0,0 +1,155 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHDebugDrawSystem.cpp
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Oct 16, 2022
|
||||||
|
\brief Contains the definition of functions of the SHDebugDrawSystem class.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#include "SHpch.h"
|
||||||
|
#include "SHDebugDrawSystem.h"
|
||||||
|
#include "../Meshes/SHMeshData.h"
|
||||||
|
#include "../Meshes/SHPrimitiveGenerator.h"
|
||||||
|
#include "ECS_Base/Managers/SHSystemManager.h"
|
||||||
|
#include "SHGraphicsSystem.h"
|
||||||
|
#include "Graphics/Devices/SHVkLogicalDevice.h"
|
||||||
|
#include "../../SHVkUtil.h"
|
||||||
|
#include "Graphics/MiddleEnd/Interface/SHViewport.h"
|
||||||
|
#include "Graphics/MiddleEnd/Interface/SHRenderer.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* DrawRoutine */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
SHDebugDrawSystem::DrawRoutine::DrawRoutine()
|
||||||
|
: SHSystemRoutine("Debug Draw")
|
||||||
|
{}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawRoutine::Execute(double dt) noexcept
|
||||||
|
{
|
||||||
|
auto gfxSys = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
||||||
|
if (gfxSys)
|
||||||
|
{
|
||||||
|
SHLOG_WARNING("[DebugDraw] Attempted to do debug draw without a graphics system.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the buffer if it doesn't exist or just update it
|
||||||
|
SHDebugDrawSystem* system = static_cast<SHDebugDrawSystem*>(GetSystem());
|
||||||
|
const uint32_t DATA_SIZE = sizeof(PointVertex) * system->points.size();
|
||||||
|
SHVkUtil::EnsureBufferAndCopyHostVisibleData(gfxSys->GetDevice(), system->vertexBuffer, system->points.data(), DATA_SIZE, vk::BufferUsageFlagBits::eVertexBuffer);
|
||||||
|
|
||||||
|
// Reset for next frame
|
||||||
|
system->points.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* SHSystem overrides */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
void SHDebugDrawSystem::Init()
|
||||||
|
{
|
||||||
|
// Register function for subpass
|
||||||
|
const auto* GFX_SYSTEM = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
||||||
|
auto const& RENDERERS = GFX_SYSTEM->GetDefaultViewport()->GetRenderers();
|
||||||
|
auto renderGraph = RENDERERS[SHGraphicsConstants::RenderGraphIndices::WORLD]->GetRenderGraph();
|
||||||
|
auto subPass = renderGraph->GetNode("Debug Draw")->GetSubpass("Debug Draw");
|
||||||
|
subPass->AddExteriorDrawCalls([&](Handle<SHVkCommandBuffer>& cmdBuffer)
|
||||||
|
{
|
||||||
|
cmdBuffer->BindPipeline(GFX_SYSTEM->GetDebugDrawPipeline());
|
||||||
|
cmdBuffer->BindVertexBuffer(0, vertexBuffer, 0);
|
||||||
|
cmdBuffer->DrawArrays(static_cast<uint32_t>(points.size()), 1, 0, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::Exit()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Draw Functions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
void SHDebugDrawSystem::DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt)
|
||||||
|
{
|
||||||
|
points.emplace_back(PointVertex{ startPt, color });
|
||||||
|
points.emplace_back(PointVertex{ endPt, color });
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3)
|
||||||
|
{
|
||||||
|
DrawPoly(color, { pt1, pt2, pt3 });
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4)
|
||||||
|
{
|
||||||
|
DrawPoly(color, { pt1, pt2, pt3, pt4 });
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawPoly(const SHVec4& color, std::initializer_list<SHVec3> pointList)
|
||||||
|
{
|
||||||
|
DrawPoly(color, pointList.begin(), pointList.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size)
|
||||||
|
{
|
||||||
|
static const SHVec3 EXTENTS = SHVec3 { 0.5f, 0.5f, 0.5f };
|
||||||
|
static const SHVec3 UNIT_BOT_LEFT_BACK = SHVec3 { pos - EXTENTS };
|
||||||
|
static const SHVec3 UNIT_BOT_RIGHT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, 0.0f } };
|
||||||
|
static const SHVec3 UNIT_BOT_LEFT_FRONT = SHVec3 { pos + SHVec3 { 0.0f , -EXTENTS.y, EXTENTS.z } };
|
||||||
|
static const SHVec3 UNIT_BOT_RIGHT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, -EXTENTS.y, EXTENTS.z } };
|
||||||
|
static const SHVec3 UNIT_TOP_LEFT_BACK = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, 0.0f } };
|
||||||
|
static const SHVec3 UNIT_TOP_RIGHT_BACK = SHVec3 { pos + SHVec3 { 0.0f , EXTENTS.y, EXTENTS.z } };
|
||||||
|
static const SHVec3 UNIT_TOP_LEFT_FRONT = SHVec3 { pos + SHVec3 { EXTENTS.x, EXTENTS.y, EXTENTS.z } };
|
||||||
|
static const SHVec3 UNIT_TOP_RIGHT_FRONT = SHVec3 { pos + EXTENTS };
|
||||||
|
|
||||||
|
const SHVec3 BOT_LEFT_BACK = UNIT_BOT_LEFT_BACK * size;
|
||||||
|
const SHVec3 BOT_RIGHT_BACK = UNIT_BOT_RIGHT_BACK * size;
|
||||||
|
const SHVec3 BOT_LEFT_FRONT = UNIT_BOT_LEFT_FRONT * size;
|
||||||
|
const SHVec3 BOT_RIGHT_FRONT = UNIT_BOT_RIGHT_FRONT * size;
|
||||||
|
const SHVec3 TOP_LEFT_BACK = UNIT_TOP_LEFT_BACK * size;
|
||||||
|
const SHVec3 TOP_RIGHT_BACK = UNIT_TOP_RIGHT_BACK * size;
|
||||||
|
const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size;
|
||||||
|
const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size;
|
||||||
|
|
||||||
|
DrawPoly
|
||||||
|
(
|
||||||
|
color,
|
||||||
|
{
|
||||||
|
// Bottom Square
|
||||||
|
BOT_LEFT_BACK , BOT_RIGHT_BACK,
|
||||||
|
BOT_RIGHT_BACK , BOT_RIGHT_FRONT,
|
||||||
|
BOT_RIGHT_FRONT, BOT_LEFT_FRONT,
|
||||||
|
BOT_LEFT_FRONT , BOT_LEFT_BACK,
|
||||||
|
// Middle Lines
|
||||||
|
TOP_LEFT_BACK , BOT_LEFT_BACK,
|
||||||
|
TOP_RIGHT_BACK , BOT_RIGHT_BACK,
|
||||||
|
TOP_RIGHT_FRONT, BOT_RIGHT_FRONT,
|
||||||
|
TOP_LEFT_FRONT , BOT_LEFT_FRONT,
|
||||||
|
// Top Square
|
||||||
|
TOP_LEFT_BACK , TOP_RIGHT_BACK,
|
||||||
|
TOP_RIGHT_BACK , TOP_RIGHT_FRONT,
|
||||||
|
TOP_RIGHT_FRONT, TOP_LEFT_FRONT,
|
||||||
|
TOP_LEFT_FRONT , TOP_LEFT_BACK
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::DrawSphere(const SHVec4& color, const SHVec3& pos, double radius)
|
||||||
|
{
|
||||||
|
if (spherePoints.empty())
|
||||||
|
{
|
||||||
|
// Generate
|
||||||
|
const SHMeshData SPHERE = SHPrimitiveGenerator::Sphere();
|
||||||
|
for (const auto& idx : SPHERE.Indices)
|
||||||
|
{
|
||||||
|
spherePoints.emplace_back(SPHERE.VertexPositions[idx]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DrawPoly(color, spherePoints.begin(), spherePoints.end());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHDebugDrawSystem.h
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Oct 16, 2022
|
||||||
|
\brief Contains the definition of the SHDebugDrawSystem class.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// STL Includes
|
||||||
|
#include <vector>
|
||||||
|
// Project Includes
|
||||||
|
#include "SH_API.h"
|
||||||
|
#include "Math/Vector/SHVec2.h"
|
||||||
|
#include "Math/Vector/SHVec3.h"
|
||||||
|
#include "Math/Vector/SHVec4.h"
|
||||||
|
#include "ECS_Base/System/SHSystem.h"
|
||||||
|
#include "ECS_Base/System/SHSystemRoutine.h"
|
||||||
|
#include "Resource/SHHandle.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Forward Declarations */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
class SHVkBuffer;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Type Definitions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/***********************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Manages the Debug Draw system.
|
||||||
|
*/
|
||||||
|
/***********************************************************************************/
|
||||||
|
class SH_API SHDebugDrawSystem : public SHSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
/* System Routines */
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
class SH_API DrawRoutine final : public SHSystemRoutine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawRoutine();
|
||||||
|
virtual void Execute(double dt) noexcept override final;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
/* SHSystem overrides */
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
virtual void Init() override final;
|
||||||
|
virtual void Exit() override final;
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
/* Draw Functions */
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
void DrawLine(const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt);
|
||||||
|
void DrawTri(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3);
|
||||||
|
void DrawQuad(const SHVec4& color, const SHVec3& pt1, const SHVec3& pt2, const SHVec3& pt3, const SHVec3& pt4);
|
||||||
|
void DrawPoly(const SHVec4& color, std::initializer_list<SHVec3> pointList);
|
||||||
|
template<typename IterType>
|
||||||
|
void DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd);
|
||||||
|
void DrawCube(const SHVec4& color, const SHVec3& pos, const SHVec3& size);
|
||||||
|
void DrawSphere(const SHVec4& color, const SHVec3& pos, double radius);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
/* Type Definitions */
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
struct PointVertex
|
||||||
|
{
|
||||||
|
SHVec3 Position;
|
||||||
|
SHVec4 Color;
|
||||||
|
};
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
/* Data Members */
|
||||||
|
/*-------------------------------------------------------------------------------*/
|
||||||
|
// CPU Buffers
|
||||||
|
std::vector<PointVertex> points;
|
||||||
|
// GPU Buffers
|
||||||
|
Handle<SHVkBuffer> vertexBuffer;
|
||||||
|
// Cached Points for polygon drawing
|
||||||
|
std::vector<SHVec3> spherePoints;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "SHDebugDrawSystem.hpp"
|
|
@ -0,0 +1,41 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file SHDebugDrawSystem.hpp
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Oct 16, 2022
|
||||||
|
\brief Contains the definition of template functions the SHDebugDrawSystem
|
||||||
|
class.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
#include "SHDebugDrawSystem.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Template Functions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
template<typename IterType>
|
||||||
|
void SHADE::SHDebugDrawSystem::DrawPoly(const SHVec4& color, IterType pointListBegin, IterType pointListEnd)
|
||||||
|
{
|
||||||
|
// Ensure dereferenced type is SHVec3
|
||||||
|
static_assert(std::is_same_v<SHVec3, std::remove_cvref_t<decltype(*pointListBegin)>>, "Parameters to DrawPoly must be SHVec3.");
|
||||||
|
|
||||||
|
const size_t POINTS_COUNT = pointListEnd - pointListBegin;
|
||||||
|
// Invalid polygon
|
||||||
|
if (POINTS_COUNT < 2)
|
||||||
|
{
|
||||||
|
SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly().");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto pointIter = pointListBegin + 1; pointIter != pointListEnd; ++pointIter)
|
||||||
|
{
|
||||||
|
points.emplace_back(PointVertex { *(pointIter - 1), color });
|
||||||
|
points.emplace_back(PointVertex { *pointIter , color });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -127,15 +127,22 @@ namespace SHADE
|
||||||
shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true);
|
shaderSourceLibrary.LoadShader(2, "KirschCs.glsl", SH_SHADER_TYPE::COMPUTE, true);
|
||||||
shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true);
|
shaderSourceLibrary.LoadShader(3, "PureCopyCs.glsl", SH_SHADER_TYPE::COMPUTE, true);
|
||||||
|
|
||||||
|
shaderSourceLibrary.LoadShader(4, "DebugDrawVs.glsl", SH_SHADER_TYPE::VERTEX, true);
|
||||||
|
shaderSourceLibrary.LoadShader(5, "DebugDrawFs.glsl", SH_SHADER_TYPE::FRAGMENT, true);
|
||||||
|
|
||||||
shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary);
|
shaderModuleLibrary.ImportFromSourceLibrary(device, shaderSourceLibrary);
|
||||||
auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl");
|
auto cubeVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl");
|
||||||
auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl");
|
auto cubeFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl");
|
||||||
auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl");
|
auto greyscale = shaderModuleLibrary.GetShaderModule("KirschCs.glsl");
|
||||||
auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl");
|
auto pureCopy = shaderModuleLibrary.GetShaderModule("PureCopyCs.glsl");
|
||||||
|
auto debugDrawVS = shaderModuleLibrary.GetShaderModule("TestCubeVs.glsl");
|
||||||
|
auto debugDrawFS = shaderModuleLibrary.GetShaderModule("TestCubeFs.glsl");
|
||||||
cubeVS->Reflect();
|
cubeVS->Reflect();
|
||||||
cubeFS->Reflect();
|
cubeFS->Reflect();
|
||||||
greyscale->Reflect();
|
greyscale->Reflect();
|
||||||
pureCopy->Reflect();
|
pureCopy->Reflect();
|
||||||
|
debugDrawVS->Reflect();
|
||||||
|
debugDrawFS->Reflect();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept
|
void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept
|
||||||
|
|
|
@ -287,9 +287,8 @@ namespace SHADE
|
||||||
#endif
|
#endif
|
||||||
Handle<SHMousePickSystem> GetMousePickSystem(void) const noexcept {return mousePickSystem;};
|
Handle<SHMousePickSystem> GetMousePickSystem(void) const noexcept {return mousePickSystem;};
|
||||||
Handle<SHPostOffscreenRenderSystem> GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;};
|
Handle<SHPostOffscreenRenderSystem> GetPostOffscreenRenderSystem(void) const noexcept {return postOffscreenRender;};
|
||||||
//SHRenderGraph const& GetRenderGraph(void) const noexcept;
|
Handle<SHVkPipeline> GetDebugDrawPipeline(void) const noexcept { return debugDrawPipeline; }
|
||||||
|
|
||||||
//Handle<SHVkRenderpass> GetRenderPass() const { return renderPass; }
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -329,10 +328,6 @@ namespace SHADE
|
||||||
Handle<SHViewport> worldViewport; // Whole screen
|
Handle<SHViewport> worldViewport; // Whole screen
|
||||||
std::vector<Handle<SHViewport>> viewports; // Additional viewports
|
std::vector<Handle<SHViewport>> viewports; // Additional viewports
|
||||||
|
|
||||||
// Debug Renderers
|
|
||||||
Handle<SHRenderer> debugWorldRenderer;
|
|
||||||
Handle<SHRenderer> debugScreenRenderer;
|
|
||||||
|
|
||||||
// Temp renderers
|
// Temp renderers
|
||||||
Handle<SHRenderer> worldRenderer;
|
Handle<SHRenderer> worldRenderer;
|
||||||
|
|
||||||
|
@ -344,8 +339,9 @@ namespace SHADE
|
||||||
SHShaderSourceLibrary shaderSourceLibrary;
|
SHShaderSourceLibrary shaderSourceLibrary;
|
||||||
SHShaderModuleLibrary shaderModuleLibrary;
|
SHShaderModuleLibrary shaderModuleLibrary;
|
||||||
|
|
||||||
// Temp Materials
|
// Built-In Materials
|
||||||
Handle<SHMaterial> defaultMaterial;
|
Handle<SHMaterial> defaultMaterial;
|
||||||
|
Handle<SHVkPipeline> debugDrawPipeline;
|
||||||
|
|
||||||
Handle<SHRenderGraph> worldRenderGraph;
|
Handle<SHRenderGraph> worldRenderGraph;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_ARB_separate_shader_objects : enable
|
||||||
|
#extension GL_ARB_shading_language_420pack : enable
|
||||||
|
#extension GL_EXT_nonuniform_qualifier : require
|
||||||
|
|
||||||
|
layout(location = 0) in struct
|
||||||
|
{
|
||||||
|
vec4 vertColor;
|
||||||
|
} In;
|
||||||
|
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 outColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
outColor = In.vertColor;
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,24 @@
|
||||||
|
#version 450
|
||||||
|
#extension GL_KHR_vulkan_glsl : enable
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 aVertexPos;
|
||||||
|
layout(location = 1) in vec4 aVertColor;
|
||||||
|
|
||||||
|
|
||||||
|
layout(location = 0) out struct
|
||||||
|
{
|
||||||
|
vec4 vertColor; // location 0
|
||||||
|
|
||||||
|
} Out;
|
||||||
|
|
||||||
|
layout(set = 2, binding = 0) uniform CameraData
|
||||||
|
{
|
||||||
|
vec4 position;
|
||||||
|
mat4 vpMat;
|
||||||
|
} cameraData;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = cameraData.vpMat * vec4 (aVertexPos, 1.0f);
|
||||||
|
Out.vertColor = aVertColor;
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in New Issue