Skip to content

Commit

Permalink
quick update to get recent entries passing
Browse files Browse the repository at this point in the history
  • Loading branch information
tadgem committed Aug 21, 2024
1 parent 7902214 commit fcbbab4
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 95 deletions.
4 changes: 2 additions & 2 deletions examples/example-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -387,8 +387,8 @@ using DeferredLightData = FrameLightDataT<NUM_LIGHTS>;

struct RenderItem
{
MeshEx m_Mesh;
lvk::Material m_Material;
MeshEx m_Mesh;
lvk::Material m_Material;
};

struct RenderModel
Expand Down
2 changes: 1 addition & 1 deletion examples/im3d-multiview/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ void OnIm3D()
int main() {
VulkanAPI_SDL vk;
bool enableMSAA = false;
vk.Start(1920, 1080, enableMSAA);
vk.Start("Im3D Multiview", 1920, 1080, enableMSAA);
auto im3dState = LoadIm3D(vk);

DeferredLightData lightDataCpu{};
Expand Down
6 changes: 2 additions & 4 deletions examples/im3d-test/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void RecordCommandBuffersV2(VulkanAPI_SDL& vk,
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, lightingPassPipelineLayout, 0, 1, &lightPassMaterial.m_DescriptorSets[0].m_Sets[frameIndex], 0, nullptr);
vkCmdDrawIndexed(commandBuffer, screenQuad.m_IndexCount, 1, 0, 0, 0);

DrawIm3d(vk, commandBuffer, frameIndex, im3dState, im3dViewState, g_Camera.Proj * g_Camera.View, true);
DrawIm3d(vk, commandBuffer, frameIndex, im3dState, im3dViewState, g_Camera.Proj * g_Camera.View, vk.m_SwapChainImageExtent.width, vk.m_SwapChainImageExtent.height, true);
vkCmdEndRenderPass(commandBuffer);
});
}
Expand Down Expand Up @@ -254,7 +254,7 @@ void OnIm3D()
int main() {
VulkanAPI_SDL vk;
bool enableMSAA = true;
vk.Start(1280, 720, enableMSAA);
vk.Start("IM3D",1280, 720, enableMSAA);
auto im3dState = LoadIm3D(vk);
auto im3dViewState = AddIm3dForViewport(vk, im3dState, vk.m_SwapchainImageRenderPass, enableMSAA);

Expand All @@ -266,8 +266,6 @@ int main() {
Material lightPassMat = Material::Create(vk, lightPassProg);

Framebuffer gbuffer{};
gbuffer.m_Width = vk.m_SwapChainImageExtent.width;
gbuffer.m_Height = vk.m_SwapChainImageExtent.height;

gbuffer.AddColourAttachment(vk, ResolutionScale::Full, 1, VK_SAMPLE_COUNT_1_BIT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_IMAGE_ASPECT_COLOR_BIT);
Expand Down
40 changes: 7 additions & 33 deletions examples/lights-deferred-minified/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,15 @@
#include "lvk/Shader.h"
#include "lvk/Material.h"
#include <algorithm>
#include "Im3D/im3d_lvk.h"
#include "ImGui/lvk_extensions.h"


using namespace lvk;

#define NUM_LIGHTS 512
using DeferredLightData = FrameLightDataT<NUM_LIGHTS>;

struct RenderItem
{
MeshEx m_Mesh;
Material m_Material;
};

struct RenderModel
{
Model m_Original;
Vector<RenderItem> m_RenderItems;
void Free(VulkanAPI& vk)
{
for (auto& item : m_RenderItems)
{
item.m_Material.Free(vk);
FreeMesh(vk, item.m_Mesh);
}

for (auto& mat : m_Original.m_Materials)
{
mat.m_Diffuse.Free(vk);
}
m_RenderItems.clear();
}
};

static Transform g_Transform;

void RecordCommandBuffersV2(VulkanAPI_SDL& vk,
Expand Down Expand Up @@ -243,7 +221,7 @@ void OnImGui(VulkanAPI& vk, DeferredLightData& lightDataCpu)
int main() {
VulkanAPI_SDL vk;
bool enableMSAA = false;
vk.Start(1280, 720, enableMSAA);
vk.Start("Deferred Minified",1280, 720, enableMSAA);

DeferredLightData lightDataCpu{};
FillExampleLightData(lightDataCpu);
Expand All @@ -253,8 +231,6 @@ int main() {
Material lightPassMat = Material::Create(vk, lightPassProg);

Framebuffer gbuffer{};
gbuffer.m_Width = vk.m_SwapChainImageExtent.width;
gbuffer.m_Height = vk.m_SwapChainImageExtent.height;
gbuffer.AddColourAttachment(vk, ResolutionScale::Full, 1, VK_SAMPLE_COUNT_1_BIT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_IMAGE_ASPECT_COLOR_BIT);
gbuffer.AddColourAttachment(vk, ResolutionScale::Full, 1, VK_SAMPLE_COUNT_1_BIT, VK_FORMAT_R32G32B32A32_SFLOAT, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
Expand All @@ -273,8 +249,7 @@ int main() {
// create gbuffer pipeline
VkPipelineLayout gbufferPipelineLayout;
VkPipeline gbufferPipeline = vk.CreateRasterizationGraphicsPipeline(
gbufferProg.m_Stages[0].m_StageBinary, gbufferProg.m_Stages[1].m_StageBinary,
gbufferProg.m_DescriptorSetLayout,
gbufferProg,
Vector<VkVertexInputBindingDescription>{VertexDataPosNormalUv::GetBindingDescription() },
VertexDataPosNormalUv::GetAttributeDescriptions(),
gbuffer.m_RenderPass,
Expand All @@ -286,8 +261,7 @@ int main() {
// Pipeline stage?
VkPipelineLayout lightPassPipelineLayout;
VkPipeline pipeline = vk.CreateRasterizationGraphicsPipeline(
lightPassProg.m_Stages[0].m_StageBinary, lightPassProg.m_Stages[1].m_StageBinary,
lightPassProg.m_DescriptorSetLayout,
lightPassProg,
Vector<VkVertexInputBindingDescription>{VertexDataPosUv::GetBindingDescription() },
VertexDataPosUv::GetAttributeDescriptions(),
vk.m_SwapchainImageRenderPass,
Expand Down
105 changes: 51 additions & 54 deletions examples/lights-deferred/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#include "example-common.h"
#include "lvk/Material.h"
#include "lvk/Shader.h"

#include <algorithm>
using namespace lvk;

Expand Down Expand Up @@ -34,18 +37,6 @@ class FramebufferSetEx {

};

struct RenderItem
{
MeshEx m_Mesh;
ShaderBufferFrameData m_MvpBuffer;
Vector<VkDescriptorSet> m_DescriptorSets;
};

struct RenderModel
{
Vector<RenderItem> m_RenderItems;
};

static Vector<VertexDataPosUv> g_ScreenSpaceQuadVertexData = {
{ { -1.0f, -1.0f , 0.0f}, { 1.0f, 0.0f } },
{ {1.0f, -1.0f, 0.0f}, {0.0f, 0.0f} },
Expand Down Expand Up @@ -124,7 +115,7 @@ void RecordCommandBuffersV2(VulkanAPI_SDL& vk,

vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, sizes);
vkCmdBindIndexBuffer(commandBuffer, mesh.m_IndexBuffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, gbufferPipelineLayout, 0, 1, &model.m_RenderItems[i].m_DescriptorSets[frameIndex], 0, nullptr);
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, gbufferPipelineLayout, 0, 1, &model.m_RenderItems[i].m_Material.m_DescriptorSets[0].m_Sets[vk.GetFrameIndex()], 0, nullptr);
vkCmdDrawIndexed(commandBuffer, mesh.m_IndexCount, 1, 0, 0, 0);
}
vkCmdEndRenderPass(commandBuffer);
Expand Down Expand Up @@ -172,7 +163,7 @@ void RecordCommandBuffersV2(VulkanAPI_SDL& vk,
});
}

void UpdateUniformBuffer(VulkanAPI_SDL& vk, ShaderBufferFrameData& mvpUniformData, ShaderBufferFrameData& lightsUniformData, DeferredLightData& lightDataCpu)
void UpdateUniformBuffer(VulkanAPI_SDL& vk, ShaderBufferFrameData& itemMvp, ShaderBufferFrameData lightsData, DeferredLightData& lightDataCpu)
{
static auto startTime = std::chrono::high_resolution_clock::now();

Expand All @@ -188,18 +179,40 @@ void UpdateUniformBuffer(VulkanAPI_SDL& vk, ShaderBufferFrameData& mvpUniformDat
ubo.Proj = glm::perspective(glm::radians(45.0f), vk.m_SwapChainImageExtent.width / (float)vk.m_SwapChainImageExtent.height, 0.1f, 1000.0f);
ubo.Proj[1][1] *= -1;
}
mvpUniformData.Set(vk.GetFrameIndex(), ubo);
itemMvp.Set(vk.GetFrameIndex(), ubo);


lightsUniformData.Set(vk.GetFrameIndex(), lightDataCpu);
lightsData.Set(vk.GetFrameIndex(), lightDataCpu);
}

void UpdateUniformBufferMat(VulkanAPI_SDL& vk, Material& itemMat, ShaderBufferFrameData lightsData, DeferredLightData& lightDataCpu)
{
static auto startTime = std::chrono::high_resolution_clock::now();

auto currentTime = std::chrono::high_resolution_clock::now();
float time = std::chrono::duration<float, std::chrono::seconds::period>(currentTime - startTime).count();

MvpData ubo{};
ubo.Model = g_Transform.to_mat4();

ubo.View = glm::lookAt(glm::vec3(20.0f, 20.0f, 20.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
if (vk.m_SwapChainImageExtent.width > 0 || vk.m_SwapChainImageExtent.height)
{
ubo.Proj = glm::perspective(glm::radians(45.0f), vk.m_SwapChainImageExtent.width / (float)vk.m_SwapChainImageExtent.height, 0.1f, 1000.0f);
ubo.Proj[1][1] *= -1;
}
itemMat.SetBuffer(vk.GetFrameIndex(), 0, 0, ubo);


lightsData.Set(vk.GetFrameIndex(), lightDataCpu);
}

void CreateGBufferDescriptorSets(VulkanAPI& vk, VkDescriptorSetLayout& descriptorSetLayout, VkImageView& textureImageView, VkSampler& textureSampler, Vector<VkDescriptorSet>& descriptorSets, ShaderBufferFrameData& mvpUniformData)
{
std::vector<VkDescriptorSetLayout> layouts(MAX_FRAMES_IN_FLIGHT, descriptorSetLayout);
VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = vk.m_DescriptorPool;
allocInfo.descriptorPool = vk.m_DescriptorSetAllocator.GetPool(vk.m_LogicalDevice);
allocInfo.descriptorSetCount = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
allocInfo.pSetLayouts = layouts.data();

Expand All @@ -208,7 +221,7 @@ void CreateGBufferDescriptorSets(VulkanAPI& vk, VkDescriptorSetLayout& descripto

for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
VkDescriptorBufferInfo mvpBufferInfo{};
mvpBufferInfo.buffer = mvpUniformData.m_UniformBuffers[i];
mvpBufferInfo.buffer = mvpUniformData.m_UniformBuffers[i].m_GpuBuffer;
mvpBufferInfo.offset = 0;
mvpBufferInfo.range = sizeof(MvpData);

Expand Down Expand Up @@ -246,7 +259,7 @@ void CreateLightingPassDescriptorSets(VulkanAPI_SDL& vk, VkDescriptorSetLayout&
std::vector<VkDescriptorSetLayout> layouts(MAX_FRAMES_IN_FLIGHT, descriptorSetLayout);
VkDescriptorSetAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.descriptorPool = vk.m_DescriptorPool;
allocInfo.descriptorPool = vk.m_DescriptorSetAllocator.GetPool(vk.m_LogicalDevice);
allocInfo.descriptorSetCount = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
allocInfo.pSetLayouts = layouts.data();

Expand All @@ -255,7 +268,7 @@ void CreateLightingPassDescriptorSets(VulkanAPI_SDL& vk, VkDescriptorSetLayout&

for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
VkDescriptorBufferInfo mvpBufferInfo{};
mvpBufferInfo.buffer = mvpUniformData.m_UniformBuffers[i];
mvpBufferInfo.buffer = mvpUniformData.m_UniformBuffers[i].m_GpuBuffer;
mvpBufferInfo.offset = 0;
mvpBufferInfo.range = sizeof(MvpData);

Expand All @@ -275,7 +288,7 @@ void CreateLightingPassDescriptorSets(VulkanAPI_SDL& vk, VkDescriptorSetLayout&
colourBufferInfo.sampler = gbuffers.m_Framebuffers[i].m_Attachments[0].m_Sampler;

VkDescriptorBufferInfo lightBufferInfo{};
lightBufferInfo.buffer = lightsUniformData.m_UniformBuffers[i];
lightBufferInfo.buffer = lightsUniformData.m_UniformBuffers[i].m_GpuBuffer;
lightBufferInfo.offset = 0;
lightBufferInfo.range = sizeof(DeferredLightData);

Expand Down Expand Up @@ -360,20 +373,22 @@ void CreateGBufferRenderPass(VulkanAPI_SDL& vk, VkRenderPass& renderPass)
vk.CreateRenderPass(renderPass, colourAttachmentDescriptions, resolveAttachmentDescriptions, true, depthAttachmentDescription, VK_ATTACHMENT_LOAD_OP_CLEAR);
}

RenderModel CreateRenderModelGbuffer(VulkanAPI& vk, const String& modelPath, VkDescriptorSetLayout descriptorSetLayout)
RenderModel CreateRenderModelGbuffer(VulkanAPI& vk, const String& modelPath, ShaderProgram& shader)
{
Model model;
LoadModelAssimp(vk, model, modelPath, true);

RenderModel renderModel{};
renderModel.m_Original = model;
for (auto& mesh : model.m_Meshes)
{
RenderItem item{};
int materialIndex = std::min(mesh.m_MaterialIndex, (uint32_t)model.m_Materials.size() - 1);
item.m_Mesh = mesh;
item.m_DescriptorSets.resize(MAX_FRAMES_IN_FLIGHT);
vk.CreateUniformBuffers<MvpData>(item.m_MvpBuffer);
CreateGBufferDescriptorSets(vk, descriptorSetLayout, model.m_Materials[materialIndex].m_Diffuse.m_ImageView, model.m_Materials[materialIndex].m_Diffuse.m_Sampler, item.m_DescriptorSets, item.m_MvpBuffer);
item.m_Material = Material::Create(vk, shader);

MaterialEx& material = model.m_Materials[mesh.m_MaterialIndex];
item.m_Material.SetSampler(vk, "texSampler", material.m_Diffuse.m_ImageView, material.m_Diffuse.m_Sampler);
renderModel.m_RenderItems.push_back(item);
}

Expand Down Expand Up @@ -447,7 +462,7 @@ int main()
{
VulkanAPI_SDL vk;
bool enableMSAA = false;
vk.Start(1280, 720, enableMSAA);
vk.Start("Deferred", 1280, 720, enableMSAA);


ShaderBufferFrameData mvpUniformData;
Expand All @@ -459,28 +474,16 @@ int main()
Vector<VkDescriptorSet> lightPassDescriptorSets;
Vector<VkDescriptorSet> gbufferDescriptorSets;

auto gbufferVertBin = vk.LoadSpirvBinary("shaders/gbuffer.vert.spv");
auto gbufferFragBin = vk.LoadSpirvBinary("shaders/gbuffer.frag.spv");
auto gbufferVertexLayoutDatas = vk.ReflectDescriptorSetLayouts(gbufferVertBin);
auto gbufferFragmentLayoutDatas = vk.ReflectDescriptorSetLayouts(gbufferFragBin);
VkDescriptorSetLayout gbufferDescriptorSetLayout;
vk.CreateDescriptorSetLayout(gbufferVertexLayoutDatas, gbufferFragmentLayoutDatas, gbufferDescriptorSetLayout);

auto lightPassVertBin = vk.LoadSpirvBinary("shaders/lights.vert.spv");
auto lightPassFragBin = vk.LoadSpirvBinary("shaders/lights.frag.spv");
auto lightPassVertexLayoutDatas = vk.ReflectDescriptorSetLayouts(lightPassVertBin);
auto lightPassFragmentLayoutDatas = vk.ReflectDescriptorSetLayouts(lightPassFragBin);
VkDescriptorSetLayout lightPassDescriptorSetLayout;
vk.CreateDescriptorSetLayout(lightPassVertexLayoutDatas, lightPassFragmentLayoutDatas, lightPassDescriptorSetLayout);
ShaderProgram gbufferProg = ShaderProgram::Create(vk, "shaders/gbuffer.vert.spv", "shaders/gbuffer.frag.spv");
ShaderProgram lightPassProg = ShaderProgram::Create(vk, "shaders/lights.vert.spv", "shaders/lights.frag.spv");

VkRenderPass gbufferRenderPass;
CreateGBufferRenderPass(vk, gbufferRenderPass);

// create gbuffer pipeline
VkPipelineLayout gbufferPipelineLayout;
VkPipeline gbufferPipeline = vk.CreateRasterizationGraphicsPipeline(
gbufferVertBin, gbufferFragBin,
gbufferDescriptorSetLayout, Vector<VkVertexInputBindingDescription>{VertexDataPosNormalUv::GetBindingDescription() }, VertexDataPosNormalUv::GetAttributeDescriptions(),
gbufferProg, Vector<VkVertexInputBindingDescription>{VertexDataPosNormalUv::GetBindingDescription() }, VertexDataPosNormalUv::GetAttributeDescriptions(),
gbufferRenderPass,
vk.m_SwapChainImageExtent.width, vk.m_SwapChainImageExtent.height,
VK_POLYGON_MODE_FILL,
Expand All @@ -494,8 +497,7 @@ int main()
// Pipeline stage?
VkPipelineLayout lightPassPipelineLayout;
VkPipeline pipeline = vk.CreateRasterizationGraphicsPipeline(
lightPassVertBin, lightPassFragBin,
lightPassDescriptorSetLayout, Vector<VkVertexInputBindingDescription>{VertexDataPosUv::GetBindingDescription() }, VertexDataPosUv::GetAttributeDescriptions(),
lightPassProg, Vector<VkVertexInputBindingDescription>{VertexDataPosUv::GetBindingDescription() }, VertexDataPosUv::GetAttributeDescriptions(),
vk.m_SwapchainImageRenderPass,
vk.m_SwapChainImageExtent.width, vk.m_SwapChainImageExtent.height,
VK_POLYGON_MODE_FILL,
Expand Down Expand Up @@ -538,7 +540,7 @@ int main()
// create vertex and index buffer
Model model;
LoadModelAssimp(vk, model, "assets/viking_room.obj", true);
RenderModel m = CreateRenderModelGbuffer(vk, "assets/sponza/sponza.gltf", gbufferDescriptorSetLayout);
RenderModel m = CreateRenderModelGbuffer(vk, "assets/sponza/sponza.gltf", gbufferProg);

MeshEx screenQuad = BuildScreenSpaceQuad(vk, g_ScreenSpaceQuadVertexData, g_ScreenSpaceQuadIndexData);

Expand All @@ -549,8 +551,8 @@ int main()

vk.CreateUniformBuffers<MvpData>(mvpUniformData);

CreateGBufferDescriptorSets(vk, gbufferDescriptorSetLayout, texture.m_ImageView, texture.m_Sampler, gbufferDescriptorSets, mvpUniformData);
CreateLightingPassDescriptorSets(vk, lightPassDescriptorSetLayout, gbufferSet, lightPassDescriptorSets, mvpUniformData, lightsUniformData);
CreateGBufferDescriptorSets(vk, gbufferProg.m_DescriptorSetLayout, texture.m_ImageView, texture.m_Sampler, gbufferDescriptorSets, mvpUniformData);
CreateLightingPassDescriptorSets(vk, lightPassProg.m_DescriptorSetLayout, gbufferSet, lightPassDescriptorSets, mvpUniformData, lightsUniformData);

Vector<VkFramebuffer> gbufferFramebuffers{ gbufferSet.m_Framebuffers[0].m_FB, gbufferSet.m_Framebuffers[1].m_FB };

Expand All @@ -560,7 +562,7 @@ int main()

for (auto& item : m.m_RenderItems)
{
UpdateUniformBuffer(vk, item.m_MvpBuffer, lightsUniformData, lightDataCpu);
UpdateUniformBufferMat(vk, item.m_Material, lightsUniformData, lightDataCpu);
}

UpdateUniformBuffer(vk, mvpUniformData, lightsUniformData, lightDataCpu);
Expand All @@ -586,13 +588,8 @@ int main()

vkDestroyRenderPass(vk.m_LogicalDevice, gbufferRenderPass, nullptr);

for (int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
{
vkFreeDescriptorSets(vk.m_LogicalDevice, vk.m_DescriptorPool, 1, &gbufferDescriptorSets[i]);
vkFreeDescriptorSets(vk.m_LogicalDevice, vk.m_DescriptorPool, 1, &lightPassDescriptorSets[i]);
}
vkDestroyDescriptorSetLayout(vk.m_LogicalDevice, gbufferDescriptorSetLayout, nullptr);
vkDestroyDescriptorSetLayout(vk.m_LogicalDevice, lightPassDescriptorSetLayout, nullptr);
gbufferProg.Free(vk);
lightPassProg.Free(vk);

vkDestroyPipelineLayout(vk.m_LogicalDevice, gbufferPipelineLayout, nullptr);
vkDestroyPipeline(vk.m_LogicalDevice, gbufferPipeline, nullptr);
Expand Down
2 changes: 1 addition & 1 deletion lvk/src/lvk/VulkanAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1663,7 +1663,7 @@ void lvk::VulkanAPI::CreateBuiltInRenderPasses()
VkAttachmentDescription colorAttachment{};
colorAttachment.format = m_SwapChainImageFormat;
colorAttachment.samples = m_EnableSwapchainMsaa ? m_MaxMsaaSamples : VK_SAMPLE_COUNT_1_BIT;
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
Expand Down

0 comments on commit fcbbab4

Please sign in to comment.