1

我正在尝试在 DLL 中创建托管 DirectX 9 设备,然后使用该 DLL 将场景渲染到屏幕外表面。我知道如何进行屏幕外渲染,但我的问题是:

是否可以在 DLL 中创建 directx 设备?

微弱的尝试 #1 ( InvalidCallException):

Device device = new Device(0, DeviceType.Hardware, null, CreateFlags.SoftwareVertexProcessing, presentParams);

微弱的尝试 #2 ( InvalidCallException):

Device device = new Device(0, DeviceType.Hardware, new IntPtr(0), CreateFlags.SoftwareVertexProcessing, presentParams);

可用的设备构造函数重载有:

public Device(int, DeviceType, Control, CreateFlags, PresentParameters[]);
public Device(int, DeviceType, IntPtr, CreateFlags, PresentParameters[]);

任何帮助都可能让我开心!

4

1 回答 1

0

找到了答案。我创建了一个隐藏控件,适当设置它的宽度和高度,然后将其设置为目标。完美运行。对于那些以后可能会偶然发现的人,这里是代码:

// Create the hidden control
Control hiddenControl = new Control();
control.Width = width;
control.Height = height;
control.Visible = false;         // Just for good measure, it wouldn't be displayed anyways

// Present Parameters
PresentParamaters presentParams = new PresentParamaters();
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.Windowed = true;

// Create the device
Device device = new Device(0, DeviceType.Hardware, hiddenControl, CreateFlags.SoftwareVertexProcessing, presentParams);

假设就像我在渲染到纹理之前所说的那样,这就是全部。我不确定如果您要实际渲染到此控件会发生什么(如果有的话)。

于 2010-11-18T06:17:57.700 回答