getNativePtr static method

Pointer<Void> getNativePtr(
  1. ModelProvider? provider
)

Implementation

static Pointer<Void> getNativePtr(ModelProvider? provider) {
  if (provider == null) return Pointer<Void>.fromAddress(0);

  final heap = ModelProviderNative.heap;
  final sendPort = heap.sendPort;
  final executablePort = __lib.createExecutePort();
  final nativeObject = newModelProvider(
      sendPort,
      executablePort,
      toNativeString(provider.modelId),
      ModelProviderNative.getTextureNative);
  if (nativeObject == nullptr) {
    throw StateError('Failed to create native ModelProvider handle.');
  }

  final nativeObjectKey =
      _navigine_sdk_flutter_model_provider_GetObjectKey(nativeObject);
  if (nativeObjectKey == nullptr) {
    _navigine_sdk_flutter_model_provider_ReleaseHandle(nativeObject);
    throw StateError('Failed to get native ModelProvider callback key.');
  }
  heap.insertObject(nativeObjectKey, provider);

  return nativeObject;
}