From 98335c7edc687aded4a0344826a5989b84dd7c53 Mon Sep 17 00:00:00 2001 From: InkSoul Date: Sat, 29 Nov 2025 15:28:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(render):=20=E9=87=8D=E6=9E=84=E7=A6=BB?= =?UTF-8?q?=E5=B1=8F=E6=B8=B2=E6=9F=93=E8=B5=84=E6=BA=90=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E5=85=89=E7=85=A7=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除对 gli 库的引用,后续不再使用该第三方库,补充stb_image作为替代 - 引入 RenderOffScreen、RenderLightSource 等封装类统一管理离屏渲染资源 - 使用成员变量替代局部变量,通过 getter 方法访问 Vulkan 资源句柄 - 将 push constant 数据封装到专用结构体中,并提供设置方法 - 更新光照方向计算逻辑,使用封装后的光源旋转数据 - 清理冗余代码,提升 generateCubemaps 函数可读性与维护性 --- 3rdparty/stb/stb_image.h | Bin 0 -> 283010 bytes CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/render/render.cpp | 55 +++++++++++++++++++++------------------ src/render/render.h | 40 ++++++++-------------------- 5 files changed, 43 insertions(+), 56 deletions(-) create mode 100644 3rdparty/stb/stb_image.h diff --git a/3rdparty/stb/stb_image.h b/3rdparty/stb/stb_image.h new file mode 100644 index 0000000000000000000000000000000000000000..9eedabedc45b3e6fd88fae6f14a160b4d53272ec GIT binary patch literal 283010 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 zgetMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - VK_CHECK_RESULT(vkAllocateMemory(device, &memAllocInfo, nullptr, &offscreen.memory)); - VK_CHECK_RESULT(vkBindImageMemory(device, offscreen.image, offscreen.memory, 0)); + VK_CHECK_RESULT(vkAllocateMemory(device, &memAllocInfo, nullptr, &offscreenMemory)); + VK_CHECK_RESULT(vkBindImageMemory(device, offscreenImage, offscreenMemory, 0)); // View + VkImageView offscreenImageView = m_offScreen.getView(); VkImageViewCreateInfo viewCI{}; viewCI.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; viewCI.viewType = VK_IMAGE_VIEW_TYPE_2D; @@ -968,24 +972,25 @@ void PlumageRender::generateCubemaps() viewCI.subresourceRange.levelCount = 1; viewCI.subresourceRange.baseArrayLayer = 0; viewCI.subresourceRange.layerCount = 1; - viewCI.image = offscreen.image; - VK_CHECK_RESULT(vkCreateImageView(device, &viewCI, nullptr, &offscreen.view)); + viewCI.image = offscreenImage; + VK_CHECK_RESULT(vkCreateImageView(device, &viewCI, nullptr, &offscreenImageView)); // Framebuffer VkFramebufferCreateInfo framebufferCI{}; framebufferCI.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; framebufferCI.renderPass = renderpass; framebufferCI.attachmentCount = 1; - framebufferCI.pAttachments = &offscreen.view; + framebufferCI.pAttachments = &offscreenImageView; framebufferCI.width = dim; framebufferCI.height = dim; framebufferCI.layers = 1; - VK_CHECK_RESULT(vkCreateFramebuffer(device, &framebufferCI, nullptr, &offscreen.framebuffer)); + VkFramebuffer offscreenFrameBuffer = m_offScreen.getFramebuffer(); + VK_CHECK_RESULT(vkCreateFramebuffer(device, &framebufferCI, nullptr, &offscreenFrameBuffer)); VkCommandBuffer layoutCmd = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); VkImageMemoryBarrier imageMemoryBarrier{}; imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.image = offscreen.image; + imageMemoryBarrier.image = offscreenImage; imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; imageMemoryBarrier.srcAccessMask = 0; @@ -1151,7 +1156,7 @@ void PlumageRender::generateCubemaps() VkRenderPassBeginInfo renderPassBeginInfo{}; renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassBeginInfo.renderPass = renderpass; - renderPassBeginInfo.framebuffer = offscreen.framebuffer; + renderPassBeginInfo.framebuffer = m_offScreen.getFramebuffer(); renderPassBeginInfo.renderArea.extent.width = dim; renderPassBeginInfo.renderArea.extent.height = dim; renderPassBeginInfo.clearValueCount = 1; @@ -1222,13 +1227,13 @@ void PlumageRender::generateCubemaps() switch (target) { case IRRADIANCE: - irradiancePushBlock.mvp = glm::perspective((float)(M_PI / 2.0), 1.0f, 0.1f, 512.0f) * matrices[f]; - vkCmdPushConstants(cmdBuf, pipelinelayout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(IrradiancePushBlock), &irradiancePushBlock); + m_irradiancePushBlock.setMvp(glm::perspective((float)(M_PI / 2.0), 1.0f, 0.1f, 512.0f) * matrices[f]); + vkCmdPushConstants(cmdBuf, pipelinelayout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(IrradiancePushBlock), &m_irradiancePushBlock); break; case PREFILTEREDENV: - prefilterPushBlock.mvp = glm::perspective((float)(M_PI / 2.0), 1.0f, 0.1f, 512.0f) * matrices[f]; - prefilterPushBlock.roughness = 0.0; //(float)m / (float)(numMips - 1); - vkCmdPushConstants(cmdBuf, pipelinelayout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(PrefilterPushBlock), &prefilterPushBlock); + m_prefilterPushBlock.setMvp(glm::perspective((float)(M_PI / 2.0), 1.0f, 0.1f, 512.0f) * matrices[f]); + m_prefilterPushBlock.setRoughness(0.0); //(float)m / (float)(numMips - 1); + vkCmdPushConstants(cmdBuf, pipelinelayout, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(PrefilterPushBlock), &m_prefilterPushBlock); break; }; @@ -1250,7 +1255,7 @@ void PlumageRender::generateCubemaps() { VkImageMemoryBarrier imageMemoryBarrier{}; imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.image = offscreen.image; + imageMemoryBarrier.image = m_offScreen.getImage(); imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; imageMemoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; @@ -1280,7 +1285,7 @@ void PlumageRender::generateCubemaps() vkCmdCopyImage( cmdBuf, - offscreen.image, + m_offScreen.getImage(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, cubemap.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, @@ -1290,7 +1295,7 @@ void PlumageRender::generateCubemaps() { VkImageMemoryBarrier imageMemoryBarrier{}; imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.image = offscreen.image; + imageMemoryBarrier.image = m_offScreen.getImage(); imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; @@ -1318,10 +1323,10 @@ void PlumageRender::generateCubemaps() } vkDestroyRenderPass(device, renderpass, nullptr); - vkDestroyFramebuffer(device, offscreen.framebuffer, nullptr); - vkFreeMemory(device, offscreen.memory, nullptr); - vkDestroyImageView(device, offscreen.view, nullptr); - vkDestroyImage(device, offscreen.image, nullptr); + vkDestroyFramebuffer(device, m_offScreen.getFramebuffer(), nullptr); + vkFreeMemory(device, m_offScreen.getMemory(), nullptr); + vkDestroyImageView(device, m_offScreen.getView(), nullptr); + vkDestroyImage(device, m_offScreen.getImage(), nullptr); vkDestroyDescriptorPool(device, descriptorpool, nullptr); vkDestroyDescriptorSetLayout(device, descriptorsetlayout, nullptr); vkDestroyPipeline(device, pipeline, nullptr); @@ -1661,9 +1666,9 @@ void PlumageRender::updateUniformBuffers() void PlumageRender::updateShaderData() { glm::vec4 currentLightDir = glm::vec4( - sin(glm::radians(lightSource.rotation.x)) * cos(glm::radians(lightSource.rotation.y)), - sin(glm::radians(lightSource.rotation.y)), - cos(glm::radians(lightSource.rotation.x)) * cos(glm::radians(lightSource.rotation.y)), + sin(glm::radians(m_lightSource.getRotation().x)) * cos(glm::radians(m_lightSource.getRotation().y)), + sin(glm::radians(m_lightSource.getRotation().y)), + cos(glm::radians(m_lightSource.getRotation().x)) * cos(glm::radians(m_lightSource.getRotation().y)), 0.0f); m_shaderData.setLightDir(currentLightDir); } diff --git a/src/render/render.h b/src/render/render.h index bc8f26c..22c99b9 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -2,6 +2,7 @@ #include "ConfigFilePath.h" #include "RenderDescriptorSetLayoutList.h" +#include "RenderOffScreen.h" #include "RenderPipelineList.h" #include "RenderSceneTextures.h" #include "renderShaderData.h" @@ -44,8 +45,12 @@ #include "ConfigFilePath.h" #include "IndexStagingBuffer.h" +#include "IrradiancePushBlock.h" +#include "PrefilterPushBlock.h" #include "RenderDescriptorSetLayoutList.h" #include "RenderDescriptorSetList.h" +#include "RenderLightSource.h" +#include "RenderOffScreen.h" #include "RenderPipelineLayoutList.h" #include "RenderPipelineList.h" #include "RenderSceneTextures.h" @@ -79,6 +84,12 @@ private: RenderPipelineLayoutList m_pipelineLayoutList; RenderDescriptorSetLayoutList m_descriptorSetLayoutList; + RenderLightSource m_lightSource; + + RenderOffScreen m_offScreen; + + IrradiancePushBlock m_irradiancePushBlock; + PrefilterPushBlock m_prefilterPushBlock; public: float modelrot = 0.0f; @@ -122,37 +133,8 @@ public: bool displayBackground = true; - struct LightSource - { - glm::vec3 color = glm::vec3(1.0f); - glm::vec3 rotation = glm::vec3(75.0f, 40.0f, 0.0f); - } lightSource; - // cube map generation - struct OffScreen - { - VkImage image; - VkImageView view; - VkDeviceMemory memory; - VkFramebuffer framebuffer; - } offscreen; - - struct IrradiancePushBlock - { - glm::mat4 mvp; - // Sampling deltas - float deltaPhi = (2.0f * float(M_PI)) / 180.0f; - float deltaTheta = (0.5f * float(M_PI)) / 64.0f; - } irradiancePushBlock; - - struct PrefilterPushBlock - { - glm::mat4 mvp; - float roughness; - uint32_t numSamples = 32u; - } prefilterPushBlock; - UI *gui; uint64_t savedFrameCounter = settings.startFrameCount;