我正在为一个使用 OpenGL 执行渲染的科学应用程序编写时间关键的代码。我正在控制的设备看起来像计算机显示器。我们的梦想是以 60 Hz 的频率刷新设备。
我尝试使用单缓冲区光栅模式,但我在使垂直同步工作时遇到问题。在双缓冲模式下它可以工作。
你可以垂直同步单个缓冲上下文吗?
作品
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
不起作用
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
编辑
在渲染循环结束时
glFlush();
glFinish();
swapBuffers();//GDI?
最佳答案
为了使缓冲区交换与屏幕刷新同步(垂直同步的作用),您实际上需要有多个缓冲区进行交换。因此,双缓冲是必要的。
一旦拥有双缓冲,启用垂直同步的方法取决于平台,尽管如 a.lasram 所示,WGL_EXT_swap_control 扩展在 Windows 上提供了此功能。
关于c++ - 是否可以垂直同步单个缓冲上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455598/