From 2c6eaa4dc9e61165e63d0955a4898bb54a90b926 Mon Sep 17 00:00:00 2001 From: ink-soul Date: Fri, 2 Jun 2023 09:56:49 +0800 Subject: [PATCH] update MICRO for plumage render --- base/vulkanexamplebase.h | 136 ++++++++++++++++++------------------- src/render/GUIFunction.cpp | 3 +- src/render/render.cpp | 50 ++++++++------ src/render/render.h | 6 +- 4 files changed, 102 insertions(+), 93 deletions(-) diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index 89eec6f..1e654bc 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -401,134 +401,134 @@ public: // OS specific macros for the example main entry points #if defined(_WIN32) // Windows entry point -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) \ { \ - if (vulkanExample != NULL) \ + if (plumageRender != NULL) \ { \ - vulkanExample->handleMessages(hWnd, uMsg, wParam, lParam); \ + plumageRender->handleMessages(hWnd, uMsg, wParam, lParam); \ } \ return (DefWindowProc(hWnd, uMsg, wParam, lParam)); \ } \ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) \ { \ - for (int32_t i = 0; i < __argc; i++) { VulkanExample::args.push_back(__argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->setupWindow(hInstance, WndProc); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (int32_t i = 0; i < __argc; i++) { PlumageRender::args.push_back(__argv[i]); }; \ + plumageRender = new PlumageRender(); \ + plumageRender->initVulkan(); \ + plumageRender->setupWindow(hInstance, WndProc); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ return 0; \ } #elif defined(VK_USE_PLATFORM_ANDROID_KHR) // Android entry point -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ void android_main(android_app* state) \ { \ - vulkanExample = new VulkanExample(); \ - state->userData = vulkanExample; \ - state->onAppCmd = VulkanExample::handleAppCommand; \ - state->onInputEvent = VulkanExample::handleAppInput; \ + plumageRender = new PlumageRender(); \ + state->userData = plumageRender; \ + state->onAppCmd = PlumageRender::handleAppCommand; \ + state->onInputEvent = PlumageRender::handleAppInput; \ androidApp = state; \ vks::android::getDeviceConfig(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ } #elif defined(_DIRECT2DISPLAY) // Linux entry point with direct to display wsi -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ static void handleEvent() \ { \ } \ int main(const int argc, const char *argv[]) \ { \ - for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (size_t i = 0; i < argc; i++) { PlumageRender::args.push_back(argv[i]); }; \ + plumageRender = new PlumageRender(); \ + plumageRender->initVulkan(); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ return 0; \ } #elif defined(VK_USE_PLATFORM_DIRECTFB_EXT) -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ static void handleEvent(const DFBWindowEvent *event) \ { \ - if (vulkanExample != NULL) \ + if (plumageRender != NULL) \ { \ - vulkanExample->handleEvent(event); \ + plumageRender->handleEvent(event); \ } \ } \ int main(const int argc, const char *argv[]) \ { \ - for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->setupWindow(); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (size_t i = 0; i < argc; i++) { PlumageRender::args.push_back(argv[i]); }; \ + plumageRender = new PlumageRender(); \ + plumageRender->initVulkan(); \ + plumageRender->setupWindow(); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ return 0; \ } #elif (defined(VK_USE_PLATFORM_WAYLAND_KHR) || defined(VK_USE_PLATFORM_HEADLESS_EXT)) -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ int main(const int argc, const char *argv[]) \ { \ - for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->setupWindow(); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (size_t i = 0; i < argc; i++) { PlumageRender::args.push_back(argv[i]); }; \ + plumageRender = new PlumageRender(); \ + plumageRender->initVulkan(); \ + plumageRender->setupWindow(); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ return 0; \ } #elif defined(VK_USE_PLATFORM_XCB_KHR) -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ static void handleEvent(const xcb_generic_event_t *event) \ { \ - if (vulkanExample != NULL) \ + if (plumageRender != NULL) \ { \ - vulkanExample->handleEvent(event); \ + plumageRender->handleEvent(event); \ } \ } \ int main(const int argc, const char *argv[]) \ { \ - for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->setupWindow(); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (size_t i = 0; i < argc; i++) { PlumageRender::args.push_back(argv[i]); }; \ + plumageRender = new VulkanExample(); \ + plumageRender->initVulkan(); \ + plumageRender->setupWindow(); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ return 0; \ } #elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) #if defined(VK_EXAMPLE_XCODE_GENERATED) -#define VULKAN_EXAMPLE_MAIN() \ -VulkanExample *vulkanExample; \ +#define PLUMAGE_RENDER_MAIN() \ +PlumageRender *plumageRender; \ int main(const int argc, const char *argv[]) \ { \ @autoreleasepool \ { \ - for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \ - vulkanExample = new VulkanExample(); \ - vulkanExample->initVulkan(); \ - vulkanExample->setupWindow(nullptr); \ - vulkanExample->prepare(); \ - vulkanExample->renderLoop(); \ - delete(vulkanExample); \ + for (size_t i = 0; i < argc; i++) { PlumageRender::args.push_back(argv[i]); }; \ + plumageRender = new PlumageRender(); \ + plumageRender->initVulkan(); \ + plumageRender->setupWindow(nullptr); \ + plumageRender->prepare(); \ + plumageRender->renderLoop(); \ + delete(plumageRender); \ } \ return 0; \ } #else -#define VULKAN_EXAMPLE_MAIN() +#define PLUMAGE_RENDER_MAIN() #endif #endif diff --git a/src/render/GUIFunction.cpp b/src/render/GUIFunction.cpp index a854de9..99538a3 100644 --- a/src/render/GUIFunction.cpp +++ b/src/render/GUIFunction.cpp @@ -24,7 +24,8 @@ std::string GUIFunction::openFileFolderDialog() COMDLG_FILTERSPEC fileType[] = { - {L"compled shader",L"*.spv*"}, + {L"all files",L"*.*"}, + {L"compiled shader",L"*.spv*"}, {L"gltf model files",L"*.gltf*"}, {L"gltf model files",L"*.GLTF*"}, diff --git a/src/render/render.cpp b/src/render/render.cpp index df56a6f..9bd1389 100644 --- a/src/render/render.cpp +++ b/src/render/render.cpp @@ -34,7 +34,7 @@ - VulkanExample::VulkanExample(): +PlumageRender::PlumageRender(): VulkanExampleBase(ENABLE_VALIDATION) { title = "render"; @@ -45,7 +45,7 @@ camera.setPerspective(60.0f, (float)width / (float)height, 0.1f, 256.0f); } - void VulkanExample::getEnabledFeatures() + void PlumageRender::getEnabledFeatures() { // Fill mode non solid is required for wireframe display if (deviceFeatures.fillModeNonSolid) { @@ -53,7 +53,7 @@ }; } - void VulkanExample::setupFrameBuffer() + void PlumageRender::setupFrameBuffer() { VulkanExampleBase::setupFrameBuffer(); if (pbrFrameBuffer.bCreate && (pbrFrameBuffer.fbo.width != width || pbrFrameBuffer.fbo.height != height)) @@ -165,7 +165,7 @@ pbrFrameBuffer.bCreate = true; } - void VulkanExample::buildCommandBuffers() + void PlumageRender::buildCommandBuffers() { VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); @@ -222,7 +222,7 @@ } } - void VulkanExample::loadglTFFile(std::string filename, VulkanglTFModel& model, bool bSkyboxFlag = false) + void PlumageRender::loadglTFFile(std::string filename, VulkanglTFModel& model, bool bSkyboxFlag = false) { tinygltf::Model glTFInput; tinygltf::TinyGLTF gltfContext; @@ -334,14 +334,14 @@ vkFreeMemory(device, indexStaging.memory, nullptr); } // TO DO:reconstruct with getting file path through struct - void VulkanExample::loadAssets() + void PlumageRender::loadAssets() { loadglTFFile(filePath.glTFModelFilePath, glTFModel); loadglTFFile(filePath.skyboxModleFilePath, skyboxModel, true); ibltextures.skyboxCube.loadFromFile(filePath.iblTexturesFilePath, VK_FORMAT_R16G16B16A16_SFLOAT, vulkanDevice, queue); } - void VulkanExample::setupDescriptors() + void PlumageRender::setupDescriptors() { /* This sample uses separate descriptor sets (and layouts) for the matrices and materials (textures) @@ -448,7 +448,7 @@ } } - void VulkanExample::preparePipelines() + void PlumageRender::preparePipelines() { VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateCI = vks::initializers::pipelineInputAssemblyStateCreateInfo(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE); VkPipelineRasterizationStateCreateInfo rasterizationStateCI = vks::initializers::pipelineRasterizationStateCreateInfo(VK_POLYGON_MODE_FILL, VK_CULL_MODE_BACK_BIT, VK_FRONT_FACE_COUNTER_CLOCKWISE, 0); @@ -506,7 +506,7 @@ CreateToneMappingPipeline(); } - void VulkanExample::CreateToneMappingPipeline() + void PlumageRender::CreateToneMappingPipeline() { if (pipelines.toneMapping != VK_NULL_HANDLE) { @@ -549,7 +549,7 @@ //----------------------------Prepare precompute Lighting or BRDF LUT-----------------------------------------------// //Irradiance map for diffuse lighting - void VulkanExample::GenerateIrradianceCubemap() + void PlumageRender::GenerateIrradianceCubemap() { auto tStart = std::chrono::high_resolution_clock::now(); @@ -905,7 +905,7 @@ std::cout << "Generating irradiance cube with " << numMips << " mip levels took " << tDiff << " ms" << std::endl; } - void VulkanExample::GeneratePrefilteredCubemap() + void PlumageRender::GeneratePrefilteredCubemap() { auto tStart = std::chrono::high_resolution_clock::now(); @@ -1290,7 +1290,7 @@ std::cout << "Generating pre-filtered environment cube with " << numMips << " mip levels took " << tDiff << " ms" << std::endl; } - void VulkanExample::GenerateBRDFLUT() + void PlumageRender::GenerateBRDFLUT() { auto tStart = std::chrono::high_resolution_clock::now(); @@ -1497,7 +1497,7 @@ //----------------------------End Precompute brick------------------------------------------------------------------// #pragma region pbr render pass setting - void VulkanExample::createAttachment( + void PlumageRender::createAttachment( VkFormat format, VkImageUsageFlagBits usage, FrameBufferAttachment* attachment, @@ -1558,7 +1558,7 @@ #pragma endregion // Prepare and initialize uniform buffer containing shader uniforms - void VulkanExample::prepareUniformBuffers() + void PlumageRender::prepareUniformBuffers() { // Vertex shader uniform buffer block VK_CHECK_RESULT(vulkanDevice->createBuffer( @@ -1590,7 +1590,7 @@ updateUniformBuffers(); } - void VulkanExample::updateUniformBuffers() + void PlumageRender::updateUniformBuffers() { shaderData.values.projection = camera.matrices.perspective; shaderData.values.model = camera.matrices.view; @@ -1600,7 +1600,7 @@ memcpy(shaderData.buffer.mapped, &shaderData.values, sizeof(shaderData.values)); } - void VulkanExample::prepare() + void PlumageRender::prepare() { VulkanExampleBase::prepare(); loadAssets(); @@ -1614,7 +1614,7 @@ prepared = true; } - void VulkanExample::render() + void PlumageRender::render() { renderFrame(); if (camera.updated) { @@ -1627,12 +1627,12 @@ } - void VulkanExample::viewChanged() + void PlumageRender::viewChanged() { updateUniformBuffers(); } - void VulkanExample::OnUpdateUIOverlay(vks::UIOverlay *overlay) + void PlumageRender::OnUpdateUIOverlay(vks::UIOverlay *overlay) { GUIFunction guiFunc{}; if (overlay->header("Settings")) { @@ -1664,7 +1664,7 @@ std::string strModelFilePath; strModelFilePath = guiFunc.openFileFolderDialog(); filePath.glTFModelFilePath = strModelFilePath; - loadAssets(); + PlumageRender::prepare(); } if(overlay->button("select vertexShader")) @@ -1680,4 +1680,12 @@ } -VULKAN_EXAMPLE_MAIN() + PlumageRender* plumageRender; LRESULT __stdcall WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + if (plumageRender != 0) { + plumageRender->handleMessages(hWnd, uMsg, wParam, lParam); + } return (DefWindowProcA(hWnd, uMsg, wParam, lParam)); + } int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { + for (int32_t i = 0; i < (*__p___argc()); i++) { + PlumageRender::args.push_back((*__p___argv())[i]); + }; plumageRender = new PlumageRender(); plumageRender->initVulkan(); plumageRender->setupWindow(hInstance, WndProc); plumageRender->prepare(); plumageRender->renderLoop(); delete(plumageRender); return 0; + } diff --git a/src/render/render.h b/src/render/render.h index 24e41ad..12b022c 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -9,7 +9,7 @@ -class VulkanExample : public VulkanExampleBase +class PlumageRender : public VulkanExampleBase { public: bool wireframe = false; @@ -156,8 +156,8 @@ public: VulkanglTFModel skyboxModel; - VulkanExample(); - ~VulkanExample() + PlumageRender(); + ~PlumageRender() { // Clean up used Vulkan resources // Note : Inherited destructor cleans up resources stored in base class