C# - Fehler in Direct3D Device



  • Ich wollte die erste Direct3D Applikation zum laufen bringen, geht aber nicht. Habe in Visual Studio als Projekttype Windowsanwendung angegeben woraufhin der Formdesigner ein leeres Fenster in das Projekt eingebunden hat.

    Habe dann Micrsofot.DirectX und Microsoft.Direct3D als Verweise hinzugefügt.

    Folgender Code wird benutzt:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;
    
    namespace Test
    {
        public partial class Form1 : Form
        {
            PresentParameters pp;
            Device device;
    
            public Form1()
            {
                InitializeComponent();
                Init3D();
            }
    
            public void Init3D()
            {
                this.ClientSize = new Size(640, 480);
                this.Text = "Direct3D Test";
    
                pp = new PresentParameters();
                pp.Windowed = true;
                pp.SwapEffect = SwapEffect.Discard;
    
                device = new Device(Manager.Adapters.Default.Adapter, 
                    DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, pp);
            }
        }
    }
    

    Beim Ausführen unterbricht er bei new Device(...) mit der Exception
    Microsoft.Direct3D.InvalidCallException("Fehler in der Anwendung.")

    Woran scheitert es?

    mfg olli



  • ääähm?
    ich hab zwar keine ahnung, wie es in c# aussieht, hab es bisher immer in c++ geschrieben, aber ich bin mir zu 99.5% sicher, dass dieser PresentParameters objekt schon ein paar mehr member-variablen besitzt, als nur die zwei die du irgendwie initialisiert hast...

    wer soll sich denn um die ganzen backBuffer- und Zstencil-formate, auflösungen, present-intervalle, multisampling-typen, multisampling qualitäten und den ganzen restlichen zeug kümmern?

    Selbst wenn dieses objekt von anfang an nicht leer ist, und vom default-konstruktor alles richtig initialisiert wird, woher weisst du dann, dass es mit deinem swap-effekt zusammenpasst?? [ich seh da keinen einzigen kompatibilitätstest, du scheinst es einfach so nach lust und laune auf "discard" zu setzen 😕 ]

    Und überhaupt, wer garantiert dir denn, dass die karte hardware.vertexprocessing unterstützt... Bin mir da nicht sicher, ob es auf jedem graphicchip eines jeden laptops für büroarbeiten gibt... ⚠

    \edit:

    keine ahnung, ich bezweifle ehrlich gesagt irgendwie, dass es bei c# plötzlich so kinderleicht sein soll... Bei den programmen, die ich bisher geschrieben habe, war diese initialisierungfunktion so ziemlich das ätzendste, was es im gesammten code gab, und die war nicht 5 zeilen, sondern eher ~1500 zeilen lang... (okay, dialogsteuerung für den benutzer miteingerechnet...) 🙄



  • Doch doch, es ist so einfach:
    http://www.mycsharp.de/wbb2/thread.php?threadid=5919

    Ich habe mir MDXTutorial04 heruntergeladen und es lässt kompilieren und ausführen.
    Da kann man echt verzweifeln. Ich habe die Verweise aus dem Projekt entfernt und wieder hinzugefügt und es läuft, bin alle Dateien durchgegangen usw. mir fällt kein Unterschied zwischen mein eigens erstellten Projekt auf und dem in MDXTutorial04.zip.

    Ich arbeite noch nicht so lange mit Visual Studio, als das ich alles kontrollieren könnte.

    Wenn es aber jemanden interessiert:
    Windows2000 SP4
    Intel Pentium IV 2,80 MHz
    1024 MByte RAM
    910GL Express Chipset Family(= OnBoard Grafikkarte)

    Also, MDXTutorial04 läuft einwandfrei auch mit den PresentParameters, meins aber nicht.

    mfg olli



  • Wie siehts denn mit dem debugger aus? ist nähmlich immer die alte geschichte: hast du Direct3D in debug mode versetzt? Dann muss er doch was ganz konkretes meckern, wenn ihm was nicht passt... Wahrscheinlich hast du es schon gemacht... Aber man kann ja nachfragen, kostet ja nix 😉



  • Es lag tatsächlich an CreateFlags.HardwareVertexProcessing was eigentlich CreateFlags.SoftwareVertexProcessing sein sollte. Das Tutorial ist hier dran schuld. Im Tutorialtext ist die Rede von Hardware in MDTutorial04.zip Archiv mit Software.

    Uff, da sehe ich gerade, das meine Grafikkarte nicht einmal Hardware T&L unterstützt. Selbst die Shader laufen nur über die CPU. Oh man, und ich habe mich gewundert, warum manchmal meine Engine so lahm war.

    Zeit für eine neue Grafikkarte ^^

    mfg olli



  • mensch mensch mensch, hab ich dir doch gleich gesagt 😃

    Und überhaupt, wer garantiert dir denn, dass die karte hardware.vertexprocessing unterstützt...

    aja... was soll denn da sonst rauskommen, wenn du wie gesagt keinen einzigen test durchführst, ob die einstellungen mit deiner karte überhaupt kompatibel sind 😉


Anmelden zum Antworten