我有一个使用Direct3D渲染视口的应用程序,它是作为独立于主应用程序的DLL模块在运行时链接到它的。主应用程序是一个C#程序。
Direct3D设备及其资源的创建和初始化是在本地DLL端完成的。主C#程序只从这个动态链接库请求一个窗口。现在,由于主图形用户界面循环在C#可执行文件中,因此每当关闭/销毁视区时,它都必须调用DLL函数来请求释放相关的Direct3D设备/资源。
问题是,在尝试释放Direct3D设备时,程序会死机。它表明另一个线程(我猜是主C#程序,因为它正在向DLL发送消息)与创建试图释放它的设备的线程不同。
有没有解决这个问题的办法?有什么想法吗?
我使用的是Direct3D 9。
感谢你的帮助。
发布于 2011-01-14 00:19:20
所有D3D设备调用都与创建它们的线程具有线程亲和性。
您必须将调用编组回主D3D线程,或者使用D3DCREATE_MULTITHREADED初始化设备,以便允许从多个线程使用它。
https://stackoverflow.com/questions/4682219
复制相似问题