Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Directx DeviceLost 
:(
    Опции темы
ArsNov
Дата 20.11.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: 1
Всего: 1



 Я вытаскиваю из файлика нужный mesh. Работаю в fullscreen. ВСе рисуется, но при работе с Alt+tab просходит ошибка.. Когда вызываю свернутое окно: Devicelost exception. Почему? Что я не так сделал?

Вот мой код.
Код

Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D

Imports System.Math
Public Class Form1
    Private angleZ As Double
    Private device As Direct3D.Device
    Dim vertbuff As VertexBuffer
    Private mesh As Mesh
    Private lostdevice As Boolean
    Private meshmaterials As Material
    Private meshtextures(0) As Texture
    Dim present As PresentParameters

    Public Sub Initialize()
        present = New PresentParameters
        present.BackBufferCount = 1
        present.BackBufferFormat = Format.A8R8G8B8
        present.Windowed = False
        present.SwapEffect = SwapEffect.Discard
        present.EnableAutoDepthStencil = True
        present.AutoDepthStencilFormat = DepthFormat.D16
        present.BackBufferWidth = 1024
        present.BackBufferHeight = 768
        present.FullScreenRefreshRateInHz = 75
        present.PresentationInterval = PresentInterval.Default


        'present.Windowed = True 'we?ll draw on a window
        'present.SwapEffect = SwapEffect.Flip 'discuss later
        'present.EnableAutoDepthStencil = True
        'present.AutoDepthStencilFormat = DepthFormat.D16

        'определяем устройство
        device = New Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, Me, CreateFlags.SoftwareVertexProcessing, present)
        loadmesh()
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque, True)
        device.VertexFormat = CustomVertex.PositionNormalColored.Format
        device.RenderState.Lighting = True
        'device.RenderState.Ambient = Color.Red

        'определяем освещение
        device.Lights(0).Type = LightType.Directional
        device.Lights(0).Diffuse = System.Drawing.Color.Blue
        device.Lights(0).SpecularColor = Microsoft.DirectX.Direct3D.ColorValue.FromColor(Color.Red)
        device.Lights(0).Specular = Color.Red
        device.Lights(0).Direction = New Vector3(0, -1, -1)
        device.Lights(0).Commit()
        device.Lights(0).Enabled = True


    End Sub

    Private Sub loadmesh()
        Dim mtrl() As ExtendedMaterial
        mesh = mesh.FromFile("d:\test.x", MeshFlags.Managed Or MeshFlags.IbManaged, device, mtrl)
        Dim testmaterial As Material = New Material()
        testmaterial.Ambient = Color.White

        testmaterial.Diffuse = Color.Blue
        testmaterial.Specular = Color.Red
        testmaterial.SpecularColor = Microsoft.DirectX.Direct3D.ColorValue.FromColor(Color.Red)
        device.Material = testmaterial

    End Sub




    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Me.Height = 800 '
        Me.Width = 600
        Me.Text = "Первый опыт"
        Initialize()
        Me.ClientSize = New Size(800, 600)


    End Sub
    Private Sub setupCamera()
        'Работаем с камерой
        Dim camera_vector As Vector3
        camera_vector = New Vector3(angleZ / Math.PI * 2.0F, angleZ / Math.PI * 4.0F, angleZ / Math.PI * 6.0F)
        device.Transform.Projection = Matrix.PerspectiveFovLH(Math.PI / 4, Me.Width / Me.Height, 1.0F, 100.0F)
        device.Transform.View = Matrix.LookAtLH(New Vector3(0, 0, 100.0F), New Vector3(), New Vector3(1, 1, 0))
        device.RenderState.Lighting = True
        device.Transform.World = Matrix.RotationAxis(camera_vector, angleZ / Math.PI)


    End Sub

    Private Sub draw(ByVal yaw As Double, ByVal pitch As Double, ByVal roll As Double, ByVal x As Double, ByVal y As Double, ByVal z As Double)
        device.Transform.World = Matrix.RotationYawPitchRoll(yaw, pitch, roll) * Matrix.Translation(x, y, z)
        angleZ = angleZ + 0.01F
        device.RenderState.CullMode = Cull.None

        mesh.DrawSubset(0)
    End Sub

    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

        Dim result As ResultCode = device.CheckCooperativeLevel
        If (result = ResultCode.DeviceLost) Then
            Return
        End If
        If (result = ResultCode.DeviceNotReset) Then
            Try
                present = New PresentParameters
                present.BackBufferCount = 1
                present.BackBufferFormat = Format.A8R8G8B8
                present.Windowed = False
                present.SwapEffect = SwapEffect.Flip
                present.EnableAutoDepthStencil = True
                present.AutoDepthStencilFormat = DepthFormat.D16
                present.BackBufferWidth = 1024
                present.BackBufferHeight = 768
                present.FullScreenRefreshRateInHz = 75
                device.Reset(present)
                result = -1
            Catch ex As Exception
                System.Threading.Thread.Sleep(1000)
            End Try
        End If


        Try
            device.Clear(ClearFlags.Target Or ClearFlags.ZBuffer, Color.CornflowerBlue, 1.0F, 0)
            Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
            setupCamera()
            device.BeginScene() 'all drawings after this line
            draw(0.0F, 0.0F, 0.0F + angleZ, 0.0F, 0.0F, 0.0F)
            draw(0.0F, 0.0F, 0.0F - angleZ, 0.0F, 50.0F, 0.0F)
            device.EndScene() 'all drawings before this line
            device.Present()
            Me.Invalidate()
        Catch
        End Try


    End Sub

   

End Class


PM MAIL ICQ   Вверх
ArsNov
  Дата 21.11.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: 1
Всего: 1



Вот нашёл информацию по Devicelost. ссылка Но я не понимаю что у меня не так....?
Тут кто нибудь вообще программирует Directx... отзовитесь ???

Это сообщение отредактировал(а) ArsNov - 21.11.2007, 20:55
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.