为什么有多个后台缓冲区对性能更好?
Why having multiple back buffers is better for performance?
向我解释一些我还不太明白的事情。我读到在 DirectX 中有多个后台缓冲区可以提高性能。
它说当前台缓冲区被绘制到屏幕上时假设您已经将所有内容渲染到后台缓冲区并且后台缓冲区已准备就绪,但显然您必须等到前台缓冲区完全绘制以确保不会发生撕裂。因此,它没有等待,而是开始渲染到另一个后备缓冲区中。
在我看来,C++ 唯一会发生的事情就是您必须为更多的后台缓冲区分配更多的内存。
所以,再一次,
为什么有多个后台缓冲区对性能更好?
因此,如果您只有两个缓冲区,一个正在显示,一个正在被吸引。一旦 GPU 完成当前 back-buffer,它必须等到 back-buffer 变成 front-buffer 才能绘制下一帧。如果您不关心 vsync,这不是问题,因为您只是在 back-buffer 完成后进行交换,然后继续使用旧的 front-buffer 作为 back-buffer。
现在,想象一下我们只能以精确的 vsync 交换缓冲区,这样我们就不会在交换过程中撕裂。所以我们有一个 60 fps 的垂直同步,或 16 毫秒来绘制 back-buffer。还想象一下,根据一些因素,有时需要 14 毫秒,有时需要 19 毫秒来绘制一个框架。如果需要 19 毫秒,我们必须等待 13 毫秒,直到下一个 16 毫秒间隔出现,GPU 才能绘制任何东西。
有了三个缓冲区,GPU 可以立即开始绘制第三帧,即使我们错过了 time-slot,这意味着在我们明显放弃 frame-rate 之前我们还有 13 毫秒的时间来完成绘制。所以平均值 frame-rate 更高。
显然,N frame-buffers 的缺点是第 N 帧必须是 "ready to draw" N-1 帧才能显示当前帧,否则不会有任何好处。
因此,如果 frame-rate 相当慢,则实际出现在屏幕上的绘图将是 "N-1 frames old"。考虑一些非常慢的绘图,其中每一帧需要半秒。如果您在 FPS 游戏中开枪,使用 3 frame-buffer 系统,射击将在您开枪后 1.5 秒(三帧后)才会真正出现。幸运的是,FPS 游戏通常不会 运行 这么慢... ;)
[不过值得注意的是,"performance"往往是一个比"frames per second"更复杂的数字——例如,GPU使用率、功耗和GPU使用率都是需要考虑的重要因素]
向我解释一些我还不太明白的事情。我读到在 DirectX 中有多个后台缓冲区可以提高性能。
它说当前台缓冲区被绘制到屏幕上时假设您已经将所有内容渲染到后台缓冲区并且后台缓冲区已准备就绪,但显然您必须等到前台缓冲区完全绘制以确保不会发生撕裂。因此,它没有等待,而是开始渲染到另一个后备缓冲区中。
在我看来,C++ 唯一会发生的事情就是您必须为更多的后台缓冲区分配更多的内存。 所以,再一次,
为什么有多个后台缓冲区对性能更好?
因此,如果您只有两个缓冲区,一个正在显示,一个正在被吸引。一旦 GPU 完成当前 back-buffer,它必须等到 back-buffer 变成 front-buffer 才能绘制下一帧。如果您不关心 vsync,这不是问题,因为您只是在 back-buffer 完成后进行交换,然后继续使用旧的 front-buffer 作为 back-buffer。
现在,想象一下我们只能以精确的 vsync 交换缓冲区,这样我们就不会在交换过程中撕裂。所以我们有一个 60 fps 的垂直同步,或 16 毫秒来绘制 back-buffer。还想象一下,根据一些因素,有时需要 14 毫秒,有时需要 19 毫秒来绘制一个框架。如果需要 19 毫秒,我们必须等待 13 毫秒,直到下一个 16 毫秒间隔出现,GPU 才能绘制任何东西。
有了三个缓冲区,GPU 可以立即开始绘制第三帧,即使我们错过了 time-slot,这意味着在我们明显放弃 frame-rate 之前我们还有 13 毫秒的时间来完成绘制。所以平均值 frame-rate 更高。
显然,N frame-buffers 的缺点是第 N 帧必须是 "ready to draw" N-1 帧才能显示当前帧,否则不会有任何好处。
因此,如果 frame-rate 相当慢,则实际出现在屏幕上的绘图将是 "N-1 frames old"。考虑一些非常慢的绘图,其中每一帧需要半秒。如果您在 FPS 游戏中开枪,使用 3 frame-buffer 系统,射击将在您开枪后 1.5 秒(三帧后)才会真正出现。幸运的是,FPS 游戏通常不会 运行 这么慢... ;)
[不过值得注意的是,"performance"往往是一个比"frames per second"更复杂的数字——例如,GPU使用率、功耗和GPU使用率都是需要考虑的重要因素]