[PR #8565] Implement user-specified pixel shaders, redux #27236

Open
opened 2026-01-31 09:20:47 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/8565

State: closed
Merged: Yes


Co-authored-by: mrange marten_range@hotmail.com

I loved the pixel shaders in #7058, but that PR needed a bit of polish
to be ready for ingestion. This PR is almost exactly that PR, with
some small changes.

  • It adds a new pre-profile setting "experimental.pixelShaderPath",
    which lets the user set a pixel shader to use with the Terminal.
    • CHANGED FROM #7058: It does not add any built-in shaders.
    • CHANGED FROM #7058: it will override
      experimental.retroTerminalEffect
  • It adds a bunch of sample shaders in samples/shaders. Included:
    • A NOP shader as a base to build from.
    • An "invert" shader that inverts the colors, as a simple example
    • An "grayscale" shader that converts all colors to grayscale, as a
      simple example
    • An "raster bars" shader that draws some colored bars on the screen
      with a drop shadow, as a more involved example
    • The original retro terminal effects, as a more involved example
    • It also includes a broken shader, as an example of what heppens
      when the shader fails to compile
    • CHANGED FROM #7058: It does not add the "retroII" shader we were
      all worried about.
  • When a shader fails to be found or fails to compile, we'll display an
    error dialog to the user with a relevant error message.
    • CHANGED FROM #7058: Originally, #7058 would display "error bars"
      on the screen. I've removed that, and had the Terminal disable the
      shader entirely then.
  • Renames the toggleRetroEffect action to toggleShaderEffect.
    (toggleRetroEffect is now an alias to toggleShaderEffect). This
    action will turn the shader OR the retro effects on/off.

toggleShaderEffect works the way you'd expect it to, but the mental
math on how is a little weird. The logic is basically:

useShader = shaderEffectsEnabled ? 
                (pixelShaderProvided ? 
                    pixelShader : 
                    (retroEffectEnabled ? 
                        retroEffect : null
                    )
                ) : 
                null

and toggleShaderEffect toggles shaderEffectsEnabled.

  • If you've got both a shader and retro enabled, toggleShaderEffect
    will toggle between the shader on/off.
  • If you've got a shader and retro disabled, toggleShaderEffect will
    toggle between the shader on/off.

References #6191
References #7058

Closes #7013

Closes #3930 "Add setting to retro terminal shader to control blur
radius, color"
Closes #3929 "Add setting to retro terminal shader to enable drawing
scanlines"
- At this point, just roll your own version of the shader.

**Original Pull Request:** https://github.com/microsoft/terminal/pull/8565 **State:** closed **Merged:** Yes --- Co-authored-by: mrange <marten_range@hotmail.com> I loved the pixel shaders in #7058, but that PR needed a bit of polish to be ready for ingestion. This PR is almost _exactly_ that PR, with some small changes. * It adds a new pre-profile setting `"experimental.pixelShaderPath"`, which lets the user set a pixel shader to use with the Terminal. - CHANGED FROM #7058: It does _not_ add any built-in shaders. - CHANGED FROM #7058: it will _override_ `experimental.retroTerminalEffect` * It adds a bunch of sample shaders in `samples/shaders`. Included: - A NOP shader as a base to build from. - An "invert" shader that inverts the colors, as a simple example - An "grayscale" shader that converts all colors to grayscale, as a simple example - An "raster bars" shader that draws some colored bars on the screen with a drop shadow, as a more involved example - The original retro terminal effects, as a more involved example - It also includes a broken shader, as an example of what heppens when the shader fails to compile - CHANGED FROM #7058: It does _not_ add the "retroII" shader we were all worried about. * When a shader fails to be found or fails to compile, we'll display an error dialog to the user with a relevant error message. - CHANGED FROM #7058: Originally, #7058 would display "error bars" on the screen. I've removed that, and had the Terminal disable the shader entirely then. * Renames the `toggleRetroEffect` action to `toggleShaderEffect`. (`toggleRetroEffect` is now an alias to `toggleShaderEffect`). This action will turn the shader OR the retro effects on/off. `toggleShaderEffect` works the way you'd expect it to, but the mental math on _how_ is a little weird. The logic is basically: ``` useShader = shaderEffectsEnabled ? (pixelShaderProvided ? pixelShader : (retroEffectEnabled ? retroEffect : null ) ) : null ``` and `toggleShaderEffect` toggles `shaderEffectsEnabled`. * If you've got both a shader and retro enabled, `toggleShaderEffect` will toggle between the shader on/off. * If you've got a shader and retro disabled, `toggleShaderEffect` will toggle between the shader on/off. References #6191 References #7058 Closes #7013 Closes #3930 "Add setting to retro terminal shader to control blur radius, color" Closes #3929 "Add setting to retro terminal shader to enable drawing scanlines" - At this point, just roll your own version of the shader.
claunia added the pull-request label 2026-01-31 09:20:47 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#27236