Laden...

Direct3D - Fehler -2005530516 (D3DERR_INVALIDCALL)

Erstellt von ernsti vor 18 Jahren Letzter Beitrag vor 15 Jahren 6.405 Views
E
ernsti Themenstarter:in
38 Beiträge seit 2005
vor 18 Jahren
Direct3D - Fehler -2005530516 (D3DERR_INVALIDCALL)

hallo,

ich habe eine directx anwendung in c# gemacht, die bisher auch wunderbar funktionierte.
jetzt habe ich die 9.0c SDK (April 2005 - 152 MB) installiert. (natürlich die 9.0b vorher deinstalliert)
Seither schmeisst


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

immer folgende InvalidCallException (Ausgabe über MessageBox zeigt folgenden Text):

In der Anwendung ist ein Fehler aufgetreten:
-2005530516 (D3DERR_INVALIDCALL)
at Microsoft.DirectX.Direct3D.Device..ctor(Int32 adapter,DeviceType deviceType,Control renderWindow, CreateFlags
behaviorFlags, PresentParameters[] presentationParamteres)
at DeviceTutorial.CreateDevice.InitializeGraphics()

Nachdem ich nun natürlich einen Programmierfehler meinerseits suchte, aber bisher nicht fündig wurde, compilierte ich ein sample der directx sdk.
Auch im Sample fliegt die Exception.
Anschliessend habe ich den Grafikkartentreiber upgedated, erfolglos.

Hier der Code, der bei mir die Exception fliegen lässt: (Sample aus der SDK)


//----------------------------------------------------------------------------- 
// File: CreateDevice.cs 
// 
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all 
//       we are doing is creating a Direct3D device and using it to clear the 
//       window. 
// 
// Copyright (c) Microsoft Corporation. All rights reserved. 
//----------------------------------------------------------------------------- 
using System; 
using System.Drawing; 
using System.Windows.Forms; 
using Microsoft.DirectX; 
using Microsoft.DirectX.Direct3D; 

namespace DeviceTutorial 
{ 
    public class CreateDevice : Form 
    { 
        // Our global variables for this project 
        Device device = null; // Our rendering device 

        public CreateDevice() 
        { 
            // Set the initial size of our form 
            this.ClientSize = new System.Drawing.Size(400,300); 
            // And it's caption 
            this.Text = "D3D Tutorial 01: CreateDevice"; 
        } 
        
        public bool InitializeGraphics() 
        { 
            try 
            { 
                // Now let's setup our D3D stuff 
                PresentParameters presentParams = new PresentParameters(); 
                presentParams.Windowed=true; 
                presentParams.SwapEffect = SwapEffect.Discard; 
                
                device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); 
                return true; 
            } 
            catch (DirectXException e) 
            { 
                MessageBox.Show(e.ToString()); 
                return false; 
            } 
        } 
        private void Render() 
        { 
            if (device == null) 
                return; 

            //Clear the backbuffer to a blue color 
            device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0); 
            //Begin the scene 
            device.BeginScene(); 
            
            // Rendering of scene objects can happen here 
    
            //End the scene 
            device.EndScene(); 
            device.Present(); 
        } 
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) 
        { 
            this.Render(); // Render on painting 
        } 
        protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) 
        { 
            if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape) 
                this.Close(); // Esc was pressed 
        } 

        /// <summary> 
        /// The main entry point for the application. 
        /// </summary> 
        static void Main() 
        { 

            using (CreateDevice frm = new CreateDevice()) 
            { 
                if (!frm.InitializeGraphics()) // Initialize Direct3D 
                { 
                    MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit."); 
                    return; 
                } 
                frm.Show(); 

                // While the form is still valid, render and process messages 
                while(frm.Created) 
                { 
                    frm.Render(); 
                    Application.DoEvents(); 
                } 
            } 
        } 
    } 
}  

Testmässig hab ich dann nochmal die 9.0b SDK draufgespielt, und alles hat wunderbar funktioniert.
Allerdings benötige ich einige Sachen der 9.0c - SDK.

Kann mir bitte jemand sagen, was ich machen muss, damit das zeugs auch mit der 9.0c sdk läuft.
Habe ich was übersehen, was vergessen zu installieren ?

Im DXDiag funktioniert auch alles, kann es am System liegen ?????
Bisher wurde ich bei google diesbezüglich auch nicht schlau......

system:

athlon 2000 xp+
Asus Geforce4 128MB
DirectX9.0c
VS.NET 2002
.NET 1.1

Kann mir jemand sagen, was ich machen muss, damit das ding wieder funktioniert.

479 Beiträge seit 2008
vor 15 Jahren

Hallo ernsti,

es ist zwar 3 Jahre her, aber ich hab ein bisl was herausgefunden:
wenn du

device = new Device(0, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, presentParams);

benutzt, ist die InvalidCallException weg, dafür kommt aber eine andere Exception:

---------------------------
Fehler bei 3D-Device Erstellung
---------------------------
Es ist ein schwerer Fehler aufgetreten:
Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

ExceptionTyp:System.AccessViolationException

Quelle:
Microsoft.DirectX.Direct3D
   bei Microsoft.DirectX.Direct3D.Device.DrawRectanglePatch(Int32 handle, Plane numSegs, RectanglePatchInformation* rectPatchInformation)

   bei Microsoft.DirectX.Direct3D.Device.DrawRectanglePatch(Int32 handle, Plane numSegs)

   bei _3DApp.FormMain..ctor() in C:\Users\Markus\Documents\Visual Studio 2008\Projects\3DApp\FormMain.cs:Zeile 29.
Void DrawRectanglePatch(Int32, Microsoft.DirectX.Plane, Microsoft.DirectX.Direct3D.RectanglePatchInformation*)

Hilfelink: 
---------------------------
OK   
---------------------------

Vielleicht hat jetzt noch jemand eine Idee...

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)
479 Beiträge seit 2008
vor 15 Jahren

Hallo nochmal,

hab was funzendes gefunden: http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut9.php

mfg.
markus111

[Follow me on Twitter](http://twitter.com/blendingsky)