我正在更新一个应用程序,在该应用程序中,在屏幕上显示刺激时间的测量需要最大的准确度.它目前用DirectDraw编写,很久以前就被放到了牧场,需要更新我们的图形库.
我们测量呈现时间的方式利用检测垂直空白周期的结束.具体而言,当需要翻转到主表面(或在交换链中呈现)的任何内容实际上被屏幕绘制时,我需要知道最大可能的准确度.检测扫描线可以增加该测量的确定性,但是我能够仅在检测到在翻转或存在之后立即结束垂直空白时段的情况下工作.
Direct 3D 9具有IDirect3DDevice9 :: GetRasterStatus方法,该方法返回包含InVBlank布尔值的D3DRASTER_STATUS结构,该结构描述设备是否处于垂直空白以及当前扫描线.DirectDraw具有类似的功能(IDirectDraw :: GetVerticalBlankStatus,IDirectDraw :: GetScanLine,它在Vertical Blank期间返回DDERR_VERTICALBLANKINPROGRESS,可用于检测VB).
但是我在Direct3D11中找不到任何类似的功能.有没有人知道Direct3D9和Direct3D11之间是否移动或删除了这个功能,如果是后者,为什么?