resourceLoader for Linux
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
// }
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user