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.
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
Hallo nochmal,
hab was funzendes gefunden: http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut9.php
mfg.
markus111