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 { struct ResourceLoaderWrapper {
#if defined(__cplusplus) #if defined(__cplusplus)
ResourceLoaderWrapper(LoadResource loader, FreeResource freeResource) : mLoadResource(loader), mFreeResource(freeResource) {}; 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) { ResourceBuffer load(const char* uri) {
Log("LOADING %s", uri);
if(mLoadResourceFromOwner) { if(mLoadResourceFromOwner) {
return mLoadResourceFromOwner(uri, mOwner); return mLoadResourceFromOwner(uri, mOwner);
} }
@@ -67,11 +66,11 @@ extern "C" {
} }
} }
#endif #endif
void* mOwner; void* mOwner = nullptr;
LoadResource mLoadResource; LoadResource mLoadResource = nullptr;
FreeResource mFreeResource; FreeResource mFreeResource = nullptr;
LoadResourceFromOwner mLoadResourceFromOwner; LoadResourceFromOwner mLoadResourceFromOwner = nullptr;
FreeResourceFromOwner mFreeResourceFromOwner; FreeResourceFromOwner mFreeResourceFromOwner = nullptr;
}; };
typedef struct ResourceLoaderWrapper ResourceLoaderWrapper; typedef struct ResourceLoaderWrapper ResourceLoaderWrapper;

View File

@@ -21,6 +21,7 @@ extern "C" {
#include "PolyvoxFilamentApi.h" #include "PolyvoxFilamentApi.h"
FLUTTER_PLUGIN_EXPORT void* create_filament_viewer(void* context, ResourceLoaderWrapper* loader) { FLUTTER_PLUGIN_EXPORT void* create_filament_viewer(void* context, ResourceLoaderWrapper* loader) {
loader->load("foo");
// if(!_tp) { // if(!_tp) {
// _tp = new ThreadPool(); // _tp = new ThreadPool();
// } // }

View File

@@ -21,10 +21,6 @@ add_library(FILAMENT_SHADERS SHARED
"${CMAKE_CURRENT_SOURCE_DIR}/../ios/include/material/unlit_opaque.c" "${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 # Define the plugin library target. Its name must not be changed (see comment
# on PLUGIN_NAME above). # on PLUGIN_NAME above).
# #
@@ -61,7 +57,6 @@ target_include_directories(${PLUGIN_NAME} INTERFACE
include_directories(../ios/src) include_directories(../ios/src)
include_directories(../ios/include) include_directories(../ios/include)
include_directories(../ios/include/dart)
include_directories(../example/linux) include_directories(../example/linux)
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter) 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 target_link_libraries(${PLUGIN_NAME} PRIVATE
FILAMENT_SHADERS FILAMENT_SHADERS
DART_API
gltfio_core gltfio_core
filament filament
backend backend

View File

@@ -58,12 +58,15 @@ ResourceBuffer loadResource(const char* name) {
is.read (buffer, length); is.read (buffer, length);
is.close(); is.close();
_file_assets[id] = buffer; _file_assets[id] = buffer;
std::cout << "Loaded!" << std::endl;
return ResourceBuffer(buffer, length, id); return ResourceBuffer(buffer, length, id);
} }
void freeResource(uint32_t id) { void freeResource(ResourceBuffer rbuf) {
std::cout << "Freeing resource " << id << std::endl; std::cout << "Free " << rbuf.id << std::endl;
auto it = _file_assets.find(id); std::cout << "Freeing resource " << rbuf.id << std::endl;
auto it = _file_assets.find(rbuf.id);
if (it != _file_assets.end()) { if (it != _file_assets.end()) {
free(it->second); free(it->second);
} }

View File

@@ -107,13 +107,10 @@ static void polyvox_filament_plugin_handle_method_call(
g_autoptr(FlValue) result = g_autoptr(FlValue) result =
fl_value_new_int(reinterpret_cast<unsigned int>(((FilamentTextureGL*)self->texture)->texture_id)); fl_value_new_int(reinterpret_cast<unsigned int>(((FilamentTextureGL*)self->texture)->texture_id));
response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); 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 = g_autoptr(FlValue) result =
fl_value_new_int(reinterpret_cast<int64_t>(loadResource)); fl_value_new_int(reinterpret_cast<int64_t>(resourceLoader));
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));
response = FL_METHOD_RESPONSE(fl_method_success_response_new(result)); response = FL_METHOD_RESPONSE(fl_method_success_response_new(result));
} else if(strcmp(method, "tick") == 0) { } else if(strcmp(method, "tick") == 0) {
fl_texture_registrar_mark_texture_frame_available(self->texture_registrar, fl_texture_registrar_mark_texture_frame_available(self->texture_registrar,