bind method

  1. @override
void bind(
  1. RenderPass pass,
  2. HostBuffer transientsBuffer,
  3. Lighting lighting
)
override

Binds this material's render-pass state, uniforms, and textures.

The base implementation enables back-face culling with counter-clockwise winding (matching the glTF convention). Subclasses must call super.bind and then bind any per-material uniforms and textures expected by their fragment shader. lighting carries the IBL EnvironmentMap (and its intensity) plus the analytic lights and shadow resources that materials shade against.

Implementation

@override
void bind(
  gpu.RenderPass pass,
  gpu.HostBuffer transientsBuffer,
  Lighting lighting,
) {
  pass.setCullMode(cullingMode);
  // backendWinding wraps the winding for the GLES render-target Y-flip
  // workaround (see y_flip.dart); identity on Metal/Vulkan/web.
  pass.setWindingOrder(backendWinding(windingOrder));

  for (final entry in _uniformBlocks.entries) {
    pass.bindUniform(
      fragmentShader.getUniformSlot(entry.key),
      transientsBuffer.emplace(entry.value),
    );
  }

  for (final entry in _textures.entries) {
    pass.bindTexture(
      fragmentShader.getUniformSlot(entry.key),
      entry.value.texture,
      sampler: entry.value.sampler ?? gpu.SamplerOptions(),
    );
  }

  if (useEnvironment) {
    _bindEnvironmentTextures(pass, lighting);
  }
}