From 559706ef53edf3c06ef50fdf3ba5a400b52cd5c0 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 6 Jun 2024 23:32:18 +0800 Subject: [PATCH] ios bridging header fixes --- .../ios/Classes/ResourceBuffer.c | 2 +- .../ios/flutter_filament.podspec | 4 +- .../ios/include/ResourceBuffer.h | 1 - .../ios/include/ResourceBuffer.hpp | 91 +++++++++++++++++++ ...iftFlutterFilamentPlugin-Bridging-Header.h | 17 +++- 5 files changed, 109 insertions(+), 6 deletions(-) delete mode 120000 flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.h create mode 100644 flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.hpp diff --git a/flutter_filament_federated/flutter_filament/ios/Classes/ResourceBuffer.c b/flutter_filament_federated/flutter_filament/ios/Classes/ResourceBuffer.c index f2ec5e00..caf1ca6f 100644 --- a/flutter_filament_federated/flutter_filament/ios/Classes/ResourceBuffer.c +++ b/flutter_filament_federated/flutter_filament/ios/Classes/ResourceBuffer.c @@ -1,4 +1,4 @@ -#include "ResourceBuffer.h" +#include "ResourceBuffer.hpp" ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) { diff --git a/flutter_filament_federated/flutter_filament/ios/flutter_filament.podspec b/flutter_filament_federated/flutter_filament/ios/flutter_filament.podspec index b2d2b2b8..92522cfb 100644 --- a/flutter_filament_federated/flutter_filament/ios/flutter_filament.podspec +++ b/flutter_filament_federated/flutter_filament/ios/flutter_filament.podspec @@ -13,8 +13,8 @@ A new flutter plugin project. s.license = { :file => '../LICENSE' } s.author = { 'Your Company' => 'email@example.com' } s.source = { :path => '.' } - s.source_files = 'Classes/*', 'include/SwiftFlutterFilamentPlugin-Bridging-Header.h', 'include/ResourceBuffer.h' - s.public_header_files = 'include/SwiftFlutterFilamentPlugin-Bridging-Header.h', 'include/ResourceBuffer.h' + s.source_files = 'Classes/*', 'include/SwiftFlutterFilamentPlugin-Bridging-Header.h','include/ResourceBuffer.hpp', 'src/ResourceBuffer.c' + s.public_header_files = 'include/SwiftFlutterFilamentPlugin-Bridging-Header.h', 'include/ResourceBuffer.hpp' s.dependency 'Flutter' s.platform = :ios, '13.0' s.static_framework = true diff --git a/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.h b/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.h deleted file mode 120000 index 5375d4ad..00000000 --- a/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../dart_filament/native/include/ResourceBuffer.h \ No newline at end of file diff --git a/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.hpp b/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.hpp new file mode 100644 index 00000000..10109d65 --- /dev/null +++ b/flutter_filament_federated/flutter_filament/ios/include/ResourceBuffer.hpp @@ -0,0 +1,91 @@ +#ifndef RESOURCE_BUFFER_H +#define RESOURCE_BUFFER_H + +#include +#include + +// +// A ResourceBuffer is a unified interface for working with +// binary assets across various platforms. +// This is simply: +// 1) a pointer to some data +// 2) the length of the data +// 3) an ID that can be passed back to the native platform to release the underlying asset when needed. +// +struct ResourceBuffer +{ + const void *const data; + const int32_t size; + const int32_t id; +}; + +typedef struct ResourceBuffer ResourceBuffer; +typedef ResourceBuffer (*LoadFilamentResource)(const char *uri); +typedef ResourceBuffer (*LoadFilamentResourceFromOwner)(const char *const, void *const owner); +typedef void (*FreeFilamentResource)(ResourceBuffer); +typedef void (*FreeFilamentResourceFromOwner)(ResourceBuffer, void *const owner); + +struct ResourceLoaderWrapper +{ + LoadFilamentResource loadResource; + FreeFilamentResource freeResource; + LoadFilamentResourceFromOwner loadFromOwner; + FreeFilamentResourceFromOwner freeFromOwner; + void *owner; +}; +typedef struct ResourceLoaderWrapper ResourceLoaderWrapper; + + +#if defined(__cplusplus) + +namespace flutter_filament { + +struct ResourceLoaderWrapperImpl : public ResourceLoaderWrapper +{ + + ResourceLoaderWrapperImpl(LoadFilamentResource loader, FreeFilamentResource freeResource) + { + loadFromOwner = nullptr; + freeFromOwner = nullptr; + loadResource = loader; + freeResource = freeResource; + owner = nullptr; + } + + ResourceLoaderWrapperImpl(LoadFilamentResourceFromOwner loader, FreeFilamentResourceFromOwner freeResource, void * owner) + { + loadResource = nullptr; + freeResource = nullptr; + loadFromOwner = loader; + freeFromOwner = freeResource; + owner = owner; + } + + ResourceBuffer load(const char *uri) const + { + if (loadFromOwner) + { + auto rb = loadFromOwner(uri, owner); + return rb; + } + auto rb = loadResource(uri); + return rb; + } + + void free(ResourceBuffer rb) const + { + if (freeFromOwner) + { + freeFromOwner(rb, owner); + } + else + { + freeResource(rb); + } + } +}; + +} +#endif + +#endif diff --git a/flutter_filament_federated/flutter_filament/ios/include/SwiftFlutterFilamentPlugin-Bridging-Header.h b/flutter_filament_federated/flutter_filament/ios/include/SwiftFlutterFilamentPlugin-Bridging-Header.h index c3548735..304cae89 100644 --- a/flutter_filament_federated/flutter_filament/ios/include/SwiftFlutterFilamentPlugin-Bridging-Header.h +++ b/flutter_filament_federated/flutter_filament/ios/include/SwiftFlutterFilamentPlugin-Bridging-Header.h @@ -1,6 +1,19 @@ #ifndef SwiftFlutterFilamentPlugin_Bridging_Header_h #define SwiftFlutterFilamentPlugin_Bridging_Header_h -#include "ResourceBuffer.h" +#include -#endif +#include "ResourceBuffer.hpp" + +ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner); + +// ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) +// { +// ResourceLoaderWrapper *rlw = (ResourceLoaderWrapper *)malloc(sizeof(ResourceLoaderWrapper)); +// rlw->loadFromOwner = loadFn; +// rlw->freeFromOwner = freeFn; +// rlw->owner = owner; +// return rlw; +// } + +#endif \ No newline at end of file