1

我有一个使用 Direct3D 呈现视口的应用程序,它是作为独立于主应用程序的 DLL 模块制作的,它在运行时链接到它。主应用程序是一个 C# 程序。

Direct3D 设备及其资源的创建和初始化在本地 DLL 端完成。主 C# 程序仅从该 DLL 请求一个窗口。现在,由于主 GUI 循环位于 C# 可执行文件中,因此无论何时关闭/销毁视口,它都必须调用 DLL 函数来请求释放相关的 Direct3D 设备/资源。

问题是在尝试释放 Direct3D 设备时,程序会出现紧急情况。它说与创建设备试图释放它的线程不同(我猜是主 C# 程序,因为它将消息发送到 DLL)。

有解决这个问题的方法吗?有什么想法吗?

我正在使用 Direct3D 9。

帮助表示赞赏。

4

1 回答 1

0

D3D 设备调用都与创建它们的线程具有线程关联性。

您必须将调用编组回主 D3D 线程,或者使用 D3DCREATE_MULTITHREADED 初始化设备,以便允许从多个线程使用它。

于 2011-01-13T16:19:19.903 回答