Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有延迟的情况下在windows中重新定位图形?_C#_C++_Winapi_Windows 8_Directx - Fatal编程技术网

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很高兴我能帮忙:)