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.