- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通常使用 wglChoosePixelFormatARB()
和这些参数(以及其他参数)创建像素格式:
WGL_DOUBLE_BUFFER_ARB = GL_TRUE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4
即双缓冲和 x4 多重采样。这工作得很好。
但是当我尝试关闭双缓冲时:
WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4
对 wglChoosePixelFormatARB()
的调用失败(或者更确切地说表明它没有创建任何内容)
当我有效地关闭多重采样时:
WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 1
我又工作得很好了。
是否有一些固有的因素阻止非双缓冲像素格式与多重采样一起使用?
我关闭双缓冲的原因是为了实现不受限制的帧速率。使用双缓冲时,我得到的帧速率最多仅为 60 FPS(这台笔记本电脑 LCD 工作在 60Hz)。但关闭双缓冲后,我可以获得高达 1500 FPS 的帧率。有没有办法通过双缓冲来实现这一点?
最佳答案
理论上,在单缓冲区模式下绘图意味着您直接修改屏幕上呈现的内容(也称为前缓冲区)。由于该内存已经采用特定格式,因此您无法选择其他格式。(我说的是理论上,因为平台在实践中会按照自己的意愿行事。例如,Aero 不允许访问前缓冲区)。
此外,在进行多重采样时,将 X 个样本/像素转换为 1 个像素进行绘制的步骤是在将后缓冲区复制到前缓冲区时(称为解析步骤)。在单缓冲模式下,没有这一步。
关于 60 fps 锁定,您可能需要查看 WGL_EXT_swap_control
。这里的问题是,您通常不希望在屏幕刷新数据时更新屏幕上显示的内容;它会产生撕裂。因此,默认情况下,Swap 仅在屏幕垂直同步(又名垂直同步)时更新,因此您最终会锁定屏幕的刷新率。
如果您不介意显示屏显示不同帧的部分内容,则可以将其关闭。
为了完整起见,有一种称为三重缓冲的替代模式,该模式本质上是在显示前缓冲区时在 2 个后缓冲区之间进行 GPU 乒乓渲染。当需要更改屏幕上显示的内容(垂直同步)时,由 GPU 来选择最后完成的后台缓冲区。遗憾的是,我不知道 WGL 方法可以请求三重缓冲。
关于opengl - WGL:没有双缓冲 + 多重采样 = 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583611/
我正在尝试通过 Windows API 创建 OpenGL 上下文。目前其他一切都很好,但我只是不知道如何链接正确的库以访问 wgl.. 函数。 我使用 MinGW 编译。和一个制作文件。我试图链接到
我在 Windows 下的 OpenGL 上下文中绘制文本,使用以下辅助函数,我从 http://nehe.gamedev.net/tutorial/bitmap_fonts/17002/ 获得了 i
我是 OpenGL/OpenCL 的初学者。我正在尝试执行 this 中的代码示例,但出现错误: Traceback (most recent call last): File "/home/anka
我通常使用 wglChoosePixelFormatARB() 和这些参数(以及其他参数)创建像素格式: WGL_DOUBLE_BUFFER_ARB = GL_TRUE WGL_SAMPLE_BUFF
我正在尝试使用 Windows 函数创建 OpenGL 上下文(现代版)。 基本上代码就是: 创建窗口类 注册类(class) 创建一个窗口 选择PIXELFORMATDESCRIPTOR并设置 创建
有一个有趣的浏览器框架叫做Awesomium ,它基本上是 Chromium 浏览器引擎的包装器。 我有兴趣使用它为桌面重新分发基于 WebGL 的游戏。然而 Awesomium 只支持使用发送到 C
我对 OpenGL 比较陌生,我想为我的 C++ Win32 项目添加抗锯齿功能。我目前在接收到 WM_CREATE 消息时在窗口过程中获取设备上下文,然后使用像素格式描述符创建 OpenGL 上下文
我正在创建一个游戏引擎,并从简单的 openGL 窗口创建开始。我正在使用 visual studio 2013,引擎正在构建为 dll。这是初始化 openGL 的 dll 中的代码: bool A
我试图让 GLFW3 在我的 Windows 8 计算机上使用 MinGW 运行,但收效甚微。我直接从 GLFW 文档复制了这个测试程序(进行了一些编辑以使其与共享库一起工作),我正在尝试运行它: #
所以我已经遵循了 OpenGL 渲染上下文的 Windows 创建中的所有基本说明 问题是当我尝试使用 opengl 创建一个核心配置文件上下文时,它失败了,当我运行 a.exe 文件时,我从 Win
我正在将我的简单 lwjgl3 游戏移植到 C++,并得到了错误:WGL:驱动程序似乎不支持 OpenGL。代码在 Java 中几乎相同,所以我想知道出了什么问题以及如何解决它: int main(i
我正在使用 Win32 API 处理 OpenGL。因此我正在使用 wgl (Wiggle)。一切安好。除非我想使用 FREEGLUT 库中的一些形状。例如,茶壶。我正在查看 freeglut 的源代
我是一名优秀的程序员,十分优秀!