resourceLoader for Linux

This commit is contained in:
Nick Fisher
2023-04-21 09:25:15 +08:00
parent a692e4b7b7
commit 96970095fc
5 changed files with 16 additions and 22 deletions

View File

@@ -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;

View File

@@ -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();
// }

View File

@@ -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

View File

@@ -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);
}

View File

@@ -107,13 +107,10 @@ static void polyvox_filament_plugin_handle_method_call(
g_autoptr(FlValue) result =
fl_value_new_int(reinterpret_cast<unsigned int>(((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<int64_t>(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<int64_t>(&freeResource));
fl_value_new_int(reinterpret_cast<int64_t>(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,