您好,我最近编写了一个同步部分,严格要求等待垂直回扫。 所以我使用了Privileged指令来执行此操作:_inp(0x3DA)& 0x08的。 但是,此指令具有特权,并且需要安装port95NT.exe才能在我的旧XP计算机上正常工作。当现在涉及到Win7时,会出现运行时警告以阻止我执行,也无法在64位系统上安装port95NT.exe。 所以任何人都有其他想法在64位Win7上检测垂直回扫中新帧的开始?
答案 0 :(得分:3)
Microsoft设计了像DirectX这样的API,这样开发人员就不必混淆像这样的硬件级操作。现代Windows版本可能无法再直接访问该硬件端口。
如果您有可用的工具包,可以从DirectDraw API尝试WaitForVerticalBlank()
。如果您使用的是Direct3D,则可以D3DPRESENT_INTERVAL_ONE
与Present()
一起使用,强制更新等到垂直同步之后。
答案 1 :(得分:0)
首先,现代平板面板以这种方式工作。必须定期刷新每个像素。行/列选通和垂直刷新率。尽管CRTS没有实际的“消隐”,但是有一个垂直回扫,其中行/列值返回到原点。对于双(或三)缓冲系统,必须在此间隔期间交换缓冲区以避免撕裂帧。此外,所有专业视频应用必须帧同步,以提供平滑的帧切换,或与相机和其他工作室设备“枪锁”。