我通常使用带有以下参数的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 (这种笔记本液晶显示器工作在60赫兹)。但双缓冲关闭,我可以得到高达1500 FPS。有什么方法可以在双缓冲的情况下实现这一点?
发布于 2009-10-18 08:24:49
理论上,在单一缓冲区模式下绘图意味着您正在直接修改显示到屏幕上的内容(也就是前面的缓冲区)。由于该内存已经具有特定的格式,因此您不能选择另一个内存。(我的意思是,理论上说,这是因为这个平台在实践中是很乐意的。例如,Aero不允许访问前端缓冲区)。
此外,在进行多采样时,将X采样/像素转换为1像素进行绘图的步骤是将后缓冲区复制到前面的缓冲区(即所谓的解决步骤)。在单一缓冲模式下,没有这样的步骤。
至于您的60集群锁定,您可能想看看WGL_EXT_swap_control。这里的问题是,当屏幕刷新数据时,通常不想更新屏幕上显示的内容;它会造成撕裂。因此,默认情况下,只在屏幕垂直同步时交换更新(也称为vsync),因此最终锁定屏幕的刷新速率。
如果您不介意显示不同帧的部分显示,您可以关闭它。
为了完整起见,有一种叫做三重缓冲的替代模式,它本质上在两个后缓冲区之间有GPU pong呈现,而前面的缓冲区则显示出来。当需要更改屏幕上显示的内容时,应该由gpu来选择最后完成的回缓冲区(vsync)。遗憾的是,我不知道有一个WGL方法要求三重缓冲。
https://stackoverflow.com/questions/1583611
复制相似问题