Изменение размера окна не вызывает VK_ERROR_OUT_OF_DATE_KHRC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Изменение размера окна не вызывает VK_ERROR_OUT_OF_DATE_KHR

Сообщение Anonymous »

Я использую свою собственную реализацию Win32 вместе с Vulkan. У меня есть следующая функция тестирования, которая изменяет размеры моего окна.

Код: Выделить всё

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;
}
Это, похоже, ничего не влияет, и я все еще получаю такой же сбой.

Подробнее здесь: https://stackoverflow.com/questions/796 ... f-date-khr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»