diff --git a/android/src/main/kotlin/app/polyvox/filament/FilamentInterop.kt b/android/src/main/kotlin/app/polyvox/filament/FilamentInterop.kt index 0d474b25..186ee1d4 100644 --- a/android/src/main/kotlin/app/polyvox/filament/FilamentInterop.kt +++ b/android/src/main/kotlin/app/polyvox/filament/FilamentInterop.kt @@ -29,65 +29,65 @@ 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: Any?) -fun get_asset_manager(viewer: Any?): Any? -fun create_render_target(viewer: Any?, texture_id: Int, width: Int, height: Int) -fun clear_background_image(viewer: Any?) -fun set_background_image(viewer: Any?, path: String, fill_height: Boolean) -fun set_background_image_position(viewer: Any?, x: Float, y: Float, clamp: Boolean) -fun set_background_color(viewer: Any?, r: Float, g: Float, b: Float, a: Float) -fun set_tone_mapping(viewer: Any?, tone_mapping: Int) -fun set_bloom(viewer: Any?, strength: Float) -fun load_skybox(viewer: Any?, skybox_path: String) -fun load_ibl(viewer: Any?, ibl_path: String, intensity: Float) -fun remove_skybox(viewer: Any?) -fun remove_ibl(viewer: Any?) -fun add_light(viewer: Any?, type: Byte, colour: Float, intensity: Float, pos_x: Float, pos_y: Float, pos_z: Float, dir_x: Float, dir_y: Float, dir_z: Float, shadows: Boolean): EntityId -fun remove_light(viewer: Any?, entity_id: EntityId) -fun clear_lights(viewer: Any?) -fun load_glb(asset_manager: Any?, asset_path: String, unlit: Boolean): EntityId -fun load_gltf(asset_manager: Any?, asset_path: String, relative_path: String): EntityId -fun set_camera(viewer: Any?, asset: EntityId, node_name: String): Boolean -fun render(viewer: Any?, frame_time_in_nanos: Long) +fun delete_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) +fun set_background_image(viewer: Pointer, path: String, fill_height: Boolean) +fun set_background_image_position(viewer: Pointer, x: Float, y: Float, clamp: Boolean) +fun set_background_color(viewer: Pointer, r: Float, g: Float, b: Float, a: Float) +fun set_tone_mapping(viewer: Pointer, tone_mapping: Int) +fun set_bloom(viewer: Pointer, strength: Float) +fun load_skybox(viewer: Pointer, skybox_path: String) +fun load_ibl(viewer: Pointer, ibl_path: String, intensity: Float) +fun remove_skybox(viewer: Pointer) +fun remove_ibl(viewer: Pointer) +fun add_light(viewer: Pointer, type: Byte, colour: Float, intensity: Float, pos_x: Float, pos_y: Float, pos_z: Float, dir_x: Float, dir_y: Float, dir_z: Float, shadows: Boolean): EntityId +fun remove_light(viewer: Pointer, entity_id: EntityId) +fun clear_lights(viewer: Pointer) +fun load_glb(asset_manager: Pointer, asset_path: String, unlit: Boolean): EntityId +fun load_gltf(asset_manager: Pointer, asset_path: String, relative_path: String): EntityId +fun set_camera(viewer: Pointer, asset: EntityId, node_name: String): Boolean +fun render(viewer: Pointer, frame_time_in_nanos: Long) -fun destroy_swap_chain(viewer: Any?) -fun set_frame_interval(viewer: Any?, interval: Float) -fun update_viewport_and_camera_projection(viewer: Any?, width: UInt, height: UInt, scale_factor: Float) -fun scroll_begin(viewer: Any?) -fun scroll_update(viewer: Any?, x: Float, y: Float, z: Float) -fun scroll_end(viewer: Any?) -fun grab_begin(viewer: Any?, x: Float, y: Float, pan: Boolean) -fun grab_update(viewer: Any?, x: Float, y: Float) -fun grab_end(viewer: Any?) -fun apply_weights(asset_manager: Any?, asset: EntityId, entity_name: String, weights: FloatArray, count: Int) -fun set_morph_target_weights(asset_manager: Any?, asset: EntityId, entity_name: String, morph_data: FloatArray, num_weights: Int) -fun set_morph_animation(asset_manager: Any?, asset: EntityId, entity_name: String, morph_data: FloatArray, morph_indices: IntArray, num_morph_targets: Int, num_frames: Int, frame_length_in_ms: Int): Boolean -fun set_bone_animation(asset_manager: Any?, asset: EntityId, frame_data: FloatArray, num_frames: Int, num_bones: Int, bone_names: Array, mesh_name: Array, num_mesh_targets: Int, frame_length_in_ms: Int) -fun play_animation(asset_manager: Any?, asset: EntityId, index: Int, loop: Boolean, reverse: Boolean, replace_active: Boolean, crossfade: Float) -fun set_animation_frame(asset_manager: Any?, asset: EntityId, animation_index: Int, animation_frame: Int) -fun stop_animation(asset_manager: Any?, asset: EntityId, index: Int) -fun get_animation_count(asset_manager: Any?, asset: EntityId): Int -fun get_animation_name(asset_manager: Any?, asset: EntityId, out_ptr: String, index: Int) -fun get_animation_duration(asset_manager: Any?, asset: EntityId, index: Int): Float -fun get_morph_target_name(asset_manager: Any?, asset: EntityId, mesh_name: String, out_ptr: String, index: Int) -fun get_morph_target_name_count(asset_manager: Any?, asset: EntityId, mesh_name: String): Int -fun remove_asset(viewer: Any?, asset: EntityId) -fun clear_assets(viewer: Any?) -fun load_texture(asset_manager: Any?, asset: EntityId, asset_path: String, renderable_index: Int) -fun set_texture(asset_manager: Any?, asset: EntityId) -fun set_material_color(asset_manager: Any?, asset: EntityId, mesh_name: String, material_index: Int, r: Float, g: Float, b: Float, a: Float): Boolean -fun transform_to_unit_cube(asset_manager: Any?, asset: EntityId) -fun set_position(asset_manager: Any?, asset: EntityId, x: Float, y: Float, z: Float) -fun set_rotation(asset_manager: Any?, asset: EntityId, rads: Float, x: Float, y: Float, z: Float) -fun set_scale(asset_manager: Any?, asset: EntityId, scale: Float) -fun set_camera_exposure(viewer: Any?, aperture: Float, shutter_speed: Float, sensitivity: Float) -fun set_camera_position(viewer: Any?, x: Float, y: Float, z: Float) -fun set_camera_rotation(viewer: Any?, rads: Float, x: Float, y: Float, z: Float) -fun set_camera_model_matrix(viewer: Any?, matrix: FloatArray) -fun set_camera_focal_length(viewer: Any?, focal_length: Float) -fun set_camera_focus_distance(viewer: Any?, focus_distance: Float) -fun hide_mesh(asset_manager: Any?, asset: EntityId, mesh_name: String): Int -fun reveal_mesh(asset_manager: Any?, asset: EntityId, mesh_name: String): Int +fun destroy_swap_chain(viewer: Pointer) +fun set_frame_interval(viewer: Pointer, interval: Float) +fun update_viewport_and_camera_projection(viewer: Pointer, width: UInt, height: UInt, scale_factor: Float) +fun scroll_begin(viewer: Pointer) +fun scroll_update(viewer: Pointer, x: Float, y: Float, z: Float) +fun scroll_end(viewer: Pointer) +fun grab_begin(viewer: Pointer, x: Float, y: Float, pan: Boolean) +fun grab_update(viewer: Pointer, x: Float, y: Float) +fun grab_end(viewer: Pointer) +fun apply_weights(asset_manager: Pointer, asset: EntityId, entity_name: String, weights: FloatArray, count: Int) +fun set_morph_target_weights(asset_manager: Pointer, asset: EntityId, entity_name: String, morph_data: FloatArray, num_weights: Int) +fun set_morph_animation(asset_manager: Pointer, asset: EntityId, entity_name: String, morph_data: FloatArray, morph_indices: IntArray, num_morph_targets: Int, num_frames: Int, frame_length_in_ms: Int): Boolean +fun set_bone_animation(asset_manager: Pointer, asset: EntityId, frame_data: FloatArray, num_frames: Int, num_bones: Int, bone_names: Array, mesh_name: Array, num_mesh_targets: Int, frame_length_in_ms: Int) +fun play_animation(asset_manager: Pointer, asset: EntityId, index: Int, loop: Boolean, reverse: Boolean, replace_active: Boolean, crossfade: Float) +fun set_animation_frame(asset_manager: Pointer, asset: EntityId, animation_index: Int, animation_frame: Int) +fun stop_animation(asset_manager: Pointer, asset: EntityId, index: Int) +fun get_animation_count(asset_manager: Pointer, asset: EntityId): Int +fun get_animation_name(asset_manager: Pointer, asset: EntityId, out_ptr: String, index: Int) +fun get_animation_duration(asset_manager: Pointer, asset: EntityId, index: Int): Float +fun get_morph_target_name(asset_manager: Pointer, asset: EntityId, mesh_name: String, out_ptr: String, index: Int) +fun get_morph_target_name_count(asset_manager: Pointer, asset: EntityId, mesh_name: String): Int +fun remove_asset(viewer: Pointer, asset: EntityId) +fun clear_assets(viewer: Pointer) +fun load_texture(asset_manager: Pointer, asset: EntityId, asset_path: String, renderable_index: Int) +fun set_texture(asset_manager: Pointer, asset: EntityId) +fun set_material_color(asset_manager: Pointer, asset: EntityId, mesh_name: String, material_index: Int, r: Float, g: Float, b: Float, a: Float): Boolean +fun transform_to_unit_cube(asset_manager: Pointer, asset: EntityId) +fun set_position(asset_manager: Pointer, asset: EntityId, x: Float, y: Float, z: Float) +fun set_rotation(asset_manager: Pointer, asset: EntityId, rads: Float, x: Float, y: Float, z: Float) +fun set_scale(asset_manager: Pointer, asset: EntityId, scale: Float) +fun set_camera_exposure(viewer: Pointer, aperture: Float, shutter_speed: Float, sensitivity: Float) +fun set_camera_position(viewer: Pointer, x: Float, y: Float, z: Float) +fun set_camera_rotation(viewer: Pointer, rads: Float, x: Float, y: Float, z: Float) +fun set_camera_model_matrix(viewer: Pointer, matrix: FloatArray) +fun set_camera_focal_length(viewer: Pointer, focal_length: Float) +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; } diff --git a/android/src/main/kotlin/app/polyvox/filament/HotReloadPathHelper.kt b/android/src/main/kotlin/app/polyvox/filament/HotReloadPathHelper.kt index cdf1f9bf..282de021 100644 --- a/android/src/main/kotlin/app/polyvox/filament/HotReloadPathHelper.kt +++ b/android/src/main/kotlin/app/polyvox/filament/HotReloadPathHelper.kt @@ -11,7 +11,7 @@ class HotReloadPathHelper { companion object { fun getAssetPath(path: String, packageName: String): String? { val packagePath = "/data/user/0/${packageName}/code_cache/" - Log.v("FFI", "Looking for path ${path} under package path ${packagePath}") + Log.v("polyvox_filament", "Looking for hot reloaded asset ${path} under package path ${packagePath}") val files = File(packagePath).walkBottomUp().filter { it.path.endsWith(path) }.sortedBy { diff --git a/android/src/main/kotlin/app/polyvox/filament/PolyvoxFilamentPlugin.kt b/android/src/main/kotlin/app/polyvox/filament/PolyvoxFilamentPlugin.kt index c9ce8bde..2a4428fa 100644 --- a/android/src/main/kotlin/app/polyvox/filament/PolyvoxFilamentPlugin.kt +++ b/android/src/main/kotlin/app/polyvox/filament/PolyvoxFilamentPlugin.kt @@ -220,8 +220,8 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } "destroyViewer" -> { if (_viewer != null) { - _lib.destroy_swap_chain(_viewer) - _lib.delete_filament_viewer(_viewer) + _lib.destroy_swap_chain(_viewer!!) + _lib.delete_filament_viewer(_viewer!!) _viewer = null } result.success(true) @@ -233,7 +233,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } val wasRendering = _rendering; _rendering = false - _lib.destroy_swap_chain(_viewer) + _lib.destroy_swap_chain(_viewer!!) val args = call.arguments as List val width = 100 // args[0] as Int val height = 100 // args[1] as Int @@ -248,8 +248,8 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } "createFilamentViewer" -> { if (_viewer != null) { - _lib.destroy_swap_chain(_viewer) - _lib.delete_filament_viewer(_viewer) + _lib.destroy_swap_chain(_viewer!!) + _lib.delete_filament_viewer(_viewer!!) _viewer = null } val resourceLoader = _lib.make_resource_loader(this, this, Pointer(0)) @@ -260,24 +260,23 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo // _glContext!!.nativeHandle, // resourceLoader) val args = call.arguments as List - var width = 100.0 // args[0] as Double - val height = 100.0 // args[1] as Double -// if(width < 1 || height < 1) { -// result.error("DIMENSION_MISMATCH","Both dimensions must be greater than zero", null); -// return; -// } + var width = args[0] as Double + val height = args[1] as Double + if(width < 1 || height < 1) { + result.error("DIMENSION_MISMATCH","Both dimensions must be greater than zero", null); + return; + } _lib.create_swap_chain(_viewer!!, nativeWindow, width.toInt(), height.toInt()) - // _lib.create_swap_chain(_viewer!!, null, width.toInt(), height.toInt()) - // _lib.create_render_target(_viewer, _glTextureId, width.toInt(),height.toInt()); + // _lib.create_render_target(_viewer!!, _glTextureId, width.toInt(),height.toInt()); result.success(Pointer.nativeValue(_viewer!!)) } "getAssetManager" -> { - val assetManager = _lib.get_asset_manager(_viewer) - result.success(assetManager) + val assetManager = _lib.get_asset_manager(_viewer!!) + result.success(assetManager!!) } "clearBackgroundImage" -> { - _lib.clear_background_image(_viewer) + _lib.clear_background_image(_viewer!!) result.success(true) } "setBackgroundImage" -> { @@ -285,44 +284,44 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val path = args[0] as String val fillHeight = args[1] as Boolean - _lib.set_background_image(_viewer, path, fillHeight) + _lib.set_background_image(_viewer!!, path, fillHeight) result.success(true) } "setBackgroundImagePosition" -> { val args = call.arguments as List<*> - _lib.set_background_image_position(_viewer, args[0] as Float, args[1] as Float, args[2] as Boolean) + _lib.set_background_image_position(_viewer!!, args[0] as Float, args[1] as Float, args[2] as Boolean) result.success(true) } "setBackgroundColor" -> { val args = call.arguments as List - _lib.set_background_color(_viewer, args[0].toFloat(), args[1].toFloat(), args[2].toFloat(), args[3].toFloat()) + _lib.set_background_color(_viewer!!, args[0].toFloat(), args[1].toFloat(), args[2].toFloat(), args[3].toFloat()) result.success(true) } "setToneMapping" -> { val args = call.arguments as Int - _lib.set_tone_mapping(_viewer, args); + _lib.set_tone_mapping(_viewer!!, args); result.success(true) } "setBloom" -> { val args = call.arguments as Float - _lib.set_bloom(_viewer, args as Float); + _lib.set_bloom(_viewer!!, args as Float); result.success(true) } "loadSkybox" -> { - _lib.load_skybox(_viewer, call.arguments as String) + _lib.load_skybox(_viewer!!, call.arguments as String) result.success(true) } "loadIbl" -> { val args = call.arguments as List<*> - _lib.load_ibl(_viewer, args[0] as String, args[1] as Float) + _lib.load_ibl(_viewer!!, args[0] as String, args[1] as Float) result.success(true) } "removeSkybox" -> { - _lib.remove_skybox(_viewer) + _lib.remove_skybox(_viewer!!) result.success(true) } "removeIbl" -> { - _lib.remove_ibl(_viewer) + _lib.remove_ibl(_viewer!!) result.success(true) } "addLight" -> { @@ -339,52 +338,51 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val dirZ = args[8] as Float val shadows = args[9] as Boolean - val entityId = _lib.add_light(_viewer, type, colour as Float, intensity as Float,posX as Float, posY as Float, posZ as Float, dirX as Float, dirY as Float, dirZ as Float, shadows) + val entityId = _lib.add_light(_viewer!!, type, colour as Float, intensity as Float,posX as Float, posY as Float, posZ as Float, dirX as Float, dirY as Float, dirZ as Float, shadows) result.success(entityId) } } "removeLight" -> { - _lib.remove_light(_viewer, call.arguments as Int) + _lib.remove_light(_viewer!!, call.arguments as Int) result.success(true) } "clearLights" -> { - _lib.clear_lights(_viewer) + _lib.clear_lights(_viewer!!) result.success(true) } "loadGlb" -> { val args = call.arguments as List if (args.size != 3) { - result.error("INVALID_ARGUMENTS", "Expected assetManager, assetPath, and unlit for load_glb", null) + result.error("INVALID_ARGUMENTS", "Expected assetManager!!, assetPath, and unlit for load_glb", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val assetPath = args[1] as String val unlit = args[2] as Boolean - val entityId =_lib.load_glb(assetManager, assetPath, unlit) + val entityId =_lib.load_glb(assetManager!!, assetPath, unlit) result.success(entityId) } "loadGltf" -> { val args = call.arguments as List if (args.size != 3) { - result.error("INVALID_ARGUMENTS", "Expected assetManager, assetPath, and relativePath for load_gltf", null) + result.error("INVALID_ARGUMENTS", "Expected assetManager!!, assetPath, and relativePath for load_gltf", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val assetPath = args[1] as String val relativePath = args[2] as String - val entityId =_lib.load_gltf(assetManager, assetPath, relativePath) + val entityId =_lib.load_gltf(assetManager!!, assetPath, relativePath) result.success(entityId) } "transformToUnitCube" -> { val args = call.arguments as List - _lib.transform_to_unit_cube(args[0] as Int, args[1] as EntityId) + val assetManager = Pointer((args[0] as Int).toLong()) + val entityId = args[1] as EntityId + _lib.transform_to_unit_cube(assetManager, entityId) result.success(true) } "render" -> { -// val canvas = _surface!!.lockHardwareCanvas() -// canvas.drawColor(Color.BLUE) -// _surface!!.unlockCanvasAndPost(canvas) - _lib.render(_viewer, 0) + _lib.render(_viewer!!, 0) // _surfaceTexture!!.updateTexImage() result.success(true) } @@ -394,7 +392,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } "setFrameInterval" -> { if (_viewer != null) { - _lib.set_frame_interval(_viewer, call.arguments as Float) + _lib.set_frame_interval(_viewer!!, call.arguments as Float) } result.success(true) } @@ -403,11 +401,11 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val width = args[0] as Int val height = args[1] as Int val scaleFactor = args[2] as Double - // _lib.update_viewport_and_camera_projection(_viewer, width.toUInt(), height.toUInt(), scaleFactor.toFloat()) + // _lib.update_viewport_and_camera_projection(_viewer!!, width.toUInt(), height.toUInt(), scaleFactor.toFloat()) result.success(true) } "scrollBegin" -> { - _lib.scroll_begin(_viewer) + _lib.scroll_begin(_viewer!!) result.success(true) } "scrollUpdate" -> { @@ -419,11 +417,11 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val x = args[0] as Float val y = args[1] as Float val z = args[2] as Float - _lib.scroll_update(_viewer, x.toFloat(), y.toFloat(), z.toFloat()) + _lib.scroll_update(_viewer!!, x.toFloat(), y.toFloat(), z.toFloat()) result.success(true) } "scrollEnd" -> { - _lib.scroll_end(_viewer) + _lib.scroll_end(_viewer!!) result.success(true) } "grabBegin" -> { @@ -435,7 +433,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val x = args[0] as Float val y = args[1] as Float val pan = args[2] as Boolean - _lib.grab_begin(_viewer, x.toFloat(), y.toFloat(), pan) + _lib.grab_begin(_viewer!!, x.toFloat(), y.toFloat(), pan) result.success(true) } "grabUpdate" -> { @@ -446,11 +444,11 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } val x = args[0] as Float val y = args[1] as Float - _lib.grab_update(_viewer, x.toFloat(), y.toFloat()) + _lib.grab_update(_viewer!!, x.toFloat(), y.toFloat()) result.success(true) } "grabEnd" -> { - _lib.grab_end(_viewer) + _lib.grab_end(_viewer!!) result.success(true) } "applyWeights" -> { @@ -464,19 +462,19 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo // result.success(FlutterError(code: "INVALID_ARGUMENTS", message: "Expected correct arguments for apply_weights", details: nil)) // return // } - // _lib.apply_weights(assetManager, asset, entityName, UnsafeMutablePointer(&weights), count) + // _lib.apply_weights(assetManager!!, asset, entityName, UnsafeMutablePointer(&weights), count) result.success(true) } "setMorphTargetWeights" -> { val args = call.arguments as List - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val entityName = args[2] as String val morphData = args[3] as List val numMorphWeights = args[4] as Int _lib.set_morph_target_weights( - assetManager, + assetManager!!, asset, entityName, morphData.map { it.toFloat() }.toFloatArray(), @@ -487,7 +485,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } "setMorphAnimation" -> { val args = call.arguments as List - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val entityName = args[2] as String val morphData = args[3] as List @@ -499,7 +497,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val frameData = morphData.map { it.toFloat() } val success =_lib.set_morph_animation( - assetManager, + assetManager!!, asset, entityName, frameData.toFloatArray(), @@ -516,7 +514,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for set_bone_animation", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val frameData = args[2] as FloatArray val numFrames = args[3] as Int @@ -525,7 +523,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo val meshNames = args[6] as Array val numMeshTargets = args[7] as Int val frameLengthInMs = args[8] as Int - _lib.set_bone_animation(assetManager, asset, frameData, numFrames, numBones, boneNames, meshNames, numMeshTargets, frameLengthInMs) + _lib.set_bone_animation(assetManager!!, asset, frameData, numFrames, numBones, boneNames, meshNames, numMeshTargets, frameLengthInMs) result.success(true) } "playAnimation" -> { @@ -534,14 +532,14 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for play_animation", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val index = args[2] as Int val loop = args[3] as Boolean val reverse = args[4] as Boolean val replaceActive = args[5] as Boolean val crossfade = args[6] as Float - _lib.play_animation(assetManager, asset, index, loop, reverse, replaceActive, crossfade.toFloat()) + _lib.play_animation(assetManager!!, asset, index, loop, reverse, replaceActive, crossfade.toFloat()) result.success(true) } "getAnimationDuration" -> { @@ -550,11 +548,11 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for getAnimationDuration", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val animationIndex = args[2] as Int - val dur =_lib.get_animation_duration(assetManager, asset, animationIndex) + val dur =_lib.get_animation_duration(assetManager!!, asset, animationIndex) result.success(dur) } "setAnimationFrame" -> { @@ -563,12 +561,12 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for set_animation_frame", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val animationIndex = args[2] as Int val animationFrame = args[3] as Int - _lib.set_animation_frame(assetManager, asset, animationIndex, animationFrame) + _lib.set_animation_frame(assetManager!!, asset, animationIndex, animationFrame) result.success(true) } "stopAnimation" -> { @@ -577,10 +575,10 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for stop_animation", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val index = args[2] as Int - _lib.stop_animation(assetManager, asset, index) + _lib.stop_animation(assetManager!!, asset, index) result.success(true) } "getAnimationCount" -> { @@ -589,9 +587,9 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for get_animation_count", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int - val count =_lib.get_animation_count(assetManager, asset) + val count =_lib.get_animation_count(assetManager!!, asset) result.success(count) } "getAnimationNames" -> { @@ -600,13 +598,13 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for get_animation_name", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val names = mutableListOf() - val count =_lib.get_animation_count(assetManager, asset) + val count =_lib.get_animation_count(assetManager!!, asset) val buffer = "" // Assuming max name length of 256 for simplicity for (i in 0 until count) { - _lib.get_animation_name(assetManager, asset, buffer, i) + _lib.get_animation_name(assetManager!!, asset, buffer, i) names.add(buffer) } result.success(names) @@ -617,11 +615,11 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for get_animation_name", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val index = args[2] as Int val buffer = "" // Assuming max name length of 256 for simplicity - _lib.get_animation_name(assetManager, asset, buffer, index) + _lib.get_animation_name(assetManager!!, asset, buffer, index) val name = buffer result.success(name) } @@ -631,13 +629,13 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for get_morph_target_name", null) return } - val assetManager = args[0] as? Long ?: return + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as? EntityId ?: return val meshName = args[2] as? String ?: return val index = args[3] as? Int ?: return val buffer = "" // Assuming max name length of 256 for simplicity - _lib.get_morph_target_name(assetManager, asset, meshName, buffer, index) + _lib.get_morph_target_name(assetManager!!, asset, meshName, buffer, index) val targetName = buffer result.success(targetName) } @@ -647,16 +645,17 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for get_morph_target_names", null) return } - val assetManager = args[0] as? Long ?: return + val assetManager = Pointer((args[0] as Int).toLong()) + val asset = args[1] as? EntityId ?: return val meshName = args[2] as? String ?: return - val count =_lib.get_morph_target_name_count(assetManager, asset, meshName) + val count =_lib.get_morph_target_name_count(assetManager!!, asset, meshName) val names = ArrayList() if (count > 0) { for (i in 0 until count) { val buffer = "" // Assuming max name length of 256 for simplicity - _lib.get_morph_target_name(assetManager, asset, meshName, buffer, i) + _lib.get_morph_target_name(assetManager!!, asset, meshName, buffer, i) names.add(buffer) } } @@ -668,18 +667,18 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo result.error("INVALID_ARGUMENTS", "Expected correct arguments for getMorphTargetNameCount", null) return } - val assetManager = args[0] as Int + val assetManager = Pointer((args[0] as Int).toLong()) val asset = args[1] as Int val meshName = args[2] as String - val count =_lib.get_morph_target_name_count(assetManager, asset, meshName) + val count =_lib.get_morph_target_name_count(assetManager!!, asset, meshName) result.success(count) } "removeAsset" -> { - _lib.remove_asset(_viewer, call.arguments as Int) + _lib.remove_asset(_viewer!!, call.arguments as Int) result.success(true) } "clearAssets" -> { - _lib.clear_assets(_viewer) + _lib.clear_assets(_viewer!!) result.success(true) } "setCamera" -> { @@ -690,30 +689,30 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo } val asset = args[0] as Int val nodeName = args[1] as String - val success =_lib.set_camera(_viewer, asset, nodeName) + val success =_lib.set_camera(_viewer!!, asset, nodeName) result.success(success) } "setCameraPosition" -> { val args = call.arguments as List<*> - _lib.set_camera_position(_viewer, (args[0] as Float).toFloat(), (args[1] as Float).toFloat(), (args[2] as Float).toFloat()) + _lib.set_camera_position(_viewer!!, (args[0] as Float).toFloat(), (args[1] as Float).toFloat(), (args[2] as Float).toFloat()) result.success(true) } "setCameraRotation" -> { val args = call.arguments as List<*> - _lib.set_camera_rotation(_viewer, args[0] as Float, args[1] as Float, args[2] as Float, args[3] as Float) + _lib.set_camera_rotation(_viewer!!, args[0] as Float, args[1] as Float, args[2] as Float, args[3] as Float) result.success(true) } "setCameraModelMatrix" -> { val matrix = call.arguments as List - _lib.set_camera_model_matrix(_viewer, matrix.toFloatArray()) + _lib.set_camera_model_matrix(_viewer!!, matrix.toFloatArray()) result.success(true) } "setCameraFocalLength" -> { - _lib.set_camera_focal_length(_viewer, call.arguments as Float) + _lib.set_camera_focal_length(_viewer!!, call.arguments as Float) result.success(true) } "setCameraFocusDistance" -> { - _lib.set_camera_focus_distance(_viewer, call.arguments as Float) + _lib.set_camera_focus_distance(_viewer!!, call.arguments as Float) result.success(true) } "setMaterialColor" -> { @@ -759,7 +758,7 @@ class PolyvoxFilamentPlugin: FlutterPlugin, MethodCallHandler, ActivityAware, Lo var _ptr:Pointer = Pointer(0) override fun loadResourceFromOwner(path: String?, owner: Pointer?): ResourceBuffer { - Log.i("Loading resource from path $path") + Log.i("polyvox_filament", "Loading resource from path $path") var data:ByteArray? = null if(path!!.startsWith("file://")) { data = File(path!!.substring(6)).readBytes() diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index c9738bec..443353fe 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -77,5 +77,5 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2" implementation "androidx.annotation:annotation:1.3.0" implementation "androidx.core:core:1.7.0" - compile 'net.java.dev.jna:jna:5.10.0@aar' + implementation 'net.java.dev.jna:jna:5.10.0@aar' }