aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorladevieq <qladevie@wanadev.fr>2021-01-19 09:05:02 +0100
committerladevieq <qladevie@wanadev.fr>2021-01-19 09:05:02 +0100
commitaa96b2c7b6b5675871f8432dd71af6a6d79c65d2 (patch)
treeab79e215ffdec623347d2fe13106826b32ebc93f
parent7c0d53684c638af98bece65edc7e744cae80806c (diff)
Fix swapchain extent
-rw-r--r--src/main.cpp19
-rw-r--r--src/utils.cpp2
-rw-r--r--src/vk-renderer.cpp14
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;