| Previous | Next |
| D2DERR_OUTSTANDING_BITMAP_REFERENCES | D2DERR_INVALID_TARGET |
D2DERR_ORIGINAL_TARGET_NOT_BOUND
D2DERR_ORIGINAL_TARGET_NOT_BOUND belongs to Direct2D targets, device capabilities, and intermediates. An operation requires the device context’s original target, but that target is no longer bound. The diagnostic goal for D2DERR_ORIGINAL_TARGET_NOT_BOUND is to identify the first rejecting object and transition, not merely the final high-level symptom.
Where the failure occurs
For D2DERR_ORIGINAL_TARGET_NOT_BOUND, a device context has target identity and is backed by a Direct3D device with format, feature, shader, and maximum-size limits. When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, temporarily changing targets, requesting unsupported capabilities, or propagating huge effect bounds are different problems. Record target history and capability queries before allocating or drawing in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path.
For D2DERR_ORIGINAL_TARGET_NOT_BOUND, inspect the following boundary: setTarget changes, BeginDraw/EndDraw scope, and effect or command-list rendering.
Telemetry with explanatory value
| Record | Why it matters here |
|---|---|
| Original and current target identities | For D2DERR_ORIGINAL_TARGET_NOT_BOUND, recording original and current target identities separates the Direct2D targets, device capabilities, and intermediates boundary from a later wrapper symptom. |
| SetTarget call history | In D2DERR_ORIGINAL_TARGET_NOT_BOUND diagnostics, recording SetTarget call history ties the HRESULT to the Direct2D targets, device capabilities, and intermediates boundary rather than to the final visible failure. |
| Draw scope and nested rendering operations | Comparing draw scope and nested rendering operations shows whether D2DERR_ORIGINAL_TARGET_NOT_BOUND follows input, object state, or environment. |
| Target options and device-context generation | Preserving target options and device-context generation provides the evidence needed to test this distinction: iNVALID_TARGET concerns whether an image can be used as a target; ORIGINAL_TARGET_NOT_BOUND concerns restoring the context’s expected original target. |
Smallest faithful reproducer
Use the original target and a small supported bitmap or effect region first in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, then change one target, capability, format, or spatial expansion at a time while logging device and context generations.
- For D2DERR_ORIGINAL_TARGET_NOT_BOUND, bind the original target before the operation.
- When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, balance temporary SetTarget changes with restoration.
- Test without command-list or offscreen rendering in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path.
- For D2DERR_ORIGINAL_TARGET_NOT_BOUND, assert current target at each helper boundary.
Separate object, input, and environment
| Test | Interpretation | Hold constant |
|---|---|---|
| Same environment, reduced input | If D2DERR_ORIGINAL_TARGET_NOT_BOUND disappears with a smaller faithful case, complexity within Direct2D targets, device capabilities, and intermediates is implicated. | For D2DERR_ORIGINAL_TARGET_NOT_BOUND, keep original and current target identities fixed while simplifying draw scope and nested rendering operations. |
| Same input, fresh object generation | If D2DERR_ORIGINAL_TARGET_NOT_BOUND changes after rebuilding state, examine ownership across the caller’s object graph, custom effect or renderer, Direct2D validation layer, backing device, and deferred draw boundary. | For D2DERR_ORIGINAL_TARGET_NOT_BOUND, place SetTarget call history on the timeline of the last successful transition. |
| Same operation on a controlled second path | If D2DERR_ORIGINAL_TARGET_NOT_BOUND follows one environment, the failure is not explained by source data alone. | For D2DERR_ORIGINAL_TARGET_NOT_BOUND, compare adapter and feature level, factory and device generations, target identity, debug-layer output, and thread ownership while preserving target options and device-context generation. |
Avoid broad resets
INVALID_TARGET concerns whether an image can be used as a target; ORIGINAL_TARGET_NOT_BOUND concerns restoring the context’s expected original target. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, do not respond with a universal render-target recreation loop unless the returned status specifically documents device-loss recovery; graph, property, numeric, lifetime, and print-state errors require correcting their contract.
Completion test
A correction for D2DERR_ORIGINAL_TARGET_NOT_BOUND should let the operation at the Direct2D targets, device capabilities, and intermediates boundary complete repeatedly under the original supported conditions. Repeat the control that begins with “Bind the original target before the operation” and confirm that the following lifecycle step also succeeds. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, keep the original failing sample and one deliberate negative case so fallback cannot be mistaken for repair.
Technical references
When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, these references define the public API family, object model, or error list used to interpret this status.
- Microsoft: Direct2D error codes.
- Microsoft: Direct2D devices and device contexts.
- Microsoft: Direct2D custom effects.
- Microsoft: Direct2D API overview.
Looking for a different code? Search another status or error code.