首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WGL:没有双缓冲+多采样=失败?

WGL:没有双缓冲+多采样=失败?
EN

Stack Overflow用户
提问于 2009-10-18 00:40:01
回答 1查看 2K关注 0票数 5

我通常使用带有以下参数的wglChoosePixelFormatARB()创建像素格式(除其他外):

代码语言:javascript
复制
WGL_DOUBLE_BUFFER_ARB = GL_TRUE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4

即双缓冲和x4多采样。这个很好用。

但当我试图转换双重缓冲时:

代码语言:javascript
复制
WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4

wglChoosePixelFormatARB()的调用失败(或者更确切地说表示它没有创建任何内容)

当我有效地关闭多采样时:

代码语言:javascript
复制
WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 1

我又恢复正常了。

是否有一些固有的东西可以阻止非双缓冲像素格式与多采样一起工作?

我把双缓冲关闭的原因是为了实现无约束的帧速率。与双缓冲,我得到的帧速率只有60 FPS (这种笔记本液晶显示器工作在60赫兹)。但双缓冲关闭,我可以得到高达1500 FPS。有什么方法可以在双缓冲的情况下实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-18 08:24:49

理论上,在单一缓冲区模式下绘图意味着您正在直接修改显示到屏幕上的内容(也就是前面的缓冲区)。由于该内存已经具有特定的格式,因此您不能选择另一个内存。(我的意思是,理论上说,这是因为这个平台在实践中是很乐意的。例如,Aero不允许访问前端缓冲区)。

此外,在进行多采样时,将X采样/像素转换为1像素进行绘图的步骤是将后缓冲区复制到前面的缓冲区(即所谓的解决步骤)。在单一缓冲模式下,没有这样的步骤。

至于您的60集群锁定,您可能想看看WGL_EXT_swap_control。这里的问题是,当屏幕刷新数据时,通常不想更新屏幕上显示的内容;它会造成撕裂。因此,默认情况下,只在屏幕垂直同步时交换更新(也称为vsync),因此最终锁定屏幕的刷新速率。

如果您不介意显示不同帧的部分显示,您可以关闭它。

为了完整起见,有一种叫做三重缓冲的替代模式,它本质上在两个后缓冲区之间有GPU pong呈现,而前面的缓冲区则显示出来。当需要更改屏幕上显示的内容时,应该由gpu来选择最后完成的回缓冲区(vsync)。遗憾的是,我不知道有一个WGL方法要求三重缓冲。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1583611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档