У меня есть приложение OpenGL с win32 api без перенасыщения и т. Д. ... и я столкнулся с проблемой разрыва экрана в полноэкранном режиме. Я установил WS_POPUP
как стиль окна и разрешение моего монитора как размер окна. Я бегу на AMD Radeon HD 7770, и я вижу страшное разрывание! Когда я положил WS_POPUPWINDOW
стиль вместо WS_POPUP
, разрывание пропало, однако у меня есть нежелательная граница вокруг моей сцены. Еще одна вещь, которую я заметил, это факт, что разрывание исчезает, когда разрешение НЕ является родным. Итак, когда я передаю my_screen_resolution + 1
в качестве параметра размера, разрывание пропало.OpenGL разрывается с полноэкранным родным разрешением
RESx = 1920;
RESy = 1080;
hwnd = CreateWindowEx(NULL, NAME, NAME, WS_POPUP, 0, 0, RESx, RESy, NULL, NULL, hInstance, NULL);
SetWindowPos(hwnd, 0, -1, -1, RESx + 1, RESy + 1, 0); // With this function call, the tearing disappears!
Что я могу сделать, чтобы избавиться от разрывов без необходимости запускать на родном разрешении?
EDIT: (Подсказка: Это не V-Sync)
Я не думаю, что вы можете избежать vsync, чтобы избавиться от разрыва. С другой стороны, существует множество потенциальных решений для ограничения входного запаздывания. Например, запустите свою логику приложения со скоростью 300 кадров в секунду, но нарисуйте ее только на 60 кадров в секунду. Попробуйте Google для получения дополнительной информации (или, возможно, задайте другой вопрос здесь). – Jerem
Я обновляю вещи на 60FPS и максимально опираясь на максимум (я получаю около 600FPS). Я знаю, я могу избежать разрыва с последней функции («SetWindowPos (hwnd, 0, -1, -1, RESx + 1, RESy + 1, 0);') в моем сообщении делает это. Однако я считаю, что это не правильное решение. – ProXicT
«Подсказка: это не V-синхронизация» ... ну, спасибо за подсказку, но на самом деле это V-синхронизация. Вся цель V-синхронизации заключается в предотвращении разрыва. Это все, что он делает. У V-sync нет других целей. –