GpuEnvironmentMap.upload constructor

GpuEnvironmentMap.upload(
  1. GpuDevice device,
  2. EnvironmentMapData data
)

Uploads data to device. As many levels as the device takes (GpuDevice.maxMipLevels: Flutter GPU leaves out the 1×1 level) are uploaded.

Implementation

factory GpuEnvironmentMap.upload(GpuDevice device, EnvironmentMapData data) {
  final levels = math.max(
    1,
    math.min(data.levelCount, device.maxMipLevels(data.size, data.size)),
  );
  final texture = device.createTexture(
    GpuTextureDesc(
      width: data.size,
      height: data.size,
      format: GpuFormat.rgba16f,
      storage: GpuStorage.host,
      mipLevels: levels,
      cube: true,
    ),
  );
  for (var level = 0; level < levels; level++) {
    for (var face = 0; face < 6; face++) {
      texture.upload(
        data.halfFloatsOf(level, face),
        mipLevel: level,
        slice: face,
      );
    }
  }
  return GpuEnvironmentMap._(texture, Float32List.fromList(data.sh), levels);
}