Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

28.05.2005, 16:44

Direct3D - Fehler -2005530516

hallo,

ich habe eine directx anwendung in c# gemacht, die bisher auch wunderbar funktionierte, die C++ codetags habe ich wegen der besseren lesbarkeit benutzt, es ist aber C#.
jetzt habe ich die 9.0c SDK installiert. (natürlich die 9.0b vorher deinstalliert)
Seither schmeisst

C-/C++-Quelltext

1
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)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//-----------------------------------------------------------------------------

// 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
DirectX9.0c SDK

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

is so ein 160 MB Teil.
VS.NET 2002


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


Könnte es sein, dass ich irgendwas vergessen habe ??
ich hab 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[/cpp]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.05.2005, 18:35

Ich denke mal, dass für dieses Problem eine Microsoft-DirectX-Newsgroup der passendere Ort ist. Dort sind die Entwickler von DirectX "persönlich" anwesend.