forward declare

InkSoul 2024-04-10 23:29:41 +08:00
parent c3cdffc81a
commit b07037ecfb
6 changed files with 190 additions and 133 deletions

View File

@ -3,6 +3,25 @@
//#include "VulkanUtils.hpp" //#include "VulkanUtils.hpp"
//#include "assetLoader.h" //#include "assetLoader.h"
#ifndef _VULKANFOUNDATION_H
#define _VULKANFOUNDATION_H
#include "vulkanFoundation.h"
#endif // !VULKANFOUNDATION_H
#ifndef _RENDERGUI_H
#define _RENDERGUI_H
#include "renderUI.h"
#endif // !_RENDERGUI_H
#ifndef _RENDERIO_H
#define _RENDERIO_H
#include "renderIO.h"
#endif // !RENDERIO_H
#include "renderSetter.h"
#include "PBR.h"
void PlumageRender::renderMain::initWindow(int Width, int Height) void PlumageRender::renderMain::initWindow(int Width, int Height)
{ {
@ -22,7 +41,7 @@ void PlumageRender::renderMain::framebufferResizeCallback(GLFWwindow* window, in
} }
void PlumageRender::renderMain::prepare(Setter setter,PlumageGUI renderGUI,RenderInput renderInput,RenderOutput renderOutput,PBR::Material pbrMaterial,PluamgeVulkanBackend::VulkanFoundation vkFoundation,renderMain mainRender,UI* ui) void PlumageRender::renderMain::prepare(Setter setter,PlumageGUI renderGUI,RenderInput renderInput,RenderOutput renderOutput,PBR::Material pbrMaterial,PlumageVulkanBackend::VulkanFoundation vkFoundation,renderMain mainRender,UI* ui)
{ {
//VulkanExampleBase::prepare(); //VulkanExampleBase::prepare();
@ -62,10 +81,10 @@ void PlumageRender::renderMain::submitWork(VkCommandBuffer cmdBuffer, VkQueue qu
submitInfo.pCommandBuffers = &cmdBuffer; submitInfo.pCommandBuffers = &cmdBuffer;
VkFenceCreateInfo fenceInfo = vks::initializers::fenceCreateInfo(); VkFenceCreateInfo fenceInfo = vks::initializers::fenceCreateInfo();
VkFence fence; VkFence fence;
VK_CHECK_RESULT(vkCreateFence(PluamgeVulkanBackend::VulkanFoundation::device, &fenceInfo, nullptr, &fence)); VK_CHECK_RESULT(vkCreateFence(PlumageVulkanBackend::VulkanFoundation::device, &fenceInfo, nullptr, &fence));
VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence)); VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence));
VK_CHECK_RESULT(vkWaitForFences(PluamgeVulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX)); VK_CHECK_RESULT(vkWaitForFences(PlumageVulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX));
vkDestroyFence(PluamgeVulkanBackend::VulkanFoundation::device, fence, nullptr); vkDestroyFence(PlumageVulkanBackend::VulkanFoundation::device, fence, nullptr);
} }
void PlumageRender::renderMain::submitToPresentQueue() void PlumageRender::renderMain::submitToPresentQueue()
@ -74,7 +93,7 @@ void PlumageRender::renderMain::submitToPresentQueue()
} }
void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* gui,renderMain mainRender,PluamgeVulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput renderOutput) void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* gui,renderMain mainRender,PlumageVulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput renderOutput)
{ {
if (!prepared) { if (!prepared) {
return; return;
@ -82,7 +101,7 @@ void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* g
if (!setter.settings.headless) if (!setter.settings.headless)
{ {
plumageGUI.updateUIOverlay(gui,setter,mainRender,vkFoundation,renderInput,renderOutput); plumageGUI.updateUIOverlay(gui,setter,mainRender,vkFoundation,renderInput,renderOutput,);
} }
uint32_t imageIndex; uint32_t imageIndex;
@ -98,7 +117,7 @@ void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* g
// Update UBOs // Update UBOs
vkFoundation.updateUniformBuffers(camera,mainRender); vkFoundation.updateUniformBuffers(camera,mainRender);
PluamgeVulkanBackend::VulkanFoundation::UniformBufferSet currentUB = vkFoundation.uniformBuffers[currentBuffer]; PlumageVulkanBackend::VulkanFoundation::UniformBufferSet currentUB = vkFoundation.uniformBuffers[currentBuffer];
memcpy(currentUB.scene.mapped, &vkFoundation.shaderDataScene, sizeof(vkFoundation.shaderDataScene)); memcpy(currentUB.scene.mapped, &vkFoundation.shaderDataScene, sizeof(vkFoundation.shaderDataScene));
memcpy(currentUB.params.mapped, &PBR::Material::shaderData, sizeof(PBR::Material::shaderData)); memcpy(currentUB.params.mapped, &PBR::Material::shaderData, sizeof(PBR::Material::shaderData));
memcpy(currentUB.skybox.mapped, &vkFoundation.shaderDataSkybox, sizeof(vkFoundation.shaderDataSkybox)); memcpy(currentUB.skybox.mapped, &vkFoundation.shaderDataSkybox, sizeof(vkFoundation.shaderDataSkybox));
@ -153,7 +172,7 @@ void PlumageRender::renderMain::renderLoop(GLFWwindow* window,Setter setter)
drawFrame(); drawFrame();
} }
} }
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); vkDeviceWaitIdle(PlumageVulkanBackend::VulkanFoundation::device);
} }
void PlumageRender::renderMain::drawFrame() void PlumageRender::renderMain::drawFrame()
@ -175,6 +194,14 @@ void PlumageRender::renderMain::drawFrame()
} }
} }
void PlumageRender::renderMain::destroyModel(PlumageVulkanBackend::VulkanFoundation vkFoundation)
{
models.scene.destroy(vkFoundation.device);
models.skybox.destroy(vkFoundation.device);
}
@ -189,7 +216,7 @@ int main()
PlumageRender::RenderInput renderInput; PlumageRender::RenderInput renderInput;
PlumageRender::Setter setter; PlumageRender::Setter setter;
PlumageRender::renderMain plumageRender; PlumageRender::renderMain plumageRender;
PluamgeVulkanBackend::VulkanFoundation vkFoundation; PlumageVulkanBackend::VulkanFoundation vkFoundation;
UI* gui = new UI(vkFoundation.vulkanDevice, vkFoundation.renderPass, vkFoundation.graphicQueue, vkFoundation.pipelineCache, setter.settings.sampleCount); UI* gui = new UI(vkFoundation.vulkanDevice, vkFoundation.renderPass, vkFoundation.graphicQueue, vkFoundation.pipelineCache, setter.settings.sampleCount);
vkFoundation.initVulkan(); vkFoundation.initVulkan();

