From bbb3727b7ca29ee9e5f708b147e7143bc776277d Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 2 Oct 2023 12:06:48 +0800 Subject: [PATCH] don't use constructors for ResourceBuffer on Android (messes with JNA) --- ios/include/ResourceBuffer.hpp | 36 +++++++++++----------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/ios/include/ResourceBuffer.hpp b/ios/include/ResourceBuffer.hpp index a8e51325..e4a80237 100644 --- a/ios/include/ResourceBuffer.hpp +++ b/ios/include/ResourceBuffer.hpp @@ -6,35 +6,19 @@ extern "C" { #endif // - // Pairs a memory buffer with an ID that can be used to unload the backing asset if needed. - // Use this when you want to load an asset from a resource that requires more than just `free` on the underlying buffer. - // e.g. - // ``` - // uint64_t id = get_next_resource_id(); - // AAsset *asset = AAssetManager_open(am, name, AASSET_MODE_BUFFER); - // off_t length = AAsset_getLength(asset); - // const void * buffer = AAsset_getBuffer(asset); - // uint8_t *buf = new uint8_t[length ]; - // memcpy(buf,buffer, length); - // ResourceBuffer rb(buf, length, id); - // ... - // ... - // (elsewhere) - // AAsset* asset = get_asset_from_id(rb.id); - // AAsset_close(asset); - // free_asset_id(rb.id); + // Since different platforms expose different interfaces for loading assets, we want a single interface to represent the binary data backing an asset (as well as an ID that can be passed back to the native platform to free the data and unload the asset). // struct ResourceBuffer { - #if defined(__cplusplus) - ResourceBuffer(const void* const data, const uint32_t size, const uint32_t id) : data(data), size(size), id(id) {}; + void * const data; + const int size; + const int id; + + #if defined(__cplusplus) && !defined(__ANDROID__) + ResourceBuffer(void* const data, const int32_t size, const int32_t id) : data(data), size(size), id(id) {}; ResourceBuffer(const ResourceBuffer& rb) : data(rb.data), size(rb.size), id(rb.id) { }; ResourceBuffer(const ResourceBuffer&& rb) : data(rb.data), size(rb.size), id(rb.id) { }; ResourceBuffer& operator=(const ResourceBuffer& other) = delete; - #endif - const void * const data; - const int64_t size; - const uint32_t id; }; typedef struct ResourceBuffer ResourceBuffer; @@ -56,9 +40,11 @@ extern "C" { ResourceBuffer load(const char* uri) const { if(mLoadFilamentResourceFromOwner) { - return mLoadFilamentResourceFromOwner(uri, mOwner); + auto rb = mLoadFilamentResourceFromOwner(uri, mOwner); + return rb; } - return mLoadFilamentResource(uri); + auto rb =mLoadFilamentResource(uri); + return rb; } void free(ResourceBuffer rb) const {