diff --git a/ios/include/ResourceBuffer.hpp b/ios/include/ResourceBuffer.hpp index a53bf093..12d59412 100644 --- a/ios/include/ResourceBuffer.hpp +++ b/ios/include/ResourceBuffer.hpp @@ -49,10 +49,9 @@ extern "C" { struct ResourceLoaderWrapper { #if defined(__cplusplus) ResourceLoaderWrapper(LoadResource loader, FreeResource freeResource) : mLoadResource(loader), mFreeResource(freeResource) {}; - ResourceLoaderWrapper(LoadResourceFromOwner loader, FreeResourceFromOwner freeResource, void* const owner) : mLoadResourceFromOwner(loader), mFreeResourceFromOwner(freeResource), mOwner(owner) {}; + ResourceLoaderWrapper(LoadResourceFromOwner loader, FreeResourceFromOwner freeResource, void* const owner) : mOwner(owner), mLoadResourceFromOwner(loader), mFreeResourceFromOwner(freeResource) {}; ResourceBuffer load(const char* uri) { - Log("LOADING %s", uri); if(mLoadResourceFromOwner) { return mLoadResourceFromOwner(uri, mOwner); } @@ -67,11 +66,11 @@ extern "C" { } } #endif - void* mOwner; - LoadResource mLoadResource; - FreeResource mFreeResource; - LoadResourceFromOwner mLoadResourceFromOwner; - FreeResourceFromOwner mFreeResourceFromOwner; + void* mOwner = nullptr; + LoadResource mLoadResource = nullptr; + FreeResource mFreeResource = nullptr; + LoadResourceFromOwner mLoadResourceFromOwner = nullptr; + FreeResourceFromOwner mFreeResourceFromOwner = nullptr; }; typedef struct ResourceLoaderWrapper ResourceLoaderWrapper; diff --git a/ios/src/PolyvoxFilamentApi.cpp b/ios/src/PolyvoxFilamentApi.cpp index 4c603bbb..265e4ca5 100644 --- a/ios/src/PolyvoxFilamentApi.cpp +++ b/ios/src/PolyvoxFilamentApi.cpp @@ -21,6 +21,7 @@ extern "C" { #include "PolyvoxFilamentApi.h" FLUTTER_PLUGIN_EXPORT void* create_filament_viewer(void* context, ResourceLoaderWrapper* loader) { + loader->load("foo"); // if(!_tp) { // _tp = new ThreadPool(); // } diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 994d6b61..a222614d 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -21,10 +21,6 @@ add_library(FILAMENT_SHADERS SHARED "${CMAKE_CURRENT_SOURCE_DIR}/../ios/include/material/unlit_opaque.c" ) -add_library(DART_API SHARED - "${CMAKE_CURRENT_SOURCE_DIR}/../ios/src/dart_api_dl.c" -) - # Define the plugin library target. Its name must not be changed (see comment # on PLUGIN_NAME above). # @@ -61,7 +57,6 @@ target_include_directories(${PLUGIN_NAME} INTERFACE include_directories(../ios/src) include_directories(../ios/include) -include_directories(../ios/include/dart) include_directories(../example/linux) target_link_libraries(${PLUGIN_NAME} PRIVATE flutter) @@ -126,7 +121,6 @@ set_property(TARGET math PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR} target_link_libraries(${PLUGIN_NAME} PRIVATE FILAMENT_SHADERS - DART_API gltfio_core filament backend diff --git a/linux/include/polyvox_filament/resource_loader.hpp b/linux/include/polyvox_filament/resource_loader.hpp index 806f0d49..df37a78d 100644 --- a/linux/include/polyvox_filament/resource_loader.hpp +++ b/linux/include/polyvox_filament/resource_loader.hpp @@ -58,12 +58,15 @@ ResourceBuffer loadResource(const char* name) { is.read (buffer, length); is.close(); _file_assets[id] = buffer; + std::cout << "Loaded!" << std::endl; + return ResourceBuffer(buffer, length, id); } -void freeResource(uint32_t id) { - std::cout << "Freeing resource " << id << std::endl; - auto it = _file_assets.find(id); +void freeResource(ResourceBuffer rbuf) { + std::cout << "Free " << rbuf.id << std::endl; + std::cout << "Freeing resource " << rbuf.id << std::endl; + auto it = _file_assets.find(rbuf.id); if (it != _file_assets.end()) { free(it->second); } diff --git a/linux/polyvox_filament_plugin.cc b/linux/polyvox_filament_plugin.cc index d1ca1b70..a401b790 100644 --- a/linux/polyvox_filament_plugin.cc +++ b/linux/polyvox_filament_plugin.cc @@ -107,13 +107,10 @@ static void polyvox_filament_plugin_handle_method_call( g_autoptr(FlValue) result = fl_value_new_int(reinterpret_cast(((FilamentTextureGL*)self->texture)->texture_id)); response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); - } else if(strcmp(method, "getLoadResourceFn") == 0) { + } else if(strcmp(method, "getResourceLoader") == 0) { + ResourceLoaderWrapper* resourceLoader = new ResourceLoaderWrapper(loadResource, freeResource); g_autoptr(FlValue) result = - fl_value_new_int(reinterpret_cast(loadResource)); - response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); - } else if(strcmp(method, "getFreeResourceFn") == 0) { - g_autoptr(FlValue) result = - fl_value_new_int(reinterpret_cast(&freeResource)); + fl_value_new_int(reinterpret_cast(resourceLoader)); response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); } else if(strcmp(method, "tick") == 0) { fl_texture_registrar_mark_texture_frame_available(self->texture_registrar,