.NET und Direct3D



  • Irgendwie habe ich die Schnauze voll von der MFC..
    *g* 😉

    Ich will meine GUI für meinen Editor eigentlich lieber mit .NET machen. Das Rendern hingegen (auch die ganze Initialisation von Direct3D) möchte ich aber mit C++ machen. Kann man das einigermaßen gut verbinden? Oder wie kann ich in ein bestehendes C# .NET Projekt DirectX einbinden?



  • Ich habe mich jetzt entschieden alles komplett in C# zu schreiben.
    Ich habe es jetzt hinbekommen Direct3D zu initialisieren. In meinem Fenster habe ich eine Picture-Box erstellt, in das gerendert werden soll.
    Wenn ich das Programm starte, bleibt meine Picture-Box aber leer! Erst wenn ich die Größe des Fensters etwas verändere, wird etwas gerendert. Was ist das Problem? Woran liegt das?

    public Form1()
    		{
    			InitializeComponent();
    
    			renderer=new Renderer();
    			renderer.Init(pictureBox1);
    		}
    
    private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    		{
    			renderer.ClearScreen();
    		}
    

    Und jetzt die Renderer-Klasse:

    public void Init(System.Windows.Forms.Control control)
    		{
    			PresentParameters presentParams = new PresentParameters();
    
    			presentParams.Windowed = true;
    			presentParams.BackBufferCount = 1;
    			presentParams.SwapEffect = SwapEffect.Discard;
    			presentParams.EnableAutoDepthStencil = false;
    			//presentParams.PresentFlag = PresentFlag.None;
    
    			presentParams.BackBufferWidth  = control.Width;
    			presentParams.BackBufferHeight =control.Height;
    			presentParams.BackBufferFormat = Microsoft.DirectX.Direct3D.Format.Unknown;
    			presentParams.FullScreenRefreshRateInHz = 0;
    			presentParams.PresentationInterval = PresentInterval.Immediate;
    			presentParams.DeviceWindow = control;
    
    			device= new Device(0,DeviceType.Hardware, control, 
    				CreateFlags.HardwareVertexProcessing, presentParams);
    
    		}
    
    		public void ClearScreen()
    		{
    			device.Clear(ClearFlags.Target,System.Drawing.Color.Blue,1.0f,0);
    device.Present()
    		}
    

    Was mache ich denn falsch?


Anmelden zum Antworten