SFML和OpenGL 3.3:无GLUT的双缓冲
SFML & OpenGL 3.3: double buffering without GLUT
我想用SFML和OpenGL 3.3编写跨平台的3D应用程序(也许是游戏,谁知道呢),主要目的是学习C++。
SFML提供了很酷的事件模型,处理纹理、文本、输入等。我已经用cube做了简单的演示(仍然是旧的glBegin/glEnd方式,但我会在找到连接OpenGL扩展的方法时修复它)。
我遇到的第一个问题是双重抛光。您必须知道,执行渲染的常用(和逻辑)方法使用两个缓冲区,显示缓冲区和渲染缓冲区。在渲染缓冲区上执行渲染周期,当它结束时,结果将覆盖到显示缓冲区(或者可能每个周期有两个相同的缓冲区只是切换角色,不知道)。这可以防止闪烁和伪影。
问题是,在我看到的任何OpenGL示例中,作者都使用GLUT和glutSwapBuffers
等函数。如果我理解正确的话,双缓冲是特定于平台的(这对我来说很奇怪,因为我认为它必须在OpenGL部分上完成),而像GLUT这样的东西只是隐藏了特定平台的点。但我已经在使用SFML进行上下文和OpenGL初始化了。
有没有任何跨平台的方法来处理OpenGL与SFML的双缓冲?我在这个项目中没有使用SFML图形,但目标是RenderWindow。
SFML可以处理双缓冲,但如果不使用SFML图形库,则必须使用sf::Window
实例。
通过调用sf::Window::setActive
将窗口设置为OpenGL渲染目标,使用OpenGL函数绘制内容,然后调用sf::Window::display
交换后台缓冲区来处理双重缓冲。更多信息可以在SFML API(链接版本为v2.3.2)中找到
相关文章:
- 如何使用原子指针执行双缓冲
- 使用 GLUT 使用键停止动画?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 消费者和生产者问题的双重缓冲
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 我似乎无法修改帧缓冲
- 如何在C++中写入 1000 个文件时有效地缓冲
- OpenGL Glut显示功能在Mojave上显示黑屏
- GLUT 无法获得米利斯精度的时间
- 帧缓冲纹理变为白色(片段着色器不会影响它)
- 我是否使用双缓冲?
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 在macOS上编译GLEW和GLUT?
- OpenGL:使用实例化绘图与我正在绘制的帧缓冲进行绘制
- 如何强制文件描述符缓冲我的输出
- 在 CLion (MacOS) 中使用 OpenGL 和 GLUT 库时出现链接错误
- Qt双缓冲行为
- 如何在没有缓冲的情况下使用 parquet-cpp 写入面向流/行的数据?
- MySQL 事务和缓冲的请求列表
- SFML和OpenGL 3.3:无GLUT的双缓冲