main中创建对象,函数传参传递
parent
7558e92ab3
commit
f04da30909
|
@ -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;
|
||||||
|
|
||||||
|
@ -193,53 +193,27 @@ void PlumageRender::renderMain::render()
|
||||||
fpsTimer = 0.0f;
|
fpsTimer = 0.0f;
|
||||||
frameCounter = 0;
|
frameCounter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 完全重写,避免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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "renderSetter.h"
|
#include "renderSetter.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void PlumageRender::Setter::getSettingFromCommandLine()
|
void PlumageRender::Setter::getSettingFromCommandLine()
|
||||||
{
|
{
|
||||||
// 暂定
|
// 暂定
|
||||||
|
@ -51,3 +53,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlumageRender::Setter::Settings PlumageRender::Setter::getSettings()
|
||||||
|
{
|
||||||
|
return settings ;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlumageRender::Setter::FilePath PlumageRender::Setter::getFilePath()
|
||||||
|
{
|
||||||
|
return filePath;
|
||||||
|
}
|
|
@ -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();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -31,12 +31,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);
|
||||||
glm::vec2 axisRight = glm::vec2(0.0f);
|
glm::vec2 axisRight = glm::vec2(0.0f);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
@ -96,7 +96,6 @@ 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()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue