Direct3D9 Device Lost

Тема в разделе "WASM.DirectX", создана пользователем _DEN_, 21 сен 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Иногда во время рендеринга D3D9 ломается с ошибкой D3DERR_DEVICELOST. В DirectDraw могли лостаться сурфейсы, но там было просто - surface->IsLost() и восстановление если что. А с Direct3D9 все как-то сложнее. В интернетах на эту тему либо какой-то невнятный укуренный бред, либо многабукаф. Решается ли это как-то по-простому?
     
  2. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Все очень просто. Сам не позаботишся, никто за тебя не сделает. Даже D3DPOOL_MANAGED и D3DPOOL_DEFAULT не помогут на сто процентов.
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Вроде не сложнее.
    В начале функции рендера:
    Код (Text):
    1. hr = p_d3d_Device->TestCooperativeLevel();
    2. if(hr==D3DERR_DEVICELOST)
    3.   return;
    4. if(hr==D3DERR_DEVICENOTRESET)
    5. {
    6.     p_d3d_Device->Reset(&d3dpp);
    7. }
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Эээ, не понял? Так мне же нужно его назад вернуть если он lost. Что делать-то? Разелизить и заново создать чтоли?
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    *Зарелизить
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если потеряли устройство, то ничего не делаем, так как его кто-то отобрал. Если же устройство имеется, но не инициализировано, то делаем Reset.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Да, похоже все работает. Спасибо.