From 1e0d79e0eb37bd75f63afb6b3eac4763472698b7 Mon Sep 17 00:00:00 2001 From: antopilo Date: Sun, 23 Mar 2025 00:06:54 -0400 Subject: [PATCH] Added textured quad to gizmo api --- Data/Shaders/Vulkan/gizmo.frag | 20 ++++++++++++++++++- Data/Shaders/Vulkan/gizmo.vert | 1 + .../Rendering/Vulkan/Constant/DebugConstant.h | 1 + .../Nuake/Rendering/Vulkan/DebugCmd.cpp | 15 ++++++++++++++ .../Source/Nuake/Rendering/Vulkan/DebugCmd.h | 2 ++ 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Data/Shaders/Vulkan/gizmo.frag b/Data/Shaders/Vulkan/gizmo.frag index bf1b3ce5..23e8c6c6 100644 --- a/Data/Shaders/Vulkan/gizmo.frag +++ b/Data/Shaders/Vulkan/gizmo.frag @@ -92,6 +92,7 @@ struct PSOutput { struct DebugConstant { float4x4 Transform; + int TextureID; }; [[vk::push_constant]] @@ -101,6 +102,23 @@ PSOutput main(PSInput input) { PSOutput output; - output.oColor0 = float4(input.UV.x, input.UV.y, 0, 1); + if(pushConstants.TextureID < 0) + { + output.oColor0 = float4(input.UV.x, input.UV.y, 0, 1); + } + else + { + float2 uv = input.UV; + float4 textureSample = textures[pushConstants.TextureID].Sample(mySampler, uv); + + // Alpha scisorring + if(textureSample.a < 0.1) + { + discard; + } + + output.oColor0 = textureSample; + } + return output; } \ No newline at end of file diff --git a/Data/Shaders/Vulkan/gizmo.vert b/Data/Shaders/Vulkan/gizmo.vert index 41ec36b1..a75de037 100644 --- a/Data/Shaders/Vulkan/gizmo.vert +++ b/Data/Shaders/Vulkan/gizmo.vert @@ -83,6 +83,7 @@ StructuredBuffer cameras; struct DebugConstant { float4x4 Transform; + int TextureID; }; [[vk::push_constant]] diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/Constant/DebugConstant.h b/Nuake/Source/Nuake/Rendering/Vulkan/Constant/DebugConstant.h index c8499295..e98c8d01 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/Constant/DebugConstant.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/Constant/DebugConstant.h @@ -6,5 +6,6 @@ namespace Nuake struct DebugConstant { Matrix4 Transform; + int TextureID; }; } \ No newline at end of file diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.cpp index 1f6d72d4..8158cab8 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.cpp @@ -1,6 +1,7 @@ #include "DebugCmd.h" #include "VulkanRenderer.h" +#include "Nuake/Rendering/Vulkan/VkResources.h" using namespace Nuake; @@ -17,6 +18,20 @@ DebugCmd::DebugCmd(Cmd& inCmd, PassRenderContext& inCtx) : void DebugCmd::DrawQuad(const Matrix4& transform) { debugConstant.Transform = transform; + debugConstant.TextureID = -1; + cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(DebugConstant), &debugConstant); + + auto& quadMesh = VkSceneRenderer::QuadMesh; + cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, quadMesh->GetDescriptorSet(), 1); + cmd.BindIndexBuffer(quadMesh->GetIndexBuffer()->GetBuffer()); + cmd.DrawIndexed(6); +} + +void DebugCmd::DrawTexturedQuad(const Matrix4& transform, Ref texture) +{ + debugConstant.Transform = transform; + debugConstant.TextureID = GPUResources::Get().GetBindlessTextureID(texture->GetID()); + cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(DebugConstant), &debugConstant); auto& quadMesh = VkSceneRenderer::QuadMesh; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.h b/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.h index dc3bcc65..38db1b8a 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/DebugCmd.h @@ -25,6 +25,8 @@ namespace Nuake Ref GetScene() const; void DrawQuad(const Matrix4& transform); + void DrawTexturedQuad(const Matrix4& transform, Ref texture); + void DrawLine(const Vector3& start, const Vector3& end, const Color& color) const; void DrawSphere(const Vector2& position, float radius, const Color& color) const; void DrawCube(const Vector3& position, const Vector3& size, const Color& color) const;