Initialisation de direct3d : problème [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
20 novembre 2005
-
Messages postés
3
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
20 novembre 2005
-
Bonjour à tous. J'ai décidé de me lancer dans direct3D. J'utilise visual studio 2005. J'ai suivi un tutorial pour l'initialisation. J'ai essayé de compiler, et une fenêtre vide s'est ouverte pendant quelques secondes, puis un message d'erreur :

An unhandled exception of type 'Microsoft.DirectX.Direct3D.InvalidCallException' occurred in microsoft.directx.direct3d.dll
Additional information: Error in the application.

Voici le code source de ma form1 :

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace WindowsApplication1
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
public Device device = null; //Création et initialisation d'un nouveau device
public PresentParameters presentParams = new PresentParameters();

/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

public void InitialisationGraphisme() //Initialise le mode graphique
{
presentParams.Windowed = true; //pour que ça soit dans une fenêtre et non en plein écran
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
}

private void Rendu() //Créé une visualisation de la scène
{
device.Clear(ClearFlags.Target, System.Drawing.Color.Turquoise, 1.0f, 0); //Permet de rafraichir le backbuffer selon une couleur choisie
device.BeginScene();
device.Present();
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.Size = new System.Drawing.Size(300,300);
this.Text = "Form1";
}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Form1 frm = new Form1();
frm.InitialisationGraphisme();
frm.Show();
while (frm.Created)
{
frm.Rendu();
Application.DoEvents();
}
Application.Run(new Form1());
}
}
}

5 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Dans cet ordre :


<HR>

private void Rendu() //Créé une visualisation de la scène
{
device.Clear(ClearFlags.Target, System.Drawing.Color.Turquoise, 1.0f, 0);
device.BeginScene();
device.EndScene()
device.Present();
}


<HR>

Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
L'erreur vient peut etre pas de la, mais je comprends pas pourquoi tu fais Application.Run(new Form1());

A la limite, Application.Run(frm), mais la tu n'as meme pas besoins de le mettre.

Mx
Messages postés
3
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
20 novembre 2005

Ca ne règle pas le problème... Sinon j'ai remarqué que si j'enlevais Rendu() ca ne buggait pas (mais pas de rendu )... Donc ca vient sûrement de là...
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Il te manque pas un device.EndScene dans Rendu ?

Mx
Messages postés
3
Date d'inscription
mardi 9 août 2005
Statut
Membre
Dernière intervention
20 novembre 2005

Merci beaucoup ca marche!!!