2014-10-15 3 views
1

Я случайно получаю эту ошибку (D2DERR_RECREATE_TARGET) много раз в час и после прочтения этой ошибки кажется, что я не могу этого избежать. Я использую SharpDX, который является «проектом с открытым исходным кодом, предоставляющим полный DirectX API под платформой .Net».Действительно ли ошибка D2DERR_RECREATE_TARGET подразумевает, что мне нужно отслеживать все, что создает моя цель рендеринга?

В соответствии с документацией Microsoft: «Direct2D сигнализирует потерянное устройство, возвращая код ошибки D2DERR_RECREATE_TARGET из метода EndDraw. Если вы получите этот код ошибки, вы должны повторно создать цель рендеринга и все зависящие от устройства ресурсы».

Означает ли это, что мне нужно отслеживать все зависящие от устройства ресурсы, которые создает моя цель рендеринга (Есть много!) И перестает использовать или я ошибаюсь? Или, может быть, кто-то здесь знает путь этой ошибки?

+2

Да, если вы хотите, чтобы ваше приложение правильно обрабатывало его. Вы не должны часто ошибаться в этой ошибке - обычно это происходит, когда драйвер обновляется или запускается сеанс удаленного рабочего стола, или если с вашим драйвером возникает проблема с сбоем. Один относительно простой способ справиться с этим - это перезагрузить приложение, предполагая, что у вас нет ничего, что невозможно восстановить с диска. – MooseBoys

ответ

4

Объекты, созданные целью рендеринга, которые не выполняются с помощью D2DERR_RECREATE_TARGET, больше не могут использоваться для рисования.

Итак: вам нужно либо отслеживать объекты, которые вам нужны, либо воссоздавать их, либо не использовать.

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

Иногда ошибка может быть такой же простой, как рисование вне границ растровых изображений на конкретной видеокарте.

Включение D2D и D3D отладочных слоев может помочь найти причину ошибки.