在我将其简化为一个合理的例子之前,我希望有人可能会遇到这个问题并且可以解决这个问题.
我有一个基于32位C的应用程序,每个窗口使用一个OpenGL上下文,所有上下文和窗口都设置相同.请求的像素格式是32位颜色,alpha,深度缓冲,加速.在Windows 2000和XP上,一切都运行良好.
一切都在Vista和7上完美运行,直到创建了第33个窗口/上下文对.创建窗口没有错误,创建上下文没有错误,使上下文当前没有错误,绘图不产生错误,SwapBuffers不会产生错误.但是,OpenGL上下文无法产生任何输出,Aero的窗口是白色的,它们没有绘制经典模式,只是屏幕垃圾.杀死DWM并不能解决问题,尝试不同的像素格式(单缓冲区,差异深度等)和PFD_SUPPORT_COMPOSITION不能解决问题.这是在许多不同的机器上使用Vista/7,而不是XP.
我可以glReadPixels后面的缓冲区,它们是正确的像素.渲染到具有相同上下文的pbuffer工作正常,渲染到> 32 pbuffers是好的.
如果我在屏幕上下文/窗口中自由工作,那么非工作窗口将再次开始工作.这就好像Vista/7只是在屏幕上显示32个窗口后停止显示OpenGL渲染.
如果像素格式描述符包括PFD_SUPPORT_GDI,则一切正常,但它使用的软件渲染器是不可接受的.
我想知道这是Vista/7中的OS限制或驱动程序限制.感谢您的任何见解.