main中创建对象,函数传参传递

InkSoul 2024-04-09 23:48:07 +08:00
parent 7558e92ab3
commit f04da30909
8 changed files with 52 additions and 79 deletions

View File

@ -46,7 +46,7 @@ void PlumageRender::renderMain::prepare()
{ {
//VulkanExampleBase::prepare(); //VulkanExampleBase::prepare();
setupCamera(); setupCamera(camera);
renderInput.loadAssets(); renderInput.loadAssets();
pbrMaterial.generateBRDFLUT(); pbrMaterial.generateBRDFLUT();
@ -64,7 +64,7 @@ void PlumageRender::renderMain::prepare()
prepared = true; prepared = true;
} }
void PlumageRender::renderMain::setupCamera() void PlumageRender::renderMain::setupCamera(Camera camera)
{ {
camera.type = Camera::CameraType::lookat; camera.type = Camera::CameraType::lookat;
@ -192,6 +192,7 @@ void PlumageRender::renderMain::render()
lastFPS = static_cast<uint32_t>((float)frameCounter * (1000.0f / fpsTimer)); lastFPS = static_cast<uint32_t>((float)frameCounter * (1000.0f / fpsTimer));
fpsTimer = 0.0f; fpsTimer = 0.0f;
frameCounter = 0; 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() int main()
{ {
PlumageRender::RenderOutput renderOutput;
PlumageRender::RenderInput renderInput;
PlumageRender::Setter setter;
PlumageRender::renderMain plumageRender; PlumageRender::renderMain plumageRender;
VulkanBackend::VulkanFoundation vkFoundation; VulkanBackend::VulkanFoundation vkFoundation;
vkFoundation.initVulkan(); 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; return 0;

View File

@ -26,7 +26,7 @@
#include <VulkanUtils.hpp> #include <VulkanUtils.hpp>
#include "renderSetter.h" #include "renderSetter.h"
#include "vulkanFoundation.h" #include "vulkanFoundation.h"
#include <camera.hpp>
#define STB_IMAGE_WRITE_IMPLEMENTATION #define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h" #include "stb_image_write.h"
@ -80,6 +80,7 @@ namespace PlumageRender
static int32_t animationIndex; static int32_t animationIndex;
float animationTimer = 0.0f; float animationTimer = 0.0f;
Camera camera;
renderMain(); renderMain();
@ -89,7 +90,7 @@ namespace PlumageRender
static void framebufferResizeCallback(GLFWwindow* window, int width, int height); static void framebufferResizeCallback(GLFWwindow* window, int width, int height);
void windowResized(); void windowResized();
void prepare(); void prepare();
void setupCamera(); void setupCamera(Camera camera);
void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue); void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue);
void submitToPresentQueue(); void submitToPresentQueue();
@ -98,15 +99,6 @@ namespace PlumageRender
void drawFrame(); void drawFrame();
private: private:
PlumageRender::RenderInput renderInput;
PlumageRender::RenderOutput renderOutput;
PBR::Material pbrMaterial;
PlumageRender::PlumageGUI renderGUI;
VulkanBackend::VulkanFoundation vkFoundation;
bool framebufferResized = false; bool framebufferResized = false;

View File

@ -1,6 +1,8 @@
#include "renderSetter.h" #include "renderSetter.h"
void PlumageRender::Setter::getSettingFromCommandLine()
void PlumageRender::Setter::getSettingFromCommandLine()
{ {
// 暂定 // 暂定
char* numConvPtr; char* numConvPtr;
@ -50,4 +52,14 @@
} }
}
PlumageRender::Setter::Settings PlumageRender::Setter::getSettings()
{
return settings ;
}
PlumageRender::Setter::FilePath PlumageRender::Setter::getFilePath()
{
return filePath;
} }

View File

@ -42,8 +42,9 @@ namespace PlumageRender
uint32_t selectedPhysicalDeviceIndex = 0; // 选中的显卡数组形式从0开始编号 uint32_t selectedPhysicalDeviceIndex = 0; // 选中的显卡数组形式从0开始编号
VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; // 多重采样倍率 VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; // 多重采样倍率
}; }settings;
static Settings settings;
Settings getSettings();
struct FilePath struct FilePath
{ {
@ -101,11 +102,13 @@ namespace PlumageRender
std::string image2videoBatFilePath = getAssetPath() + "script/image2video.bat"; std::string image2videoBatFilePath = getAssetPath() + "script/image2video.bat";
std::string image2videoShFilePath = getAssetPath() + "script/image2video.sh"; std::string image2videoShFilePath = getAssetPath() + "script/image2video.sh";
}; }filePath;
static FilePath filePath; FilePath getFilePath();
private: private:
void getSettingFromCommandLine(); void getSettingFromCommandLine();

View File

