c++ - 是否可以垂直同步单个缓冲上下文?

标签 c++ winapi opengl

我正在为一个使用 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/

相关文章:

c++ - 在 C++ 中实现 C 标准库

c++ - 在我的文档中创建文件夹

c++ - 访问读取冲突错误 - C++ Obj Loader

c++ - 为什么remove_reference 对函数不起作用?

c++ - 如何解决第三方库中的警告 C4505?

C++ 登录任务计划错误 : No Mapping between account names and security ids was done

c++ - 无效的运行时参数 _itoa_s

c++ - Windows 7/64 中的串行异步 I/O

c++ - 如何使用半空间测试确定一个点是在线段的前面还是后面?

java - 如何使用处理在单独的线程中读取 OpenGL 像素?