2010-11-18 10 views
1

Ich versuche, ein Managed DirectX 9-Gerät in einer DLL zu erstellen und dann diese DLL zum Rendern von Szenen auf einer Offscreen-Oberfläche zu verwenden. Ich weiß, wie man das Offscreen-Rendering macht, aber meine Frage ist:DirectX 9 - Gerät erstellen und in DLL in Textur rendern?

Ist es möglich, ein DirectX-Gerät in einer DLL zu erstellen?

Feeble Versuch # 1 (InvalidCallException):

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

Feeble Versuch # 2 (InvalidCallException):

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

Vorrichtung Konstruktorüberladungen verfügbar sind:

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

Jede Hilfe könnte durchaus möglich sein mache meinen Tag!

+0

erinnere mich daran, wie wir normalerweise ein Gerät erstellen, wenn es nicht in einer DLL wäre. – BeemerGuy

+0

Anstatt "null" oder "new IntPtr (0)" zu übergeben, übergeben Sie ein "Control" -Objekt oder "IntPtr" -Handle an dieses Steuerelementobjekt, welches das 'Render-Fenster' ist. – tbridge

Antwort

0

Die Antwort gefunden. Ich habe ein verstecktes Steuerelement erstellt, dessen Breite und Höhe entsprechend festgelegt und es dann als Ziel festgelegt. Funktioniert perfekt. Für diejenigen, die später hier auf diese stolpern kann, ist der Code:

// 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); 

Das ist alles was man braucht, unter der Annahme, wie ich schon sagte, bevor Sie auf eine Textur rendern. Ich bin mir nicht sicher, was (wenn überhaupt) passieren würde, wenn Sie dieses Steuerelement tatsächlich rendern würden.