Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#/DirectX] Problème control DirectX

    19 avril 2011 à 11:39:40

    Salut à tous,

    J'essaye déséspérément de creer un control DirectX dans une windows Form mais lorsque j'essaie de créer le device l'application lance une exception qui ne renseigne en rien sur le problème de l'erreur.
    Avez vous une idée de pourquoi ca ne marche pas ?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.DirectX.Direct3D;
    using Microsoft.DirectX;
    
    namespace test
    {
        public partial class DirectXBase : UserControl
        {
            protected Device device = null;
            PresentParameters pp = new PresentParameters();
            public bool initFailure = true;
            private bool deviceLost = false;
            private bool rendering = false;
    
            public DirectXBase()
            {
                this.BackColor = Color.Black;
            }
    
            public Device currentDevice
            {
                get
                {
                    return device;
                }
            }
    
            public virtual void InitDevice()
            {
                pp.Windowed = true;
                pp.SwapEffect = SwapEffect.Discard;
                pp.EnableAutoDepthStencil = true;
                pp.AutoDepthStencilFormat = DepthFormat.D16;
                pp.DeviceWindowHandle = this.Handle;
                device = new Device(0, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, pp);
    
                device.DeviceReset += new EventHandler(this.OnDeviceReset);
                OnDeviceReset(device, null);
    
                initFailure = false;
            }
    
            public virtual void OnDeviceReset(object sender, EventArgs e)
            {
                device = sender as Device;
                //derived types can override this to add functionality
            }
    
    
            public void Render()
            {
                if (device == null) return;
                if (rendering) return;
    
                if (deviceLost) AttemptRecovery();
                if (deviceLost) return;
    
                rendering = true;
    
                try
                {
                    device.Present();
                }
                catch (DeviceLostException)
                {
                    deviceLost = true;
                }
                finally
                {
                    rendering = false;
                }
                this.Invalidate();
            }
    
            protected void AttemptRecovery()
            {
                if (device == null) return;
                try
                {
                    device.TestCooperativeLevel();
                }
                catch (DeviceLostException)
                {
                }
                catch (DeviceNotResetException)
                {
                    try
                    {
                        device.Reset(pp);
                        deviceLost = false;
                    }
                    catch (DeviceLostException)
                    {
    
                    }
                }
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
    
                if (device == null) return;
                this.Render();
            }
    
            private void OnResize(object sender, System.ComponentModel.CancelEventArgs e)
            {
                e.Cancel = true;
            }
    
            public Texture loadTexture(string fileName)
            {
                return TextureLoader.FromFile(device, fileName);
            }
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2011 à 13:23:06

      Arrête tout de suite ^^.

      Tu sembles utiliser un truc vieux comme les dinosaures, appelé "Managed DirectX". Cette technologie a été déclarée obsolète avant même que Microsoft annonce la maturité complète de Windows Forms (sous-entendu : Plus d'amélioration prévue sur Windows Forms).

      Soit tu utilises le nouveau produit phare de Microsoft concernant DirectX : XNA...Soit tu veux quand même garder l'aspect "je fais du DirectX en .NET" et tu utilise un truc encore maintenu : SlimDX.

      Edit : Dans un cas comme dans l'autre, intégrer un contrôle de rendu 3D hardware est tout à fait possible :D
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2011 à 13:28:58

        Le soucis c'est que je suis obligé d'utiliser directX et seulement ça ...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          19 avril 2011 à 13:45:09

          Essaie d'expliquer à celui qui veut que tu utilises ça pourquoi c'est une très mauvaise idée ^^
          • Partager sur Facebook
          • Partager sur Twitter
            19 avril 2011 à 14:05:36

            +1

            Citation : darksidious

            Le soucis c'est que je suis obligé d'utiliser directX et seulement ça ...


            Dans ce cas, utilise SlimDX. C'est un wrapper DirectX en .NET. Tu y retrouveras les mêmes fonctionnalités (et les même galères, sauf gestion mémoire vive centrale) que si tu faisais du DirectX en C++.
            • Partager sur Facebook
            • Partager sur Twitter

            [C#/DirectX] Problème control DirectX

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown