diff --git a/src/render/render.cpp b/src/render/render.cpp index a9fb4e9..2578d34 100644 --- a/src/render/render.cpp +++ b/src/render/render.cpp @@ -46,7 +46,7 @@ void PlumageRender::renderMain::prepare() { //VulkanExampleBase::prepare(); - setupCamera(); + setupCamera(camera); renderInput.loadAssets(); pbrMaterial.generateBRDFLUT(); @@ -64,7 +64,7 @@ void PlumageRender::renderMain::prepare() prepared = true; } -void PlumageRender::renderMain::setupCamera() +void PlumageRender::renderMain::setupCamera(Camera camera) { camera.type = Camera::CameraType::lookat; @@ -192,6 +192,7 @@ void PlumageRender::renderMain::render() lastFPS = static_cast((float)frameCounter * (1000.0f / fpsTimer)); fpsTimer = 0.0f; frameCounter = 0; + } } @@ -200,46 +201,19 @@ void PlumageRender::renderMain::render() -// 完全重写,避免OS specific -/* -PlumageRender* plumageRender; -#if defined(_WIN32) - LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) - { - if (plumageRender != NULL) - { - plumageRender->handleMessages(hWnd, uMsg, wParam, lParam); - } - return (DefWindowProc(hWnd, uMsg, wParam, lParam)); - } - int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) - { - VulkanBackend::Setter setter; - for (int32_t i = 0; i < __argc; i++) {setter.args.push_back(__argv[i]); }; - plumageRender = new PlumageRender(); - - plumageRender->initVulkan(); - if (!plumageRender->PlumageRender::Setter::settings.headless) - { - plumageRender->setupWindow(hInstance, WndProc); - } - plumageRender->prepare(); - plumageRender->renderLoop(); - delete(plumageRender); - return 0; - } -#endif -*/ int main() { + PlumageRender::RenderOutput renderOutput; + PlumageRender::RenderInput renderInput; + PlumageRender::Setter setter; PlumageRender::renderMain plumageRender; - VulkanBackend::VulkanFoundation vkFoundation; + VulkanBackend::VulkanFoundation vkFoundation; vkFoundation.initVulkan(); - if (!PlumageRender::Setter::settings.headless) + if (!setter.settings.headless) { - plumageRender.initWindow(PlumageRender::Setter::settings.width,PlumageRender::Setter::settings.height); + plumageRender.initWindow(setter.settings.width,setter.settings.height); } return 0; diff --git a/src/render/render.h b/src/render/render.h index ad87474..0226189 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -26,7 +26,7 @@ #include #include "renderSetter.h" #include "vulkanFoundation.h" - +#include #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" @@ -80,6 +80,7 @@ namespace PlumageRender static int32_t animationIndex; float animationTimer = 0.0f; + Camera camera; renderMain(); @@ -89,7 +90,7 @@ namespace PlumageRender static void framebufferResizeCallback(GLFWwindow* window, int width, int height); void windowResized(); void prepare(); - void setupCamera(); + void setupCamera(Camera camera); void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue); void submitToPresentQueue(); @@ -98,15 +99,6 @@ namespace PlumageRender void drawFrame(); private: - PlumageRender::RenderInput renderInput; - - PlumageRender::RenderOutput renderOutput; - - PBR::Material pbrMaterial; - - PlumageRender::PlumageGUI renderGUI; - - VulkanBackend::VulkanFoundation vkFoundation; bool framebufferResized = false; diff --git a/src/render/renderSetter.cpp b/src/render/renderSetter.cpp index ad7b417..a291ee1 100644 --- a/src/render/renderSetter.cpp +++ b/src/render/renderSetter.cpp @@ -1,6 +1,8 @@ #include "renderSetter.h" - void PlumageRender::Setter::getSettingFromCommandLine() + + +void PlumageRender::Setter::getSettingFromCommandLine() { // 暂定 char* numConvPtr; @@ -50,4 +52,14 @@ } +} + +PlumageRender::Setter::Settings PlumageRender::Setter::getSettings() + { + return settings ; + } + +PlumageRender::Setter::FilePath PlumageRender::Setter::getFilePath() +{ + return filePath; } \ No newline at end of file diff --git a/src/render/renderSetter.h b/src/render/renderSetter.h index 23b5e80..5a9efb8 100644 --- a/src/render/renderSetter.h +++ b/src/render/renderSetter.h @@ -42,8 +42,9 @@ namespace PlumageRender uint32_t selectedPhysicalDeviceIndex = 0; // 选中的显卡,数组形式从0开始编号 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; // 多重采样倍率 - }; - static Settings settings; + }settings; + + Settings getSettings(); struct FilePath { @@ -101,11 +102,13 @@ namespace PlumageRender std::string image2videoBatFilePath = getAssetPath() + "script/image2video.bat"; std::string image2videoShFilePath = getAssetPath() + "script/image2video.sh"; - }; - static FilePath filePath; + }filePath; + FilePath getFilePath(); private: + + void getSettingFromCommandLine(); diff --git a/src/render/renderUI.cpp b/src/render/renderUI.cpp index 33875e0..2ee53a7 100644 --- a/src/render/renderUI.cpp +++ b/src/render/renderUI.cpp @@ -2,8 +2,10 @@ #include -void PlumageRender::PlumageGUI::updateUIOverlay() +void PlumageRender::PlumageGUI::updateUIOverlay(Setter setter) { + Setter::Settings settings = setter.getSettings(); + ImGuiIO& io = ImGui::GetIO(); ImVec2 lastDisplaySize = io.DisplaySize; diff --git a/src/render/renderUI.h b/src/render/renderUI.h index c1ea5d9..b72b744 100644 --- a/src/render/renderUI.h +++ b/src/render/renderUI.h @@ -30,12 +30,6 @@ namespace PlumageRender private: - - - PlumageRender::RenderInput renderInput; - VulkanBackend::VulkanFoundation vkFoundation; - PlumageRender::RenderOutput renderOutput; - PlumageRender::renderMain renderMain; struct GamePadState { glm::vec2 axisLeft = glm::vec2(0.0f); diff --git a/src/render/vulkanFoundation.cpp b/src/render/vulkanFoundation.cpp index 0a9c12c..3e97bab 100644 --- a/src/render/vulkanFoundation.cpp +++ b/src/render/vulkanFoundation.cpp @@ -1,10 +1,10 @@ #include "vulkanFoundation.h" -void VulkanBackend::VulkanFoundation::initVulkan() +void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter) { // 创建instance - createInstance(); + createInstance(setter); // 设置校验层消息回调 setupDebugMessager(); @@ -62,10 +62,10 @@ void VulkanBackend::VulkanFoundation::initVulkan() -void VulkanBackend::VulkanFoundation::createInstance() +void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter) { // check validation layers - if (PlumageRender::Setter::settings.validation && !checkValidationLayerSupport()) + if (setter.settings.validation && !checkValidationLayerSupport()) { throw std::runtime_error("validation layers requsted,but not available"); } @@ -92,7 +92,7 @@ void VulkanBackend::VulkanFoundation::createInstance() // enable validation layer if available in createInfo VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{}; - if (PlumageRender::Setter::settings.validation) + if (setter.settings.validation) { createInfo.enabledLayerCount = static_cast(validationLayers.size()); createInfo.ppEnabledLayerNames = validationLayers.data(); @@ -140,10 +140,10 @@ bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport() return true; } -std::vector VulkanBackend::VulkanFoundation::getRequiredExtensions() +std::vector VulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter) { std::vector extensions; - if (!PlumageRender::Setter::settings.headless) + if (!setter.settings.headless) { uint32_t glfwExtensionCount = 0; const char** glfwExtensions; @@ -152,7 +152,7 @@ std::vector VulkanBackend::VulkanFoundation::getRequiredExtensions( std::vector extensions(glfwExtensions, glfwExtensions + glfwExtensionCount); } - if (PlumageRender::Setter::settings.validation) + if (setter.settings.validation) { extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); diff --git a/src/render/vulkanFoundation.h b/src/render/vulkanFoundation.h index 77dec25..228b7ba 100644 --- a/src/render/vulkanFoundation.h +++ b/src/render/vulkanFoundation.h @@ -14,7 +14,7 @@ #include "PBR.h" #include "VulkanDevice.hpp" #include "renderUI.h" -#include + namespace VulkanBackend @@ -38,7 +38,7 @@ namespace VulkanBackend vkDestroyImageView(device, depthAttachment.view, nullptr); vkDestroyImage(device, depthAttachment.image, nullptr); vkFreeMemory(device, depthAttachment.memory, nullptr); - + if (PlumageRender::Setter::settings.multiSampling) { vkDestroyImage(device, multisampleTarget.colorAttachment.image, nullptr); vkDestroyImageView(device, multisampleTarget.colorAttachment.view, nullptr); @@ -47,7 +47,7 @@ namespace VulkanBackend vkDestroyImageView(device, multisampleTarget.depthAttachment.view, nullptr); vkFreeMemory(device, multisampleTarget.depthAttachment.memory, nullptr); } - + // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class @@ -61,7 +61,7 @@ namespace VulkanBackend vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.material, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.node, nullptr); - + for (auto buffer : uniformBuffers) { buffer.params.destroy(); @@ -96,8 +96,7 @@ namespace VulkanBackend const int MAX_FRAME_IN_FLIGHT = 2; - const int frameRange =PlumageRender::Setter::settings.endFrameIndex - PlumageRender::Setter::settings.startFrameCount; - + static VkDevice device; static vks::VulkanDevice* vulkanDevice; @@ -145,7 +144,7 @@ namespace VulkanBackend VkQueue presentQueue; - void initVulkan(); + void initVulkan(PlumageRender::Setter setter); // 创建描述符集合 void createDescriptorSets(); @@ -215,7 +214,7 @@ namespace VulkanBackend VkDescriptorPool descriptorPool; - Camera camera; + std::vector framebuffers; @@ -278,9 +277,9 @@ namespace VulkanBackend // 句柄创建,检查校验层支持和获取需要的扩展 - void createInstance(); + void createInstance(PlumageRender::Setter setter); bool checkValidationLayerSupport(); - std::vector getRequiredExtensions(); + std::vector getRequiredExtensions(PlumageRender::Setter setter); // 实时显示结果使用的glfwSurface,受headless配置项控制 void createSurface(); @@ -375,8 +374,5 @@ namespace VulkanBackend { } - VulkanFoundation::~VulkanFoundation() - { - } } \ No newline at end of file