Quick answer: shader_set, then shader_set_uniform_f, then draw, then shader_reset. Cache uniform handles globally.

Custom flash shader. Set uniform_f to color. Draw. No effect. Uniform was set before shader_set or after the draw.

The Fix

// Cache handle once
global.u_flash = shader_get_uniform(shd_flash, "u_flash");

// In Draw
shader_set(shd_flash);
shader_set_uniform_f(global.u_flash, 1, 0, 0, 1);
draw_self();
shader_reset();

Order matters. Cached handle avoids string lookup overhead.

Verifying

Sprite tints red. Without correct order: no tint or persistent tint between draws.

“Set, uniform, draw, reset.”

Related Issues

For draw_text color, see draw color. For tilemap cache, see tilemap.

Order. Uniform. Draw.