bind method

  1. @override
void bind(
  1. RenderPass pass,
  2. HostBuffer transientsBuffer,
  3. Environment environment
)
override

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,
    ),
  );
}