doom2d.org

Главная база плоских морпехов
It is currently 24 Apr 2025, 12:11

All times are UTC + 3 hours




Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: 05 Apr 2024, 17:06 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 7215
Location: Владивосток
Как нам уже известно, в SDL2 решены основные проблемы с потерей OpenGL-контекста при различных действиях с экраном. Однако этого всё ещё можно добиться одним из двух способов, при которых даже в Direct3D после 9.0 по-прежнему случается device loss. Это отключение / извлечение устройства (см. DXGI_ERROR_DEVICE_REMOVED) или остановка / зависание / ошибка / вылет драйвера, приводящая к его перезагрузке (см. DXGI_ERROR_DEVICE_RESET).

Проверить это и убедиться самому довольно просто. Особенно удобно это сделать в Windows на ноутбуке с дискретной видеокартой.
Без неё я действовать не советую, так как вырубится монитор, и придётся либо перезагружаться, либо нащупывать кнопку вслепую.

  1. Запускаем игру с дискретной видеокартой.
    Обычно это делается через контекстное меню, пункт "Запустить с графическим процессором" / "Run with graphics processor".

  2. Открываем "Диспетчер устройств", щёлкаем по этой видеокарте, нажимаем "Остановить".

  3. Игра вылетает, даже не объяснившись.

Эта проблема хоть и незначительна, но потенциально заметна, так как в природе существуют внешние USB-видеокарты.

Я не знаю, как такая ситуация обрабатывается в самом SDL2 для его GL-рендерера (который мы не используем). Там есть SDL_RENDER_DEVICE_RESET (он же SDL_EVENT_RENDER_DEVICE_RESET в SDL3), который в случае D3D-рендерера получается именно из DXGI_ERROR_DEVICE_REMOVED (а вот DXGI_ERROR_DEVICE_RESET, похоже, нигде не ловится). Однако для OpenGL данное событие упоминается в коде, насколько я могу видеть, лишь единожды - и да, это Android.

В нашем случае, возможно, надо как-нибудь ловить соответствующие уведомления окна (типа WM_DEVICECHANGE) и как-то на них реагировать. Ещё есть расширения GL_ARB_robustness / GL_ARB_robustness_isolation - может быть, их тоже имеет смысл применить ради большей надёжности.

Важно помнить: между "context loss" в OpenGL и "device loss" в Direct3D (до WDDM и DX10) существует заметная разница.
https://stackoverflow.com/questions/20724294/opengl-context-loss

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 06 Apr 2024, 00:39 
Offline
Приколист

Joined: 04 Feb 2010, 14:42
Posts: 992
Чёрный Думер wrote:
Как нам уже известно, в SDL2 и решены основные проблемы с потерей OpenGL-контекста при различных действиях с экраном.
В renders_updated с сдл1.2 - тоже решено (требовалось на маке).


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007