2353349fe5
This commit introduces "AtlasEngine", a new text renderer based on DxEngine. But unlike it, DirectWrite and Direct2D are only used to rasterize glyphs. Blending and placing these glyphs into the target view is being done using Direct3D and a simple HLSL shader. Since this new renderer more aggressively assumes that the text is monospace, it simplifies the implementation: The viewport is divided into cells, and its data is stored as a simple matrix. Modifications to this matrix involve only simple pointer arithmetic and is easy to understand. But just like with DxEngine however, DirectWrite related code remains extremely complex and hard to understand. Supported features: * Basic text rendering with grayscale AA * Foreground and background colors * Emojis, including zero width joiners * Underline, dotted underline, strikethrough * Custom font axes and features * Selections * All cursor styles * Full alpha support for all colors * _Should_ work with Windows 7 Unsupported features: * A more conservative GPU memory usage The backing texture atlas for glyphs is grow-only and will not shrink. After 256MB of memory is used up (~20k glyphs) text output will be broken until the renderer is restarted. * ClearType * Remaining gridlines (left, right, top, bottom, double underline) * Hyperlinks don't get full underlines if hovered in WT * Softfonts * Non-default line renditions Performance: * Runs at up to native display refresh rate Unfortunately the frame rate often drops below refresh rate, due us fighting over the buffer lock with other parts of the application. * CPU consumption is up to halved compared to DxEngine AtlasEngine is still highly unoptimized. Glyph hashing consumes up to a third of the current CPU time. * No regressions in WT performance VT parsing and related buffer management takes up most of the CPU time (~85%), due to which the AtlasEngine can't show any further improvements. * ~2x improvement in raw text throughput in OpenConsole compared to DxEngine running at 144 FPS * ≥10x improvement in colored VT output in WT/OpenConsole compared to DxEngine running at 144 FPS
93 lines
3.9 KiB
XML
93 lines
3.9 KiB
XML
<?xml version="1.0"?>
|
|
<featureStaging xmlns="http://microsoft.com/TilFeatureStaging-Schema.xsd">
|
|
<!-- See doc/feature_flags.md for more info. -->
|
|
<feature>
|
|
<name>Feature_ReceiveIncomingHandoff</name>
|
|
<description>OpenConsole should be able to receive incoming connections</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledBrandingTokens>
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysDisabledBrandingTokens>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_EditableUnfocusedAppearance</name>
|
|
<description>The unfocused appearance section in profiles in the SUI that allows users to create and edit unfocused appearances.</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledReleaseTokens/>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_AttemptHandoff</name>
|
|
<description>conhost should try to hand connections over to OpenConsole</description>
|
|
<stage>AlwaysDisabled</stage>
|
|
<alwaysEnabledBrandingTokens>
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysEnabledBrandingTokens>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_ConhostDxEngine</name>
|
|
<description>Controls whether conhost supports the DX engine and the UseDx registry key</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledBrandingTokens>
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysDisabledBrandingTokens>
|
|
</feature>
|
|
<feature>
|
|
<name>Feature_DxEngineShaderSupport</name>
|
|
<description>Controls whether the DX engine is built with shader support.</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledBrandingTokens>
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysDisabledBrandingTokens>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_UseNumpadEventsForClipboardInput</name>
|
|
<description>Controls whether the clipboard converter (and ConPTY InputStateMachine) uses Numpad events instead of UChar</description>
|
|
<stage>AlwaysDisabled</stage>
|
|
<alwaysEnabledBrandingTokens>
|
|
<!--
|
|
To reduce the risk of compatibility issues inside Windows, we're going to continue using the old
|
|
version of GetQuickCharWidth to determine whether a character should be synthesized into numpad
|
|
events.
|
|
-->
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysEnabledBrandingTokens>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_NotificationIcon</name>
|
|
<description>Controls whether the Notification Icon and related settings (aka. MinimizeToNotificationArea and AlwaysShowNotificationIcon) are enabled</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledReleaseTokens/>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_ShowProfileDefaultsInSettings</name>
|
|
<description>Whether to show the "defaults" page in the Terminal settings UI</description>
|
|
<id>10430</id>
|
|
<stage>AlwaysEnabled</stage>
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_PersistedWindowLayout</name>
|
|
<description>Whether to allow the user to enable persisted window layout saving and loading</description>
|
|
<id>766</id>
|
|
<stage>AlwaysEnabled</stage>
|
|
<!-- This feature will not ship to Stable until it is complete. -->
|
|
<alwaysDisabledReleaseTokens />
|
|
</feature>
|
|
|
|
<feature>
|
|
<name>Feature_AtlasEngine</name>
|
|
<description>If enabled, AtlasEngine and the experimental.useAtlasEngine setting are compiled into the project</description>
|
|
<stage>AlwaysEnabled</stage>
|
|
<alwaysDisabledBrandingTokens>
|
|
<brandingToken>Release</brandingToken>
|
|
<brandingToken>WindowsInbox</brandingToken>
|
|
</alwaysDisabledBrandingTokens>
|
|
</feature>
|
|
</featureStaging>
|