@ -2,8 +2,10 @@
#include <codecvt> #include <codecvt>
void PlumageRender::PlumageGUI::updateUIOverlay() void PlumageRender::PlumageGUI::updateUIOverlay(Setter setter)
{ {
Setter::Settings settings = setter.getSettings();
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
ImVec2 lastDisplaySize = io.DisplaySize; ImVec2 lastDisplaySize = io.DisplaySize;

View File

@ -30,12 +30,6 @@ namespace PlumageRender
private: private:
PlumageRender::RenderInput renderInput;
VulkanBackend::VulkanFoundation vkFoundation;
PlumageRender::RenderOutput renderOutput;
PlumageRender::renderMain renderMain;
struct GamePadState { struct GamePadState {
glm::vec2 axisLeft = glm::vec2(0.0f); glm::vec2 axisLeft = glm::vec2(0.0f);

View File

@ -1,10 +1,10 @@
#include "vulkanFoundation.h" #include "vulkanFoundation.h"
void VulkanBackend::VulkanFoundation::initVulkan() void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter)
{ {
// 创建instance // 创建instance
createInstance(); createInstance(setter);
// 设置校验层消息回调 // 设置校验层消息回调
setupDebugMessager(); setupDebugMessager();
@ -62,10 +62,10 @@ void VulkanBackend::VulkanFoundation::initVulkan()
void VulkanBackend::VulkanFoundation::createInstance() void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter)
{ {
// check validation layers // check validation layers
if (PlumageRender::Setter::settings.validation && !checkValidationLayerSupport()) if (setter.settings.validation && !checkValidationLayerSupport())
{ {
throw std::runtime_error("validation layers requsted,but not available"); 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 // enable validation layer if available in createInfo
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{}; VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{};
if (PlumageRender::Setter::settings.validation) if (setter.settings.validation)
{ {
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data(); createInfo.ppEnabledLayerNames = validationLayers.data();
@ -140,10 +140,10 @@ bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport()
return true; return true;
} }
std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions() std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter)
{ {
std::vector<const char*> extensions; std::vector<const char*> extensions;
if (!PlumageRender::Setter::settings.headless) if (!setter.settings.headless)
{ {
uint32_t glfwExtensionCount = 0; uint32_t glfwExtensionCount = 0;
const char** glfwExtensions; const char** glfwExtensions;
@ -152,7 +152,7 @@ std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(
std::vector<const char*> extensions(glfwExtensions, glfwExtensions + glfwExtensionCount); std::vector<const char*> extensions(glfwExtensions, glfwExtensions + glfwExtensionCount);
} }
if (PlumageRender::Setter::settings.validation) if (setter.settings.validation)
{ {
extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);

View File

@ -14,7 +14,7 @@
#include "PBR.h" #include "PBR.h"
#include "VulkanDevice.hpp" #include "VulkanDevice.hpp"
#include "renderUI.h" #include "renderUI.h"
#include <camera.hpp>
namespace VulkanBackend namespace VulkanBackend
@ -38,7 +38,7 @@ namespace VulkanBackend
vkDestroyImageView(device, depthAttachment.view, nullptr); vkDestroyImageView(device, depthAttachment.view, nullptr);
vkDestroyImage(device, depthAttachment.image, nullptr); vkDestroyImage(device, depthAttachment.image, nullptr);
vkFreeMemory(device, depthAttachment.memory, nullptr); vkFreeMemory(device, depthAttachment.memory, nullptr);
if (PlumageRender::Setter::settings.multiSampling) { if (PlumageRender::Setter::settings.multiSampling) {
vkDestroyImage(device, multisampleTarget.colorAttachment.image, nullptr); vkDestroyImage(device, multisampleTarget.colorAttachment.image, nullptr);
vkDestroyImageView(device, multisampleTarget.colorAttachment.view, nullptr); vkDestroyImageView(device, multisampleTarget.colorAttachment.view, nullptr);
@ -47,7 +47,7 @@ namespace VulkanBackend
vkDestroyImageView(device, multisampleTarget.depthAttachment.view, nullptr); vkDestroyImageView(device, multisampleTarget.depthAttachment.view, nullptr);
vkFreeMemory(device, multisampleTarget.depthAttachment.memory, nullptr); vkFreeMemory(device, multisampleTarget.depthAttachment.memory, nullptr);
} }
// Clean up used Vulkan resources // Clean up used Vulkan resources
// Note : Inherited destructor cleans up resources stored in base class // Note : Inherited destructor cleans up resources stored in base class
@ -61,7 +61,7 @@ namespace VulkanBackend
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.material, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.material, nullptr);
vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.node, nullptr); vkDestroyDescriptorSetLayout(device, descriptorSetLayouts.node, nullptr);
for (auto buffer : uniformBuffers) { for (auto buffer : uniformBuffers) {
buffer.params.destroy(); buffer.params.destroy();
@ -96,8 +96,7 @@ namespace VulkanBackend
const int MAX_FRAME_IN_FLIGHT = 2; const int MAX_FRAME_IN_FLIGHT = 2;
const int frameRange =PlumageRender::Setter::settings.endFrameIndex - PlumageRender::Setter::settings.startFrameCount;
static VkDevice device; static VkDevice device;
static vks::VulkanDevice* vulkanDevice; static vks::VulkanDevice* vulkanDevice;
@ -145,7 +144,7 @@ namespace VulkanBackend
VkQueue presentQueue; VkQueue presentQueue;
void initVulkan(); void initVulkan(PlumageRender::Setter setter);
// 创建描述符集合 // 创建描述符集合
void createDescriptorSets(); void createDescriptorSets();
@ -215,7 +214,7 @@ namespace VulkanBackend
VkDescriptorPool descriptorPool; VkDescriptorPool descriptorPool;
Camera camera;
std::vector<VkFramebuffer> framebuffers; std::vector<VkFramebuffer> framebuffers;
@ -278,9 +277,9 @@ namespace VulkanBackend
// 句柄创建,检查校验层支持和获取需要的扩展 // 句柄创建,检查校验层支持和获取需要的扩展
void createInstance(); void createInstance(PlumageRender::Setter setter);
bool checkValidationLayerSupport(); bool checkValidationLayerSupport();
std::vector<const char*> getRequiredExtensions(); std::vector<const char*> getRequiredExtensions(PlumageRender::Setter setter);
// 实时显示结果使用的glfwSurface,受headless配置项控制 // 实时显示结果使用的glfwSurface,受headless配置项控制
void createSurface(); void createSurface();
@ -375,8 +374,5 @@ namespace VulkanBackend
{ {
} }
VulkanFoundation::~VulkanFoundation()
{
}
} }