configureShader method

void configureShader(
  1. Size size
)

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);
  }
}