void Window::Test()
{
RECT rect = { 0, 0, 1200, 1200 };
DWORD style = WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | CS_OWNDC | WS_MAXIMIZEBOX;
DWORD exStyle = WS_EX_APPWINDOW | WS_EX_TOPMOST;
AdjustWindowRectExForDpi(&rect, style, false, exStyle, GetDpiForWindow(windowHandle));
SetWindowPos(windowHandle, HWND_TOP, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER);
}
< /code>
выполнение этого действительно изменяет размер окна, но как Accierenextimagekhr, так и PresentKhr return vk :: esuccess по -прежнему. Это приводит к неверной, но не воссозданной цепочке свопа, что приводит к сбою, когда я называю PresentKHR кадр после того, как окно изменяется. uint32_t swapChainImageIndex;
{
vk::Result acquireResult = device.acquireNextImageKHR(swapchain, UINT64_MAX, *imageAvailableSemaphores[currentFrameIndex], nullptr, &swapChainImageIndex);
if(acquireResult == vk::Result::eErrorOutOfDateKHR)
{
//Recreate swapchain here
// * DOES NOT GET HIT *
return;
}
else if(acquireResult != vk::Result::eSuccess && acquireResult != vk::Result::eSuboptimalKHR)
{
//Crash
// * DOES NOT GET HIT *
}
}
< /code>
Настоящий код: < /p>
//Below line crashes after window is resized
vk::Result presentResult = presentQueue.presentKHR(presentInfo);
if(presentResult == vk::Result::eErrorOutOfDateKHR || presentResult == vk::Result::eSuboptimalKHR)
{
//Recreate swapchain here
// * DOES NOT GET HIT *
}
else if(presentResult != vk::Result::eSuccess)
{
//Crash
// * DOES NOT GET HIT *
}
< /code>
У меня есть управляющий проект, который использует GLFW. Когда я изменяю размер своего окна в этом проекте, результат становится VK_ERROR_OUT_OF_DATE_KHR. Я могу установить ломтинг, которая отслеживает, если окно изменяется вручную, но я считаю, что это не должно потребоваться, поскольку контрольный проект не требует такой ловушки или обратного вызова.case WM_SIZE:
{
return 0;
}
case WM_SIZING:
{
return 0;
}
Это, похоже, ничего не влияет, и я все еще получаю такой же сбой.
Я использую свою собственную реализацию Win32 вместе с Vulkan. У меня есть следующая функция тестирования, которая изменяет размеры моего окна.[code]void Window::Test() { RECT rect = { 0, 0, 1200, 1200 }; DWORD style = WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | CS_OWNDC | WS_MAXIMIZEBOX; DWORD exStyle = WS_EX_APPWINDOW | WS_EX_TOPMOST; AdjustWindowRectExForDpi(&rect, style, false, exStyle, GetDpiForWindow(windowHandle));
SetWindowPos(windowHandle, HWND_TOP, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER); } < /code> выполнение этого действительно изменяет размер окна, но как Accierenextimagekhr, так и PresentKhr return vk :: esuccess по -прежнему. Это приводит к неверной, но не воссозданной цепочке свопа, что приводит к сбою, когда я называю PresentKHR кадр после того, как окно изменяется. uint32_t swapChainImageIndex; { vk::Result acquireResult = device.acquireNextImageKHR(swapchain, UINT64_MAX, *imageAvailableSemaphores[currentFrameIndex], nullptr, &swapChainImageIndex);
if(acquireResult == vk::Result::eErrorOutOfDateKHR) { //Recreate swapchain here // * DOES NOT GET HIT * return; } else if(acquireResult != vk::Result::eSuccess && acquireResult != vk::Result::eSuboptimalKHR) { //Crash // * DOES NOT GET HIT * } } < /code> Настоящий код: < /p> //Below line crashes after window is resized vk::Result presentResult = presentQueue.presentKHR(presentInfo); if(presentResult == vk::Result::eErrorOutOfDateKHR || presentResult == vk::Result::eSuboptimalKHR) { //Recreate swapchain here // * DOES NOT GET HIT * } else if(presentResult != vk::Result::eSuccess) { //Crash // * DOES NOT GET HIT * } < /code> У меня есть управляющий проект, который использует GLFW. Когда я изменяю размер своего окна в этом проекте, результат становится VK_ERROR_OUT_OF_DATE_KHR. Я могу установить ломтинг, которая отслеживает, если окно изменяется вручную, но я считаю, что это не должно потребоваться, поскольку контрольный проект не требует такой ловушки или обратного вызова.case WM_SIZE: { return 0; } case WM_SIZING: { return 0; } [/code] Это, похоже, ничего не влияет, и я все еще получаю такой же сбой.