【问题标题】:Direct3D 9 Creation and Releasing Threads?Direct3D 9 创建和释放线程?
【发布时间】:2011-01-13 16:08:41
【问题描述】:

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

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

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

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

我正在使用 Direct3D 9。

帮助表示赞赏。

【问题讨论】:

    标签: directx direct3d9


    【解决方案1】:

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

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

    【讨论】:

    • 非常确定 D3D9 的标志不存在。
    • @DeadMG:确实如此 - 这是文档:msdn.microsoft.com/en-us/library/bb172527(VS.85).aspx(请注意页面底部的标题 - “D3D9.h”...)
    • @DeadMG:它确实对性能有副作用,但是有时不太理想......
    • 实际上,在使用 D3DCREATE_MULTITHREADED 标志创建设备后,我能够识别问题。在它崩溃之前没有关于问题的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多