name of the shader asset (as specified in the preload list)
the shared, precompiled effect, or null if not found
me.loader.preload([
// from a file (or data: URI)
{ name: "waterRipple", type: "shader", src: "shaders/waterRipple.frag" },
// or inline GLSL via the `data` field
{ name: "flash", type: "shader", data: `
uniform float uIntensity;
vec4 apply(vec4 color, vec2 uv) { return mix(color, vec4(1.0), uIntensity); }
` },
], () => {
// one shared program — same uniform state for every user
mySprite.shader = me.loader.getShader("waterRipple");
// private copy with its own uniforms (caller-owned, shared = false)
boss.shader = me.loader.getShader("flash").clone();
});
Return the precompiled
ShaderEffectfor the given "shader" asset — compiled once during preloading, ready to assign to a renderable or camerashaderproperty.This returns a SHARED instance: the same
ShaderEffectobject on every call, owned by the loader (itssharedflag istrue). That means:setUniformon it affects every renderable using the shader.When a renderable needs its own uniform values, make a private, caller-owned copy with
ShaderEffect.clone()— the clone'ssharedflag is reset tofalse, so it is auto-destroyed with the renderable it is assigned to, like any hand-constructed effect.Shader assets are WebGL-only: under the Canvas renderer the returned effect is an inert stub (same behavior as constructing a
ShaderEffectdirectly). Note that shader assets requirevideo.init()to have been called — an inherent precondition of the preload flow, since the loading screen itself needs the renderer.