【发布时间】:2016-10-14 07:59:44
【问题描述】:
我想用 SFML 和 OpenGL 3.3 编写跨平台的 3D 应用程序(也许是游戏,谁知道),主要目的是学习 C++。
SFML 提供了很酷的事件模型,处理纹理、文本、输入等。我已经用立方体完成了简单的演示(仍然是旧的 glBegin/glEnd 方式,但当我找到附加 OpenGL 的方法时我会修复它扩展名)。
我遇到的第一个问题是双重缓冲。您必须知道,执行渲染的通常(和逻辑)方式使用两个缓冲区,显示缓冲区和渲染缓冲区。在渲染缓冲区上执行的渲染周期,当它结束时,结果处理显示缓冲区(或者可能有两个相同的缓冲区只是在每个周期切换角色,不知道)。这样可以防止闪烁和伪影。
问题在于,在我看到作者使用 GLUT 和 glutSwapBuffers 之类的函数的任何 OpenGL 示例中。如果我理解正确,双缓冲是特定于平台的(这对我来说很奇怪,因为我认为它必须在 OpenGL 部分完成),而像 GLUT 这样的东西只是隐藏了特定于平台的点。但我已经在使用 SFML 进行上下文和 OpenGL 初始化。
是否有任何跨平台的方法来处理与 SFML 配对的 OpenGL 双缓冲?我在这个项目中没有使用 SFML 图形,但目标是 RenderWindow。
【问题讨论】:
-
与问题没有直接关系,但你不需要"attach OpenGL extensions"来使用新的OpenGL(3及以上)。在 Windows 上,您需要 GLEW 或类似的库。
-
不要因为没有得到答案就delete and re-ask a question。另外,如果“我在这个项目中没有使用 SFML 图形。”,你为什么要问 SFML 的解决方案?
-
@NicolBolas 这有点违反直觉,但 SFML 图形标头不是利用 SFML 的图形功能所必需的,除非您想使用 SFML 的高级(主要)无 OpenGL 函数。 Window 库可能就是 OP 使用的全部。
-
2 @Nicol Bolas:问题没有答案并且完全改变了——感谢你们的 cmets,所以我创建了另一个问题。我的意思是我不需要 SFML 进行渲染,SFML 只提供上下文、事件等
标签: c++ opengl sfml doublebuffered