bind method
Implementation
@override
void bind(
gpu.RenderPass pass,
gpu.HostBuffer transientsBuffer,
Environment environment,
) {
super.bind(pass, transientsBuffer, environment);
Environment env = this.environment ?? environment;
var fragInfo = Float32List.fromList([
baseColorFactor.r, baseColorFactor.g,
baseColorFactor.b, baseColorFactor.a, // color
emissiveFactor.r, emissiveFactor.g,
emissiveFactor.b,
emissiveFactor.a, // emissive_factor
vertexColorWeight, // vertex_color_weight
environment.exposure, // exposure
metallicFactor, // metallic
roughnessFactor, // roughness
normalTexture != null ? 1.0 : 0.0, // has_normal_map
normalScale, // normal_scale
occlusionStrength, // occlusion_strength
environment.intensity, // environment_intensity
]);
pass.bindUniform(
fragmentShader.getUniformSlot("FragInfo"),
transientsBuffer.emplace(ByteData.sublistView(fragInfo)),
);
pass.bindTexture(
fragmentShader.getUniformSlot('base_color_texture'),
Material.whitePlaceholder(baseColorTexture),
sampler: gpu.SamplerOptions(
widthAddressMode: gpu.SamplerAddressMode.repeat,
heightAddressMode: gpu.SamplerAddressMode.repeat,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('emissive_texture'),
Material.whitePlaceholder(emissiveTexture),
sampler: gpu.SamplerOptions(
widthAddressMode: gpu.SamplerAddressMode.repeat,
heightAddressMode: gpu.SamplerAddressMode.repeat,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('metallic_roughness_texture'),
Material.whitePlaceholder(metallicRoughnessTexture),
sampler: gpu.SamplerOptions(
widthAddressMode: gpu.SamplerAddressMode.repeat,
heightAddressMode: gpu.SamplerAddressMode.repeat,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('normal_texture'),
Material.normalPlaceholder(normalTexture),
sampler: gpu.SamplerOptions(
widthAddressMode: gpu.SamplerAddressMode.repeat,
heightAddressMode: gpu.SamplerAddressMode.repeat,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('occlusion_texture'),
Material.whitePlaceholder(occlusionTexture),
sampler: gpu.SamplerOptions(
widthAddressMode: gpu.SamplerAddressMode.repeat,
heightAddressMode: gpu.SamplerAddressMode.repeat,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('radiance_texture'),
env.environmentMap.radianceTexture,
sampler: gpu.SamplerOptions(
minFilter: gpu.MinMagFilter.linear,
magFilter: gpu.MinMagFilter.linear,
widthAddressMode: gpu.SamplerAddressMode.clampToEdge,
heightAddressMode: gpu.SamplerAddressMode.clampToEdge,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('irradiance_texture'),
env.environmentMap.irradianceTexture,
sampler: gpu.SamplerOptions(
minFilter: gpu.MinMagFilter.linear,
magFilter: gpu.MinMagFilter.linear,
widthAddressMode: gpu.SamplerAddressMode.clampToEdge,
heightAddressMode: gpu.SamplerAddressMode.clampToEdge,
),
);
pass.bindTexture(
fragmentShader.getUniformSlot('brdf_lut'),
Material.getBrdfLutTexture(),
sampler: gpu.SamplerOptions(
minFilter: gpu.MinMagFilter.linear,
magFilter: gpu.MinMagFilter.linear,
widthAddressMode: gpu.SamplerAddressMode.clampToEdge,
heightAddressMode: gpu.SamplerAddressMode.clampToEdge,
),
);
}