add removeSkybox

This commit is contained in:
Nick Fisher
2022-07-16 17:34:56 +10:00
parent a8ef628316
commit d512ebd38f
8 changed files with 74 additions and 50 deletions

View File

@@ -9,10 +9,11 @@ using namespace polyvox;
using namespace std;
static AAssetManager* am;
static vector<AAsset*> _assets;
uint64_t id = -1;
static FilamentViewer* _viewer;
static polyvox::ResourceBuffer loadResource(const char* name) {
id++;
@@ -50,6 +51,10 @@ extern "C" {
((FilamentViewer*)viewer)->loadSkybox(skyboxPath, iblPath);
}
void remove_skybox(void* viewer) {
((FilamentViewer*)viewer)->removeSkybox();
}
void load_glb(void* viewer, const char* assetPath) {
((FilamentViewer*)viewer)->loadGlb(assetPath);
}
@@ -67,9 +72,13 @@ extern "C" {
JNIEnv* env,
jobject assetManager
) {
if(_viewer) {
return _viewer;
}
ANativeWindow* layer = ANativeWindow_fromSurface(env, surface);
am = AAssetManager_fromJava(env, assetManager);
return new FilamentViewer((void*)layer, loadResource, freeResource);
_viewer = new FilamentViewer((void*)layer, loadResource, freeResource);
return _viewer;
}
void render(
@@ -166,10 +175,6 @@ extern "C" {
free(ptr);
}
void release_source_assets(void* viewer) {
((FilamentViewer*)viewer)->releaseSourceAssets();
}
void remove_asset(void* viewer) {
((FilamentViewer*)viewer)->removeAsset();
}

View File

@@ -64,5 +64,7 @@ interface FilamentInterop : Library {
fun remove_asset(viewer:Pointer);
fun remove_skybox(viewer:Pointer);
}

View File

@@ -104,9 +104,9 @@ PlatformView {
_methodChannel.invokeMethod("ready", null)
choreographer = Choreographer.getInstance()
// _view.setAlpha(0)
_view.setZOrderOnTop(false)
_view.holder.setFormat(PixelFormat.OPAQUE)
_view.holder.setFormat(PixelFormat.TRANSPARENT)
_view.holder.addCallback (object : SurfaceHolder.Callback {
override fun surfaceChanged(holder:SurfaceHolder, format:Int, width:Int, height:Int) {
@@ -151,19 +151,34 @@ PlatformView {
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"reloadAssets" -> {
// context = context.createPackageContext(context.getPackageName(), 0)
// val assetManager = context.getAssets()
// val flutterJNI = FlutterJNI.Factory.provideFlutterJNI()
// flutterJNI.updateJavaAssetManager(assetManager, flutterApplicationInfo.flutterAssetsDir)
}
"loadSkybox" -> {
val args = call.arguments as ArrayList<Any?>
val loader = FlutterInjector.instance().flutterLoader()
_lib.load_skybox(_viewer!!, loader.getLookupKeyForAsset(args[0] as String), loader.getLookupKeyForAsset(args[1] as String))
result.success("OK");
}
"removeSkybox" -> {
_lib.remove_skybox(_viewer!!)
result.success(true);
}
"loadGlb" -> {
if (_viewer == null)
return;
val loader = FlutterInjector.instance().flutterLoader()
val key = loader.getLookupKeyForAsset(call.arguments as String)
val key2 = loader.getLookupKeyForAsset(call.arguments as String, context.packageName)
val path = loader.findAppBundlePath()
Log.v(TAG, "key ${key} key2 ${key2} path : ${path}")
_lib.load_glb(
_viewer!!,
loader.getLookupKeyForAsset(call.arguments as String)
key
)
result.success("OK");
}
@@ -297,10 +312,6 @@ PlatformView {
_lib.grab_end(_viewer!!)
result.success("OK");
}
"releaseSourceAssets" -> {
_lib.release_source_assets(_viewer!!)
result.success("OK");
}
"removeAsset" -> {
_lib.remove_asset(_viewer!!)
result.success("OK");