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();
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<uint32_t>((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;

View File

@ -26,7 +26,7 @@
#include <VulkanUtils.hpp>
#include "renderSetter.h"
#include "vulkanFoundation.h"
#include <camera.hpp>
#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;

View File

@ -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;
}

View File

@ -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();

View File

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

View File

@ -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);

View File

@ -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<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data();
@ -140,10 +140,10 @@ bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport()
return true;
}
std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions()
std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter)
{
std::vector<const char*> extensions;
if (!PlumageRender::Setter::settings.headless)
if (!setter.settings.headless)
{
uint32_t glfwExtensionCount = 0;
const char** glfwExtensions;
@ -152,7 +152,7 @@ std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(
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);

View File

@ -14,7 +14,7 @@
#include "PBR.h"
#include "VulkanDevice.hpp"
#include "renderUI.h"
#include <camera.hpp>
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<VkFramebuffer> framebuffers;
@ -278,9 +277,9 @@ namespace VulkanBackend
// 句柄创建,检查校验层支持和获取需要的扩展
void createInstance();
void createInstance(PlumageRender::Setter setter);
bool checkValidationLayerSupport();
std::vector<const char*> getRequiredExtensions();
std::vector<const char*> getRequiredExtensions(PlumageRender::Setter setter);
// 实时显示结果使用的glfwSurface,受headless配置项控制
void createSurface();
@ -375,8 +374,5 @@ namespace VulkanBackend
{
}
VulkanFoundation::~VulkanFoundation()
{
}
}