run method

  1. @override
Vector4 run(
  1. Float32List a,
  2. ShaderBindings bindings,
  3. Float32List out
)
override

Reads attributes — the vertex, as the engine laid it out — and writes a clip-space position plus varyings.

Implementation

@override
Vector4 run(Float32List a, ShaderBindings bindings, Float32List out) {
  final scale = a[13];
  final x = a[6] + a[0] * scale;
  final y = a[7] + a[1] * scale;
  final z = a[8] + a[2] * scale;

  out[0] = a[9];
  out[1] = a[10];
  out[2] = a[11];
  out[3] = a[12];
  out[4] = x;
  out[5] = y;
  out[6] = z;
  // Unchanged by a uniform scale, which is why the scale is one number.
  out[7] = a[3];
  out[8] = a[4];
  out[9] = a[5];

  return bindings.mat4('ParticleMeshInfo', 'view_projection') *
      Vector4(x, y, z, 1.0);
}