# Post shader full-screen user GLSL over a pure-2D scene. ```{raw} html ▶ Run in browser ``` **Tags:** `2d` `post-process` `shader` `glsl` `environment` A ``WorldEnvironment`` plus a ``PostProcessEffect`` runs a body-only GLSL fragment over the finished 2D frame: three orbiting polygons over a line grid, warped by an animated ripple with a scanline flicker. The shader ABI is automatic: ``u_time``, ``u_resolution``, ``u_colour_tex`` (and ``u_depth_tex``) arrive as uniforms, output goes to ``frag_colour``, and any extra uniform is live via ``set_uniform`` each frame (the ripple strength breathes this way). Screen-space HUD text (``Text2D``) composites after the effect, so it stays crisp while the world warps. ## What it demonstrates - ``PostProcessEffect`` with body-only GLSL on a scene with no 3D content. - The automatic uniforms and the ``frag_colour`` output convention. - Animating a user uniform per frame with ``set_uniform``. - Toggling the pass live via ``effect.enabled``. Controls: E - Toggle the post-process effect ESC - Quit Run: uv run python examples/features/2d/post_shader.py Headless self-check: uv run python examples/features/2d/post_shader.py --test ## Source ```{literalinclude} ../../examples/features/2d/post_shader.py :language: python :linenos: ```