diff --git a/examples/variablerateshading/variablerateshading.cpp b/examples/variablerateshading/variablerateshading.cpp index 73e77b9d..6e745f1e 100644 --- a/examples/variablerateshading/variablerateshading.cpp +++ b/examples/variablerateshading/variablerateshading.cpp @@ -40,8 +40,26 @@ void VulkanExample::getEnabledFeatures() deviceCreatepNextChain = &enabledPhysicalDeviceShadingRateImageFeaturesNV; } +/* + If the window has been resized, we need to recreate the shading rate image +*/ +void VulkanExample::handleResize() +{ + // Delete allocated resources + vkDestroyImageView(device, shadingRateImage.view, nullptr); + vkDestroyImage(device, shadingRateImage.image, nullptr); + vkFreeMemory(device, shadingRateImage.memory, nullptr); + // Recreate image + prepareShadingRateImage(); +} + void VulkanExample::buildCommandBuffers() { + if (resized) + { + handleResize(); + } + VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo(); VkClearValue clearValues[2]; @@ -377,9 +395,8 @@ void VulkanExample::prepare() VulkanExampleBase::prepare(); loadAssets(); - vkCmdBindShadingRateImageNV = reinterpret_cast(vkGetDeviceProcAddr(device, "vkCmdBindShadingRateImageNV")); - // [POI] + vkCmdBindShadingRateImageNV = reinterpret_cast(vkGetDeviceProcAddr(device, "vkCmdBindShadingRateImageNV")); physicalDeviceShadingRateImagePropertiesNV.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV; VkPhysicalDeviceProperties2 deviceProperties2{}; deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; diff --git a/examples/variablerateshading/variablerateshading.h b/examples/variablerateshading/variablerateshading.h index 45588c31..8b7095f0 100644 --- a/examples/variablerateshading/variablerateshading.h +++ b/examples/variablerateshading/variablerateshading.h @@ -56,6 +56,7 @@ public: VulkanExample(); ~VulkanExample(); virtual void getEnabledFeatures(); + void handleResize(); void buildCommandBuffers(); void loadglTFFile(std::string filename); void loadAssets();