LordTyrael
Messages postés2Date d'inscriptionmercredi 21 novembre 2007StatutMembreDernière intervention 3 avril 2011
-
3 avril 2011 à 11:16
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020
-
5 avril 2011 à 15:19
Bonjour à tous !
Je suis débutant dans les appli DirectX / VB.NET et j'ai un probleme sur un programme bateau qui affiche un écran vide (et bleu).
L'écran bleu se crée correctement mais quand j'appui sur Echap j'obtiens une exception sur la ligne device.Present()
A first chance exception of type 'Microsoft.DirectX.Direct3D.DeviceLostException' occurred in Microsoft.DirectX.Direct3D.dll
Voici la source de la seule classe du programme :
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Microsoft.DirectX.Direct3D.D3DX
Class GameClass
Private displaySettings As DisplayMode
Private deviceParameters As PresentParameters
Public device As Device
Public gameExit As Boolean
Public Sub Initialize(ByVal fullScreen As Boolean)
If fullScreen Then
displaySettings.Width = 800
displaySettings.Height = 600
displaySettings.Format = Format.X8R8G8B8
Else
displaySettings = Manager.Adapters.Default.CurrentDisplayMode
End If
deviceParameters = New PresentParameters()
deviceParameters.BackBufferWidth = displaySettings.Width
deviceParameters.BackBufferHeight = displaySettings.Height
deviceParameters.BackBufferFormat = displaySettings.Format
deviceParameters.SwapEffect = SwapEffect.Discard
deviceParameters.PresentationInterval = PresentInterval.Immediate
If fullScreen Then
deviceParameters.Windowed = False
Else
deviceParameters.Windowed = True
End If
loadContent()
End Sub
Public Sub loadContent()
device = New Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, Form1.Handle, CreateFlags.SoftwareVertexProcessing, deviceParameters)
End Sub
Public Sub Draw()
Do While Not gameExit
device.Clear(ClearFlags.Target, Color.CornFlowerBlue, 1, 0)
device.BeginScene()
device.EndScene()
device.Present() 'C'est ici que ca plante
Application.DoEvents()
Loop
thisExit()
End Sub
Public Sub thisExit()
displaySettings = Nothing
deviceParameters = Nothing
device.Dispose()
device = Nothing
Application.Exit()
End Sub
End Class
Voici la source de la seule form :
Public Class Form1
Dim game As New GameClass
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Escape Then 'Close the window when the user presses escape
Me.Close() 'yes, close, not dispose.
End If
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Show()
game.Initialize(True)
game.Draw() 'On est ici quand ca plante
End Sub
End Class
Auriez vous une idée de la raison de cette erreur ?
Merci beaucoup pour votre aide !
Salut,
Tu as un problème sur ta boucle. Tu dois en sortir avant de tester si le device est présent :
Do
If gameExit Then Exit Do
device.Clear(ClearFlags.Target, Color.CornflowerBlue, 1, 0)
device.BeginScene()
device.EndScene()
device.Present() 'C'est ici que ca plante
Application.DoEvents()
Loop
thisExit()
Sinon, j'ai lu quelque part que le manage framework de directX n'est plus mis à jour depuis la version 9, donc tu ne pourras pas échapper au C++ si tu veux utiliser les version 10 et 11 de directX.