Quick answer: Construct 3 custom effect shader uniform reading initial value despite runtime sets? Some effects cache uniforms once - mark uniform as 'must update' in the effect XML.

Time-based shader effect; sending time parameter each frame. Shader reads zero forever.

Set 'mustUpdate' in XML

Effect's .xml file: parameter declaration includes mustUpdate. Construct re-uploads per frame.

Or use a global variable

Bind the uniform to a Construct global var. Global var changes auto-trigger update.

Verify in the effect inspector

Effect's runtime properties show current values. Frozen values = mustUpdate missing.

“Effects optimize by skipping unchanged uniforms. Time-changing uniforms need the opt-in.”

When authoring custom effects, the mustUpdate flag is the most-overlooked option. Document in your effect template.

Related reading