Skip to content

AtlasEngine: Text rendering differences between Direct2D and Direct3D #15359

Open
@lhecker

Description

@lhecker

The Direct3D based text renderer is the default, but the Direct2D based on is used when the device has a GPU without support for shader model 4 (usually GPUs below feature level 10.1), or no GPU at all (for instance when connecting to headless, GPU-less servers over RDP).

In that case the following differences occur, because the Direct2D text renderer is less feature-complete:

  • The margins around the viewport ("gutters") are drawn in the same background color as the nearest cell and not in the overall background color of the terminal. This is because Direct2D lacks support for D3D11_TEXTURE_ADDRESS_BORDER which we'd need when drawing the background bitmap.
  • Text on top of the cursor is not always visible / readable. Intersecting glyphs with the cursor rectangle was deemed too difficult and CPU intensive to implement for now. Direct2D doesn't expose the boundaries of each individual glyph in a glyph run after all.
  • Ligatures spanning cells with different foreground colors are drawn in the color of the first cell. Same as for the previous point, intersecting and splitting up glyphs is non-trivial with Direct2D and might hurt performance.
  • Box drawing glyphs are not clipped to their cells, and so they might overlap to produce unsightly results like this: comparison
    This has the same problem as cursors/ligatures.
  • Soft font support. This would be easy to add in a future version if need be.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-AtlasEngineArea-RenderingText rendering, emoji, complex glyph & font-fallback issuesIssue-BugIt either shouldn't be doing this or needs an investigation.Product-TerminalThe new Windows Terminal.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions