В моем приложении я использую direct2d для записи в общую (d3d11/d3d10) текстуру. Это единственный тип цели рендеринга, который используется в моем приложении. Поскольку в direct2d устройства могут быть потеряны (D2DERR_RECREATE_RENDER_TARGET), существует множество кода для абстрагирования и/или воссоздания ресурсов, зависящих от устройств. Тем не менее, я еще не видел, чтобы эта ситуация действительно происходила, и мне любопытно, не трачу ли я усилия впустую. Может ли цель рендеринга действительно быть потеряна в этом сценарии, или я защищен, поскольку текстура создается через d3d11 (хотя и совместно с d3d10)? Если да, то знает ли кто-нибудь воспроизводимый, простой способ вызвать потерю цели рендеринга, чтобы я мог хотя бы протестировать код, обрабатывающий это условие?
Взаимодействие Direct2D Direct3d11 — может ли устройство быть потеряно?
Ответы (2)
Это не напрасные усилия. Многие сценарии могут привести к потере устройства. Простой способ вызвать это в целях тестирования — обновить графический драйвер. Ваше приложение должно изящно справиться с этим. Это также может произойти за кулисами, если ваш графический драйвер выйдет из строя или Центр обновления Windows установит новую версию в фоновом режиме. Бывают и другие случаи, но эти, наверное, самые распространенные.
Вы можете использовать диспетчер устройств для быстрого отката и обновления драйвера.
Цель рендеринга окна D2D всегда будет потеряна, когда другая программа использует любую версию D3D API для перехода в полноэкранный режим и обратно (эксклюзивный режим, а не новый оконный режим, поддерживаемый с D3D10/11). Я думаю, что в D3D11 вам нужно изменить разрешение, чтобы цель рендеринга D2D была потеряна.
Так что, если вы не получаете D2DERR_RECREATE_RENDER_TARGET HRESULT в этом случае при представлении вашей цели рендеринга текстуры, то, возможно, вам не нужно повторно создавать цель рендеринга, но я все равно обработаю D2DERR_RECREATE_RENDER_TARGET. Чтобы проверить это, вы можете просто заменить цель рендеринга текстуры на цель рендеринга окна во время разработки.