View File

@ -36,10 +36,7 @@
#include "GLFW/glfw3.h" #include "GLFW/glfw3.h"
#endif // !_GLFW3_H #endif // !_GLFW3_H
#ifndef _VULKANFOUNDATION_H
#define _VULKANFOUNDATION_H
#include "vulkanFoundation.h"
#endif // !VULKANFOUNDATION_H
#ifndef _GLTFMODEL_H #ifndef _GLTFMODEL_H
#define _GLTFMODEL_H #define _GLTFMODEL_H
@ -48,20 +45,14 @@
#ifndef _RENDERGUI_H
#define _RENDERGUI_H
#include "renderUI.h"
#endif // !_RENDERGUI_H
#ifndef _UI_HPP #ifndef _UI_HPP
#define _UI_HPP #define _UI_HPP
#include "ui.hpp" #include "ui.hpp"
#endif // !UI_HPP #endif // !UI_HPP
#ifndef _RENDERIO_H
#define _RENDERIO_H
#include "renderIO.h"
#endif // !RENDERIO_H
#ifndef _VULKANDEVICE_HPP #ifndef _VULKANDEVICE_HPP
#define _VULKANDEVICE_HPP #define _VULKANDEVICE_HPP
@ -92,12 +83,22 @@
#define ENABLE_VALIDATION false #define ENABLE_VALIDATION false
PluamgeVulkanBackend::VulkanFoundation vkFoundation; namespace PlumageVulkanBackend
{
class VulkanFoundation;
}
namespace PBR
{
class Material;
}
namespace PlumageRender namespace PlumageRender
{ {
class RenderInput;
class RenderOutput;
class Setter;
class PlumageGUI;
class renderMain class renderMain
{ {
public: public:
@ -151,14 +152,15 @@ namespace PlumageRender
void initWindow(int width, int height); void initWindow(int width, int height);
static void framebufferResizeCallback(GLFWwindow* window, int width, int height); static void framebufferResizeCallback(GLFWwindow* window, int width, int height);
void windowResized(); void windowResized();
void prepare(Setter setter, PlumageGUI renderGUI, RenderInput renderInput, RenderOutput renderOutput, PBR::Material pbrMaterial, PluamgeVulkanBackend::VulkanFoundation vkFoundation, renderMain mainRender, UI* ui); void prepare(Setter setter, PlumageGUI renderGUI, RenderInput renderInput, RenderOutput renderOutput, PBR::Material pbrMaterial, PlumageVulkanBackend::VulkanFoundation vkFoundation, renderMain mainRender, UI* ui);
void setupCamera(Camera camera, Setter setter); void setupCamera(Camera camera, Setter setter);
void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue); void submitWork(VkCommandBuffer cmdBuffer, VkQueue queue);
void submitToPresentQueue(); void submitToPresentQueue();
virtual void render(Setter setter, PlumageGUI plumageGUI, UI* gui, renderMain mainRender, PluamgeVulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput renderOutput); virtual void render(Setter setter, PlumageGUI plumageGUI, UI* gui, renderMain mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput renderOutput);
void renderLoop(GLFWwindow* window, Setter setter); void renderLoop(GLFWwindow* window, Setter setter);
void drawFrame(); void drawFrame();
void destroyModel(PlumageVulkanBackend::VulkanFoundation vkFoundation);
private: private:
@ -175,8 +177,8 @@ namespace PlumageRender
renderMain::~renderMain() renderMain::~renderMain()
{ {
models.scene.destroy(PluamgeVulkanBackend::VulkanFoundation::device); models.scene.destroy(PlumageVulkanBackend::VulkanFoundation::device);
models.skybox.destroy(PluamgeVulkanBackend::VulkanFoundation::device); models.skybox.destroy(PlumageVulkanBackend::VulkanFoundation::device);
} }

View File

@ -1,8 +1,28 @@
#include "renderUI.h" #include "renderUI.h"
#ifndef _RENDER_H
#define _RENDER_H
#include "render.h"
#endif // !RENDER_H
void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender,VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput) #include "vulkanFoundation.h"
#ifndef _RENDERIO_H
#define _RENDERIO_H
#include "renderIO.h"
#endif // !RENDERIO_H
#ifndef _RENDERSETTER_H
#define _RENDERSETTER_H
#include "renderSetter.h"
#endif // !RENDERSETTER_H
#include "PBR.h"
void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput,PBR::Material pbrMaterial)
{ {
@ -60,9 +80,9 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::string stringFilename = converter.to_bytes(filename); std::string stringFilename = converter.to_bytes(filename);
renderInput.loadScene(stringFilename,vkFoundation); renderInput.loadScene(stringFilename,mainRender,vkFoundation);
vkFoundation.createDescriptorSets(setter); vkFoundation.createDescriptorSets(setter,mainRender);
updateCBs = true; updateCBs = true;
renderOutput.signal.imageSequenceOutputComplete = false; renderOutput.signal.imageSequenceOutputComplete = false;
@ -80,8 +100,8 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai
auto& environments = renderInput.environments; auto& environments = renderInput.environments;
if (gui->combo(chineseUI.environmentMap, selectedEnvironment, environments)) { if (gui->combo(chineseUI.environmentMap, selectedEnvironment, environments)) {
vkDeviceWaitIdle(vkFoundation.device); vkDeviceWaitIdle(vkFoundation.device);
renderInput.loadEnvironment(environments[selectedEnvironment]); renderInput.loadEnvironment(environments[selectedEnvironment],pbrMaterial,setter,vkFoundation,mainRender);
vkFoundation.createDescriptorSets(); vkFoundation.createDescriptorSets(setter,mainRender);
updateCBs = true; updateCBs = true;
} }
if (gui->checkbox(chineseUI.environmentBackGround, &setter.settings.displayBackground)) { if (gui->checkbox(chineseUI.environmentBackGround, &setter.settings.displayBackground)) {
@ -134,7 +154,7 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai
} }
if (gui->beginMenu(chineseUI.menuAnimation)) if (gui->beginMenu(chineseUI.menuAnimation))
{ {
if (PlumageRender::renderMain::models.scene.animations.size() > 0) if (mainRender.models.scene.animations.size() > 0)
{ {
if (gui->beginMenu(chineseUI.menuAnimationActivation)) if (gui->beginMenu(chineseUI.menuAnimationActivation))
{ {
@ -211,12 +231,12 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai
} }
if (updateCBs) { if (updateCBs) {
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); vkDeviceWaitIdle(vkFoundation.device);
vkFoundation.createCommandBuffer(); vkFoundation.createCommandBuffer(setter,mainRender,gui);
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device); vkDeviceWaitIdle(vkFoundation.device);
} }
if (updateShaderParams) { if (updateShaderParams) {
vkFoundation.createCommandBuffer(); vkFoundation.createCommandBuffer(setter, mainRender, gui);
} }
} }

View File

@ -1,24 +1,6 @@
#pragma once #pragma once
#ifndef _RENDER_H
#define _RENDER_H
#include "render.h"
#endif // !RENDER_H
#ifndef _VULKANFOUNDATION_H
#define _VULKANFOUNDATION_H
#include "vulkanFoundation.h"
#endif // !VULKANFOUNDATION_H
#ifndef _RENDERIO_H
#define _RENDERIO_H
#include "renderIO.h"
#endif // !RENDERIO_H
#ifndef _RENDERSETTER_H
#define _RENDERSETTER_H
#include "renderSetter.h"
#endif // !RENDERSETTER_H
@ -29,9 +11,22 @@
#include <codecvt> #include <codecvt>
namespace PlumageVulkanBackend
{
class VulkanFoundation;
}
namespace PBR
{
class Material;
}
namespace PlumageRender namespace PlumageRender
{ {
class Setter;
class RenderInput;
class RenderOutput;
class renderMain;
class PlumageGUI class PlumageGUI
{ {
public: public:
@ -40,7 +35,7 @@ namespace PlumageRender
void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput); void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput,PBR::Material pbrMaterial);
struct DebugView struct DebugView
{ {

View File

@ -1,7 +1,23 @@
#include "vulkanFoundation.h" #include "vulkanFoundation.h"
void PluamgeVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI)
#ifndef _RENDERSETTER_H
#define _RENDERSETTER_H
#include "renderSetter.h"
#endif // !RENDERSETTER_H
#ifndef _RENDER_H
#define _RENDER_H
#include "render.h"
#endif // !RENDER_H
#ifndef _PBR_H
#define _PBR_H
#include "PBR.h"
#endif // !PBR_H
void PlumageVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI)
{ {
// 创建instance // 创建instance
createInstance(setter); createInstance(setter);
@ -54,7 +70,7 @@ void PluamgeVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter se
createDescriptorPool(mainRender); createDescriptorPool(mainRender);
// 创建资源描述符集 // 创建资源描述符集
createDescriptorSets(setter); createDescriptorSets(setter,mainRender);
// 分配命令缓存区 // 分配命令缓存区
allocateCommandBuffers(setter); allocateCommandBuffers(setter);
@ -66,7 +82,7 @@ void PluamgeVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter se
void PluamgeVulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter)
{ {
// check validation layers // check validation layers
if (setter.settings.validation && !checkValidationLayerSupport()) if (setter.settings.validation && !checkValidationLayerSupport())
@ -117,7 +133,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createInstance(PlumageRender::Sette
} }
} }
bool PluamgeVulkanBackend::VulkanFoundation::checkValidationLayerSupport() bool PlumageVulkanBackend::VulkanFoundation::checkValidationLayerSupport()
{ {
uint32_t layerCount; uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr); vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
@ -144,7 +160,7 @@ bool PluamgeVulkanBackend::VulkanFoundation::checkValidationLayerSupport()
return true; return true;
} }
std::vector<const char*> PluamgeVulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter) std::vector<const char*> PlumageVulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter)
{ {
std::vector<const char*> extensions; std::vector<const char*> extensions;
if (!setter.settings.headless) if (!setter.settings.headless)
@ -167,7 +183,7 @@ std::vector<const char*> PluamgeVulkanBackend::VulkanFoundation::getRequiredExte
void PluamgeVulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter)
{ {
if (!setter.settings.validation) if (!setter.settings.validation)
{ {
@ -184,7 +200,7 @@ void PluamgeVulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::S
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo) void PlumageVulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo)
{ {
debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; debugCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
@ -198,7 +214,7 @@ void PluamgeVulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(Vk
debugCreateInfo.pUserData = nullptr; debugCreateInfo.pUserData = nullptr;
} }
// debugCallback用于校验层 // debugCallback用于校验层
VKAPI_ATTR VkBool32 VKAPI_CALL PluamgeVulkanBackend::VulkanFoundation::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) VKAPI_ATTR VkBool32 VKAPI_CALL PlumageVulkanBackend::VulkanFoundation::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData)
{ {
{ {
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl; std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
@ -207,7 +223,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL PluamgeVulkanBackend::VulkanFoundation::debugCall
} }
} }
VkResult PluamgeVulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) VkResult PlumageVulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger)
{ {
auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"); auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
@ -223,7 +239,7 @@ VkResult PluamgeVulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(Vk
void PluamgeVulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter)
{ {
if (setter.settings.headless) if (setter.settings.headless)
@ -239,7 +255,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter
void PluamgeVulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter)
{ {
uint32_t deviceCount = 0; uint32_t deviceCount = 0;
@ -271,7 +287,7 @@ void PluamgeVulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::S
} }
} }
bool PluamgeVulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter) bool PlumageVulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter)
{ {
if (setter.settings.headless) if (setter.settings.headless)
{ {
@ -291,7 +307,7 @@ bool PluamgeVulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice d
} }
} }
bool PluamgeVulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device) bool PlumageVulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device)
{ {
uint32_t extensionCount; uint32_t extensionCount;
vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr); vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
@ -310,7 +326,7 @@ bool PluamgeVulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysi
} }
PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices PluamgeVulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter) PlumageVulkanBackend::VulkanFoundation::QueueFamilyIndices PlumageVulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter)
{ {
QueueFamilyIndices indices; QueueFamilyIndices indices;
@ -359,7 +375,7 @@ PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices PluamgeVulkanBackend:
return indices; return indices;
} }
PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails PluamgeVulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device) PlumageVulkanBackend::VulkanFoundation::SwapChainSupportDetails PlumageVulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device)
{ {
// 获得surface细节 // 获得surface细节
SwapChainSupportDetails details; SwapChainSupportDetails details;
@ -389,7 +405,7 @@ PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails PluamgeVulkanBac
void PluamgeVulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter setter)
{ {
QueueFamilyIndices indices = findQueueFamilies(physicalDevice,setter); QueueFamilyIndices indices = findQueueFamilies(physicalDevice,setter);
std::vector<VkDeviceQueueCreateInfo> queueCreateInfos; std::vector<VkDeviceQueueCreateInfo> queueCreateInfos;
@ -469,7 +485,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::
void PluamgeVulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter)
{ {
if (setter.settings.headless) if (setter.settings.headless)
@ -537,7 +553,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Sett
swapChainExtent = extent; swapChainExtent = extent;
} }
VkSurfaceFormatKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats) VkSurfaceFormatKHR PlumageVulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats)
{ {
for (const auto& availableFormat : availableFormats) { for (const auto& availableFormat : availableFormats) {
if (availableFormat.format == VK_FORMAT_B8G8R8_SRGB && availableFormat.colorSpace == VK_COLORSPACE_SRGB_NONLINEAR_KHR) if (availableFormat.format == VK_FORMAT_B8G8R8_SRGB && availableFormat.colorSpace == VK_COLORSPACE_SRGB_NONLINEAR_KHR)
@ -549,7 +565,7 @@ VkSurfaceFormatKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapSurfaceForm
return availableFormats[0]; return availableFormats[0];
} }
VkPresentModeKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes, PlumageRender::Setter setter) VkPresentModeKHR PlumageVulkanBackend::VulkanFoundation::chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes, PlumageRender::Setter setter)
{ {
// Get available present modes // Get available present modes
uint32_t presentModeCount; uint32_t presentModeCount;
@ -582,7 +598,7 @@ VkPresentModeKHR PluamgeVulkanBackend::VulkanFoundation::chooseSwapPresentMode(c
} }
} }
VkExtent2D PluamgeVulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities) VkExtent2D PlumageVulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities)
{ {
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max())
{ {
@ -607,7 +623,7 @@ VkExtent2D PluamgeVulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurf
void PluamgeVulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter setter)
{ {
VkFormat colorAttachmentFormat = VK_FORMAT_R8G8B8A8_UNORM; VkFormat colorAttachmentFormat = VK_FORMAT_R8G8B8A8_UNORM;
VkFormat depthFormat = findDepthFormat(); VkFormat depthFormat = findDepthFormat();
@ -835,7 +851,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createImageView(PlumageRender::Sett
void PluamgeVulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter)
{ {
VkFormat colorAttachmentFormat; VkFormat colorAttachmentFormat;
VkFormat depthAttachmentFormat = findDepthFormat(); VkFormat depthAttachmentFormat = findDepthFormat();
@ -1015,7 +1031,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Set
} }
} }
VkFormat PluamgeVulkanBackend::VulkanFoundation::findDepthFormat() VkFormat PlumageVulkanBackend::VulkanFoundation::findDepthFormat()
{ {
return findSupportedFormat( return findSupportedFormat(
{ VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT }, { VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT },
@ -1024,7 +1040,7 @@ VkFormat PluamgeVulkanBackend::VulkanFoundation::findDepthFormat()
); );
} }
VkFormat PluamgeVulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) VkFormat PlumageVulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
{ {
for (VkFormat format : candidates) for (VkFormat format : candidates)
{ {
@ -1043,21 +1059,21 @@ VkFormat PluamgeVulkanBackend::VulkanFoundation::findSupportedFormat(const std::
throw std::runtime_error("failed to find supported format"); throw std::runtime_error("failed to find supported format");
} }
bool PluamgeVulkanBackend::VulkanFoundation::hasStencilComponent(VkFormat format) bool PlumageVulkanBackend::VulkanFoundation::hasStencilComponent(VkFormat format)
{ {
return format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D24_UNORM_S8_UINT; return format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D24_UNORM_S8_UINT;
} }
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSetLayout() void PlumageVulkanBackend::VulkanFoundation::createDescriptorSetLayout()
{ {
createSceneDescriptorSetLayout(); createSceneDescriptorSetLayout();
createMaterialDescriptorSetLayout(); createMaterialDescriptorSetLayout();
createNodeDescriptorSetLayout(); createNodeDescriptorSetLayout();
} }
void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout() void PlumageVulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout()
{ {
// scene场景的资源描述符 // scene场景的资源描述符
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = { std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
@ -1074,7 +1090,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout()
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.scene)); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.scene));
} }
void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout() void PlumageVulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout()
{ {
// 材质或材质采样器的资源描述符 // 材质或材质采样器的资源描述符
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = { std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
@ -1091,7 +1107,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout()
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.material)); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.material));
} }
void PluamgeVulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout() void PlumageVulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout()
{ {
// 模型结点或矩阵的资源描述符 // 模型结点或矩阵的资源描述符
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = { std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
@ -1106,7 +1122,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout()
void PluamgeVulkanBackend::VulkanFoundation::createPipelineCache() void PlumageVulkanBackend::VulkanFoundation::createPipelineCache()
{ {
VkPipelineCacheCreateInfo pipelineCacheCreateInfo{}; VkPipelineCacheCreateInfo pipelineCacheCreateInfo{};
pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
@ -1115,7 +1131,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createPipelineCache()
void PluamgeVulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Setter setter)
{ {
VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCI{}; VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCI{};
inputAssemblyStateCI.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; inputAssemblyStateCI.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
@ -1263,7 +1279,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender
void PluamgeVulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter)
{ {
if (setter.settings.headless) if (setter.settings.headless)
@ -1320,7 +1336,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Se
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter)
{ {
uint32_t attachmentCount; uint32_t attachmentCount;
VkImageView attachments[attachmentCount]; VkImageView attachments[attachmentCount];
@ -1364,7 +1380,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageR
void PluamgeVulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter)
{ {
QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice,setter); QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice,setter);
@ -1383,7 +1399,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Se
void PluamgeVulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender) void PlumageVulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender)
{ {
if (setter.settings.headless) if (setter.settings.headless)
{ {
@ -1403,7 +1419,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::
updateUniformBuffers(camera,mainRender); updateUniformBuffers(camera,mainRender);
} }
void PluamgeVulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender) void PlumageVulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender)
{ {
// Scene // Scene
shaderDataScene.projection = camera.matrices.perspective; shaderDataScene.projection = camera.matrices.perspective;
@ -1432,7 +1448,7 @@ void PluamgeVulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera,
shaderDataSkybox.model = glm::mat4(glm::mat3(camera.matrices.view)); shaderDataSkybox.model = glm::mat4(glm::mat3(camera.matrices.view));
} }
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender) void PlumageVulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender)
{ {
/* /*
Descriptor Pool Descriptor Pool
@ -1469,7 +1485,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender:
VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool)); VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool));
} }
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter,PlumageRender::renderMain mainRender)
{ {
if (setter.settings.headless) if (setter.settings.headless)
{ {
@ -1481,14 +1497,14 @@ void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender:
descriptorSets.resize(swapChainImages.size()); descriptorSets.resize(swapChainImages.size());
} }
createSceneDescriptorSets(); createSceneDescriptorSets();
createMaterialDescriptorSets(); createMaterialDescriptorSets(mainRender);
createModelNodeDescriptorSets(); createModelNodeDescriptorSets(mainRender);
createSkyboxDescriptorSets(); createSkyboxDescriptorSets();
} }
// Scene (matrices and environment maps) // Scene (matrices and environment maps)
void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSets() void PlumageVulkanBackend::VulkanFoundation::createSceneDescriptorSets()
{ {
for (auto i = 0; i < descriptorSets.size(); i++) for (auto i = 0; i < descriptorSets.size(); i++)
@ -1544,10 +1560,10 @@ void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSets()
} }
// Per-Material descriptor sets // Per-Material descriptor sets
void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSets() void PlumageVulkanBackend::VulkanFoundation::createMaterialDescriptorSets(PlumageRender::renderMain mainRender)
{ {
for (auto& material : PlumageRender::renderMain::models.scene.materials) for (auto& material : mainRender.models.scene.materials)
{ {
VkDescriptorSetAllocateInfo descriptorSetAllocInfo{}; VkDescriptorSetAllocateInfo descriptorSetAllocInfo{};
descriptorSetAllocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO; descriptorSetAllocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
@ -1603,11 +1619,11 @@ void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSets()
} }
// Model node (matrices) // Model node (matrices)
void PluamgeVulkanBackend::VulkanFoundation::createModelNodeDescriptorSets() void PlumageVulkanBackend::VulkanFoundation::createModelNodeDescriptorSets(PlumageRender::renderMain mainRender)
{ {
// Per-Node descriptor set // Per-Node descriptor set
for (auto& node : PlumageRender::renderMain::models.scene.nodes) for (auto& node : mainRender.models.scene.nodes)
{ {
setupglTFNodeDescriptorSet(node); setupglTFNodeDescriptorSet(node);
} }
@ -1616,7 +1632,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createModelNodeDescriptorSets()
// attention: gltf-spec // attention: gltf-spec
void PluamgeVulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node) void PlumageVulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node)
{ {
if (node->mesh) { if (node->mesh) {
VkDescriptorSetAllocateInfo descriptorSetAllocInfo{}; VkDescriptorSetAllocateInfo descriptorSetAllocInfo{};
@ -1641,7 +1657,7 @@ void PluamgeVulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFMode
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::createSkyboxDescriptorSets() void PlumageVulkanBackend::VulkanFoundation::createSkyboxDescriptorSets()
{ {
// Skybox (fixed set) // Skybox (fixed set)
for (auto i = 0; i < uniformBuffers.size(); i++) { for (auto i = 0; i < uniformBuffers.size(); i++) {
@ -1681,7 +1697,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createSkyboxDescriptorSets()
void PluamgeVulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter)
{ {
// resize // resize
if (setter.settings.headless) if (setter.settings.headless)
@ -1702,7 +1718,7 @@ void PluamgeVulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRende
VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, commandbuffers.data())); VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, commandbuffers.data()));
} }
void PluamgeVulkanBackend::VulkanFoundation::cleanupSwapChain() void PlumageVulkanBackend::VulkanFoundation::cleanupSwapChain()
{ {
for (auto framebuffer : framebuffers) for (auto framebuffer : framebuffers)
{ {
@ -1717,7 +1733,7 @@ void PluamgeVulkanBackend::VulkanFoundation::cleanupSwapChain()
vkDestroySwapchainKHR(device, swapChain, nullptr); vkDestroySwapchainKHR(device, swapChain, nullptr);
} }
void PluamgeVulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI) void PlumageVulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI)
{ {
VkCommandBufferBeginInfo cmdBufferBeginInfo{}; VkCommandBufferBeginInfo cmdBufferBeginInfo{};
@ -1807,7 +1823,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::
} }
void PluamgeVulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Node* node, uint32_t cbIndex, glTFModel::Material::AlphaMode alphaMode) void PlumageVulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Node* node, uint32_t cbIndex, glTFModel::Material::AlphaMode alphaMode)
{ {
if (node->mesh) { if (node->mesh) {
// Render mesh primitives // Render mesh primitives
@ -1886,7 +1902,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFMod
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Setter setter)
{ {
waitFences.resize(setter.settings.MaxFrameInFlight); waitFences.resize(setter.settings.MaxFrameInFlight);
presentCompleteSemaphores.resize(setter.settings.MaxFrameInFlight); presentCompleteSemaphores.resize(setter.settings.MaxFrameInFlight);
@ -1912,7 +1928,7 @@ void PluamgeVulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRend
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) void PlumageVulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator)
{ {
auto func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"); auto func = (PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT");
@ -1924,7 +1940,7 @@ void PluamgeVulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkIns
bool PluamgeVulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeerResized,uint32_t imageIndex,uint32_t frameIndex,PlumageRender::Setter setter) bool PlumageVulkanBackend::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); VkResult result = vkAcquireNextImageKHR(device, swapChain, UINT64_MAX, renderCompleteSemaphores[frameIndex], VK_NULL_HANDLE, &imageIndex);
@ -1940,7 +1956,7 @@ bool PluamgeVulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool frame
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, uint32_t currentBuffer) void PlumageVulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, uint32_t currentBuffer)
{ {
const VkPipelineStageFlags waitDstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; const VkPipelineStageFlags waitDstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
VkSubmitInfo submitInfo{}; VkSubmitInfo submitInfo{};
@ -1955,7 +1971,7 @@ void PluamgeVulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frame
VK_CHECK_RESULT(vkQueueSubmit(graphicQueue, 1, &submitInfo, waitFences[frameIndex])); VK_CHECK_RESULT(vkQueueSubmit(graphicQueue, 1, &submitInfo, waitFences[frameIndex]));
} }
void PluamgeVulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter)
{ {
//显示队列 //显示队列
VkSemaphore signalSemaphores[] = { renderCompleteSemaphores[frameIndex] }; VkSemaphore signalSemaphores[] = { renderCompleteSemaphores[frameIndex] };
@ -1984,7 +2000,7 @@ void PluamgeVulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameI
} }
} }
void PluamgeVulkanBackend::VulkanFoundation::destroyPlumageRender(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::destroyPlumageRender(PlumageRender::Setter setter)
{ {
// Clean up Vulkan resources // Clean up Vulkan resources
cleanupSwapChain(); cleanupSwapChain();
@ -2047,7 +2063,7 @@ void PluamgeVulkanBackend::VulkanFoundation::destroyPlumageRender(PlumageRender:
void PluamgeVulkanBackend::VulkanFoundation::updateShaderData() void PlumageVulkanBackend::VulkanFoundation::updateShaderData()
{ {
PBR::Material::shaderData.lightDir = glm::vec4( PBR::Material::shaderData.lightDir = glm::vec4(
sin(glm::radians(lightSource.rotation.x)) * cos(glm::radians(lightSource.rotation.y)), sin(glm::radians(lightSource.rotation.x)) * cos(glm::radians(lightSource.rotation.y)),
@ -2056,7 +2072,7 @@ void PluamgeVulkanBackend::VulkanFoundation::updateShaderData()
0.0f); 0.0f);
} }
void PluamgeVulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter) void PlumageVulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter)
{ {
int width = 0, height = 0; int width = 0, height = 0;
glfwGetFramebufferSize(window, &width, &height); glfwGetFramebufferSize(window, &width, &height);

View File

@ -9,16 +9,11 @@
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
#ifndef _GLTFMODEL_H #ifndef _GLTFMODEL_H
#define _GLTFMODEL_H #define _GLTFMODEL_H
#include "glTFModel.h" #include "glTFModel.h"
#endif // !GLTFMODEL_H #endif // !GLTFMODEL_H
#ifndef _RENDERSETTER_H
#define _RENDERSETTER_H
#include "renderSetter.h"
#endif // !RENDERSETTER_H
#ifndef _GLFW3_H #ifndef _GLFW3_H
@ -49,15 +44,17 @@
#define _UI_HPP #define _UI_HPP
#endif // !UI_HPP #endif // !UI_HPP
#ifndef _RENDER_H
#define _RENDER_H
#include "render.h"
#endif // !RENDER_H
PlumageRender::renderMain mainRender;
namespace PluamgeVulkanBackend
namespace PlumageRender
{
class renderMain;
class Setter;
}
namespace PlumageVulkanBackend
{ {
class VulkanFoundation class VulkanFoundation
{ {
@ -130,7 +127,7 @@ namespace PluamgeVulkanBackend
void initVulkan(PlumageRender::Setter setter, Camera camera, PlumageRender::renderMain mainRender, UI* plumageGUI); void initVulkan(PlumageRender::Setter setter, Camera camera, PlumageRender::renderMain mainRender, UI* plumageGUI);
// 创建描述符集合 // 创建描述符集合
void createDescriptorSets(PlumageRender::Setter setter); void createDescriptorSets(PlumageRender::Setter setter, PlumageRender::renderMain mainRender);
void createCommandBuffer(PlumageRender::Setter setter, PlumageRender::renderMain mainRender, UI* plumageGUI); void createCommandBuffer(PlumageRender::Setter setter, PlumageRender::renderMain mainRender, UI* plumageGUI);
@ -284,8 +281,8 @@ namespace PluamgeVulkanBackend
void pickPhysicalDevice(PlumageRender::Setter setter); void pickPhysicalDevice(PlumageRender::Setter setter);
bool isDeviceSuitable(VkPhysicalDevice device, PlumageRender::Setter setter); bool isDeviceSuitable(VkPhysicalDevice device, PlumageRender::Setter setter);
bool checkDeviceExtensionSupport(VkPhysicalDevice device); bool checkDeviceExtensionSupport(VkPhysicalDevice device);
PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter); PlumageVulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter);
PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); PlumageVulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device);
// 创建程序使用的逻辑设备 // 创建程序使用的逻辑设备
void createLogicalDevice(PlumageRender::Setter setter); void createLogicalDevice(PlumageRender::Setter setter);
@ -337,8 +334,8 @@ namespace PluamgeVulkanBackend
void createSceneDescriptorSets(); void createSceneDescriptorSets();
void createMaterialDescriptorSets(); void createMaterialDescriptorSets(PlumageRender::renderMain mainRender);
void createModelNodeDescriptorSets(); void createModelNodeDescriptorSets(PlumageRender::renderMain mainRender);
void setupglTFNodeDescriptorSet(glTFModel::Node* node); void setupglTFNodeDescriptorSet(glTFModel::Node* node);
void createSkyboxDescriptorSets(); void createSkyboxDescriptorSets();