diff --git a/projects/bindless_textures/src/main.cpp b/projects/bindless_textures/src/main.cpp index 6aa0a9d6106dd06c08dd5219c9570430b49ce229..f8fa8db91fb9566771862b59ad9314c9fae2e288 100644 --- a/projects/bindless_textures/src/main.cpp +++ b/projects/bindless_textures/src/main.cpp @@ -7,10 +7,7 @@ #include <vkcv/shader/GLSLCompiler.hpp> int main(int argc, const char** argv) { - const char* applicationName = "First Mesh"; - - uint32_t windowWidth = 800; - uint32_t windowHeight = 600; + const char* applicationName = "Bindless Textures"; vkcv::Features features; features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); @@ -48,7 +45,7 @@ int main(int argc, const char** argv) { features ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth,windowHeight,false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 800, 600, true); vkcv::asset::Scene mesh; @@ -206,7 +203,7 @@ int main(int argc, const char** argv) { core.writeDescriptorSet(descriptorSet, setWrites); - vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight, 1, false).getHandle(); + vkcv::ImageHandle depthBuffer; const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); @@ -234,11 +231,14 @@ int main(int argc, const char** argv) { continue; } - if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); - - windowWidth = swapchainWidth; - windowHeight = swapchainHeight; + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + (swapchainHeight != core.getImageHeight(depthBuffer))) { + depthBuffer = core.createImage( + vk::Format::eD32Sfloat, + swapchainWidth, + swapchainHeight + ).getHandle(); } auto end = std::chrono::system_clock::now(); diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp index 3f4378a6a2187ba33b7965fd6d008577541f7351..c8da98abd87579c2b91b2422dda544dd257b03af 100644 --- a/projects/first_mesh/src/main.cpp +++ b/projects/first_mesh/src/main.cpp @@ -8,9 +8,6 @@ int main(int argc, const char** argv) { const char* applicationName = "First Mesh"; - uint32_t windowWidth = 800; - uint32_t windowHeight = 600; - vkcv::Core core = vkcv::Core::create( applicationName, VK_MAKE_VERSION(0, 0, 1), @@ -18,7 +15,7 @@ int main(int argc, const char** argv) { { VK_KHR_SWAPCHAIN_EXTENSION_NAME } ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 800, 600, true); vkcv::asset::Scene mesh; @@ -148,14 +145,7 @@ int main(int argc, const char** argv) { core.writeDescriptorSet(descriptorSet, setWrites); - auto swapchainExtent = core.getSwapchain(windowHandle).getExtent(); - - vkcv::ImageHandle depthBuffer = core.createImage( - vk::Format::eD32Sfloat, - swapchainExtent.width, - swapchainExtent.height, - 1, false - ).getHandle(); + vkcv::ImageHandle depthBuffer; const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); @@ -182,11 +172,14 @@ int main(int argc, const char** argv) { continue; } - if ((swapchainWidth != swapchainExtent.width) || ((swapchainHeight != swapchainExtent.height))) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); - - swapchainExtent.width = swapchainWidth; - swapchainExtent.height = swapchainHeight; + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + (swapchainHeight != core.getImageHeight(depthBuffer))) { + depthBuffer = core.createImage( + vk::Format::eD32Sfloat, + swapchainWidth, + swapchainHeight + ).getHandle(); } auto end = std::chrono::system_clock::now(); diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp index 3dd6fc40d516c6f1ae3358d60c02fc4ed219245a..3e424919d2289c45e129c6b476ff026455403982 100644 --- a/projects/first_scene/src/main.cpp +++ b/projects/first_scene/src/main.cpp @@ -20,7 +20,7 @@ int main(int argc, const char** argv) { {vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute}, { VK_KHR_SWAPCHAIN_EXTENSION_NAME } ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, true); vkcv::Window& window = core.getWindow(windowHandle); vkcv::camera::CameraManager cameraManager(window); @@ -92,13 +92,7 @@ int main(int argc, const char** argv) { return EXIT_FAILURE; } - auto swapchainExtent = core.getSwapchain(windowHandle).getExtent(); - - vkcv::ImageHandle depthBuffer = core.createImage( - vk::Format::eD32Sfloat, - swapchainExtent.width, - swapchainExtent.height - ).getHandle(); + vkcv::ImageHandle depthBuffer; const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); @@ -114,11 +108,14 @@ int main(int argc, const char** argv) { continue; } - if ((swapchainWidth != swapchainExtent.width) || ((swapchainHeight != swapchainExtent.height))) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); - - swapchainExtent.width = swapchainWidth; - swapchainExtent.height = swapchainHeight; + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + (swapchainHeight != core.getImageHeight(depthBuffer))) { + depthBuffer = core.createImage( + vk::Format::eD32Sfloat, + swapchainWidth, + swapchainHeight + ).getHandle(); } auto end = std::chrono::system_clock::now(); diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index b4ba9046e07ecd3534844b493642098aa5847307..3bdefe3ae55fc89879461ed37025f8fe00e39a8a 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -56,12 +56,12 @@ int main(int argc, const char** argv) { const vkcv::GraphicsPipelineConfig trianglePipelineDefinition { triangleShaderProgram, - swapchainExtent.width, - swapchainExtent.height, + UINT32_MAX, + UINT32_MAX, trianglePass, {}, {}, - false + true }; vkcv::GraphicsPipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition); diff --git a/projects/indirect_draw/src/main.cpp b/projects/indirect_draw/src/main.cpp index 9b062ab56245c44e5021f164b9e06fed8edd15c3..2a213a2ad7b8ecdaf4b4a51cf4327addc7a881a5 100644 --- a/projects/indirect_draw/src/main.cpp +++ b/projects/indirect_draw/src/main.cpp @@ -259,9 +259,6 @@ void compileMeshForIndirectDraw(vkcv::Core &core, int main(int argc, const char** argv) { const char* applicationName = "Indirect draw"; - uint32_t windowWidth = 800; - uint32_t windowHeight = 600; - vkcv::Features features; features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); features.requireFeature([](vk::PhysicalDeviceFeatures &features){ @@ -305,7 +302,7 @@ int main(int argc, const char** argv) { features ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName,windowWidth,windowHeight,false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName,800,600,true); vkcv::gui::GUI gui (core, windowHandle); @@ -526,7 +523,8 @@ int main(int argc, const char** argv) { cameraManager.getCamera(camIndex0).setPosition(glm::vec3(0, 0, -3)); cameraManager.getCamera(camIndex0).setNearFar(0.1f, 20.f); - vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight, 1, false).getHandle(); + vkcv::ImageHandle depthBuffer; + const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); auto start = std::chrono::system_clock::now(); @@ -552,11 +550,10 @@ int main(int argc, const char** argv) { continue; } - if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) { + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + (swapchainHeight != core.getImageHeight(depthBuffer))) { depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); - - windowWidth = swapchainWidth; - windowHeight = swapchainHeight; } auto end = std::chrono::system_clock::now(); diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp index 0a9914abf0a28f82eee06c5d2a67067faaff4109..afaec1a8ba5dded5f16bad65c68f25f442029091 100644 --- a/projects/mesh_shader/src/main.cpp +++ b/projects/mesh_shader/src/main.cpp @@ -77,9 +77,6 @@ CameraPlanes computeCameraPlanes(const vkcv::camera::Camera& camera) { int main(int argc, const char** argv) { const char* applicationName = "Mesh shader"; - - const int windowWidth = 1280; - const int windowHeight = 720; vkcv::Features features; features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); @@ -95,7 +92,7 @@ int main(int argc, const char** argv) { { vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute }, features ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 1280, 720, true); vkcv::Window &window = core.getWindow(windowHandle); vkcv::gui::GUI gui (core, windowHandle); @@ -202,17 +199,15 @@ int main(int argc, const char** argv) { vkcv::DescriptorSetLayoutHandle vertexShaderDescriptorSetLayout = core.createDescriptorSetLayout(bunnyShaderProgram.getReflectedDescriptors().at(0)); vkcv::DescriptorSetHandle vertexShaderDescriptorSet = core.createDescriptorSet(vertexShaderDescriptorSetLayout); - - auto swapchainExtent = core.getSwapchain(windowHandle).getExtent(); const vkcv::GraphicsPipelineConfig bunnyPipelineDefinition { bunnyShaderProgram, - swapchainExtent.width, - swapchainExtent.height, + UINT32_MAX, + UINT32_MAX, renderPass, { bunnyLayout }, { vertexShaderDescriptorSetLayout }, - false + true }; struct ObjectMatrices { @@ -257,12 +252,12 @@ int main(int argc, const char** argv) { const vkcv::GraphicsPipelineConfig meshShaderPipelineDefinition{ meshShaderProgram, - swapchainExtent.width, - swapchainExtent.height, + UINT32_MAX, + UINT32_MAX, renderPass, {meshShaderLayout}, {meshShaderDescriptorSetLayout}, - false + true }; vkcv::GraphicsPipelineHandle meshShaderPipeline = core.createGraphicsPipeline(meshShaderPipelineDefinition); @@ -289,12 +284,7 @@ int main(int argc, const char** argv) { core.writeDescriptorSet( meshShaderDescriptorSet, meshShaderWrites); - vkcv::ImageHandle depthBuffer = core.createImage( - vk::Format::eD32Sfloat, - swapchainExtent.width, - swapchainExtent.height, - 1, false - ).getHandle(); + vkcv::ImageHandle depthBuffer; auto start = std::chrono::system_clock::now(); @@ -321,6 +311,16 @@ int main(int argc, const char** argv) { continue; } + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + (swapchainHeight != core.getImageHeight(depthBuffer))) { + depthBuffer = core.createImage( + vk::Format::eD32Sfloat, + swapchainWidth, + swapchainHeight + ).getHandle(); + } + auto end = std::chrono::system_clock::now(); auto deltatime = std::chrono::duration_cast<std::chrono::microseconds>(end - start); start = end; diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp index db17621eb6ee46a2a4e6e0564323c59045915c57..f1490e6f035b1a378afcb59436814986b3aca51f 100644 --- a/projects/particle_simulation/src/main.cpp +++ b/projects/particle_simulation/src/main.cpp @@ -22,7 +22,7 @@ int main(int argc, const char **argv) { {vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute}, { VK_KHR_SWAPCHAIN_EXTENSION_NAME } ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, true); vkcv::Window& window = core.getWindow(windowHandle); vkcv::camera::CameraManager cameraManager(window); @@ -212,7 +212,7 @@ int main(int argc, const char **argv) { cameraManager.getCamera(camIndex1).setPosition(glm::vec3(0.0f, 0.0f, -2.0f)); cameraManager.getCamera(camIndex1).setCenter(glm::vec3(0.0f, 0.0f, 0.0f)); - auto swapchainExtent = core.getSwapchain(windowHandle).getExtent(); + const auto swapchainExtent = core.getSwapchain(windowHandle).getExtent(); vkcv::ImageHandle colorBuffer = core.createImage( colorFormat, @@ -223,16 +223,6 @@ int main(int argc, const char **argv) { vkcv::effects::BloomAndFlaresEffect bloomAndFlares (core); bloomAndFlares.setUpsamplingLimit(3); - - window.e_resize.add([&](int width, int height) { - swapchainExtent = core.getSwapchain(windowHandle).getExtent(); - colorBuffer = core.createImage( - colorFormat, - swapchainExtent.width, - swapchainExtent.height, - 1, false, true, true - ).getHandle(); - }); vkcv::ShaderProgram tonemappingShader; compiler.compile(vkcv::ShaderStage::COMPUTE, "shaders/tonemapping.comp", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) { @@ -255,6 +245,16 @@ int main(int argc, const char **argv) { if (!core.beginFrame(swapchainWidth, swapchainHeight, windowHandle)) { continue; } + + if ((core.getImageWidth(colorBuffer) != swapchainWidth) || + (core.getImageHeight(colorBuffer) != swapchainHeight)) { + colorBuffer = core.createImage( + colorFormat, + swapchainWidth, + swapchainHeight, + 1, false, true, true + ).getHandle(); + } color.fill(&colorData); position.fill(&pos); @@ -315,8 +315,8 @@ int main(int argc, const char **argv) { core.writeDescriptorSet(tonemappingDescriptor, tonemappingDescriptorWrites); uint32_t tonemappingDispatchCount[3]; - tonemappingDispatchCount[0] = std::ceil(swapchainExtent.width / 8.f); - tonemappingDispatchCount[1] = std::ceil(swapchainExtent.height / 8.f); + tonemappingDispatchCount[0] = std::ceil(swapchainWidth / 8.f); + tonemappingDispatchCount[1] = std::ceil(swapchainHeight / 8.f); tonemappingDispatchCount[2] = 1; core.recordComputeDispatchToCmdStream( diff --git a/projects/rtx_ambient_occlusion/src/main.cpp b/projects/rtx_ambient_occlusion/src/main.cpp index d4c8ec2cac8e26f70da346738da04de16a766a26..becd80c4e4478da38a8e3722cbf30d39fd159ca6 100644 --- a/projects/rtx_ambient_occlusion/src/main.cpp +++ b/projects/rtx_ambient_occlusion/src/main.cpp @@ -13,9 +13,6 @@ int main(int argc, const char** argv) { const char* applicationName = "RTX Ambient Occlusion"; - uint32_t windowWidth = 800; - uint32_t windowHeight = 600; - // prepare raytracing extensions. IMPORTANT: configure compiler to build in 64 bit mode vkcv::rtx::RTXExtensions rtxExtensions; std::vector<const char*> raytracingInstanceExtensions = rtxExtensions.getInstanceExtensions(); @@ -35,7 +32,7 @@ int main(int argc, const char** argv) { vkcv::rtx::ASManager asManager(&core); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 800, 600, true); vkcv::camera::CameraManager cameraManager(core.getWindow(windowHandle)); uint32_t camIndex = cameraManager.addCamera(vkcv::camera::ControllerType::TRACKBALL); @@ -91,7 +88,7 @@ int main(int argc, const char** argv) { vkcv::rtx::ShaderBindingTableRegions rtxRegions = rtxModule.createRegions(); - vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight).getHandle(); + vkcv::ImageHandle depthBuffer; const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); @@ -109,11 +106,14 @@ int main(int argc, const char** argv) { continue; } - if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); - - windowWidth = swapchainWidth; - windowHeight = swapchainHeight; + if ((!depthBuffer) || + (swapchainWidth != core.getImageWidth(depthBuffer)) || + ((swapchainHeight != core.getImageHeight(depthBuffer)))) { + depthBuffer = core.createImage( + vk::Format::eD32Sfloat, + swapchainWidth, + swapchainHeight + ).getHandle(); } auto end = std::chrono::system_clock::now(); diff --git a/projects/saf_r/src/main.cpp b/projects/saf_r/src/main.cpp index a188c33d63f8c5d190ee02ce4aaef5adc2a8b967..84087c1eabe8aa32e3ac3f9ebe9c7d9936f52d9e 100644 --- a/projects/saf_r/src/main.cpp +++ b/projects/saf_r/src/main.cpp @@ -39,7 +39,7 @@ int main(int argc, const char** argv) { { "VK_KHR_swapchain" } ); - vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, false); + vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, true); //configuring the compute Shader vkcv::PassConfig computePassDefinition({}); @@ -172,12 +172,12 @@ int main(int argc, const char** argv) { //create the render pipeline + compute pipeline const vkcv::GraphicsPipelineConfig safrPipelineDefinition{ safrShaderProgram, - (uint32_t)windowWidth, - (uint32_t)windowHeight, + UINT32_MAX, + UINT32_MAX, safrPass, {}, { descriptorSetLayout }, - false + true }; vkcv::GraphicsPipelineHandle safrPipeline = core.createGraphicsPipeline(safrPipelineDefinition); @@ -274,7 +274,7 @@ int main(int argc, const char** argv) { pushConstantsCompute.appendDrawcall(raytracingPushData); //dispatch compute shader - uint32_t computeDispatchCount[3] = {static_cast<uint32_t> (std::ceil( swapchainWidth/16.f)), + uint32_t computeDispatchCount[3] = {static_cast<uint32_t> (std::ceil(swapchainWidth/16.f)), static_cast<uint32_t> (std::ceil(swapchainHeight/16.f)), 1 }; // Anzahl workgroups core.recordComputeDispatchToCmdStream(cmdStream,