PFND3DDDI_SETASYNCCALLBACKSCB回调函数 (d3dumddi.h)
pfnSetAsyncCallbacksCb 函数通知 Microsoft Direct3D 运行时,运行时是启动还是停止从工作线程接收对运行时回调函数的调用。
语法
PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;
HRESULT Pfnd3dddiSetasynccallbackscb(
HANDLE hDevice,
BOOL Enable
)
{...}
参数
hDevice
显示设备的句柄(图形上下文)。
Enable
一个布尔值,该值指定运行时是启动还是停止从工作线程接收对运行时回调函数的调用。 TRUE 指示运行时将开始从工作线程接收对其回调函数的调用;FALSE 指示运行时将停止从工作线程接收对其回调函数的调用。
返回值
pfnSetAsyncCallbacksCb 返回以下值之一:
返回代码 | 描述 |
---|---|
S_OK | Direct3D 运行时已成功收到通知。 |
E_INVALIDARG | 参数已验证并确定不正确。 |
此函数还可以返回其他 HRESULT 值。
言论
如果用户模式显示驱动程序实现其自己的多处理器优化(即驱动程序在该线程中创建工作线程和处理命令),驱动程序必须调用 pfnSetAsyncCallbacksCb,以通知 Direct3D 运行时运行时是启动还是停止从辅助线程接收对运行时回调函数的调用。 此外,此类驱动程序不得实现 lockAsync 、UnlockAsync,以及 重命名 函数。 这可确保运行时不会尝试使用自己的多处理器优化。
用户模式显示驱动程序只能在主应用程序线程(即调用驱动程序的线程)上调用 pfnSetAsyncCallbacksCb。 驱动程序的工作线程无法调用 pfnSetAsyncCallbacksCb。 在任何时间点,只有一个引用特定呈现设备的线程可以在任何运行时的回调函数中运行。
在用户模式显示驱动程序在主应用程序线程以外的线程上调用运行时的任何回调函数之前,驱动程序必须将 true true 传递给 Enable 参数,才能在调用 pfnSetAsyncCallbacksCb。 在用户模式显示驱动程序在主应用程序线程上调用运行时的任何回调函数之前,驱动程序必须将 FALSE 传递给 在调用 pfnSetAsyncCallbacksCb时启用 参数。
在每个呈现设备的 Flush 实现中,驱动程序调用 pfnSetAsyncCallbacksCb,并将 FALSE 传递给 Enable 参数。
当驱动程序在调用 pfnSetAsyncCallbacksCb时,TRUE 传递给 Enable 参数时,运行时将自身置于一种状态,即它不会立即响应其回调函数中的设备丢失情况。 相反,当运行时检测到某个设备处于此状态时在回调函数中丢失时,它会设置一个指示事件发生的位。 当驱动程序在调用 pfnSetAsyncCallbacksCb时,FALSE 传递给 Enable 参数时,运行时将检查位以确定设备是否丢失。 如果设置了位,运行时将执行其典型的设备丢失处理。 此时,驱动程序不再从运行时接收对其函数的大多数调用。
只有 DirectX 9 和 DirectX 9L 版本的运行时支持 pfnSetAsyncCallbacksCb。 当运行时调用用户模式显示驱动程序的 CreateDevice(D3D10) 函数时,D3DDDI_DEVICECALLBACKS 结构的 directX 10 及更高版本将 pfnSetAsyncCallbacksCb 成员设置为 NULL。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |