configureShader method
Configure the current shader with all uniforms for this frame.
Implementation
void configureShader(Size size) {
final shader = currentShader;
if (shader == null) return;
int idx = 0;
// uSize (vec2)
shader.setFloat(idx++, size.width);
shader.setFloat(idx++, size.height);
// uCenter (vec2)
shader.setFloat(idx++, centerX);
shader.setFloat(idx++, centerY);
// uZoom (float)
shader.setFloat(idx++, zoom);
// uTime (float)
shader.setFloat(idx++, _time);
// uIterMax (float) — platform-scaled
shader.setFloat(idx++, _config.platformIterations);
// uColor1 (vec3) — normalized 0..1
shader.setFloat(idx++, _config.palette.color1.red / 255.0);
shader.setFloat(idx++, _config.palette.color1.green / 255.0);
shader.setFloat(idx++, _config.palette.color1.blue / 255.0);
// uColor2 (vec3)
shader.setFloat(idx++, _config.palette.color2.red / 255.0);
shader.setFloat(idx++, _config.palette.color2.green / 255.0);
shader.setFloat(idx++, _config.palette.color2.blue / 255.0);
// uColor3 (vec3)
shader.setFloat(idx++, _config.palette.color3.red / 255.0);
shader.setFloat(idx++, _config.palette.color3.green / 255.0);
shader.setFloat(idx++, _config.palette.color3.blue / 255.0);
// uBreath (float)
shader.setFloat(idx++, _breath);
// uNeuro (float)
shader.setFloat(idx++, _neuro);
// Type-specific uniforms (must match shader layout)
if (_config.type == NeomFractalType.julia) {
// uJuliaC (vec2)
shader.setFloat(idx++, _config.juliaCx);
shader.setFloat(idx++, _config.juliaCy);
} else if (_config.type == NeomFractalType.multibrot) {
// uPower (float)
shader.setFloat(idx++, _config.power);
}
}