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