Direct3D - Fehler -2005530516



  • hallo,

    ich habe eine directx anwendung in c# gemacht, die bisher auch wunderbar funktionierte.
    jetzt habe ich die 9.0c SDK 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.

    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

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



  • Könnte evtl. auch ein Konflikt der DX Bibliothek und dem managed-DX sein. Hast du das mit-geupdated?

    Bye, TGGC (Wähle deine Helden)



  • Also, ich hab folgende SDK installiert (sonst nichts):

    http://download.microsoft.com/download/a/6/1/a6153887-2fe7-4dab-88c4-4da642909b9e/directx_9c_Apr05sdk_redist.exe

    is so ein 160 MB Teil.

    Könnte es sein, dass ich irgendwas vergessen habe ??
    ich hab bis jetzt rumgegooglet, das problem scheinen richtig viele leute zu haben.
    ich hab auch ein paar sachen gefunden, die ich erfolglos ausprobiert habe.

    - refreshrate auf 0, wenn windowed,
    - backbufferformat an das des adapters angleichen,
    - den konstruktor mit verschiedenen parametern aufrufen



  • Zur Info: (falls jemand anders mal das Problem haben sollte)

    Ich habe meinen Quellcode nun mit Visual Studio 2003 compiliert - dann funktionierts !
    (..... und als Crosscheck noch mal mit VS2002 compiliert..... dann geht wieder voll die Exception ab !!)

    Warum ? das weiss wahrscheinlich nur MS allein....... oder auch nicht....


Anmelden zum Antworten