| Предыдущий | Следующий |
| D2DERR_OUTSTANDING_BITMAP_REFERENCES | D2DERR_INVALID_TARGET |
D2DERR_ORIGINAL_TARGET_NOT_BOUND
Как локализовать первичный отказ
Если получен D2DERR_ORIGINAL_TARGET_NOT_BOUND, непосредственно известно следующее: Операция не выполнена, поскольку исходный целевой объект сейчас не привязан как цель. Для Direct2D object/effect/render contract это достаточно конкретный сигнал, поэтому важно сохранить входы первого отказавшего вызова.
Данные первого неуспешного вызова
- Зафиксируйте точный Direct2D API, object generation, device context target, effect graph/property, numeric inputs и debug-layer output; для этого результата эти данные должны относиться к первому неуспешному вызову, а не к cleanup после него.
- Отдельно сохраните target identity до SetTarget и убедитесь, что операция требует именно original target. Это проверяет условие «Операция не выполнена, поскольку исходный целевой объект сейчас не привязан как цель» по фактическим параметрам, а не по имени константы.
- Сохраните технические маркеры Direct2D object/effect/render contract и один исправный запуск с теми же входными данными.
Проверка гипотезы
Проведите A/B-проверку: свести сценарий к одному объекту/графу и изменить только условие, названное конкретным результатом. Сравнивайте первую точку расхождения, а не только финальное сообщение приложения.
Практическое правило здесь — не превращать любой Direct2D HRESULT в универсальный device-recreate loop; изменение соседней подсистемы не считается подтверждением причины.
Ближайший по прежнему шаблону результат D2DERR_WRONG_STATE не следует считать эквивалентным: сравнивайте точное условие, указанное здесь, и первую различающуюся операцию.
Технические ссылки
- Microsoft: Direct2D error codes
- Microsoft: Direct2D devices and device contexts
- Microsoft: Direct2D custom effects
- Microsoft: Direct2D API overview
- Документация Direct2D
Нужно найти другой код? Найти другой код состояния или ошибки.