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(_cullMode(_culling));
pass.setWindingOrder(backendWinding(gpu.WindingOrder.counterClockwise));
if (shadingModel == FmatShadingModel.lit) {
final env = environment ?? lighting.environmentMap;
final fragInfo = Float32List(EngineLightingUniforms.fragInfoFloatCount);
EngineLightingUniforms.packInto(fragInfo, lighting, env);
pass.bindUniform(
fragmentShader.getUniformSlot('FragInfo'),
transientsBuffer.emplace(ByteData.sublistView(fragInfo)),
);
EngineLightingUniforms.bindEngineTextures(
pass,
fragmentShader,
lighting,
env,
);
}
parameters.bind(pass, fragmentShader, transientsBuffer);
}