宏方式避免重复引用
parent
d9cd065f35
commit
c3cdffc81a
|
@ -2,69 +2,69 @@
|
||||||
|
|
||||||
``` C++
|
``` C++
|
||||||
#ifndef _GLTFMODEL_H
|
#ifndef _GLTFMODEL_H
|
||||||
#include "glTFModel.h"
|
|
||||||
#define _GLTFMODEL_H
|
#define _GLTFMODEL_H
|
||||||
|
#include "glTFModel.h"
|
||||||
#endif // !GLTFMODEL_H
|
#endif // !GLTFMODEL_H
|
||||||
|
|
||||||
#ifndef _RENDERSETTER_H
|
#ifndef _RENDERSETTER_H
|
||||||
#include "renderSetter.h"
|
|
||||||
#define _RENDERSETTER_H
|
#define _RENDERSETTER_H
|
||||||
|
#include "renderSetter.h"
|
||||||
#endif // !RENDERSETTER_H
|
#endif // !RENDERSETTER_H
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
#ifndef _VULKANFOUNDATION_H
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
#define _VULKANFOUNDATION_H
|
||||||
|
#include "vulkanFoundation.h"
|
||||||
#endif // !VULKANFOUNDATION_H
|
#endif // !VULKANFOUNDATION_H
|
||||||
|
|
||||||
#ifndef _RENDERGUI_H
|
#ifndef _RENDERGUI_H
|
||||||
#include "renderUI.h"
|
|
||||||
#define _RENDERGUI_H
|
#define _RENDERGUI_H
|
||||||
|
#include "renderUI.h"
|
||||||
#endif // !_RENDERGUI_H
|
#endif // !_RENDERGUI_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef _PBR_H
|
#ifndef _PBR_H
|
||||||
#include "PBR.h"
|
|
||||||
#define _PBR_H
|
#define _PBR_H
|
||||||
|
#include "PBR.h"
|
||||||
#endif // !PBR_H
|
#endif // !PBR_H
|
||||||
|
|
||||||
#ifndef _RENDER_H
|
#ifndef _RENDER_H
|
||||||
#include "render.h"
|
|
||||||
#define _RENDER_H
|
#define _RENDER_H
|
||||||
|
#include "render.h"
|
||||||
#endif // !RENDER_H
|
#endif // !RENDER_H
|
||||||
|
|
||||||
#ifndef _RENDERIO_H
|
#ifndef _RENDERIO_H
|
||||||
#include "renderIO.h"
|
|
||||||
#define _RENDERIO_H
|
#define _RENDERIO_H
|
||||||
|
#include "renderIO.h"
|
||||||
#endif // !RENDERIO_H
|
#endif // !RENDERIO_H
|
||||||
|
|
||||||
#ifndef _UI_HPP
|
#ifndef _UI_HPP
|
||||||
#include "ui.hpp"
|
|
||||||
#define _UI_HPP
|
#define _UI_HPP
|
||||||
|
#include "ui.hpp"
|
||||||
#endif // !UI_HPP
|
#endif // !UI_HPP
|
||||||
|
|
||||||
#ifndef _VULKANDEVICE_HPP
|
#ifndef _VULKANDEVICE_HPP
|
||||||
#include "VulkanDevice.hpp"
|
|
||||||
#define _VULKANDEVICE_HPP
|
#define _VULKANDEVICE_HPP
|
||||||
|
#include "VulkanDevice.hpp"
|
||||||
#endif // !_VULKANDEVICE_HPP
|
#endif // !_VULKANDEVICE_HPP
|
||||||
|
|
||||||
#ifndef _CAMERA_HPP
|
#ifndef _CAMERA_HPP
|
||||||
#include "camera.hpp"
|
|
||||||
#define _CAMERA_HPP
|
#define _CAMERA_HPP
|
||||||
|
#include "camera.hpp"
|
||||||
#endif // !_CAMERA_HPP
|
#endif // !_CAMERA_HPP
|
||||||
|
|
||||||
#ifndef _VULKANTEXTURE_HPP
|
#ifndef _VULKANTEXTURE_HPP
|
||||||
#include "VulkanTexture.hpp"
|
|
||||||
#define _VULKANTEXTURE_HPP
|
#define _VULKANTEXTURE_HPP
|
||||||
|
#include "VulkanTexture.hpp"
|
||||||
#endif // !_VULKANTEXTURE_HPP
|
#endif // !_VULKANTEXTURE_HPP
|
||||||
|
|
||||||
#ifndef _VULKANUTILS_HPP
|
#ifndef _VULKANUTILS_HPP
|
||||||
#include "VulkanUtils.hpp"
|
|
||||||
#define _VULKANUTILS_HPP
|
#define _VULKANUTILS_HPP
|
||||||
|
#include "VulkanUtils.hpp"
|
||||||
#endif // !_VULKANUTILS_HPP
|
#endif // !_VULKANUTILS_HPP
|
||||||
|
|
||||||
#ifndef _TINY_GLTF_H
|
#ifndef _TINY_GLTF_H
|
||||||
#include "tiny_gltf.h"
|
|
||||||
#define _TINY_GLTF_H
|
#define _TINY_GLTF_H
|
||||||
|
#include "tiny_gltf.h"
|
||||||
#endif // !_TINY_GLTF_H
|
#endif // !_TINY_GLTF_H
|
||||||
|
|
||||||
```
|
```
|
|
@ -1,6 +1,22 @@
|
||||||
#include "PBR.h"
|
#include "PBR.h"
|
||||||
|
|
||||||
void PBR::Material::generateCubemap(VulkanBackend::VulkanFoundation vkFoundation,PlumageRender::Setter setter,PlumageRender::renderMain mainRender)
|
#ifndef _RENDERSETTER_H
|
||||||
|
#define _RENDERSETTER_H
|
||||||
|
#include "renderSetter.h"
|
||||||
|
#endif // !RENDERSETTER_H
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _VULKANFOUNDATION_H
|
||||||
|
#define _VULKANFOUNDATION_H
|
||||||
|
#include "vulkanFoundation.h"
|
||||||
|
#endif // !VULKANFOUNDATION_H
|
||||||
|
|
||||||
|
#ifndef _RENDER_H
|
||||||
|
#define _RENDER_H
|
||||||
|
#include "render.h"
|
||||||
|
#endif // !RENDER_H
|
||||||
|
|
||||||
|
void PBR::Material::generateCubemap(PlumageVulkanBackend::VulkanFoundation vkFoundation,PlumageRender::Setter setter,PlumageRender::renderMain mainRender)
|
||||||
{
|
{
|
||||||
enum Target { IRRADIANCE = 0, PREFILTEREDENV = 1 };
|
enum Target { IRRADIANCE = 0, PREFILTEREDENV = 1 };
|
||||||
|
|
||||||
|
@ -538,7 +554,7 @@ void PBR::Material::generateCubemap(VulkanBackend::VulkanFoundation vkFoundation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PBR::Material::generateBRDFLUT(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter)
|
void PBR::Material::generateBRDFLUT(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
auto tStart = std::chrono::high_resolution_clock::now();
|
auto tStart = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,25 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef _RENDERSETTER_H
|
|
||||||
#include "renderSetter.h"
|
|
||||||
#define _RENDERSETTER_H
|
|
||||||
#endif // !RENDERSETTER_H
|
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
|
||||||
#endif // !VULKANFOUNDATION_H
|
|
||||||
|
|
||||||
#ifndef _RENDER_H
|
|
||||||
#include "render.h"
|
|
||||||
#define _RENDER_H
|
|
||||||
#endif // !RENDER_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _VULKANTEXTURE_HPP
|
||||||
|
#define _VULKANTEXTURE_HPP
|
||||||
|
#include "VulkanTexture.hpp"
|
||||||
|
#endif // !_VULKANTEXTURE_HPP
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
#ifndef _VULKANTEXTURE_HPP
|
|
||||||
#include "VulkanTexture.hpp"
|
|
||||||
#define _VULKANTEXTURE_HPP
|
|
||||||
#endif // !_VULKANTEXTURE_HPP
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace PlumageVulkanBackend
|
||||||
|
{
|
||||||
|
class VulkanFoundation;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PlumageRender
|
||||||
|
{
|
||||||
|
class Setter;
|
||||||
|
class renderMain;
|
||||||
|
}
|
||||||
|
|
||||||
namespace PBR
|
namespace PBR
|
||||||
{
|
{
|
||||||
|
@ -81,10 +73,10 @@ namespace PBR
|
||||||
// generate two cube maps
|
// generate two cube maps
|
||||||
// irradiance cube map
|
// irradiance cube map
|
||||||
// prefileter environment cube map
|
// prefileter environment cube map
|
||||||
void generateCubemap(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter, PlumageRender::renderMain mainRender);
|
void generateCubemap(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter, PlumageRender::renderMain mainRender);
|
||||||
|
|
||||||
// generate BRDF integration map for roughness/NdotV
|
// generate BRDF integration map for roughness/NdotV
|
||||||
void generateBRDFLUT(VulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter);
|
void generateBRDFLUT(PlumageVulkanBackend::VulkanFoundation vkFoundation, PlumageRender::Setter setter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
*/
|
*/
|
||||||
#include "glTFModel.h"
|
#include "glTFModel.h"
|
||||||
//#include "VulkanUtils.hpp"
|
//#include "VulkanUtils.hpp"
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
// Bounding box
|
// Bounding box
|
||||||
|
|
||||||
|
|
|
@ -31,22 +31,21 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _TINY_GLTF_H
|
#ifndef _TINY_GLTF_H
|
||||||
#include "tiny_gltf.h"
|
|
||||||
#define _TINY_GLTF_H
|
#define _TINY_GLTF_H
|
||||||
|
#include "tiny_gltf.h"
|
||||||
|
|
||||||
#endif // !_TINY_GLTF_H
|
#endif // !_TINY_GLTF_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef _VULKANDEVICE_HPP
|
#ifndef _VULKANDEVICE_HPP
|
||||||
#include "VulkanDevice.hpp"
|
|
||||||
#define _VULKANDEVICE_HPP
|
#define _VULKANDEVICE_HPP
|
||||||
|
#include "VulkanDevice.hpp"
|
||||||
|
|
||||||
#endif // !_VULKANDEVICE_HPP
|
#endif // !_VULKANDEVICE_HPP
|
||||||
//#include "VulkanUtils.hpp"
|
//#include "VulkanUtils.hpp"
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
|
||||||
#endif // !VULKANFOUNDATION_H
|
|
||||||
|
|
||||||
|
|
||||||
#define MAX_NUM_JOINTS 128u
|
#define MAX_NUM_JOINTS 128u
|
||||||
|
|
|
@ -1,18 +1,4 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef TINYGLTF_IMPLEMENTATION
|
|
||||||
#define TINYGLTF_IMPLEMENTATION
|
|
||||||
#endif
|
|
||||||
#ifndef STB_IMAGE_IMPLEMENTATION
|
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TINYGLTF_NO_STB_IMAGE_WRITE
|
|
||||||
#define TINYGLTF_NO_STB_IMAGE_WRITE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
//#include "VulkanUtils.hpp"
|
//#include "VulkanUtils.hpp"
|
||||||
//#include "assetLoader.h"
|
//#include "assetLoader.h"
|
||||||
|
@ -36,33 +22,33 @@ void PlumageRender::renderMain::framebufferResizeCallback(GLFWwindow* window, in
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PlumageRender::renderMain::prepare()
|
void PlumageRender::renderMain::prepare(Setter setter,PlumageGUI renderGUI,RenderInput renderInput,RenderOutput renderOutput,PBR::Material pbrMaterial,PluamgeVulkanBackend::VulkanFoundation vkFoundation,renderMain mainRender,UI* ui)
|
||||||
{
|
{
|
||||||
//VulkanExampleBase::prepare();
|
//VulkanExampleBase::prepare();
|
||||||
|
|
||||||
setupCamera(camera);
|
setupCamera(camera,setter);
|
||||||
|
|
||||||
renderInput.loadAssets();
|
renderInput.loadAssets(setter,mainRender,vkFoundation,pbrMaterial);
|
||||||
pbrMaterial.generateBRDFLUT();
|
pbrMaterial.generateBRDFLUT(vkFoundation,setter);
|
||||||
pbrMaterial.generateCubemap();
|
pbrMaterial.generateCubemap(vkFoundation,setter,mainRender);
|
||||||
//prepareUniformBuffers();
|
//prepareUniformBuffers();
|
||||||
//setupDescriptors();
|
//setupDescriptors();
|
||||||
//preparePipelines();
|
//preparePipelines();
|
||||||
if (!PlumageRender::Setter::settings.headless)
|
if (!setter.settings.headless)
|
||||||
{
|
{
|
||||||
auto gui = renderGUI.gui;
|
|
||||||
renderGUI.updateUIOverlay();
|
renderGUI.updateUIOverlay(ui,setter,mainRender,vkFoundation,renderInput,renderOutput);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
prepared = true;
|
prepared = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::renderMain::setupCamera(Camera camera)
|
void PlumageRender::renderMain::setupCamera(Camera camera,Setter setter)
|
||||||
{
|
{
|
||||||
camera.type = Camera::CameraType::lookat;
|
camera.type = Camera::CameraType::lookat;
|
||||||
|
|
||||||
camera.setPerspective(45.0f, (float)PlumageRender::Setter::settings.width / (float)PlumageRender::Setter::settings.height, 0.1f, 256.0f);
|
camera.setPerspective(45.0f, (float)setter.settings.width / (float)setter.settings.height, 0.1f, 256.0f);
|
||||||
camera.rotationSpeed = 0.25f;
|
camera.rotationSpeed = 0.25f;
|
||||||
camera.movementSpeed = 0.1f;
|
camera.movementSpeed = 0.1f;
|
||||||
camera.setPosition({ 0.0f, 0.0f, -1.0f });
|
camera.setPosition({ 0.0f, 0.0f, -1.0f });
|
||||||
|
@ -76,10 +62,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(VulkanBackend::VulkanFoundation::device, &fenceInfo, nullptr, &fence));
|
VK_CHECK_RESULT(vkCreateFence(PluamgeVulkanBackend::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(VulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX));
|
VK_CHECK_RESULT(vkWaitForFences(PluamgeVulkanBackend::VulkanFoundation::device, 1, &fence, VK_TRUE, UINT64_MAX));
|
||||||
vkDestroyFence(VulkanBackend::VulkanFoundation::device, fence, nullptr);
|
vkDestroyFence(PluamgeVulkanBackend::VulkanFoundation::device, fence, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::renderMain::submitToPresentQueue()
|
void PlumageRender::renderMain::submitToPresentQueue()
|
||||||
|
@ -88,7 +74,7 @@ void PlumageRender::renderMain::submitToPresentQueue()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI)
|
void PlumageRender::renderMain::render(Setter setter,PlumageGUI plumageGUI,UI* gui,renderMain mainRender,PluamgeVulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput renderOutput)
|
||||||
{
|
{
|
||||||
if (!prepared) {
|
if (!prepared) {
|
||||||
return;
|
return;
|
||||||
|
@ -96,42 +82,42 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI)
|
||||||
|
|
||||||
if (!setter.settings.headless)
|
if (!setter.settings.headless)
|
||||||
{
|
{
|
||||||
plumageGUI.updateUIOverlay();
|
plumageGUI.updateUIOverlay(gui,setter,mainRender,vkFoundation,renderInput,renderOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t imageIndex;
|
uint32_t imageIndex;
|
||||||
|
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkWaitForFences(VulkanBackend::VulkanFoundation::device, 1, &vkFoundation.waitFences[frameIndex], VK_TRUE, UINT64_MAX));
|
VK_CHECK_RESULT(vkWaitForFences(vkFoundation.device, 1, &vkFoundation.waitFences[frameIndex], VK_TRUE, UINT64_MAX));
|
||||||
|
|
||||||
framebufferResized = vkFoundation.acqureNextSwapchainImage(framebufferResized, imageIndex, frameIndex);
|
framebufferResized = vkFoundation.acqureNextSwapchainImage(framebufferResized, imageIndex, frameIndex,setter);
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkResetFences(VulkanBackend::VulkanFoundation::device, 1, &vkFoundation.waitFences[frameIndex]));
|
VK_CHECK_RESULT(vkResetFences(vkFoundation.device, 1, &vkFoundation.waitFences[frameIndex]));
|
||||||
renderOutput.outputImageSequence();
|
renderOutput.outputImageSequence(setter,renderOutput,vkFoundation);
|
||||||
renderOutput.imageSequenceToVideo();
|
renderOutput.imageSequenceToVideo(renderOutput,setter);
|
||||||
|
|
||||||
// Update UBOs
|
// Update UBOs
|
||||||
vkFoundation.updateUniformBuffers();
|
vkFoundation.updateUniformBuffers(camera,mainRender);
|
||||||
VulkanBackend::VulkanFoundation::UniformBufferSet currentUB = vkFoundation.uniformBuffers[currentBuffer];
|
PluamgeVulkanBackend::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));
|
||||||
|
|
||||||
vkFoundation.submitToGraphicQueue(frameIndex, currentBuffer);
|
vkFoundation.submitToGraphicQueue(frameIndex, currentBuffer);
|
||||||
|
|
||||||
vkFoundation.imageToQueuePresent(frameIndex, imageIndex, framebufferResized);
|
vkFoundation.imageToQueuePresent(frameIndex, imageIndex, framebufferResized,setter);
|
||||||
|
|
||||||
frameIndex += 1;
|
frameIndex += 1;
|
||||||
frameIndex %= PlumageRender::Setter::settings.MaxFrameInFlight;
|
frameIndex %= setter.settings.MaxFrameInFlight;
|
||||||
|
|
||||||
if (!PlumageRender::Setter::settings.pause) {
|
if (!setter.settings.pause) {
|
||||||
if (PlumageRender::Setter::settings.rotateModel) {
|
if (setter.settings.rotateModel) {
|
||||||
modelrot.y += frameTimer * 35.0f;
|
modelrot.y += frameTimer * 35.0f;
|
||||||
if (modelrot.y > 360.0f) {
|
if (modelrot.y > 360.0f) {
|
||||||
modelrot.y -= 360.0f;
|
modelrot.y -= 360.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((PlumageRender::Setter::settings.animate) && (models.scene.animations.size() > 0)) {
|
if ((setter.settings.animate) && (models.scene.animations.size() > 0)) {
|
||||||
animationTimer += frameTimer;
|
animationTimer += frameTimer;
|
||||||
if (animationTimer > models.scene.animations[animationIndex].end) {
|
if (animationTimer > models.scene.animations[animationIndex].end) {
|
||||||
animationTimer -= models.scene.animations[animationIndex].end;
|
animationTimer -= models.scene.animations[animationIndex].end;
|
||||||
|
@ -139,17 +125,17 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI)
|
||||||
models.scene.updateAnimation(animationIndex, animationTimer);
|
models.scene.updateAnimation(animationIndex, animationTimer);
|
||||||
}
|
}
|
||||||
vkFoundation.updateShaderData();
|
vkFoundation.updateShaderData();
|
||||||
if (PlumageRender::Setter::settings.rotateModel) {
|
if (setter.settings.rotateModel) {
|
||||||
vkFoundation.updateUniformBuffers();
|
vkFoundation.updateUniformBuffers(camera,mainRender);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (camera.updated) {
|
if (camera.updated) {
|
||||||
vkFoundation.updateUniformBuffers();
|
vkFoundation.updateUniformBuffers(camera,mainRender);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::renderMain::renderLoop(GLFWwindow* window,Setter setter)
|
void PlumageRender::renderMain::renderLoop(GLFWwindow* window,Setter setter)
|
||||||
{
|
{
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
{
|
{
|
||||||
|
@ -167,10 +153,10 @@ void PlumageRender::renderMain::render(Setter setter,UI* plumageGUI)
|
||||||
drawFrame();
|
drawFrame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device);
|
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::renderMain::drawFrame()
|
void PlumageRender::renderMain::drawFrame()
|
||||||
{
|
{
|
||||||
auto tStart = std::chrono::high_resolution_clock::now();
|
auto tStart = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
|
@ -203,7 +189,7 @@ int main()
|
||||||
PlumageRender::RenderInput renderInput;
|
PlumageRender::RenderInput renderInput;
|
||||||
PlumageRender::Setter setter;
|
PlumageRender::Setter setter;
|
||||||
PlumageRender::renderMain plumageRender;
|
PlumageRender::renderMain plumageRender;
|
||||||
VulkanBackend::VulkanFoundation vkFoundation;
|
PluamgeVulkanBackend::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();
|
||||||
|
|
|
@ -1,5 +1,18 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TINYGLTF_IMPLEMENTATION
|
||||||
|
#define TINYGLTF_IMPLEMENTATION
|
||||||
|
#endif
|
||||||
|
#ifndef STB_IMAGE_IMPLEMENTATION
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TINYGLTF_NO_STB_IMAGE_WRITE
|
||||||
|
#define TINYGLTF_NO_STB_IMAGE_WRITE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
@ -19,76 +32,72 @@
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
#ifndef _GLFW3_H
|
#ifndef _GLFW3_H
|
||||||
#include "GLFW/glfw3.h"
|
|
||||||
#define _GLFW3_H
|
#define _GLFW3_H
|
||||||
|
#include "GLFW/glfw3.h"
|
||||||
#endif // !_GLFW3_H
|
#endif // !_GLFW3_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef _GLTFMODEL_H
|
|
||||||
#include "glTFModel.h"
|
|
||||||
#define _GLTFMODEL_H
|
|
||||||
#endif // !GLTFMODEL_H
|
|
||||||
|
|
||||||
#ifndef _RENDERSETTER_H
|
|
||||||
#include "renderSetter.h"
|
|
||||||
#define _RENDERSETTER_H
|
|
||||||
#endif // !RENDERSETTER_H
|
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
#ifndef _VULKANFOUNDATION_H
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
#define _VULKANFOUNDATION_H
|
||||||
|
#include "vulkanFoundation.h"
|
||||||
#endif // !VULKANFOUNDATION_H
|
#endif // !VULKANFOUNDATION_H
|
||||||
|
|
||||||
|
#ifndef _GLTFMODEL_H
|
||||||
|
#define _GLTFMODEL_H
|
||||||
|
#include "glTFModel.h"
|
||||||
|
#endif // !GLTFMODEL_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _RENDERGUI_H
|
#ifndef _RENDERGUI_H
|
||||||
#include "renderUI.h"
|
|
||||||
#define _RENDERGUI_H
|
#define _RENDERGUI_H
|
||||||
|
#include "renderUI.h"
|
||||||
#endif // !_RENDERGUI_H
|
#endif // !_RENDERGUI_H
|
||||||
|
|
||||||
#ifndef _UI_HPP
|
#ifndef _UI_HPP
|
||||||
#include "ui.hpp"
|
|
||||||
#define _UI_HPP
|
#define _UI_HPP
|
||||||
|
#include "ui.hpp"
|
||||||
#endif // !UI_HPP
|
#endif // !UI_HPP
|
||||||
|
|
||||||
#ifndef _RENDERIO_H
|
#ifndef _RENDERIO_H
|
||||||
#include "renderIO.h"
|
|
||||||
#define _RENDERIO_H
|
#define _RENDERIO_H
|
||||||
|
#include "renderIO.h"
|
||||||
#endif // !RENDERIO_H
|
#endif // !RENDERIO_H
|
||||||
|
|
||||||
#ifndef _VULKANDEVICE_HPP
|
#ifndef _VULKANDEVICE_HPP
|
||||||
#include "VulkanDevice.hpp"
|
|
||||||
#define _VULKANDEVICE_HPP
|
#define _VULKANDEVICE_HPP
|
||||||
|
#include "VulkanDevice.hpp"
|
||||||
#endif // !_VULKANDEVICE_HPP
|
#endif // !_VULKANDEVICE_HPP
|
||||||
|
|
||||||
#ifndef _CAMERA_HPP
|
#ifndef _CAMERA_HPP
|
||||||
#include "camera.hpp"
|
|
||||||
#define _CAMERA_HPP
|
#define _CAMERA_HPP
|
||||||
|
#include "camera.hpp"
|
||||||
#endif // !_CAMERA_HPP
|
#endif // !_CAMERA_HPP
|
||||||
|
|
||||||
#ifndef _VULKANTEXTURE_HPP
|
#ifndef _VULKANTEXTURE_HPP
|
||||||
#include "VulkanTexture.hpp"
|
|
||||||
#define _VULKANTEXTURE_HPP
|
#define _VULKANTEXTURE_HPP
|
||||||
|
#include "VulkanTexture.hpp"
|
||||||
#endif // !_VULKANTEXTURE_HPP
|
#endif // !_VULKANTEXTURE_HPP
|
||||||
|
|
||||||
#ifndef _VULKANUTILS_HPP
|
#ifndef _VULKANUTILS_HPP
|
||||||
#include "VulkanUtils.hpp"
|
|
||||||
#define _VULKANUTILS_HPP
|
#define _VULKANUTILS_HPP
|
||||||
|
#include "VulkanUtils.hpp"
|
||||||
#endif // !_VULKANUTILS_HPP
|
#endif // !_VULKANUTILS_HPP
|
||||||
|
|
||||||
#ifndef _STB_IMAGE_WRITE_H
|
#ifndef _STB_IMAGE_WRITE_H
|
||||||
|
#define _STB_IMAGE_WRITE_H
|
||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||||
#include "stb_image_write.h"
|
#include "stb_image_write.h"
|
||||||
#define _STB_IMAGE_WRITE_H
|
|
||||||
#endif // !_STB_IMAGE_WRITE_H
|
#endif // !_STB_IMAGE_WRITE_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define ENABLE_VALIDATION false
|
#define ENABLE_VALIDATION false
|
||||||
|
|
||||||
|
PluamgeVulkanBackend::VulkanFoundation vkFoundation;
|
||||||
|
|
||||||
namespace PlumageRender
|
namespace PlumageRender
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
class renderMain
|
class renderMain
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -101,8 +110,8 @@ namespace PlumageRender
|
||||||
{
|
{
|
||||||
glTFModel::Model scene;
|
glTFModel::Model scene;
|
||||||
glTFModel::Model skybox;
|
glTFModel::Model skybox;
|
||||||
};
|
}models;
|
||||||
static Models models;
|
|
||||||
|
|
||||||
struct stat
|
struct stat
|
||||||
{
|
{
|
||||||
|
@ -142,12 +151,12 @@ 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();
|
void prepare(Setter setter, PlumageGUI renderGUI, RenderInput renderInput, RenderOutput renderOutput, PBR::Material pbrMaterial, PluamgeVulkanBackend::VulkanFoundation vkFoundation, renderMain mainRender, UI* ui);
|
||||||
void setupCamera(Camera camera);
|
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();
|
virtual void render(Setter setter, PlumageGUI plumageGUI, UI* gui, renderMain mainRender, PluamgeVulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput renderOutput);
|
||||||
void renderLoop(GLFWwindow* window, Setter setter);
|
void renderLoop(GLFWwindow* window, Setter setter);
|
||||||
void drawFrame();
|
void drawFrame();
|
||||||
private:
|
private:
|
||||||
|
@ -166,10 +175,8 @@ namespace PlumageRender
|
||||||
|
|
||||||
renderMain::~renderMain()
|
renderMain::~renderMain()
|
||||||
{
|
{
|
||||||
models.scene.destroy(VulkanBackend::VulkanFoundation::device);
|
models.scene.destroy(PluamgeVulkanBackend::VulkanFoundation::device);
|
||||||
models.skybox.destroy(VulkanBackend::VulkanFoundation::device);
|
models.skybox.destroy(PluamgeVulkanBackend::VulkanFoundation::device);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,26 @@
|
||||||
#include "renderIO.h"
|
#include "renderIO.h"
|
||||||
|
|
||||||
void PlumageRender::RenderInput::loadScene(std::string fileName,renderMain &mainRender, VulkanBackend::VulkanFoundation vkFoundation)
|
#ifndef _PBR_H
|
||||||
|
#define _PBR_H
|
||||||
|
#include "PBR.h"
|
||||||
|
#endif // !PBR_H
|
||||||
|
|
||||||
|
#ifndef _VULKANFOUNDATION_H
|
||||||
|
#define _VULKANFOUNDATION_H
|
||||||
|
#include "vulkanFoundation.h"
|
||||||
|
#endif // !VULKANFOUNDATION_H
|
||||||
|
|
||||||
|
#ifndef _RENDERSETTER_H
|
||||||
|
#define _RENDERSETTER_H
|
||||||
|
#include "renderSetter.h"
|
||||||
|
#endif // !RENDERSETTER_H
|
||||||
|
|
||||||
|
#ifndef _RENDER_H
|
||||||
|
#define _RENDER_H
|
||||||
|
#include "render.h"
|
||||||
|
#endif // !RENDER_H
|
||||||
|
|
||||||
|
void PlumageRender::RenderInput::loadScene(std::string fileName, renderMain& mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::cout << "Loading scene from " << fileName << std::endl;
|
std::cout << "Loading scene from " << fileName << std::endl;
|
||||||
|
@ -15,7 +35,7 @@ void PlumageRender::RenderInput::loadScene(std::string fileName,renderMain &main
|
||||||
mainRender.camera.setRotation({ 0.0f, 0.0f, 0.0f });
|
mainRender.camera.setRotation({ 0.0f, 0.0f, 0.0f });
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::RenderInput::loadEnvironment(std::string fileName,PBR::Material pbrMaterial,Setter setter ,VulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender)
|
void PlumageRender::RenderInput::loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, PlumageVulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender)
|
||||||
{
|
{
|
||||||
std::cout << "Loading environment from " << fileName << std::endl;
|
std::cout << "Loading environment from " << fileName << std::endl;
|
||||||
if (pbrMaterial.textures.environmentCube.image) {
|
if (pbrMaterial.textures.environmentCube.image) {
|
||||||
|
@ -27,7 +47,7 @@ void PlumageRender::RenderInput::loadEnvironment(std::string fileName,PBR::Mater
|
||||||
pbrMaterial.generateCubemap(vkFoundation,setter,mainRender);
|
pbrMaterial.generateCubemap(vkFoundation,setter,mainRender);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender,VulkanBackend::VulkanFoundation vkFoundation,PBR::Material pbrMaterial)
|
void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender,PlumageVulkanBackend::VulkanFoundation vkFoundation,PBR::Material pbrMaterial)
|
||||||
{
|
{
|
||||||
const std::string assetpath = getAssetPath();
|
const std::string assetpath = getAssetPath();
|
||||||
|
|
||||||
|
@ -58,7 +78,7 @@ void PlumageRender::RenderInput::loadAssets(Setter setter,renderMain mainRender,
|
||||||
|
|
||||||
// todo :根据physicalDeviceIndex确定子文件夹路径,frameIndex确定fileName
|
// todo :根据physicalDeviceIndex确定子文件夹路径,frameIndex确定fileName
|
||||||
// 移动到fileSystem里
|
// 移动到fileSystem里
|
||||||
void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, VulkanBackend::VulkanFoundation vkFoundation,Setter setter)
|
void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, PlumageVulkanBackend::VulkanFoundation vkFoundation,Setter setter)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool screenshotSaved = false;
|
bool screenshotSaved = false;
|
||||||
|
@ -299,7 +319,7 @@ void PlumageRender::RenderOutput::writeImageToFile(std::string filePath, VulkanB
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlumageRender::RenderOutput::outputImageSequence(Setter setter,RenderOutput renderOutput, VulkanBackend::VulkanFoundation vkFoundation)
|
void PlumageRender::RenderOutput::outputImageSequence(Setter setter,RenderOutput renderOutput, PlumageVulkanBackend::VulkanFoundation vkFoundation)
|
||||||
{
|
{
|
||||||
// 比较已保存的帧数和设置里的开始帧数,在生成前清理上一次生成的图片序列
|
// 比较已保存的帧数和设置里的开始帧数,在生成前清理上一次生成的图片序列
|
||||||
if (savedFrameCounter == setter.settings.startFrameCount)
|
if (savedFrameCounter == setter.settings.startFrameCount)
|
||||||
|
|
|
@ -3,27 +3,23 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifndef _RENDER_H
|
|
||||||
#include "render.h"
|
|
||||||
#define _RENDER_H
|
|
||||||
#endif // !RENDER_H
|
|
||||||
|
|
||||||
#ifndef _PBR_H
|
|
||||||
#include "PBR.h"
|
|
||||||
#define _PBR_H
|
|
||||||
#endif // !PBR_H
|
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
|
||||||
#endif // !VULKANFOUNDATION_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace PBR
|
||||||
|
{
|
||||||
|
class Material;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace PlumageVulkanBackend
|
||||||
|
{
|
||||||
|
class VulkanFoundation;
|
||||||
|
}
|
||||||
|
|
||||||
namespace PlumageRender
|
namespace PlumageRender
|
||||||
{
|
{
|
||||||
|
class Setter;
|
||||||
|
class renderMain;
|
||||||
class RenderInput
|
class RenderInput
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -37,11 +33,11 @@ namespace PlumageRender
|
||||||
std::map<std::string, std::string> scenes;
|
std::map<std::string, std::string> scenes;
|
||||||
std::string selectedScene = "DamagedHelmet";
|
std::string selectedScene = "DamagedHelmet";
|
||||||
|
|
||||||
void loadScene(std::string fileName, renderMain& mainRender, VulkanBackend::VulkanFoundation vkFoundation);
|
void loadScene(std::string fileName, renderMain& mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation);
|
||||||
|
|
||||||
void loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, VulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender);
|
void loadEnvironment(std::string fileName, PBR::Material pbrMaterial, Setter setter, PlumageVulkanBackend::VulkanFoundation vkFoundation, renderMain& mainRender);
|
||||||
|
|
||||||
void loadAssets(Setter setter, renderMain mainRender, VulkanBackend::VulkanFoundation vkFoundation, PBR::Material pbrMaterial);
|
void loadAssets(Setter setter, renderMain mainRender, PlumageVulkanBackend::VulkanFoundation vkFoundation, PBR::Material pbrMaterial);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -77,9 +73,9 @@ namespace PlumageRender
|
||||||
|
|
||||||
static uint64_t savedFrameCounter;
|
static uint64_t savedFrameCounter;
|
||||||
|
|
||||||
static void writeImageToFile(std::string filePath, VulkanBackend::VulkanFoundation vkFoundation, Setter setter);
|
static void writeImageToFile(std::string filePath, PlumageVulkanBackend::VulkanFoundation vkFoundation, Setter setter);
|
||||||
|
|
||||||
static void outputImageSequence(Setter setter, RenderOutput renderOutput, VulkanBackend::VulkanFoundation vkFoundation);
|
static void outputImageSequence(Setter setter, RenderOutput renderOutput, PlumageVulkanBackend::VulkanFoundation vkFoundation);
|
||||||
|
|
||||||
static void imageSequenceToVideo(RenderOutput renderOutput, Setter setter);
|
static void imageSequenceToVideo(RenderOutput renderOutput, Setter setter);
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include "renderUI.h"
|
#include "renderUI.h"
|
||||||
#include <codecvt>
|
|
||||||
|
|
||||||
|
|
||||||
void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender,VulkanBackend::VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput)
|
|
||||||
|
void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender,VulkanFoundation vkFoundation,RenderInput renderInput,RenderOutput& renderOutput)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,9 +60,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);
|
renderInput.loadScene(stringFilename,vkFoundation);
|
||||||
|
|
||||||
vkFoundation.createDescriptorSets();
|
vkFoundation.createDescriptorSets(setter);
|
||||||
updateCBs = true;
|
updateCBs = true;
|
||||||
|
|
||||||
renderOutput.signal.imageSequenceOutputComplete = false;
|
renderOutput.signal.imageSequenceOutputComplete = false;
|
||||||
|
@ -211,9 +211,9 @@ void PlumageRender::PlumageGUI::updateUIOverlay(UI* gui,Setter& setter,renderMai
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateCBs) {
|
if (updateCBs) {
|
||||||
vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device);
|
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device);
|
||||||
vkFoundation.createCommandBuffer();
|
vkFoundation.createCommandBuffer();
|
||||||
vkDeviceWaitIdle(VulkanBackend::VulkanFoundation::device);
|
vkDeviceWaitIdle(PluamgeVulkanBackend::VulkanFoundation::device);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateShaderParams) {
|
if (updateShaderParams) {
|
||||||
|
|
|
@ -1,30 +1,34 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef _RENDER_H
|
#ifndef _RENDER_H
|
||||||
#include "render.h"
|
|
||||||
#define _RENDER_H
|
#define _RENDER_H
|
||||||
|
#include "render.h"
|
||||||
#endif // !RENDER_H
|
#endif // !RENDER_H
|
||||||
|
|
||||||
#ifndef _VULKANFOUNDATION_H
|
#ifndef _VULKANFOUNDATION_H
|
||||||
#include "vulkanFoundation.h"
|
|
||||||
#define _VULKANFOUNDATION_H
|
#define _VULKANFOUNDATION_H
|
||||||
|
#include "vulkanFoundation.h"
|
||||||
#endif // !VULKANFOUNDATION_H
|
#endif // !VULKANFOUNDATION_H
|
||||||
|
|
||||||
#ifndef _RENDERSETTER_H
|
|
||||||
#include "renderSetter.h"
|
|
||||||
#define _RENDERSETTER_H
|
|
||||||
#endif // !RENDERSETTER_H
|
|
||||||
|
|
||||||
#ifndef _RENDERIO_H
|
#ifndef _RENDERIO_H
|
||||||
#include "renderIO.h"
|
|
||||||
#define _RENDERIO_H
|
#define _RENDERIO_H
|
||||||
|
#include "renderIO.h"
|
||||||
#endif // !RENDERIO_H
|
#endif // !RENDERIO_H
|
||||||
|
|
||||||
|
#ifndef _RENDERSETTER_H
|
||||||
|
#define _RENDERSETTER_H
|
||||||
|
#include "renderSetter.h"
|
||||||
|
#endif // !RENDERSETTER_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _UI_HPP
|
#ifndef _UI_HPP
|
||||||
#include "ui.hpp"
|
|
||||||
#define _UI_HPP
|
#define _UI_HPP
|
||||||
|
#include "ui.hpp"
|
||||||
#endif // !UI_HPP
|
#endif // !UI_HPP
|
||||||
|
|
||||||
|
#include <codecvt>
|
||||||
|
|
||||||
|
|
||||||
namespace PlumageRender
|
namespace PlumageRender
|
||||||
{
|
{
|
||||||
|
@ -36,7 +40,7 @@ namespace PlumageRender
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, VulkanBackend::VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput);
|
void updateUIOverlay(UI* gui,Setter& setter,renderMain mainRender, VulkanFoundation vkFoundation, RenderInput renderInput, RenderOutput& renderOutput);
|
||||||
|
|
||||||
struct DebugView
|
struct DebugView
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "vulkanFoundation.h"
|
#include "vulkanFoundation.h"
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI)
|
void PluamgeVulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender,UI* plumageGUI)
|
||||||
{
|
{
|
||||||
// 创建instance
|
// 创建instance
|
||||||
createInstance(setter);
|
createInstance(setter);
|
||||||
|
@ -66,7 +66,7 @@ void VulkanBackend::VulkanFoundation::initVulkan(PlumageRender::Setter setter,Ca
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
// check validation layers
|
// check validation layers
|
||||||
if (setter.settings.validation && !checkValidationLayerSupport())
|
if (setter.settings.validation && !checkValidationLayerSupport())
|
||||||
|
@ -117,7 +117,7 @@ void VulkanBackend::VulkanFoundation::createInstance(PlumageRender::Setter sette
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport()
|
bool PluamgeVulkanBackend::VulkanFoundation::checkValidationLayerSupport()
|
||||||
{
|
{
|
||||||
uint32_t layerCount;
|
uint32_t layerCount;
|
||||||
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
|
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
|
||||||
|
@ -144,7 +144,7 @@ bool VulkanBackend::VulkanFoundation::checkValidationLayerSupport()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(PlumageRender::Setter setter)
|
std::vector<const char*> PluamgeVulkanBackend::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 +167,7 @@ std::vector<const char*> VulkanBackend::VulkanFoundation::getRequiredExtensions(
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
if (!setter.settings.validation)
|
if (!setter.settings.validation)
|
||||||
{
|
{
|
||||||
|
@ -184,7 +184,7 @@ void VulkanBackend::VulkanFoundation::setupDebugMessager(PlumageRender::Setter s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& debugCreateInfo)
|
void PluamgeVulkanBackend::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 +198,7 @@ void VulkanBackend::VulkanFoundation::populateDebugMessengerCreateInfo(VkDebugUt
|
||||||
debugCreateInfo.pUserData = nullptr;
|
debugCreateInfo.pUserData = nullptr;
|
||||||
}
|
}
|
||||||
// debugCallback用于校验层
|
// debugCallback用于校验层
|
||||||
VKAPI_ATTR VkBool32 VKAPI_CALL VulkanBackend::VulkanFoundation::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData)
|
VKAPI_ATTR VkBool32 VKAPI_CALL PluamgeVulkanBackend::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 +207,7 @@ VKAPI_ATTR VkBool32 VKAPI_CALL VulkanBackend::VulkanFoundation::debugCallback(Vk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult VulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger)
|
VkResult PluamgeVulkanBackend::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 +223,7 @@ VkResult VulkanBackend::VulkanFoundation::CreateDebugUtilsMessengerEXT(VkInstanc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
|
@ -239,7 +239,7 @@ void VulkanBackend::VulkanFoundation::createSurface(PlumageRender::Setter setter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint32_t deviceCount = 0;
|
uint32_t deviceCount = 0;
|
||||||
|
@ -271,7 +271,7 @@ void VulkanBackend::VulkanFoundation::pickPhysicalDevice(PlumageRender::Setter s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter)
|
bool PluamgeVulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
{
|
{
|
||||||
|
@ -291,7 +291,7 @@ bool VulkanBackend::VulkanFoundation::isDeviceSuitable(VkPhysicalDevice device,P
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device)
|
bool PluamgeVulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevice device)
|
||||||
{
|
{
|
||||||
uint32_t extensionCount;
|
uint32_t extensionCount;
|
||||||
vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
|
vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
|
||||||
|
@ -310,7 +310,7 @@ bool VulkanBackend::VulkanFoundation::checkDeviceExtensionSupport(VkPhysicalDevi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VulkanBackend::VulkanFoundation::QueueFamilyIndices VulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter)
|
PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices PluamgeVulkanBackend::VulkanFoundation::findQueueFamilies(VkPhysicalDevice device,PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
QueueFamilyIndices indices;
|
QueueFamilyIndices indices;
|
||||||
|
|
||||||
|
@ -359,7 +359,7 @@ VulkanBackend::VulkanFoundation::QueueFamilyIndices VulkanBackend::VulkanFoundat
|
||||||
return indices;
|
return indices;
|
||||||
}
|
}
|
||||||
|
|
||||||
VulkanBackend::VulkanFoundation::SwapChainSupportDetails VulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device)
|
PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails PluamgeVulkanBackend::VulkanFoundation::querySwapChainSupport(VkPhysicalDevice device)
|
||||||
{
|
{
|
||||||
// 获得surface细节
|
// 获得surface细节
|
||||||
SwapChainSupportDetails details;
|
SwapChainSupportDetails details;
|
||||||
|
@ -389,7 +389,7 @@ VulkanBackend::VulkanFoundation::SwapChainSupportDetails VulkanBackend::VulkanFo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::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 +469,7 @@ void VulkanBackend::VulkanFoundation::createLogicalDevice(PlumageRender::Setter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
|
@ -537,7 +537,7 @@ void VulkanBackend::VulkanFoundation::createSwapChain(PlumageRender::Setter sett
|
||||||
swapChainExtent = extent;
|
swapChainExtent = extent;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkSurfaceFormatKHR VulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats)
|
VkSurfaceFormatKHR PluamgeVulkanBackend::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 +549,7 @@ VkSurfaceFormatKHR VulkanBackend::VulkanFoundation::chooseSwapSurfaceFormat(cons
|
||||||
return availableFormats[0];
|
return availableFormats[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
VkPresentModeKHR VulkanBackend::VulkanFoundation::chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes, PlumageRender::Setter setter)
|
VkPresentModeKHR PluamgeVulkanBackend::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 +582,7 @@ VkPresentModeKHR VulkanBackend::VulkanFoundation::chooseSwapPresentMode(const st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VkExtent2D VulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities)
|
VkExtent2D PluamgeVulkanBackend::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 +607,7 @@ VkExtent2D VulkanBackend::VulkanFoundation::chooseSwapExtent(const VkSurfaceCapa
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::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 +835,7 @@ void VulkanBackend::VulkanFoundation::createImageView(PlumageRender::Setter sett
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
VkFormat colorAttachmentFormat;
|
VkFormat colorAttachmentFormat;
|
||||||
VkFormat depthAttachmentFormat = findDepthFormat();
|
VkFormat depthAttachmentFormat = findDepthFormat();
|
||||||
|
@ -1015,7 +1015,7 @@ void VulkanBackend::VulkanFoundation::createRenderPass(PlumageRender::Setter set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VkFormat VulkanBackend::VulkanFoundation::findDepthFormat()
|
VkFormat PluamgeVulkanBackend::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 +1024,7 @@ VkFormat VulkanBackend::VulkanFoundation::findDepthFormat()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
VkFormat VulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
|
VkFormat PluamgeVulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
|
||||||
{
|
{
|
||||||
for (VkFormat format : candidates)
|
for (VkFormat format : candidates)
|
||||||
{
|
{
|
||||||
|
@ -1043,21 +1043,21 @@ VkFormat VulkanBackend::VulkanFoundation::findSupportedFormat(const std::vector<
|
||||||
throw std::runtime_error("failed to find supported format");
|
throw std::runtime_error("failed to find supported format");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VulkanBackend::VulkanFoundation::hasStencilComponent(VkFormat format)
|
bool PluamgeVulkanBackend::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 VulkanBackend::VulkanFoundation::createDescriptorSetLayout()
|
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSetLayout()
|
||||||
{
|
{
|
||||||
createSceneDescriptorSetLayout();
|
createSceneDescriptorSetLayout();
|
||||||
createMaterialDescriptorSetLayout();
|
createMaterialDescriptorSetLayout();
|
||||||
createNodeDescriptorSetLayout();
|
createNodeDescriptorSetLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout()
|
void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout()
|
||||||
{
|
{
|
||||||
// scene,场景的资源描述符
|
// scene,场景的资源描述符
|
||||||
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
||||||
|
@ -1074,7 +1074,7 @@ void VulkanBackend::VulkanFoundation::createSceneDescriptorSetLayout()
|
||||||
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.scene));
|
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.scene));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout()
|
void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout()
|
||||||
{
|
{
|
||||||
// 材质或材质采样器的资源描述符
|
// 材质或材质采样器的资源描述符
|
||||||
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
||||||
|
@ -1091,7 +1091,7 @@ void VulkanBackend::VulkanFoundation::createMaterialDescriptorSetLayout()
|
||||||
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.material));
|
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device, &descriptorSetLayoutCI, nullptr, &descriptorSetLayouts.material));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout()
|
void PluamgeVulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout()
|
||||||
{
|
{
|
||||||
// 模型结点或矩阵的资源描述符
|
// 模型结点或矩阵的资源描述符
|
||||||
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
||||||
|
@ -1106,7 +1106,7 @@ void VulkanBackend::VulkanFoundation::createNodeDescriptorSetLayout()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createPipelineCache()
|
void PluamgeVulkanBackend::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 +1115,7 @@ void VulkanBackend::VulkanFoundation::createPipelineCache()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::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 +1263,7 @@ void VulkanBackend::VulkanFoundation::createGraphicPipeline(PlumageRender::Sette
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
|
@ -1320,7 +1320,7 @@ void VulkanBackend::VulkanFoundation::createFramebuffer(PlumageRender::Setter se
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
uint32_t attachmentCount;
|
uint32_t attachmentCount;
|
||||||
VkImageView attachments[attachmentCount];
|
VkImageView attachments[attachmentCount];
|
||||||
|
@ -1364,7 +1364,7 @@ void VulkanBackend::VulkanFoundation::createSwapChainFramebuffer(PlumageRender::
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice,setter);
|
QueueFamilyIndices queueFamilyIndices = findQueueFamilies(physicalDevice,setter);
|
||||||
|
|
||||||
|
@ -1383,7 +1383,7 @@ void VulkanBackend::VulkanFoundation::createCommandPool(PlumageRender::Setter se
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender)
|
void PluamgeVulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter setter,Camera camera,PlumageRender::renderMain mainRender)
|
||||||
{
|
{
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
{
|
{
|
||||||
|
@ -1403,7 +1403,7 @@ void VulkanBackend::VulkanFoundation::createUniformBuffer(PlumageRender::Setter
|
||||||
updateUniformBuffers(camera,mainRender);
|
updateUniformBuffers(camera,mainRender);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender)
|
void PluamgeVulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, PlumageRender::renderMain mainRender)
|
||||||
{
|
{
|
||||||
// Scene
|
// Scene
|
||||||
shaderDataScene.projection = camera.matrices.perspective;
|
shaderDataScene.projection = camera.matrices.perspective;
|
||||||
|
@ -1432,7 +1432,7 @@ void VulkanBackend::VulkanFoundation::updateUniformBuffers(Camera camera, Plumag
|
||||||
shaderDataSkybox.model = glm::mat4(glm::mat3(camera.matrices.view));
|
shaderDataSkybox.model = glm::mat4(glm::mat3(camera.matrices.view));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender)
|
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::renderMain mainRender)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Descriptor Pool
|
Descriptor Pool
|
||||||
|
@ -1469,7 +1469,7 @@ void VulkanBackend::VulkanFoundation::createDescriptorPool(PlumageRender::render
|
||||||
VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool));
|
VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
{
|
{
|
||||||
|
@ -1488,7 +1488,7 @@ void VulkanBackend::VulkanFoundation::createDescriptorSets(PlumageRender::Setter
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scene (matrices and environment maps)
|
// Scene (matrices and environment maps)
|
||||||
void VulkanBackend::VulkanFoundation::createSceneDescriptorSets()
|
void PluamgeVulkanBackend::VulkanFoundation::createSceneDescriptorSets()
|
||||||
{
|
{
|
||||||
|
|
||||||
for (auto i = 0; i < descriptorSets.size(); i++)
|
for (auto i = 0; i < descriptorSets.size(); i++)
|
||||||
|
@ -1544,7 +1544,7 @@ void VulkanBackend::VulkanFoundation::createSceneDescriptorSets()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Per-Material descriptor sets
|
// Per-Material descriptor sets
|
||||||
void VulkanBackend::VulkanFoundation::createMaterialDescriptorSets()
|
void PluamgeVulkanBackend::VulkanFoundation::createMaterialDescriptorSets()
|
||||||
{
|
{
|
||||||
|
|
||||||
for (auto& material : PlumageRender::renderMain::models.scene.materials)
|
for (auto& material : PlumageRender::renderMain::models.scene.materials)
|
||||||
|
@ -1603,7 +1603,7 @@ void VulkanBackend::VulkanFoundation::createMaterialDescriptorSets()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model node (matrices)
|
// Model node (matrices)
|
||||||
void VulkanBackend::VulkanFoundation::createModelNodeDescriptorSets()
|
void PluamgeVulkanBackend::VulkanFoundation::createModelNodeDescriptorSets()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Per-Node descriptor set
|
// Per-Node descriptor set
|
||||||
|
@ -1616,7 +1616,7 @@ void VulkanBackend::VulkanFoundation::createModelNodeDescriptorSets()
|
||||||
|
|
||||||
|
|
||||||
// attention: gltf-spec
|
// attention: gltf-spec
|
||||||
void VulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node)
|
void PluamgeVulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node* node)
|
||||||
{
|
{
|
||||||
if (node->mesh) {
|
if (node->mesh) {
|
||||||
VkDescriptorSetAllocateInfo descriptorSetAllocInfo{};
|
VkDescriptorSetAllocateInfo descriptorSetAllocInfo{};
|
||||||
|
@ -1641,7 +1641,7 @@ void VulkanBackend::VulkanFoundation::setupglTFNodeDescriptorSet(glTFModel::Node
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createSkyboxDescriptorSets()
|
void PluamgeVulkanBackend::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 +1681,7 @@ void VulkanBackend::VulkanFoundation::createSkyboxDescriptorSets()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
// resize
|
// resize
|
||||||
if (setter.settings.headless)
|
if (setter.settings.headless)
|
||||||
|
@ -1702,7 +1702,7 @@ void VulkanBackend::VulkanFoundation::allocateCommandBuffers(PlumageRender::Sett
|
||||||
VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, commandbuffers.data()));
|
VK_CHECK_RESULT(vkAllocateCommandBuffers(device, &cmdBufAllocateInfo, commandbuffers.data()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::cleanupSwapChain()
|
void PluamgeVulkanBackend::VulkanFoundation::cleanupSwapChain()
|
||||||
{
|
{
|
||||||
for (auto framebuffer : framebuffers)
|
for (auto framebuffer : framebuffers)
|
||||||
{
|
{
|
||||||
|
@ -1717,7 +1717,7 @@ void VulkanBackend::VulkanFoundation::cleanupSwapChain()
|
||||||
vkDestroySwapchainKHR(device, swapChain, nullptr);
|
vkDestroySwapchainKHR(device, swapChain, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI)
|
void PluamgeVulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter setter,PlumageRender::renderMain mainRender,UI* plumageGUI)
|
||||||
{
|
{
|
||||||
|
|
||||||
VkCommandBufferBeginInfo cmdBufferBeginInfo{};
|
VkCommandBufferBeginInfo cmdBufferBeginInfo{};
|
||||||
|
@ -1807,7 +1807,7 @@ void VulkanBackend::VulkanFoundation::createCommandBuffer(PlumageRender::Setter
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Node* node, uint32_t cbIndex, glTFModel::Material::AlphaMode alphaMode)
|
void PluamgeVulkanBackend::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 +1886,7 @@ void VulkanBackend::VulkanFoundation::createglTFNodeCommandBuffer(glTFModel::Nod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::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 +1912,7 @@ void VulkanBackend::VulkanFoundation::createFenceAndSemaphore(PlumageRender::Set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator)
|
void PluamgeVulkanBackend::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 +1924,7 @@ void VulkanBackend::VulkanFoundation::DestroyDebugUtilsMessengerEXT(VkInstance i
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool VulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeerResized,uint32_t imageIndex,uint32_t frameIndex,PlumageRender::Setter setter)
|
bool PluamgeVulkanBackend::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 +1940,7 @@ bool VulkanBackend::VulkanFoundation::acqureNextSwapchainImage(bool framebuffeer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex, uint32_t currentBuffer)
|
void PluamgeVulkanBackend::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 +1955,7 @@ void VulkanBackend::VulkanFoundation::submitToGraphicQueue(uint32_t frameIndex,
|
||||||
VK_CHECK_RESULT(vkQueueSubmit(graphicQueue, 1, &submitInfo, waitFences[frameIndex]));
|
VK_CHECK_RESULT(vkQueueSubmit(graphicQueue, 1, &submitInfo, waitFences[frameIndex]));
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,uint32_t imageIndex,bool framebufferResized,PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
//显示队列
|
//显示队列
|
||||||
VkSemaphore signalSemaphores[] = { renderCompleteSemaphores[frameIndex] };
|
VkSemaphore signalSemaphores[] = { renderCompleteSemaphores[frameIndex] };
|
||||||
|
@ -1984,7 +1984,7 @@ void VulkanBackend::VulkanFoundation::imageToQueuePresent(uint32_t frameIndex,ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::destroyVulkanBackend(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::destroyPlumageRender(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
// Clean up Vulkan resources
|
// Clean up Vulkan resources
|
||||||
cleanupSwapChain();
|
cleanupSwapChain();
|
||||||
|
@ -2047,7 +2047,7 @@ void VulkanBackend::VulkanFoundation::destroyVulkanBackend(PlumageRender::Setter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::updateShaderData()
|
void PluamgeVulkanBackend::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 +2056,7 @@ void VulkanBackend::VulkanFoundation::updateShaderData()
|
||||||
0.0f);
|
0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter)
|
void PluamgeVulkanBackend::VulkanFoundation::recreateSwapChain(PlumageRender::Setter setter)
|
||||||
{
|
{
|
||||||
int width = 0, height = 0;
|
int width = 0, height = 0;
|
||||||
glfwGetFramebufferSize(window, &width, &height);
|
glfwGetFramebufferSize(window, &width, &height);
|
||||||
|
|
|
@ -8,31 +8,28 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
#ifndef _RENDER_H
|
|
||||||
#include "render.h"
|
|
||||||
#define _RENDER_H
|
|
||||||
#endif // !RENDER_H
|
|
||||||
|
|
||||||
#ifndef _GLTFMODEL_H
|
#ifndef _GLTFMODEL_H
|
||||||
#include "glTFModel.h"
|
|
||||||
#define _GLTFMODEL_H
|
#define _GLTFMODEL_H
|
||||||
|
#include "glTFModel.h"
|
||||||
#endif // !GLTFMODEL_H
|
#endif // !GLTFMODEL_H
|
||||||
|
|
||||||
#ifndef _RENDERSETTER_H
|
#ifndef _RENDERSETTER_H
|
||||||
#include "renderSetter.h"
|
|
||||||
#define _RENDERSETTER_H
|
#define _RENDERSETTER_H
|
||||||
|
#include "renderSetter.h"
|
||||||
#endif // !RENDERSETTER_H
|
#endif // !RENDERSETTER_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef _GLFW3_H
|
#ifndef _GLFW3_H
|
||||||
#include "GLFW/glfw3.h"
|
|
||||||
#define _GLFW3_H
|
#define _GLFW3_H
|
||||||
|
#include "GLFW/glfw3.h"
|
||||||
#endif // !_GLFW3_H
|
#endif // !_GLFW3_H
|
||||||
|
|
||||||
|
|
||||||
#ifndef _VULKANUTILS_HPP
|
#ifndef _VULKANUTILS_HPP
|
||||||
#include "VulkanUtils.hpp"
|
|
||||||
#define _VULKANUTILS_HPP
|
#define _VULKANUTILS_HPP
|
||||||
|
#include "VulkanUtils.hpp"
|
||||||
#endif // !_VULKANUTILS_HPP
|
#endif // !_VULKANUTILS_HPP
|
||||||
|
|
||||||
#include <VulkanSwapChain.hpp>
|
#include <VulkanSwapChain.hpp>
|
||||||
|
@ -43,8 +40,8 @@
|
||||||
#endif // !_VULKANDEVICE_HPP
|
#endif // !_VULKANDEVICE_HPP
|
||||||
|
|
||||||
#ifndef _CAMERA_HPP
|
#ifndef _CAMERA_HPP
|
||||||
#include "camera.hpp"
|
|
||||||
#define _CAMERA_HPP
|
#define _CAMERA_HPP
|
||||||
|
#include "camera.hpp"
|
||||||
#endif // !_CAMERA_HPP
|
#endif // !_CAMERA_HPP
|
||||||
|
|
||||||
#ifndef _UI_HPP
|
#ifndef _UI_HPP
|
||||||
|
@ -52,8 +49,15 @@
|
||||||
#define _UI_HPP
|
#define _UI_HPP
|
||||||
#endif // !UI_HPP
|
#endif // !UI_HPP
|
||||||
|
|
||||||
|
#ifndef _RENDER_H
|
||||||
|
#define _RENDER_H
|
||||||
|
#include "render.h"
|
||||||
|
#endif // !RENDER_H
|
||||||
|
|
||||||
namespace VulkanBackend
|
PlumageRender::renderMain mainRender;
|
||||||
|
|
||||||
|
|
||||||
|
namespace PluamgeVulkanBackend
|
||||||
{
|
{
|
||||||
class VulkanFoundation
|
class VulkanFoundation
|
||||||
{
|
{
|
||||||
|
@ -62,6 +66,7 @@ namespace VulkanBackend
|
||||||
~VulkanFoundation();
|
~VulkanFoundation();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const std::vector<const char*> validationLayers = {
|
const std::vector<const char*> validationLayers = {
|
||||||
"VK_LAYER_KHRONOS_validation"
|
"VK_LAYER_KHRONOS_validation"
|
||||||
|
|
||||||
|
@ -141,7 +146,7 @@ namespace VulkanBackend
|
||||||
|
|
||||||
void imageToQueuePresent(uint32_t frameIndex, uint32_t imageIndex, bool framebufferResized, PlumageRender::Setter setter);
|
void imageToQueuePresent(uint32_t frameIndex, uint32_t imageIndex, bool framebufferResized, PlumageRender::Setter setter);
|
||||||
|
|
||||||
void destroyVulkanBackend(PlumageRender::Setter setter);
|
void destroyPlumageRender(PlumageRender::Setter setter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -279,8 +284,8 @@ namespace VulkanBackend
|
||||||
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);
|
||||||
VulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter);
|
PluamgeVulkanBackend::VulkanFoundation::QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, PlumageRender::Setter setter);
|
||||||
VulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device);
|
PluamgeVulkanBackend::VulkanFoundation::SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device);
|
||||||
|
|
||||||
// 创建程序使用的逻辑设备
|
// 创建程序使用的逻辑设备
|
||||||
void createLogicalDevice(PlumageRender::Setter setter);
|
void createLogicalDevice(PlumageRender::Setter setter);
|
||||||
|
|
Loading…
Reference in New Issue