Menu Shaders

ConfiG, mat, rooot

Menu Shaders

Replaces the background of the main menu with a customizable shader.

This is a port of mat's Menu Shaders mod.

Usage

To change the shader, create a texture pack with a file called menu-shader.fsh.

For a few already made shaders, check out this ~~Twitter~~ X thread.

This mod also supports some Shadertoy shaders, to use them:

  1. Find a shader you want to use on Shadertoy
  2. Copy/paste the code on the right into your menu-shader.fsh
  3. If you see the default GD background and errors from Menu Shaders in the console, that likely means that the shader you want to use is incompatible.

Credits

  • mat - original mod for 2.1
  • rooot - some of the ports during 2.2

Advanced Usage

New shader locations

You can also replace shaders in cgytrus.menu-shaders/any-frag.glsl and any-vert.glsl for the fragment and vertex shaders respectively, where any can be replaced with either main, level-select, creator, level-browser, edit-level, play-level, search, garage, leaderboards, gauntlets, gauntlet or treasure-room to override the shader only for the respective menu.

Shadertoy compatibility is disabled in these shaders.

Sprites

You can use sprites from resources (including custom ones) by adding a comment starting with //@ followed by sprite names separated by commas.

Each sprite in the list will add a sampler2d uniform called sprite0, where 0 is the index of the sprite in the list.

Nodes

You can get information about nodes in the scene by adding a comment starting with //# followed by node IDs separated by commas.

Each node in the list will add a few uniforms, where 0 is the index of the sprite in the list:

  • vec2 node0Pos - node position in cocos points in world space
  • float node0Rot - node rotation in degrees in world space
  • vec2 node0Scale - node scale in world space
  • vec2 node0Size - node content size in cocos points in world space
  • bool node0Visible - node visibility (whether it's drawn or not)

v1.4.5

  • updated to 2.2081 (thanks rooot!!)

v1.4.4

  • fixed double shader time during layer transitions
  • force enable metering if it's off
    • fixes issue #25

v1.4.3

  • added ios support

v1.4.2

  • updated to 2.2074

v1.4.1

  • fixed crash in menus without a background that normally have one
  • potentially improved compatibility with other mods changing the main menu background

v1.4.0

  • made hiding corners, input backgrounds, etc. configurable
    • tho it Will Not look good unless you use happy textures or smth to change the colors i guess
  • added menu shaders to more layers
    • only ones that had node ids tho, sorry
  • updated mod description slightly

v1.3.0

  • improved logging
  • added built-in shadertoy compatibility
  • built-in fix for issue #5
  • now recommends texture loader
  • updated documentation (hoping to see shader devs make use of these features !!)

v1.2.1

  • updated to 2.206

v1.2.0

  • updated to 2.2 (rooot did a huge part in this thanks !!!)
  • added android support
  • probably some other fixes i forgot about

v1.1.0

  • fixed mac crash
  • added ability to add menu shaders to other menus
  • fixed compatibility issues with some shaders on amd gpus

v1.0.0

  • initial release
The recommended way to install mods is through the in-game mod loader . You will have to manually install the .geode files you get from this page.

Some mods also require other mods as dependencies ; you will need to find and install them yourself.

Site made by HJfod. Thank you to nekit for the domain!

Geode Team 2026