initial work to re-implement FFI with background thread render loop

This commit is contained in:
Nick Fisher
2023-09-29 13:54:04 +08:00
parent 1b49706eca
commit a6506e6346
39 changed files with 6819 additions and 53973 deletions

View File

@@ -17,11 +17,11 @@ open class ResourceBuffer: Structure(), Structure.ByValue {
}
}
interface LoadResourceFromOwner : Callback {
interface LoadFilamentResourceFromOwner : Callback {
fun loadResourceFromOwner(resourceName: String?, owner: Pointer?): ResourceBuffer
}
interface FreeResourceFromOwner : Callback {
interface FreeFilamentResourceFromOwner : Callback {
fun freeResourceFromOwner(rb: ResourceBuffer, owner: Pointer?)
}
interface FilamentInterop : Library {
@@ -29,7 +29,7 @@ interface FilamentInterop : Library {
fun create_filament_viewer(context:Pointer, loader:Pointer) : Pointer;
fun create_swap_chain(viewer: Pointer, window:Pointer?, width:Int, height:Int);
fun get_native_window_from_surface(surface:Object, env:JNIEnv) : Pointer;
fun delete_filament_viewer(viewer: Pointer)
fun destroy_filament_viewer(viewer: Pointer)
fun get_asset_manager(viewer: Pointer?): Pointer?
fun create_render_target(viewer: Pointer, texture_id: Int, width: Int, height: Int)
fun clear_background_image(viewer: Pointer)
@@ -89,6 +89,6 @@ fun set_camera_focus_distance(viewer: Pointer, focus_distance: Float)
fun hide_mesh(asset_manager: Pointer, asset: EntityId, mesh_name: String): Int
fun reveal_mesh(asset_manager: Pointer, asset: EntityId, mesh_name: String): Int
fun ios_dummy()
fun make_resource_loader(loadResourceFromOwner: LoadResourceFromOwner, freeResource: FreeResourceFromOwner, owner:Pointer?) : Pointer;
fun make_resource_loader(loadResourceFromOwner: LoadFilamentResourceFromOwner, freeResource: FreeFilamentResourceFromOwner, owner:Pointer?) : Pointer;
}

View File

@@ -32,7 +32,7 @@ import java.util.concurrent.Executors
typealias EntityId = Int
/** PolyvoxFilamentPlugin */
class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, LoadResourceFromOwner, FreeResourceFromOwner {
class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, LoadFilamentResourceFromOwner, FreeFilamentResourceFromOwner {
private val lock = Object()
@@ -221,7 +221,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo
"destroyViewer" -> {
if (_viewer != null) {
_lib.destroy_swap_chain(_viewer!!)
_lib.delete_filament_viewer(_viewer!!)
_lib.destroy_filament_viewer(_viewer!!)
_viewer = null
}
result.success(true)
@@ -249,7 +249,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo
"createFilamentViewer" -> {
if (_viewer != null) {
_lib.destroy_swap_chain(_viewer!!)
_lib.delete_filament_viewer(_viewer!!)
_lib.destroy_filament_viewer(_viewer!!)
_viewer = null
}
val resourceLoader = _lib.make_resource_loader(this, this, Pointer(0))