Laden...

Wie kann ich DirectX in meine Anwendung einbinden?

Erstellt von DSS vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.172 Views
D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 4 Jahren
Wie kann ich DirectX in meine Anwendung einbinden?

Versuche Anhand der Beispiele von http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut2.php das DirectX einzubinden. Bisher ohne Erfolg, hier der Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace TestDirectX1
{
    public partial class Form1 : Form
    {
        private Device device;

        public Form1()
        {
            InitializeComponent();
        }

        public void InitializeDevice()
        {
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;

            device = new Device(0, DeviceType.Reference, this, CreateFlags.SoftwareVertexProcessing, presentParams);
        }



        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 1.0f, 0);
            device.Present();
        }

    }
}

Im Program.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestDirectX1
{
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            using (Form1 our_directx_form = new Form1())
            {
                Application.Run(our_directx_form);
                our_directx_form.InitializeDevice();
            }
        }
    }
}

Die Applikation startet, aber die Software geht in eine Dauerschleife.
Wo ist der Fehler?

Hinweis von gfoidl vor 4 Jahren

Bitte Code-Tags verwenden.

4.931 Beiträge seit 2008
vor 4 Jahren

Die Zeile

our_dx_form.InitializeDevice();

muß (selbstverständlich) vor

Application.Run(our_directx_form);

Steht ja auch so im Code unten auf der Tutorial-Seite 😉

Besser wäre es aber wohl, wenn InitializeDevice() direkt im Konstruktor der Form aufgerufen würde.

PS: Und editiere deinen Beitrag und packe den Code in C#-Tags.

D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 4 Jahren

Sobald ich die Zeilen our_dx_form.InitializeDevice(); und Application.Run(our_directx_form); vertausche, dann zeigt es mir keine Form mehr an.

Muss mich zuerst mal an dieses Forum gewöhnen 😃

D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 4 Jahren

Nachdem ich mal das .NET-Framework 2.0 benutzte, scheint die Sache auf einmal zu funktionieren.

16.806 Beiträge seit 2008
vor 4 Jahren

D.h. Du hast vorher noch 1.1 verwendet, oder 3.x oder...?

D
DSS Themenstarter:in
11 Beiträge seit 2012
vor 4 Jahren

4.7.2 wird normalerweise verwendet.