loadIbl method

  1. @override
Future loadIbl(
  1. String lightingPath, {
  2. double intensity = 30000,
  3. bool destroyExisting = true,
})
override

Implementation

@override
Future loadIbl(String lightingPath,
    {double intensity = 30000, bool destroyExisting = true}) async {
  await removeIbl(destroy: destroyExisting);

  final completer = Completer();
  _iblTextureUploadComplete =
      withVoidCallback((requestId, onTextureUploadComplete) async {
    late Pointer stackPtr;
    if (FILAMENT_WASM) {
      //stackPtr = stackSave();
    }

    var data = await FilamentApp.instance!.loadResource(lightingPath);

    final bundle = await FFIKtx1Bundle.create(data);

    final texture = await bundle.createTexture(
        onTextureUploadComplete: onTextureUploadComplete,
        textureUploadCompleteRequestId: requestId);
    final harmonics = bundle.getSphericalHarmonics();

    final ibl = await FFIIndirectLight.fromIrradianceHarmonics(
      harmonics,
      reflectionsTexture: texture,
      intensity: intensity,
    );

    await scene.setIndirectLight(ibl);

    if (FILAMENT_WASM) {
      //stackRestore(stackPtr);
      data.free();
    }
    data.free();

    completer.complete();
    _logger.info("IBL texture upload complete");
  }).then((_) {
    _logger.info("IBL texture upload complete");
    _iblTextureUploadComplete = null;
  }).onError((err, st) {
    _logger.severe(err.toString());
  });
  await completer.future;
}