У нас есть настольное приложение для Windows, написанное на C ++, в котором используется представление OpenGL.
На некоторых картах AMD, если вы откроете Catalyst Control Center и включите Triple Buffering и V-sync, это нарушит наше приложение: вообще ничего не рендерится, это просто серый экран (в некоторых других версиях драйверов вместо этого возникает сбой при создании контекста ). Выключение или тройная буферизация или же V-Sync восстанавливает его до нормального.
Мы используем wglSwapIntervalEXT
включить V-синхронизацию в нашем приложении. Думая, что это может конфликтовать, я удалил код для него; без изменений.
Это определенно ошибка драйвера или есть что-то другое, что мы должны сделать для обработки тройной буферизации?
Я столкнулся с той же самой проблемой в моем собственном приложении, и это было невыносимо разыскивать. Вот дополнительная информация, которую я могу предоставить, основываясь на минимальной настройке тестирования приложения, которую я создал, чтобы воспроизвести проблему:
1) Все ваши звонки, чтобы установить формат пикселя и создать GL RC, будут успешными. Однако GLDebugger покажет, что RC фактически не получает статические буферы.
2) Когда вы попытаетесь сделать RC текущим, он вернет false, и GetLastError () скажет, что есть недопустимый дескриптор.
3) Я могу только повторить эту проблему в MFC. Это то, что вы используете? Когда я создавал тестовое приложение с использованием прямого Win32 API, оно работало нормально. Здесь должно быть неясное взаимодействие …
4) Если я задержу создание RC до окончания OnCreate, то все будет хорошо.
Я боюсь, что мой ответ склоняется к «Driver Bug», но пункт 4 показывает обходной путь — вместо того, чтобы создавать окно GL в OnCreate, попробуйте вместо этого сделать его как единовременный в OnInitialUpdate — это пока работает в тесте для меня!
ОБНОВИТЬЯ связался с AMD по этому вопросу, и оказалось, что это результат того, что MFC изначально создал окно с нулевой шириной / высотой, а затем изменил размеры. Если в вашей функции PreCreate назначить ненулевые размеры, все работает.
Надеюсь, это будет хорошим ресурсом для всех, кто пытается выяснить, что происходит с этим!
Других решений пока нет …