updateFromMetadata method

  1. @override
void updateFromMetadata(
  1. Shader fragmentShader,
  2. Map<String, Object?> metadata
)

Re-reads the render state and parameters from a regenerated fragmentShader and sidecar metadata (a hot-reloaded .fmat), in place.

Updates culling, blending, shading model, and the parameter layout without replacing the material instance, so every primitive already using it picks up the change. Explicitly-set parameter values are preserved; see MaterialParameters.updateFromMetadata.

Implementation

@override
void updateFromMetadata(
  gpu.Shader fragmentShader,
  Map<String, Object?> metadata,
) {
  _shadingModel = _parseShadingModel(metadata['shading_model']);
  _blending = _parseBlending(metadata['blending']);
  _culling = _parseCulling(metadata['culling']);
  _depthWrite = metadata['depth_write'] == true;
  _sceneInputs = _parseSceneInputs(metadata['engine_inputs']);
  // A reloaded declaration is a new schema object, which invalidates the
  // widened vertex layouts and instance buffers keyed on the old one.
  _instanceAttributes = InstanceAttributeSchema.fromMetadata(metadata);
  _usesPlanarReflection = parsePlanarReflectionInput(
    metadata['engine_inputs'],
  );
  markMaterialSceneInputsChanged();
  setFragmentShader(fragmentShader);
  parameters.updateFromMetadata(fragmentShader, metadata);
}