diff --git a/thermion_flutter/thermion_flutter/ios/Classes/ResourceBuffer.c b/thermion_flutter/thermion_flutter/ios/Classes/ResourceBuffer.c index caf1ca6f..293215ee 100644 --- a/thermion_flutter/thermion_flutter/ios/Classes/ResourceBuffer.c +++ b/thermion_flutter/thermion_flutter/ios/Classes/ResourceBuffer.c @@ -1,8 +1,11 @@ -#include "ResourceBuffer.hpp" +#include "ResourceBuffer.h" -ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) +void *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) { ResourceLoaderWrapper *rlw = (ResourceLoaderWrapper *)malloc(sizeof(ResourceLoaderWrapper)); + rlw->loadResource = NULL; + rlw->freeResource = NULL; + rlw->loadToOut = NULL; rlw->loadFromOwner = loadFn; rlw->freeFromOwner = freeFn; rlw->owner = owner; diff --git a/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.h b/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.h new file mode 100644 index 00000000..eab0ee0d --- /dev/null +++ b/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.h @@ -0,0 +1,44 @@ +#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. +// +typedef struct ResourceBuffer +{ + const void *const data; + const int32_t size; + const int32_t id; + +#if defined(__cplusplus) + ResourceBuffer(void *const data, int32_t size, int32_t id) : data(data), size(size), id(id) {} +#endif +} ResourceBuffer; + +typedef void (*LoadFilamentResourceIntoOutPointer)(const char *uri, ResourceBuffer *out); +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); + +typedef struct ResourceLoaderWrapper +{ + LoadFilamentResource loadResource; + FreeFilamentResource freeResource; + LoadFilamentResourceFromOwner loadFromOwner; + FreeFilamentResourceFromOwner freeFromOwner; + void *owner; + LoadFilamentResourceIntoOutPointer loadToOut; +} ResourceLoaderWrapper; + +void *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner); + +#endif diff --git a/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.hpp b/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.hpp deleted file mode 100644 index 97822546..00000000 --- a/thermion_flutter/thermion_flutter/ios/include/ResourceBuffer.hpp +++ /dev/null @@ -1,91 +0,0 @@ -#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 thermion_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/thermion_flutter/thermion_flutter/ios/include/SwiftThermionFlutterPlugin-Bridging-Header.h b/thermion_flutter/thermion_flutter/ios/include/SwiftThermionFlutterPlugin-Bridging-Header.h index 96ec1fc8..2c229776 100644 --- a/thermion_flutter/thermion_flutter/ios/include/SwiftThermionFlutterPlugin-Bridging-Header.h +++ b/thermion_flutter/thermion_flutter/ios/include/SwiftThermionFlutterPlugin-Bridging-Header.h @@ -3,9 +3,9 @@ #include -#include "ResourceBuffer.hpp" +#include "ResourceBuffer.h" -ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner); +void *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner); // ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) // { diff --git a/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.h b/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.h new file mode 100644 index 00000000..0e159c30 --- /dev/null +++ b/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.h @@ -0,0 +1,44 @@ +#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. +// +typedef struct ResourceBuffer +{ + const void *const data; + const int32_t size; + const int32_t id; + +#if defined(__cplusplus) + ResourceBuffer(void *const data, int32_t size, int32_t id) : data(data), size(size), id(id) {} +#endif +} ResourceBuffer; + +typedef void (*LoadFilamentResourceIntoOutPointer)(const char *uri, ResourceBuffer *out); +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); + +typedef struct ResourceLoaderWrapper +{ + LoadFilamentResource loadResource; + FreeFilamentResource freeResource; + LoadFilamentResourceFromOwner loadFromOwner; + FreeFilamentResourceFromOwner freeFromOwner; + void *owner; + LoadFilamentResourceIntoOutPointer loadToOut; +} ResourceLoaderWrapper; + +ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner); + +#endif diff --git a/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.hpp b/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.hpp deleted file mode 100644 index 97822546..00000000 --- a/thermion_flutter/thermion_flutter/macos/include/ResourceBuffer.hpp +++ /dev/null @@ -1,91 +0,0 @@ -#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 thermion_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/thermion_flutter/thermion_flutter/macos/include/SwiftThermionFlutterPlugin-Bridging-Header.h b/thermion_flutter/thermion_flutter/macos/include/SwiftThermionFlutterPlugin-Bridging-Header.h index 0a005191..3e8b248f 100644 --- a/thermion_flutter/thermion_flutter/macos/include/SwiftThermionFlutterPlugin-Bridging-Header.h +++ b/thermion_flutter/thermion_flutter/macos/include/SwiftThermionFlutterPlugin-Bridging-Header.h @@ -3,11 +3,14 @@ #include -#include "ResourceBuffer.hpp" +#include "ResourceBuffer.h" ResourceLoaderWrapper *make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void *const owner) { ResourceLoaderWrapper *rlw = (ResourceLoaderWrapper *)malloc(sizeof(ResourceLoaderWrapper)); + rlw->loadResource = NULL; + rlw->freeResource = NULL; + rlw->loadToOut = NULL; rlw->loadFromOwner = loadFn; rlw->freeFromOwner = freeFn; rlw->owner = owner; diff --git a/thermion_flutter/thermion_flutter/macos/thermion_flutter.podspec b/thermion_flutter/thermion_flutter/macos/thermion_flutter.podspec index 632360f6..b11c286d 100644 --- a/thermion_flutter/thermion_flutter/macos/thermion_flutter.podspec +++ b/thermion_flutter/thermion_flutter/macos/thermion_flutter.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/ResourceBuffer.hpp','include/SwiftThermionFlutterPlugin-Bridging-Header.h' - s.public_header_files = 'include/SwiftThermionFlutterPlugin-Bridging-Header.h', 'include/ResourceBuffer.hpp' + s.source_files = 'Classes/*', 'include/ResourceBuffer.h','include/SwiftThermionFlutterPlugin-Bridging-Header.h' + s.public_header_files = 'include/SwiftThermionFlutterPlugin-Bridging-Header.h', 'include/ResourceBuffer.h' s.dependency 'FlutterMacOS' s.platform = :osx, '13'