我的游戏引擎采用一种简单的方法,通过以下方式使用单个OpenGL上下文支持多个窗口:
Activate OpenGL context on window 1
Draw scene in to window 1
Activate OpenGL context on window 2
Draw scene in to window 2
Activate OpenGL context on window 3
Draw scene in to window 3
For all Windows
SwapBuffers
这适用于具有相同刷新率的显示器(启用或关闭VSync),现在我正在试验不同刷新率的显示器。禁用V-Sync后,只要引擎可以产生足够的帧,较高刷新率监视器上的窗口就会因较慢刷新率监视器上的窗口而变慢,因为SwapBuffers不会阻塞。启用V-Sync后,SwapBuffers将同步到最慢的监视器,更快的监视器上的窗口将变慢。
如果有办法解决这个问题而不诉诸每个窗口的线程和OpenGL上下文?我正在思考一个非阻塞的SwapBuffers,并检查一个窗口是否正在通过交换,如果没有,那么交换它的缓冲区或什么?