[*] Использование представленного режима FIFO (я знаю, что могу использовать почтовый ящик, но подробнее об этом позже).
[*] В идеале я хочу, чтобы содержание окна обновлялось на каждом сообщении wm_size . Я знаю, что могу задержать Swapchain Recreation и повторное использование, обрабатывая 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
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>
… но это не имеет значения. Независимо от нынешнего режима тяжести и масштабирования, водосточный желоб всегда виден в нижней/справа от окна. Но приложения, интенсивные графики, такие как Blender, имеют очень чистый Resisize. < /P>
Таким образом, вопрос: какой возможный подход для избавления от желоба? Артефакт в двигателе композиции Window (DWM)
Подробнее здесь: https://stackoverflow.com/questions/797 ... indow-with