C# 如何在没有延迟的情况下在windows中重新定位图形?
我正在尝试为C# 如何在没有延迟的情况下在windows中重新定位图形?,c#,c++,winapi,windows-8,directx,C#,C++,Winapi,Windows 8,Directx,我正在尝试为Windows8编写自定义光标图形代码。我将把它用于一个应用程序,该应用程序使用一个或任意数量的Wiimotes将触摸输入发送到Windows,这意味着我需要能够显示多个光标。我不能使用内置的光标进行触摸,因为从远处观看时很难看到 目前,我正在为每个光标使用一个单独的透明窗口,在该窗口上我使用DirectX绘制光标图形,但是对于光标的实际重新定位我使用win32方法SendMessage和SetWindowPos将窗口移动到当前的光标位置。这将导致重新定位的延迟接近于零,但会占用不合
Windows8
编写自定义光标图形代码。我将把它用于一个应用程序,该应用程序使用一个或任意数量的Wiimotes
将触摸输入发送到Windows
,这意味着我需要能够显示多个光标。我不能使用内置的光标
进行触摸,因为从远处观看时很难看到
目前,我正在为每个光标使用一个单独的透明窗口,在该窗口上我使用DirectX绘制光标图形,但是对于光标的实际重新定位
我使用win32
方法SendMessage
和SetWindowPos
将窗口移动到当前的光标
位置。这将导致重新定位的延迟接近于零,但会占用不合理的处理时间。当同时移动多个光标时,有时接近30%
我最初尝试的是画一个覆盖整个屏幕的透明窗口。我尝试了WPF
窗口,在画布上重新定位形状,并直接绘制到桌面窗口管理器的D3D
DirectX
实例,并通过更改变换矩阵来重新定位。这些将导致一些非常恼人的毫秒延迟
如果使用D3D/DirectDraw,如何在屏幕上绘制一个低延迟、低CPU的光标。
双缓冲已知会导致输入滞后,三倍缓冲会导致更多。如果您将VSYNC考虑在内,那么该过程甚至会阻塞20毫秒
这意味着输入事件之间将有20毫秒的间隔
双/三重缓冲通常不是问题,因为VSYNC阻塞了渲染屏幕所需时间的2000%
因为通常渲染屏幕需要1-2毫秒,但等待VSYNC需要17-24毫秒
例如[c++]:
-看看。你能不能只用一个透明的窗口覆盖整个屏幕?是的,这就是我在“其他方法”中所做的,但我不知道如何在没有延迟的情况下重新定位图形(最好是抗锯齿和半透明的)。我使用的是D3D。从我看来,也许双缓冲是我的问题,而不是我的解决方案?引用第一个链接“更多的缓冲区可以平滑您的帧速率,但它们也会导致输入延迟(从用户点击一个键到看到结果之间的延迟)。”这正是我试图避免的(输入延迟)。@Simphax我误解了您的问题。我真的以为你说的是光标移动时的帧撕裂。无论如何,双缓冲确实会导致输入延迟,三倍缓冲会导致更多。@Simphax再次检查答案:)。当然!非常感谢。解决方案是将“PresentationInterval”设置为“D3DPRESENT\u INTERVAL\u IMMEDIATE”,这将禁用Vsync,从而禁用输入延迟@Simphax很高兴我能帮忙:)