Win2d CanvasDevice.DeviceLost не помогает при повторном включении устройства с графическим процессором - PullRequest
0 голосов
/ 18 января 2020

Я использую Win2d в приложении UWP на Windows 10 и вручную обрабатываю потерянные устройства. Я подписываюсь на событие CanvasDevice.DeviceLost здесь: https://microsoft.github.io/Win2D/html/E_Microsoft_Graphics_Canvas_CanvasDevice_DeviceLost.htm

В моем конструкторе:

CanvasDevice = CanvasDevice.GetSharedDevice();
CanvasDevice.DeviceLost += CanvasDevice_DeviceLost;

Обработчик DeviceLost:

public async void CanvasDevice_DeviceLost(CanvasDevice sender, object args)
{
    CanvasDevice = CanvasDevice.GetSharedDevice();
    await LoadOriginalBitmap();
}

Чтобы проверить, правильно ли срабатывает DeviceLost, я воспользуюсь советом здесь: https://microsoft.github.io/Win2D/html/HandlingDeviceLost.htm

В основном: 1. Откройте Диспетчер устройств (в окне Проводника -> щелкните правой кнопкой мыши «This P *»). 1023 * '-> «Свойства» -> «Диспетчер устройств») 2. Разверните узел «Адаптеры дисплея» 3. Щелкните правой кнопкой мыши запись для вашего графического процессора и выберите «Отключить»

Это работает относительно хорошо, когда Я отключаю адаптер дисплея - запускается DeviceLost, воссоздаю устройство и перерисовываю графику. Я бы предположил, что на этом этапе используется программный рендеринг.

Проблема в том, что, если я снова включу адаптер дисплея, моя графика Win2d будет стерта, поскольку я предполагаю, что CanvasDevice переключается обратно на рендеринг с помощью графического процессора. НО, нет DeviceFound или аналогичного эквивалента для обработки этого (DeviceLost не срабатывает). Во что можно зацепиться?

...