我想用SFML和OpenGL 3.3编写跨平台的3D应用程序(也许游戏,谁知道),主要目的是学习C ++。
SFML提供了很酷的事件模型,处理纹理,文本,输入等。我已经用立方体做了简单的演示(仍然采用旧的glBegin / glEnd方式,但我会在我做的时候修复它找到一种附加OpenGL扩展的方法)。
我得到的第一个问题是双缓冲。您必须知道,执行渲染的常规(和逻辑)方式使用两个缓冲区,即显示缓冲区和渲染缓冲区。在渲染缓冲区上执行渲染循环,当它结束时,结果将显示缓冲区(或者可能只有两个相同的缓冲区,每个循环只切换角色,不知道)。这可以防止闪烁和伪影。
麻烦在于,在任何OpenGL示例中,我都看到作者使用GLUT和glutSwapBuffers
之类的函数。如果我理解正确,双缓冲是特定于平台的(这对我来说很奇怪,因为我认为它必须在OpenGL部分完成)而像GLUT这样的东西只是隐藏了特定于平台的点。但我已经使用SFML进行上下文和OpenGL初始化。
是否有任何跨平台的方式来处理与SFML配对的OpenGL双缓冲?我没有在这个项目中使用SFML图形,但目标是RenderWindow。
答案 0 :(得分:2)
SFML可以处理双缓冲,但如果您不使用SFML图形库,则必须使用sf::Window
实例。
通过调用sf::Window::setActive
来设置窗口作为OpenGL渲染目标,使用OpenGL函数绘制内容,然后调用sf::Window::display
来交换后台缓冲区来处理双缓冲。更多信息可以在SFML API中找到(链接版本是v2.3.2)。