了解IDirect3DDevice9 ::在阻止vsync时出现的行为

时间:2010-09-23 16:46:07

标签: windows graphics 3d directx doublebuffered

1 个答案:

答案 0 :(得分:3)

我强烈建议您查看Microsoft的GPUView。以下是介绍该工具的one of the authors webpage

  • D3D通常会缓冲一帧以上的渲染命令(包括礼物)。有关示例,请参见幻灯片25,我们可以在BumpEarth设备队列中看到~3帧被缓冲。这解释了3-4个呼叫立即返回(当前数据包是交叉数据包)。他们只是排队等候。
  • 除非您正在进行全屏渲染,否则操作系统需要进行一些合成(相同的幻灯片显示在vsync上发生的合成 - 蓝色垂直线)

一些后果:

  • 当您刚刚发送的渲染命令将在屏幕上更新时,现在返回将完全不保证。
  • 您的命令渲染帧所需的持续时间并不容易理解。我已经看到应用程序依赖于先前渲染的时序,平滑(以防止乒乓渲染更改)。

作为补充评论:

  • 我目睹了现实生活中工作负载中约1.5帧的命令缓冲。
  • 即使vsync发生并且视频卡更新前缓冲区,监视器仍然可以在内部进行一些缓冲(更多因为我们将CRT放在后面)。

我必须问,为什么你需要准确控制画面在画面上显示的时间?