diff --git a/noteForDevelop.md b/noteForDevelop.md index 9ec463b..2e20ef7 100644 --- a/noteForDevelop.md +++ b/noteForDevelop.md @@ -2,69 +2,69 @@ ``` C++ #ifndef _GLTFMODEL_H -#include "glTFModel.h" #define _GLTFMODEL_H +#include "glTFModel.h" #endif // !GLTFMODEL_H #ifndef _RENDERSETTER_H -#include "renderSetter.h" #define _RENDERSETTER_H +#include "renderSetter.h" #endif // !RENDERSETTER_H #ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" #define _VULKANFOUNDATION_H +#include "vulkanFoundation.h" #endif // !VULKANFOUNDATION_H #ifndef _RENDERGUI_H -#include "renderUI.h" #define _RENDERGUI_H +#include "renderUI.h" #endif // !_RENDERGUI_H #ifndef _PBR_H -#include "PBR.h" #define _PBR_H +#include "PBR.h" #endif // !PBR_H #ifndef _RENDER_H -#include "render.h" #define _RENDER_H +#include "render.h" #endif // !RENDER_H #ifndef _RENDERIO_H -#include "renderIO.h" #define _RENDERIO_H +#include "renderIO.h" #endif // !RENDERIO_H #ifndef _UI_HPP -#include "ui.hpp" #define _UI_HPP +#include "ui.hpp" #endif // !UI_HPP #ifndef _VULKANDEVICE_HPP -#include "VulkanDevice.hpp" #define _VULKANDEVICE_HPP +#include "VulkanDevice.hpp" #endif // !_VULKANDEVICE_HPP #ifndef _CAMERA_HPP -#include "camera.hpp" #define _CAMERA_HPP +#include "camera.hpp" #endif // !_CAMERA_HPP #ifndef _VULKANTEXTURE_HPP -#include "VulkanTexture.hpp" #define _VULKANTEXTURE_HPP +#include "VulkanTexture.hpp" #endif // !_VULKANTEXTURE_HPP #ifndef _VULKANUTILS_HPP -#include "VulkanUtils.hpp" #define _VULKANUTILS_HPP +#include "VulkanUtils.hpp" #endif // !_VULKANUTILS_HPP #ifndef _TINY_GLTF_H -#include "tiny_gltf.h" #define _TINY_GLTF_H +#include "tiny_gltf.h" #endif // !_TINY_GLTF_H ``` \ No newline at end of file diff --git a/src/render/PBR.cpp b/src/render/PBR.cpp index 076057e..df9ff60 100644 --- a/src/render/PBR.cpp +++ b/src/render/PBR.cpp @@ -1,6 +1,22 @@ #include "PBR.h" -void PBR::Material::generateCubemap(VulkanBackend::VulkanFoundation vkFoundation,PlumageRender::Setter setter,PlumageRender::renderMain mainRender) +#ifndef _RENDERSETTER_H +#define _RENDERSETTER_H +#include "renderSetter.h" +#endif // !RENDERSETTER_H + + +#ifndef _VULKANFOUNDATION_H +#define _VULKANFOUNDATION_H +#include "vulkanFoundation.h" +#endif // !VULKANFOUNDATION_H + +#ifndef _RENDER_H +#define _RENDER_H +#include "render.h" +#endif // !RENDER_H + +void PBR::Material::generateCubemap(PlumageVulkanBackend::VulkanFoundation vkFoundation,PlumageRender::Setter setter,PlumageRender::renderMain mainRender) { enum Target { IRRADIANCE = 0, PREFILTEREDENV = 1 }; @@ -538,7 +554,7 @@ void PBR::Material::generateCubemap(VulkanBackend::VulkanFoundation vkFoundation } } -void PBR::Material::generateBRDFLUT(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter) +void PBR::Material::generateBRDFLUT(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter) { auto tStart = std::chrono::high_resolution_clock::now(); diff --git a/src/render/PBR.h b/src/render/PBR.h index 9e88935..64a8a44 100644 --- a/src/render/PBR.h +++ b/src/render/PBR.h @@ -1,33 +1,25 @@ -#pragma once - -#ifndef _RENDERSETTER_H -#include "renderSetter.h" -#define _RENDERSETTER_H -#endif // !RENDERSETTER_H - -#ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" -#define _VULKANFOUNDATION_H -#endif // !VULKANFOUNDATION_H - -#ifndef _RENDER_H -#include "render.h" -#define _RENDER_H -#endif // !RENDER_H - - +#ifndef _VULKANTEXTURE_HPP +#define _VULKANTEXTURE_HPP +#include "VulkanTexture.hpp" +#endif // !_VULKANTEXTURE_HPP #include -#ifndef _VULKANTEXTURE_HPP -#include "VulkanTexture.hpp" -#define _VULKANTEXTURE_HPP -#endif // !_VULKANTEXTURE_HPP +namespace PlumageVulkanBackend +{ + class VulkanFoundation; +} + +namespace PlumageRender +{ + class Setter; + class renderMain; +} namespace PBR { @@ -81,10 +73,10 @@ namespace PBR // generate two cube maps // irradiance cube map // prefileter environment cube map - void generateCubemap(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter, PlumageRender::renderMain mainRender); + void generateCubemap(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter, PlumageRender::renderMain mainRender); // generate BRDF integration map for roughness/NdotV - void generateBRDFLUT(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter); + void generateBRDFLUT(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter); private: diff --git a/src/render/glTFModel.cpp b/src/render/glTFModel.cpp index 5ff37d8..7f47fb8 100644 --- a/src/render/glTFModel.cpp +++ b/src/render/glTFModel.cpp @@ -19,7 +19,7 @@ */ #include "glTFModel.h" //#include "VulkanUtils.hpp" -#include + // Bounding box diff --git a/src/render/glTFModel.h b/src/render/glTFModel.h index 7c2f7af..ac40f4a 100644 --- a/src/render/glTFModel.h +++ b/src/render/glTFModel.h @@ -31,22 +31,21 @@ #endif #ifndef _TINY_GLTF_H -#include "tiny_gltf.h" #define _TINY_GLTF_H +#include "tiny_gltf.h" + #endif // !_TINY_GLTF_H #ifndef _VULKANDEVICE_HPP -#include "VulkanDevice.hpp" #define _VULKANDEVICE_HPP +#include "VulkanDevice.hpp" + #endif // !_VULKANDEVICE_HPP //#include "VulkanUtils.hpp" #include -#ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" -#define _VULKANFOUNDATION_H -#endif // !VULKANFOUNDATION_H + #define MAX_NUM_JOINTS 128u diff --git a/src/render/render.cpp b/src/render/render.cpp index a2753f2..d44befe 100644 --- a/src/render/render.cpp +++ b/src/render/render.cpp @@ -1,18 +1,4 @@  - - -#ifndef TINYGLTF_IMPLEMENTATION -#define TINYGLTF_IMPLEMENTATION -#endif -#ifndef STB_IMAGE_IMPLEMENTATION -#define STB_IMAGE_IMPLEMENTATION -#endif - -#ifndef TINYGLTF_NO_STB_IMAGE_WRITE -#define TINYGLTF_NO_STB_IMAGE_WRITE -#endif - - #include "render.h" //#include "VulkanUtils.hpp" //#include "assetLoader.h" @@ -36,33 +22,33 @@ void PlumageRender::renderMain::framebufferResizeCallback(GLFWwindow* window, in } -void PlumageRender::renderMain::prepare() +void PlumageRender::renderMain::prepare(Setter setter,PlumageGUI renderGUI,RenderInput renderInput,RenderOutput renderOutput,PBR::Material pbrMaterial,PluamgeVulkanBackend::VulkanFoundation vkFoundation,renderMain mainRender,UI* ui) { //VulkanExampleBase::prepare(); - setupCamera(camera); + setupCamera(camera,setter); - renderInput.loadAssets(); - pbrMaterial.generateBRDFLUT(); - pbrMaterial.generateCubemap(); + renderInput.loadAssets(setter,mainRender,vkFoundation,pbrMaterial); + pbrMaterial.generateBRDFLUT(vkFoundation,setter); + pbrMaterial.generateCubemap(vkFoundation,setter,mainRender); //prepareUniformBuffers(); //setupDescriptors(); //preparePipelines(); - if (!PlumageRender::Setter::settings.headless) + if (!setter.settings.headless) { - auto gui = renderGUI.gui; - renderGUI.updateUIOverlay(); + + renderGUI.updateUIOverlay(ui,setter,mainRender,vkFoundation,renderInput,renderOutput); } ; prepared = true; } -void PlumageRender::renderMain::setupCamera(Camera camera) +void PlumageRender::renderMain::setupCamera(Camera camera,Setter setter) { camera.type = Camera::CameraType::lookat; - camera.setPerspective(45.0f, (float)PlumageRender::Setter::settings.width / (float)PlumageRender::Setter::settings.height, 0.1f, 256.0f); + camera.setPerspective(45.0f, (float)setter.settings.width / (float)setter.settings.height, 0.1f, 256.0f); camera.rotationSpeed = 0.25f; camera.movementSpeed = 0.1f; camera.setPosition({ 0.0f, 0.0f, -1.0f }); @@ -76,10 +62,10 @@ void PlumageRender::renderMain::submitWork(VkCommandBuffer cmdBuffer, VkQueue qu submitInfo.pCommandBuffers = &cmdBuffer; VkFenceCreateInfo fenceInfo = vks::initializers::fenceCreateInfo(); VkFence fence; - VK_CHECK_RESULT(vkCreateFence(VulkanBackend::VulkanFoundation::device, &fenceInfo, nullptr, &fence)); + VK_CHECK_RESULT(vkCreateFence(PluamgeVulkanBackend::VulkanFoundation::device, &fenceInfo, nullptr, &fence)); VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence)); - VK_CHECK_RESULT(vkWaitForFences(VulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX)); - vkDestroyFence(VulkanBackend::VulkanFoundation::device, fence, nullptr); + VK_CHECK_RESULT(vkWaitForFences(PluamgeVulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX)); + vkDestroyFence(PluamgeVulkanBackend::VulkanFoundation::device, fence, nullptr); } void PlumageRender::renderMain::submitToPresentQueue() @@ -88,7 +74,7 @@ void PlumageRender::renderMain::submitToPresentQueue() } -void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI) +void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* gui,renderMain mainRender,PluamgeVulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput renderOutput) { if (!prepared) { return; @@ -96,42 +82,42 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI) if (!setter.settings.headless) { - plumageGUI.updateUIOverlay(); + plumageGUI.updateUIOverlay(gui,setter,mainRender,vkFoundation,renderInput,renderOutput); } uint32_t imageIndex; - VK_CHECK_RESULT(vkWaitForFences(VulkanBackend::VulkanFoundation::device, 1, &vkFoundation.waitFences[frameIndex], VK_TRUE, UINT64_MAX)); + VK_CHECK_RESULT(vkWaitForFences(vkFoundation.device, 1, &vkFoundation.waitFences[frameIndex], VK_TRUE, UINT64_MAX)); - framebufferResized = vkFoundation.acqureNextSwapchainImage(framebufferResized, imageIndex, frameIndex); + framebufferResized = vkFoundation.acqureNextSwapchainImage(framebufferResized, imageIndex, frameIndex,setter); - VK_CHECK_RESULT(vkResetFences(VulkanBackend::VulkanFoundation::device, 1, &vkFoundation.waitFences[frameIndex])); - renderOutput.outputImageSequence(); - renderOutput.imageSequenceToVideo(); + VK_CHECK_RESULT(vkResetFences(vkFoundation.device, 1, &vkFoundation.waitFences[frameIndex])); + renderOutput.outputImageSequence(setter,renderOutput,vkFoundation); + renderOutput.imageSequenceToVideo(renderOutput,setter); // Update UBOs - vkFoundation.updateUniformBuffers(); - VulkanBackend::VulkanFoundation::UniformBufferSet currentUB = vkFoundation.uniformBuffers[currentBuffer]; + vkFoundation.updateUniformBuffers(camera,mainRender); + PluamgeVulkanBackend::VulkanFoundation::UniformBufferSet currentUB = vkFoundation.uniformBuffers[currentBuffer]; memcpy(currentUB.scene.mapped, &vkFoundation.shaderDataScene, sizeof(vkFoundation.shaderDataScene)); memcpy(currentUB.params.mapped, &PBR::Material::shaderData, sizeof(PBR::Material::shaderData)); memcpy(currentUB.skybox.mapped, &vkFoundation.shaderDataSkybox, sizeof(vkFoundation.shaderDataSkybox)); vkFoundation.submitToGraphicQueue(frameIndex, currentBuffer); - vkFoundation.imageToQueuePresent(frameIndex, imageIndex, framebufferResized); + vkFoundation.imageToQueuePresent(frameIndex, imageIndex, framebufferResized,setter); frameIndex += 1; - frameIndex %= PlumageRender::Setter::settings.MaxFrameInFlight; + frameIndex %= setter.settings.MaxFrameInFlight; - if (!PlumageRender::Setter::settings.pause) { - if (PlumageRender::Setter::settings.rotateModel) { + if (!setter.settings.pause) { + if (setter.settings.rotateModel) { modelrot.y += frameTimer * 35.0f; if (modelrot.y > 360.0f) { modelrot.y -= 360.0f; } } - if ((PlumageRender::Setter::settings.animate) && (models.scene.animations.size() > 0)) { + if ((setter.settings.animate) && (models.scene.animations.size() > 0)) { animationTimer += frameTimer; if (animationTimer > models.scene.animations[animationIndex].end) { animationTimer -= models.scene.animations[animationIndex].end; @@ -139,17 +125,17 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI) models.scene.updateAnimation(animationIndex, animationTimer); } vkFoundation.updateShaderData(); - if (PlumageRender::Setter::settings.rotateModel) { - vkFoundation.updateUniformBuffers(); + if (setter.settings.rotateModel) { + vkFoundation.updateUniformBuffers(camera,mainRender); } } if (camera.updated) { - vkFoundation.updateUniformBuffers(); + vkFoundation.updateUniformBuffers(camera,mainRender); } } - void PlumageRender::renderMain::renderLoop(GLFWwindow* window,Setter setter) +void PlumageRender::renderMain::renderLoop(GLFWwindow* window,Setter setter) { if (setter.settings.headless) { @@ -167,10 +153,10 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI) drawFrame(); } } - vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device); + vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); } - void PlumageRender::renderMain::drawFrame() +void PlumageRender::renderMain::drawFrame() { auto tStart = std::chrono::high_resolution_clock::now(); @@ -203,7 +189,7 @@ int main() PlumageRender::RenderInput renderInput; PlumageRender::Setter setter; PlumageRender::renderMain plumageRender; - VulkanBackend::VulkanFoundation vkFoundation; + PluamgeVulkanBackend::VulkanFoundation vkFoundation; UI* gui = new UI(vkFoundation.vulkanDevice, vkFoundation.renderPass, vkFoundation.graphicQueue, vkFoundation.pipelineCache, setter.settings.sampleCount); vkFoundation.initVulkan(); diff --git a/src/render/render.h b/src/render/render.h index e886f5c..e78cea3 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -1,5 +1,18 @@ #pragma once + +#ifndef TINYGLTF_IMPLEMENTATION +#define TINYGLTF_IMPLEMENTATION +#endif +#ifndef STB_IMAGE_IMPLEMENTATION +#define STB_IMAGE_IMPLEMENTATION +#endif + +#ifndef TINYGLTF_NO_STB_IMAGE_WRITE +#define TINYGLTF_NO_STB_IMAGE_WRITE +#endif + + #include #include #include @@ -19,76 +32,72 @@ #include #ifndef _GLFW3_H -#include "GLFW/glfw3.h" #define _GLFW3_H +#include "GLFW/glfw3.h" #endif // !_GLFW3_H - -#ifndef _GLTFMODEL_H -#include "glTFModel.h" -#define _GLTFMODEL_H -#endif // !GLTFMODEL_H - -#ifndef _RENDERSETTER_H -#include "renderSetter.h" -#define _RENDERSETTER_H -#endif // !RENDERSETTER_H - #ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" #define _VULKANFOUNDATION_H +#include "vulkanFoundation.h" #endif // !VULKANFOUNDATION_H +#ifndef _GLTFMODEL_H +#define _GLTFMODEL_H +#include "glTFModel.h" +#endif // !GLTFMODEL_H + + + #ifndef _RENDERGUI_H -#include "renderUI.h" #define _RENDERGUI_H +#include "renderUI.h" #endif // !_RENDERGUI_H #ifndef _UI_HPP -#include "ui.hpp" #define _UI_HPP +#include "ui.hpp" #endif // !UI_HPP #ifndef _RENDERIO_H -#include "renderIO.h" #define _RENDERIO_H +#include "renderIO.h" #endif // !RENDERIO_H #ifndef _VULKANDEVICE_HPP -#include "VulkanDevice.hpp" #define _VULKANDEVICE_HPP +#include "VulkanDevice.hpp" #endif // !_VULKANDEVICE_HPP #ifndef _CAMERA_HPP -#include "camera.hpp" #define _CAMERA_HPP +#include "camera.hpp" #endif // !_CAMERA_HPP #ifndef _VULKANTEXTURE_HPP -#include "VulkanTexture.hpp" #define _VULKANTEXTURE_HPP +#include "VulkanTexture.hpp" #endif // !_VULKANTEXTURE_HPP #ifndef _VULKANUTILS_HPP -#include "VulkanUtils.hpp" #define _VULKANUTILS_HPP +#include "VulkanUtils.hpp" #endif // !_VULKANUTILS_HPP #ifndef _STB_IMAGE_WRITE_H +#define _STB_IMAGE_WRITE_H #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" -#define _STB_IMAGE_WRITE_H #endif // !_STB_IMAGE_WRITE_H - - - - #define ENABLE_VALIDATION false +PluamgeVulkanBackend::VulkanFoundation vkFoundation; + namespace PlumageRender { + + class renderMain { public: @@ -101,8 +110,8 @@ namespace PlumageRender { glTFModel::Model scene; glTFModel::Model skybox; - }; - static Models models; + }models; + struct stat { @@ -142,12 +151,12 @@ namespace PlumageRender void initWindow(int width, int height); static void framebufferResizeCallback(GLFWwindow* window, int width, int height); void windowResized(); - void prepare(); - void setupCamera(Camera camera); + void prepare(Setter setter, PlumageGUI renderGUI, RenderInput renderInput, RenderOutput renderOutput, PBR::Material pbrMaterial, PluamgeVulkanBackend::VulkanFoundation vkFoundation, renderMain mainRender, UI* ui); + void setupCamera(Camera camera, Setter setter); void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue); void submitToPresentQueue(); - virtual void render(); + virtual void render(Setter setter, PlumageGUI plumageGUI, UI* gui, renderMain mainRender, PluamgeVulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput renderOutput); void renderLoop(GLFWwindow* window, Setter setter); void drawFrame(); private: @@ -166,11 +175,9 @@ namespace PlumageRender renderMain::~renderMain() { - models.scene.destroy(VulkanBackend::VulkanFoundation::device); - models.skybox.destroy(VulkanBackend::VulkanFoundation::device); + models.scene.destroy(PluamgeVulkanBackend::VulkanFoundation::device); + models.skybox.destroy(PluamgeVulkanBackend::VulkanFoundation::device); - - } diff --git a/src/render/renderIO.cpp b/src/render/renderIO.cpp index 184f369..3e51c9e 100644 --- a/src/render/renderIO.cpp +++ b/src/render/renderIO.cpp @@ -1,6 +1,26 @@ #include "renderIO.h" -void PlumageRender::RenderInput::loadScene(std::string fileName,renderMain &mainRender, VulkanBackend::VulkanFoundation vkFoundation) +#ifndef _PBR_H +#define _PBR_H +#include "PBR.h" +#endif // !PBR_H + +#ifndef _VULKANFOUNDATION_H +#define _VULKANFOUNDATION_H +#include "vulkanFoundation.h" +#endif // !VULKANFOUNDATION_H + +#ifndef _RENDERSETTER_H +#define _RENDERSETTER_H +#include "renderSetter.h" +#endif // !RENDERSETTER_H + +#ifndef _RENDER_H +#define _RENDER_H +#include "render.h" +#endif // !RENDER_H + +void PlumageRender::RenderInput::loadScene(std::string fileName, renderMain& mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation) { std::cout << "Loading scene from " << fileName << std::endl; @@ -15,7 +35,7 @@ void PlumageRender::RenderInput::loadScene(std::string fileName,renderMain &main mainRender.camera.setRotation({ 0.0f, 0.0f, 0.0f }); } -void PlumageRender::RenderInput::loadEnvironment(std::string fileName,PBR::Material pbrMaterial,Setter setter ,VulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender) +void PlumageRender::RenderInput::loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, PlumageVulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender) { std::cout << "Loading environment from " << fileName << std::endl; if (pbrMaterial.textures.environmentCube.image) { @@ -27,7 +47,7 @@ void PlumageRender::RenderInput::loadEnvironment(std::string fileName,PBR::Mater pbrMaterial.generateCubemap(vkFoundation,setter,mainRender); } -void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender,VulkanBackend::VulkanFoundation vkFoundation,PBR::Material pbrMaterial) +void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender,PlumageVulkanBackend::VulkanFoundation vkFoundation,PBR::Material pbrMaterial) { const std::string assetpath = getAssetPath(); @@ -58,7 +78,7 @@ void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender, // todo :根据physicalDeviceIndex确定子文件夹路径,frameIndex确定fileName // 移动到fileSystem里 -void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, VulkanBackend::VulkanFoundation vkFoundation,Setter setter) +void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, PlumageVulkanBackend::VulkanFoundation vkFoundation,Setter setter) { bool screenshotSaved = false; @@ -299,7 +319,7 @@ void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, VulkanB } -void PlumageRender::RenderOutput::outputImageSequence(Setter setter,RenderOutput renderOutput, VulkanBackend::VulkanFoundation vkFoundation) +void PlumageRender::RenderOutput::outputImageSequence(Setter setter,RenderOutput renderOutput, PlumageVulkanBackend::VulkanFoundation vkFoundation) { // 比较已保存的帧数和设置里的开始帧数,在生成前清理上一次生成的图片序列 if (savedFrameCounter == setter.settings.startFrameCount) diff --git a/src/render/renderIO.h b/src/render/renderIO.h index cce2dbd..a570fd4 100644 --- a/src/render/renderIO.h +++ b/src/render/renderIO.h @@ -3,27 +3,23 @@ #include #include -#ifndef _RENDER_H -#include "render.h" -#define _RENDER_H -#endif // !RENDER_H - -#ifndef _PBR_H -#include "PBR.h" -#define _PBR_H -#endif // !PBR_H - -#ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" -#define _VULKANFOUNDATION_H -#endif // !VULKANFOUNDATION_H +namespace PBR +{ + class Material; +} +namespace PlumageVulkanBackend +{ + class VulkanFoundation; +} namespace PlumageRender { + class Setter; + class renderMain; class RenderInput { public: @@ -37,11 +33,11 @@ namespace PlumageRender std::map scenes; std::string selectedScene = "DamagedHelmet"; - void loadScene(std::string fileName, renderMain& mainRender, VulkanBackend::VulkanFoundation vkFoundation); + void loadScene(std::string fileName, renderMain& mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation); - void loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, VulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender); + void loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, PlumageVulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender); - void loadAssets(Setter setter, renderMain mainRender, VulkanBackend::VulkanFoundation vkFoundation, PBR::Material pbrMaterial); + void loadAssets(Setter setter, renderMain mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation, PBR::Material pbrMaterial); private: @@ -77,9 +73,9 @@ namespace PlumageRender static uint64_t savedFrameCounter; - static void writeImageToFile(std::string filePath, VulkanBackend::VulkanFoundation vkFoundation, Setter setter); + static void writeImageToFile(std::string filePath, PlumageVulkanBackend::VulkanFoundation vkFoundation, Setter setter); - static void outputImageSequence(Setter setter, RenderOutput renderOutput, VulkanBackend::VulkanFoundation vkFoundation); + static void outputImageSequence(Setter setter, RenderOutput renderOutput, PlumageVulkanBackend::VulkanFoundation vkFoundation); static void imageSequenceToVideo(RenderOutput renderOutput, Setter setter); diff --git a/src/render/renderUI.cpp b/src/render/renderUI.cpp index b2d3832..dd1b4c5 100644 --- a/src/render/renderUI.cpp +++ b/src/render/renderUI.cpp @@ -1,8 +1,8 @@ #include "renderUI.h" -#include -void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender,VulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput) + +void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender,VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput) { @@ -60,9 +60,9 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai std::wstring_convert> converter; std::string stringFilename = converter.to_bytes(filename); - renderInput.loadScene(stringFilename); + renderInput.loadScene(stringFilename,vkFoundation); - vkFoundation.createDescriptorSets(); + vkFoundation.createDescriptorSets(setter); updateCBs = true; renderOutput.signal.imageSequenceOutputComplete = false; @@ -211,9 +211,9 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai } if (updateCBs) { - vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device); + vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); vkFoundation.createCommandBuffer(); - vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device); + vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); } if (updateShaderParams) { diff --git a/src/render/renderUI.h b/src/render/renderUI.h index f3ac8d2..eac4a17 100644 --- a/src/render/renderUI.h +++ b/src/render/renderUI.h @@ -1,30 +1,34 @@ #pragma once #ifndef _RENDER_H -#include "render.h" #define _RENDER_H +#include "render.h" #endif // !RENDER_H #ifndef _VULKANFOUNDATION_H -#include "vulkanFoundation.h" #define _VULKANFOUNDATION_H +#include "vulkanFoundation.h" #endif // !VULKANFOUNDATION_H -#ifndef _RENDERSETTER_H -#include "renderSetter.h" -#define _RENDERSETTER_H -#endif // !RENDERSETTER_H - #ifndef _RENDERIO_H -#include "renderIO.h" #define _RENDERIO_H +#include "renderIO.h" #endif // !RENDERIO_H +#ifndef _RENDERSETTER_H +#define _RENDERSETTER_H +#include "renderSetter.h" +#endif // !RENDERSETTER_H + + + #ifndef _UI_HPP -#include "ui.hpp" #define _UI_HPP +#include "ui.hpp" #endif // !UI_HPP +#include + namespace PlumageRender { @@ -36,7 +40,7 @@ namespace PlumageRender - void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, VulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput); + void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput); struct DebugView { diff --git a/src/render/vulkanFoundation.cpp b/src/render/vulkanFoundation.cpp index 14e7de2..1ee0b7c 100644 --- a/src/render/vulkanFoundation.cpp +++ b/src/render/vulkanFoundation.cpp @@ -1,7 +1,7 @@ #include "vulkanFoundation.h" -void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI) +void PluamgeVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI) { // 创建instance createInstance(setter); @@ -66,7 +66,7 @@ void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Ca -void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter) { // check validation layers if (setter.settings.validation && !checkValidationLayerSupport()) @@ -117,7 +117,7 @@ void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter sette } } -bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport() +bool PluamgeVulkanBackend::VulkanFoundation::checkValidationLayerSupport() { uint32_t layerCount; vkEnumerateInstanceLayerProperties(&layerCount, nullptr); @@ -144,7 +144,7 @@ bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport() return true; } -std::vector VulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter) +std::vector PluamgeVulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter) { std::vector extensions; if (!setter.settings.headless) @@ -167,7 +167,7 @@ std::vector VulkanBackend::VulkanFoundation::getRequiredExtensions( -void VulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter) { if (!setter.settings.validation) { @@ -184,7 +184,7 @@ void VulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter s } } -void VulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo) +void PluamgeVulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo) { debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; @@ -198,7 +198,7 @@ void VulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUt debugCreateInfo.pUserData = nullptr; } // debugCallback用于校验层 -VKAPI_ATTR VkBool32 VKAPI_CALL VulkanBackend::VulkanFoundation::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) +VKAPI_ATTR VkBool32 VKAPI_CALL PluamgeVulkanBackend::VulkanFoundation::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) { { std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl; @@ -207,7 +207,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL VulkanBackend::VulkanFoundation::debugCallback(Vk } } -VkResult VulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) +VkResult PluamgeVulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) { auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"); @@ -223,7 +223,7 @@ VkResult VulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstanc -void VulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter) { if (setter.settings.headless) @@ -239,7 +239,7 @@ void VulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter -void VulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter) { uint32_t deviceCount = 0; @@ -271,7 +271,7 @@ void VulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter s } } -bool VulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter) +bool PluamgeVulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter) { if (setter.settings.headless) { @@ -291,7 +291,7 @@ bool VulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,P } } -bool VulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device) +bool PluamgeVulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device) { uint32_t extensionCount; vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr); @@ -310,7 +310,7 @@ bool VulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevi } -VulkanBackend::VulkanFoundation::QueueFamilyIndices VulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter) +PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices PluamgeVulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter) { QueueFamilyIndices indices; @@ -359,7 +359,7 @@ VulkanBackend::VulkanFoundation::QueueFamilyIndices VulkanBackend::VulkanFoundat return indices; } -VulkanBackend::VulkanFoundation::SwapChainSupportDetails VulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device) +PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails PluamgeVulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device) { // 获得surface细节 SwapChainSupportDetails details; @@ -389,7 +389,7 @@ VulkanBackend::VulkanFoundation::SwapChainSupportDetails VulkanBackend::VulkanFo -void VulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter setter) { QueueFamilyIndices indices = findQueueFamilies(physicalDevice,setter); std::vector queueCreateInfos; @@ -469,7 +469,7 @@ void VulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter -void VulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter) { if (setter.settings.headless) @@ -537,7 +537,7 @@ void VulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter sett swapChainExtent = extent; } -VkSurfaceFormatKHR VulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(const std::vector& availableFormats) +VkSurfaceFormatKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(const std::vector& availableFormats) { for (const auto& availableFormat : availableFormats) { if (availableFormat.format == VK_FORMAT_B8G8R8_SRGB && availableFormat.colorSpace == VK_COLORSPACE_SRGB_NONLINEAR_KHR) @@ -549,7 +549,7 @@ VkSurfaceFormatKHR VulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(cons return availableFormats[0]; } -VkPresentModeKHR VulkanBackend::VulkanFoundation::chooseSwapPresentMode(const std::vector& availablePresentModes, PlumageRender::Setter setter) +VkPresentModeKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapPresentMode(const std::vector& availablePresentModes, PlumageRender::Setter setter) { // Get available present modes uint32_t presentModeCount; @@ -582,7 +582,7 @@ VkPresentModeKHR VulkanBackend::VulkanFoundation::chooseSwapPresentMode(const st } } -VkExtent2D VulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities) +VkExtent2D PluamgeVulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities) { if (capabilities.currentExtent.width != std::numeric_limits::max()) { @@ -607,7 +607,7 @@ VkExtent2D VulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapa -void VulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter setter) { VkFormat colorAttachmentFormat = VK_FORMAT_R8G8B8A8_UNORM; VkFormat depthFormat = findDepthFormat(); @@ -835,7 +835,7 @@ void VulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter sett -void VulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter) { VkFormat colorAttachmentFormat; VkFormat depthAttachmentFormat = findDepthFormat(); @@ -1015,7 +1015,7 @@ void VulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter set } } -VkFormat VulkanBackend::VulkanFoundation::findDepthFormat() +VkFormat PluamgeVulkanBackend::VulkanFoundation::findDepthFormat() { return findSupportedFormat( { VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT }, @@ -1024,7 +1024,7 @@ VkFormat VulkanBackend::VulkanFoundation::findDepthFormat() ); } -VkFormat VulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) +VkFormat PluamgeVulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) { for (VkFormat format : candidates) { @@ -1043,21 +1043,21 @@ VkFormat VulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector< throw std::runtime_error("failed to find supported format"); } -bool VulkanBackend::VulkanFoundation::hasStencilComponent(VkFormat format) +bool PluamgeVulkanBackend::VulkanFoundation::hasStencilComponent(VkFormat format) { return format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D24_UNORM_S8_UINT; } -void VulkanBackend::VulkanFoundation::createDescriptorSetLayout() +void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSetLayout() { createSceneDescriptorSetLayout(); createMaterialDescriptorSetLayout(); createNodeDescriptorSetLayout(); } -void VulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout() +void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout() { // scene,场景的资源描述符 std::vector setLayoutBindings = { @@ -1074,7 +1074,7 @@ void VulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout() VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.scene)); } -void VulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout() +void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout() { // 材质或材质采样器的资源描述符 std::vector setLayoutBindings = { @@ -1091,7 +1091,7 @@ void VulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout() VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.material)); } -void VulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout() +void PluamgeVulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout() { // 模型结点或矩阵的资源描述符 std::vector setLayoutBindings = { @@ -1106,7 +1106,7 @@ void VulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout() -void VulkanBackend::VulkanFoundation::createPipelineCache() +void PluamgeVulkanBackend::VulkanFoundation::createPipelineCache() { VkPipelineCacheCreateInfo pipelineCacheCreateInfo{}; pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; @@ -1115,7 +1115,7 @@ void VulkanBackend::VulkanFoundation::createPipelineCache() -void VulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Setter setter) { VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCI{}; inputAssemblyStateCI.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; @@ -1263,7 +1263,7 @@ void VulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Sette -void VulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter) { if (setter.settings.headless) @@ -1320,7 +1320,7 @@ void VulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter se } } -void VulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter) { uint32_t attachmentCount; VkImageView attachments[attachmentCount]; @@ -1364,7 +1364,7 @@ void VulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender:: -void VulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter) { QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice,setter); @@ -1383,7 +1383,7 @@ void VulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter se -void VulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender) +void PluamgeVulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender) { if (setter.settings.headless) { @@ -1403,7 +1403,7 @@ void VulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter updateUniformBuffers(camera,mainRender); } -void VulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender) +void PluamgeVulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender) { // Scene shaderDataScene.projection = camera.matrices.perspective; @@ -1432,7 +1432,7 @@ void VulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, Plumag shaderDataSkybox.model = glm::mat4(glm::mat3(camera.matrices.view)); } -void VulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender) +void PluamgeVulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender) { /* Descriptor Pool @@ -1469,7 +1469,7 @@ void VulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::render VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool)); } -void VulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter) { if (setter.settings.headless) { @@ -1488,7 +1488,7 @@ void VulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter } // Scene (matrices and environment maps) -void VulkanBackend::VulkanFoundation::createSceneDescriptorSets() +void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSets() { for (auto i = 0; i < descriptorSets.size(); i++) @@ -1544,7 +1544,7 @@ void VulkanBackend::VulkanFoundation::createSceneDescriptorSets() } // Per-Material descriptor sets -void VulkanBackend::VulkanFoundation::createMaterialDescriptorSets() +void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSets() { for (auto& material : PlumageRender::renderMain::models.scene.materials) @@ -1603,7 +1603,7 @@ void VulkanBackend::VulkanFoundation::createMaterialDescriptorSets() } // Model node (matrices) -void VulkanBackend::VulkanFoundation::createModelNodeDescriptorSets() +void PluamgeVulkanBackend::VulkanFoundation::createModelNodeDescriptorSets() { // Per-Node descriptor set @@ -1616,7 +1616,7 @@ void VulkanBackend::VulkanFoundation::createModelNodeDescriptorSets() // attention: gltf-spec -void VulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node) +void PluamgeVulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node) { if (node->mesh) { VkDescriptorSetAllocateInfo descriptorSetAllocInfo{}; @@ -1641,7 +1641,7 @@ void VulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node } } -void VulkanBackend::VulkanFoundation::createSkyboxDescriptorSets() +void PluamgeVulkanBackend::VulkanFoundation::createSkyboxDescriptorSets() { // Skybox (fixed set) for (auto i = 0; i < uniformBuffers.size(); i++) { @@ -1681,7 +1681,7 @@ void VulkanBackend::VulkanFoundation::createSkyboxDescriptorSets() -void VulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter) { // resize if (setter.settings.headless) @@ -1702,7 +1702,7 @@ void VulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Sett VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, commandbuffers.data())); } -void VulkanBackend::VulkanFoundation::cleanupSwapChain() +void PluamgeVulkanBackend::VulkanFoundation::cleanupSwapChain() { for (auto framebuffer : framebuffers) { @@ -1717,7 +1717,7 @@ void VulkanBackend::VulkanFoundation::cleanupSwapChain() vkDestroySwapchainKHR(device, swapChain, nullptr); } -void VulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI) +void PluamgeVulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI) { VkCommandBufferBeginInfo cmdBufferBeginInfo{}; @@ -1807,7 +1807,7 @@ void VulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter } -void VulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Node* node, uint32_t cbIndex, glTFModel::Material::AlphaMode alphaMode) +void PluamgeVulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Node* node, uint32_t cbIndex, glTFModel::Material::AlphaMode alphaMode) { if (node->mesh) { // Render mesh primitives @@ -1886,7 +1886,7 @@ void VulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Nod } } -void VulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Setter setter) { waitFences.resize(setter.settings.MaxFrameInFlight); presentCompleteSemaphores.resize(setter.settings.MaxFrameInFlight); @@ -1912,7 +1912,7 @@ void VulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Set } } -void VulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) +void PluamgeVulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) { auto func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"); @@ -1924,7 +1924,7 @@ void VulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance i -bool VulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeerResized,uint32_t imageIndex,uint32_t frameIndex,PlumageRender::Setter setter) +bool PluamgeVulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeerResized,uint32_t imageIndex,uint32_t frameIndex,PlumageRender::Setter setter) { VkResult result = vkAcquireNextImageKHR(device, swapChain, UINT64_MAX, renderCompleteSemaphores[frameIndex], VK_NULL_HANDLE, &imageIndex); @@ -1940,7 +1940,7 @@ bool VulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeer } } -void VulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, uint32_t currentBuffer) +void PluamgeVulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, uint32_t currentBuffer) { const VkPipelineStageFlags waitDstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; VkSubmitInfo submitInfo{}; @@ -1955,7 +1955,7 @@ void VulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, VK_CHECK_RESULT(vkQueueSubmit(graphicQueue, 1, &submitInfo, waitFences[frameIndex])); } -void VulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter) { //显示队列 VkSemaphore signalSemaphores[] = { renderCompleteSemaphores[frameIndex] }; @@ -1984,7 +1984,7 @@ void VulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,ui } } -void VulkanBackend::VulkanFoundation::destroyVulkanBackend(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::destroyPlumageRender(PlumageRender::Setter setter) { // Clean up Vulkan resources cleanupSwapChain(); @@ -2047,7 +2047,7 @@ void VulkanBackend::VulkanFoundation::destroyVulkanBackend(PlumageRender::Setter -void VulkanBackend::VulkanFoundation::updateShaderData() +void PluamgeVulkanBackend::VulkanFoundation::updateShaderData() { PBR::Material::shaderData.lightDir = glm::vec4( sin(glm::radians(lightSource.rotation.x)) * cos(glm::radians(lightSource.rotation.y)), @@ -2056,7 +2056,7 @@ void VulkanBackend::VulkanFoundation::updateShaderData() 0.0f); } -void VulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter) +void PluamgeVulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter) { int width = 0, height = 0; glfwGetFramebufferSize(window, &width, &height); diff --git a/src/render/vulkanFoundation.h b/src/render/vulkanFoundation.h index 3c6f2d0..9d7e44f 100644 --- a/src/render/vulkanFoundation.h +++ b/src/render/vulkanFoundation.h @@ -8,31 +8,28 @@ #include #include -#ifndef _RENDER_H -#include "render.h" -#define _RENDER_H -#endif // !RENDER_H + #ifndef _GLTFMODEL_H -#include "glTFModel.h" #define _GLTFMODEL_H +#include "glTFModel.h" #endif // !GLTFMODEL_H #ifndef _RENDERSETTER_H -#include "renderSetter.h" #define _RENDERSETTER_H +#include "renderSetter.h" #endif // !RENDERSETTER_H #ifndef _GLFW3_H -#include "GLFW/glfw3.h" #define _GLFW3_H +#include "GLFW/glfw3.h" #endif // !_GLFW3_H #ifndef _VULKANUTILS_HPP -#include "VulkanUtils.hpp" #define _VULKANUTILS_HPP +#include "VulkanUtils.hpp" #endif // !_VULKANUTILS_HPP #include @@ -43,8 +40,8 @@ #endif // !_VULKANDEVICE_HPP #ifndef _CAMERA_HPP -#include "camera.hpp" #define _CAMERA_HPP +#include "camera.hpp" #endif // !_CAMERA_HPP #ifndef _UI_HPP @@ -52,8 +49,15 @@ #define _UI_HPP #endif // !UI_HPP +#ifndef _RENDER_H +#define _RENDER_H +#include "render.h" +#endif // !RENDER_H -namespace VulkanBackend +PlumageRender::renderMain mainRender; + + +namespace PluamgeVulkanBackend { class VulkanFoundation { @@ -61,6 +65,7 @@ namespace VulkanBackend VulkanFoundation(); ~VulkanFoundation(); + const std::vector validationLayers = { "VK_LAYER_KHRONOS_validation" @@ -141,7 +146,7 @@ namespace VulkanBackend void imageToQueuePresent(uint32_t frameIndex, uint32_t imageIndex, bool framebufferResized, PlumageRender::Setter setter); - void destroyVulkanBackend(PlumageRender::Setter setter); + void destroyPlumageRender(PlumageRender::Setter setter); private: @@ -279,8 +284,8 @@ namespace VulkanBackend void pickPhysicalDevice(PlumageRender::Setter setter); bool isDeviceSuitable(VkPhysicalDevice device, PlumageRender::Setter setter); bool checkDeviceExtensionSupport(VkPhysicalDevice device); - VulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter); - VulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); + PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter); + PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); // 创建程序使用的逻辑设备 void createLogicalDevice(PlumageRender::Setter setter);