allow passing uberarchive path to FilamentViewer and expose destroy_viewer

This commit is contained in:
Nick Fisher
2023-10-04 14:49:48 +08:00
parent 6980e5cb23
commit 45576466c9
16 changed files with 368 additions and 261 deletions

View File

@@ -38,9 +38,10 @@ using namespace filament;
using namespace filament::gltfio;
AssetManager::AssetManager(const ResourceLoaderWrapper* const resourceLoaderWrapper,
NameComponentManager *ncm,
Engine *engine,
Scene *scene)
NameComponentManager* ncm,
Engine* engine,
Scene* scene,
const char* uberArchivePath)
: _resourceLoaderWrapper(resourceLoaderWrapper),
_ncm(ncm),
_engine(engine),
@@ -52,15 +53,17 @@ _scene(scene) {
_gltfResourceLoader = new ResourceLoader({.engine = _engine,
.normalizeSkinningWeights = true });
// TODO - allow passing uberz archive
// e.g. auto uberArchivePath = "packages/polyvox_filament/assets/default.uberz"
// auto uberdata = resourceLoaderWrapper->load(uberArchivePath);
// if (!uberdata.data) {
// Log("Failed to load ubershader material. This is fatal.");
// }
// _ubershaderProvider = gltfio::createUbershaderProvider(_engine, uberdata.data, uberdata.size);
_ubershaderProvider = gltfio::createUbershaderProvider(
if(uberArchivePath) {
auto uberdata = resourceLoaderWrapper->load(uberArchivePath);
if (!uberdata.data) {
Log("Failed to load ubershader material. This is fatal.");
}
_ubershaderProvider = gltfio::createUbershaderProvider(_engine, uberdata.data, uberdata.size);
resourceLoaderWrapper->free(uberdata);
} else {
_ubershaderProvider = gltfio::createUbershaderProvider(
_engine, UBERARCHIVE_DEFAULT_DATA, UBERARCHIVE_DEFAULT_SIZE);
}
Log("Created ubershader provider.");
EntityManager &em = EntityManager::get();

View File

@@ -111,7 +111,7 @@ static constexpr float4 sFullScreenTriangleVertices[3] = {
static const uint16_t sFullScreenTriangleIndices[3] = {0, 1, 2};
FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWrapper* const resourceLoaderWrapper, void* const platform)
FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWrapper* const resourceLoaderWrapper, void* const platform, const char* uberArchivePath)
: _resourceLoaderWrapper(resourceLoaderWrapper) {
#if TARGET_OS_IPHONE
@@ -190,7 +190,9 @@ FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWr
_resourceLoaderWrapper,
_ncm,
_engine,
_scene);
_scene,
uberArchivePath
);
_imageTexture = Texture::Builder()
.width(1)

View File

@@ -15,8 +15,8 @@ extern "C" {
#include "PolyvoxFilamentApi.h"
FLUTTER_PLUGIN_EXPORT const void* create_filament_viewer(const void* context, const ResourceLoaderWrapper* const loader, void* const platform) {
return (const void*) new FilamentViewer(context, loader, platform);
FLUTTER_PLUGIN_EXPORT const void* create_filament_viewer(const void* context, const ResourceLoaderWrapper* const loader, void* const platform, const char* uberArchivePath) {
return (const void*) new FilamentViewer(context, loader, platform, uberArchivePath);
}
FLUTTER_PLUGIN_EXPORT ResourceLoaderWrapper* make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void* const owner) {

View File

@@ -44,6 +44,7 @@ public:
void* const createViewer(
void* const context,
void* const platform,
const char* uberArchivePath,
const ResourceLoaderWrapper* const loader,
void (*renderCallback)(void*), void* const owner
) {
@@ -51,7 +52,7 @@ public:
_renderCallbackOwner = owner;
std::packaged_task<FilamentViewer*()> lambda([&]() mutable
{
return new FilamentViewer(context, loader, platform);
return new FilamentViewer(context, loader, platform, uberArchivePath);
});
auto fut = add_task(lambda);
fut.wait();
@@ -59,6 +60,16 @@ public:
return (void* const)_viewer;
}
void destroyViewer() {
std::packaged_task<void()> lambda([&]() mutable {
_rendering = false;
destroy_filament_viewer(_viewer);
_viewer = nullptr;
});
auto fut = add_task(lambda);
fut.wait();
}
void setRendering(bool rendering)
{
_rendering = rendering;
@@ -106,6 +117,7 @@ extern "C"
FLUTTER_PLUGIN_EXPORT void* const create_filament_viewer_ffi(
void* const context,
void* const platform,
const char* uberArchivePath,
const ResourceLoaderWrapper* const loader,
void (*renderCallback)(void* const renderCallbackOwner),
void* const renderCallbackOwner) {
@@ -113,7 +125,11 @@ extern "C"
{
_rl = new RenderLoop();
}
return _rl->createViewer(context, platform, loader, renderCallback, renderCallbackOwner);
return _rl->createViewer(context, platform,uberArchivePath, loader, renderCallback, renderCallbackOwner);
}
FLUTTER_PLUGIN_EXPORT void destroy_filament_viewer_ffi(void* const viewer) {
_rl->destroyViewer();
}
FLUTTER_PLUGIN_EXPORT void create_swap_chain_ffi(void* const viewer, void* const surface, uint32_t width, uint32_t height)