From d6542ac2f100dec49c79ba5f5e4b6ce60a78da9b Mon Sep 17 00:00:00 2001 From: ink-soul Date: Tue, 23 May 2023 17:32:20 +0800 Subject: [PATCH] Update homework1.cpp --- homework/homework1/homework1.cpp | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/homework/homework1/homework1.cpp b/homework/homework1/homework1.cpp index e4c7d34..22972fa 100644 --- a/homework/homework1/homework1.cpp +++ b/homework/homework1/homework1.cpp @@ -746,6 +746,24 @@ void VulkanExample::setupFrameBuffer() VkSamplerCreateInfo samplerCI = vks::initializers::samplerCreateInfo(); samplerCI.magFilter = VK_FILTER_NEAREST; + samplerCI.minFilter = VK_FILTER_NEAREST; + samplerCI.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; + samplerCI.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + samplerCI.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + samplerCI.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + + samplerCI.minLod = 0.0f; + samplerCI.maxLod = 1.0f; + samplerCI.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE; + + if (tonemappingDescriptorSet != VK_NULL_HANDLE) + { + auto imageInfo = vks::initializers::descriptorImageInfo(colorSampler, pbrFrameBuffer.color.imageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + VkWriteDescriptorSet writeDescriptorSet = vks::initializers::writeDescriptorSet(tonemappingDescriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &imageInfo); + vkUpdateDescriptorSets(device, 1, &writeDescriptorSet, 0, nullptr); + + } + pbrFrameBuffer.bCreate = true; } void VulkanExample::getEnabledFeatures() @@ -791,6 +809,24 @@ void VulkanExample::getEnabledFeatures() drawUI(drawCmdBuffers[i]); vkCmdEndRenderPass(drawCmdBuffers[i]); VK_CHECK_RESULT(vkEndCommandBuffer(drawCmdBuffers[i])); + + //tonemapping render pass + VkRenderPassBeginInfo renderPassBeginInfo = vks::initializers::renderPassBeginInfo(); + renderPassBeginInfo.renderPass = renderPass; + renderPassBeginInfo.framebuffer = VulkanExampleBase::frameBuffers[i]; + renderPassBeginInfo.renderArea.extent.width = width; + renderPassBeginInfo.renderArea.extent.height = height; + renderPassBeginInfo.clearValueCount = 2; + renderPassBeginInfo.pClearValues = clearValues; + + vkCmdBeginRenderPass(drawCmdBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); + vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); + vkCmdSetScissor(drawCmdBuffers[i], 0, 1, &scissor); + vkCmdBindDescriptorSets(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayouts.tonemappingLayout, 0, 1, &tonemappingDescriptorSet, 0, NULL); + vkCmdBindPipeline(drawCmdBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.toneMapping); + vkCmdDraw(drawCmdBuffers[i], 3, 1, 0, 0); + drawUI(drawCmdBuffers[i]); + vkCmdEndRenderPass(drawCmdBuffers[i]); } } @@ -831,10 +867,24 @@ void VulkanExample::getEnabledFeatures() glTFModel.loadAnimations(glTFInput); // update joint in nodes + /* for (auto node : glTFModel.nodes) { + glTFModel.updateJoints(node); + }*/ + + for (size_t i = 0; i < glTFModel.nodes.size(); i++) + { + if (glTFModel.nodes[i]->skin > -1) + { + glTFModel.updateJoints(glTFModel.nodes[i]); + } + else + { + continue; + } } } else { @@ -879,6 +929,7 @@ void VulkanExample::getEnabledFeatures() vertexBufferSize, &glTFModel.vertices.buffer, &glTFModel.vertices.memory)); + VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,