Прежде чем я приведу это к разумному примеру, я надеялся, что кто-то мог столкнуться с этим раньше и может пролить свет на проблему.
У меня есть 32-битное приложение на основе Си, которое использует один контекст OpenGLдля каждого окна все контексты и окна устанавливаются одинаково.Требуемый формат пикселей: 32-битный цвет, альфа, буфер глубины, ускоренный.Все работает безупречно в Windows 2000 и XP.
Все работает безупречно в Vista и 7, пока не будет создана 33-я пара окно / контекст.Создание окна не имеет ошибок, создание контекста не имеет ошибок, создание текущего контекста не имеет ошибок, рисование не вызывает ошибок, SwapBuffers не генерирует ошибку.Тем не менее, контексты OpenGL не дают никакого вывода, с Aero окна белые, в классическом режиме они не рисуются и являются просто мусором экрана.Убийство DWM не решает проблему, пробуя разные форматы пикселей (одиночный буфер, различные глубины и т. Д.), А PFD_SUPPORT_COMPOSITION не решает проблему.Это на нескольких разных машинах с Vista / 7, а не с XP.
Я могу glReadPixels задний буфер, и они являются правильными пикселями.Рендеринг в pbuffer с тем же контекстом работает нормально, а рендеринг в> 32 pbuffers - в порядке.
Если я освобождаю рабочие контексты / окна на экране, нерабочие окна снова начинают работать.Это как если бы Vista / 7 просто перестала отображать рендеринг OpenGL после того, как на экране появилось 32 окна.
Если дескриптор формата пикселей включает в себя PFD_SUPPORT_GDI, то все в порядке, но он использует программный рендерер, что недопустимо.
Интересно, это ограничение ОС или драйвера в Vista / 7.Спасибо за понимание.