diff options
| author | ladevieq <qladevie@wanadev.fr> | 2021-01-19 09:05:02 +0100 |
|---|---|---|
| committer | ladevieq <qladevie@wanadev.fr> | 2021-01-19 09:05:02 +0100 |
| commit | aa96b2c7b6b5675871f8432dd71af6a6d79c65d2 (patch) | |
| tree | ab79e215ffdec623347d2fe13106826b32ebc93f | |
| parent | 7c0d53684c638af98bece65edc7e744cae80806c (diff) | |
Fix swapchain extent
| -rw-r--r-- | src/main.cpp | 19 | ||||
| -rw-r--r-- | src/utils.cpp | 2 | ||||
| -rw-r--r-- | src/vk-renderer.cpp | 14 |
3 files changed, 28 insertions, 7 deletions
diff --git a/src/main.cpp b/src/main.cpp index 56e8d08..b67d5f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,14 +42,15 @@ int main() { #endif // Image dimensions - // const float aspect_ratio = 16.0 / 9.0; - const float aspect_ratio = 1; - const uint32_t width = 400; + const float aspect_ratio = 16.0 / 9.0; + // const float aspect_ratio = 1; + const uint32_t width = 1920; const uint32_t height = width / aspect_ratio; window wnd { width , height }; auto inputs = create_inputs(width, height); + auto canRender = true; vkrenderer renderer { wnd, inputs }; while(wnd.isOpen) { @@ -58,9 +59,15 @@ int main() { for (auto event: wnd.events) { switch(event.type) { case EVENT_TYPES::RESIZE: { - renderer.recreate_swapchain(); renderer.mapped_data->width = event.width; renderer.mapped_data->height = event.height; + + if (event.width == 0 && event.height == 0) { + canRender = false; + } else { + canRender = true; + renderer.recreate_swapchain(); + } break; } case EVENT_TYPES::QUIT: { @@ -79,7 +86,9 @@ int main() { // See the documentation below for a longer explanation if(rdoc_api) rdoc_api->StartFrameCapture(NULL, NULL); - renderer.compute(); + if (canRender) { + renderer.compute(); + } // stop the capture if(rdoc_api) rdoc_api->EndFrameCapture(NULL, NULL); diff --git a/src/utils.cpp b/src/utils.cpp index 9fb5872..f0849b7 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -94,7 +94,7 @@ struct input_data create_inputs(uint32_t width, uint32_t height) { const float aspect_ratio = 1; const uint32_t samples_per_pixel = 1; - const uint32_t max_depth = 50; + const uint32_t max_depth = 2; const vec3 camera_position{ 13.0, 2.0, 3.0 }; const vec3 camera_target{ 0.0, 0.0, 0.0 }; diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp index e2e171e..d5b785f 100644 --- a/src/vk-renderer.cpp +++ b/src/vk-renderer.cpp @@ -293,6 +293,18 @@ void vkrenderer::create_swapchain() { VkSurfaceCapabilitiesKHR caps; VKRESULT(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, platform_surface, &caps)) + VkExtent2D wantedExtent = caps.currentExtent; + + if (wantedExtent.width < caps.minImageExtent.width) { + wantedExtent.width = caps.minImageExtent.width; + } else if (wantedExtent.height < caps.minImageExtent.height) { + wantedExtent.height = caps.minImageExtent.height; + } else if (wantedExtent.width > caps.maxImageExtent.width) { + wantedExtent.width = caps.maxImageExtent.width; + } else if (wantedExtent.height > caps.maxImageExtent.height) { + wantedExtent.height = caps.maxImageExtent.height; + } + uint32_t supported_formats_count = 0; VKRESULT(vkGetPhysicalDeviceSurfaceFormatsKHR(physical_device, platform_surface, &supported_formats_count, VK_NULL_HANDLE)) @@ -317,7 +329,7 @@ void vkrenderer::create_swapchain() { create_info.minImageCount = swapchain_images_count; create_info.imageFormat = surface_format.format; create_info.imageColorSpace = surface_format.colorSpace; - create_info.imageExtent = caps.currentExtent; + create_info.imageExtent = wantedExtent; create_info.imageArrayLayers = 1; create_info.imageUsage = VK_IMAGE_USAGE_STORAGE_BIT; create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; |
