[*] Использование представленного режима FIFO. Я мог бы задержать отдых и повторное использование Swapchain, обрабатывая wm_entersizemove /
Код: Выделить всё
WM_EXITSIZEMOVE
Я вызываю draw () на каждом сообщении wm_size . В Draw I Do:
Код: Выделить всё
VkSurfaceCapabilitiesKHR surface_capabilities;
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk->gpu, vk->surface, &surface_capabilities);
if (surface_capabilities.currentExtent.width != vk->swapchain_extent.width ||
surface_capabilities.currentExtent.height != vk->swapchain_extent.height) {
vkQueueWaitIdle(vk->graphics_queue);
vk->swapchain_extent = surface_capabilities.currentExtent;
vk_create_swapchain(vk);
vk_reset_resources(vk);
}
< /code>
Насколько я понимаю, если изображения, представленные в старом размере, все еще в очереди, они будут продолжать представлять DWM на последующих V-бланках. Например, если у меня было 2 кадра в очереди при 500 × 500, когда я воссоздал Swapchain (теперь 480 × 480) и 16,6 мс искали, эти два 500 × 500 кадров все еще будут показаны при ~ 33,2 мс и ~ 50 мс. Первая рама правильного размера (480 × 480) не появится до ~ 66,6 мс. < /P>
Это имеет смысл. Однако при сокращении окна я ожидаю, что DWM вытянет старую раму 500 × 500 до 480 × 480, а не показывает желоба. Поскольку я вижу белые желоба (hbrBackground
// requires VK_EXT_swapchain_maintenance1
VkSwapchainPresentScalingCreateInfoEXT scaling_info = {
.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT,
.pNext = NULL,
.scalingBehavior = VK_PRESENT_SCALING_STRETCH_BIT_EXT,
.presentGravityX = VK_PRESENT_GRAVITY_CENTERED_BIT_EXT,
.presentGravityY = VK_PRESENT_GRAVITY_CENTERED_BIT_EXT,
};
< /code>
Но это не имеет значения. Независимо от нынешнего режима гравитации и масштабирования, водосточный желоб всегда виден в нижней/справа от окна. Я проверил, как ведут себя другие приложения: Chrome не заботится, и вы можете видеть уродливые желоба при изменении размера. Но приложения с интенсивными графиками, такие как Blender, имеют очень чистый Resisize.
Как я могу избавиться от желоба?
Подробнее здесь: https://stackoverflow.com/questions/797 ... on-wm-size