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