D3DDevice.Reset

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

D3DDevice.Reset

Сообщение Ktulhu » 01.11.2007 (Чт) 18:24

Меня интересует как правильно ресетить девайс после сворачивания/разворачивания полноэкранной проги, например. С какими параметрами его ресетить, какие стейты надо восстанавливать... в общем полный алгоритм слежения за потерей девайса и его правильное восстановление.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 01.11.2007 (Чт) 20:27

Добивался исключения ошибок в оконном режиме: потеря девайса, сворачивание/разворачивание окна. Это в цикле рендеринга:
Код: Выделить всё
Select Case D3DDevice.TestCooperativeLevel
          Case D3D_OK
                  D3DDevice.EndScene
                  D3DDevice.Present ByVal 0&, ByVal 0&, 0&, ByVal 0&
          Case D3DERR_DEVICENOTRESET
                  SetPerspective ' настраиваем перспективу
End Select


Обработка потери девайса:
Код: Выделить всё
Private Sub SetPerspective()
   Dim k As Single
   If Not D3DDevice Is Nothing Then
      If Me.WindowState = 1 Then Exit Sub
      D3DDevice.Reset D3DPp
      SetDefaultRenderParameters
      D3DDevice.GetViewport DefaultViewport
      k = Me.ScaleWidth / Me.ScaleHeight
      D3DXMatrixPerspectiveLH ProjectionMatrix, k, 1!, 1!, 10000!
      3DDevice.SetTransform D3DTS_PROJECTION, ProjectionMatrix
      SetupLight
      MoveCamera
   End If
End Sub
' настройка рендерстейтов
Private Sub SetDefaultRenderParameters()
   'D3DDevice.SetRenderState D3DRS_AMBIENT, &H202020
   D3DDevice.SetVertexShader D3DFVF_XYZ Or D3DFVF_NORMAL Or D3DFVF_TEX1
   D3DDevice.SetRenderState D3DRS_SPECULARENABLE, 1
   D3DDevice.SetRenderState D3DRS_ZENABLE, D3DZB_TRUE
   D3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
   D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
   D3DDevice.SetRenderState D3DRS_SHADEMODE, D3DSHADE_GOURAUD
   D3DDevice.SetRenderState D3DRS_DITHERENABLE, 0
   D3DDevice.SetRenderState D3DRS_COLORVERTEX, 1
   D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, 1
   D3DDevice.SetRenderState D3DRS_CLIPPING, 1
   D3DDevice.SetRenderState D3DRS_NORMALIZENORMALS, True
   D3DDevice.SetRenderState D3DRS_LASTPIXEL, 0&
End Sub


Но до путя не получилось, выскакивание ошибки непредсказуемо, может на первый раз сворачивания, может на десятый. Причем именно в откомпиленом продукте. Из под VB не наблюдалось. Пролечил подстановкой перед циклом рендеринга простой фразы
On Local Error Resume Next
Ошибка не выскакивает!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Сообщение Ktulhu » 01.11.2007 (Чт) 21:12

в строке D3Ddevice.Reset выкидывает automation error

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 01.11.2007 (Чт) 21:33

От меня никакой гарантии.
Попробуй и сюда втулить On Error и добиться восстановления. :(
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList