loadIbl method
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;
}