From c1f8eae85ee37ef9238dbf5d311b01af07927050 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Tue, 3 Oct 2023 22:04:37 +0800 Subject: [PATCH] add toggle for postprocessing and minor cleanup work --- example/lib/main.dart | 8 +- ios/include/FilamentViewer.hpp | 1 + ios/include/PolyvoxFilamentApi.h | 1 + ios/include/PolyvoxFilamentFFIApi.h | 1 + ios/src/FilamentViewer.cpp | 14 +- ios/src/PolyvoxFilamentApi.cpp | 6 +- ios/src/PolyvoxFilamentFFIApi.cpp | 21 +- lib/filament_controller_ffi.dart | 14 +- lib/generated_bindings.dart | 349 ++++++++++++++++-- macos/include/FilamentViewer.hpp | 1 + macos/include/PolyvoxFilamentApi.h | 1 + macos/include/PolyvoxFilamentFFIApi.h | 68 ++-- macos/include/ResourceBuffer.hpp | 4 +- macos/include/{ => filament}/GL/glcorearb.h | 0 macos/include/{ => filament}/GL/glext.h | 0 macos/include/{ => filament}/GL/wglext.h | 0 .../include/{ => filament}/KHR/.clang-format | 0 .../include/{ => filament}/KHR/khrplatform.h | 0 .../{ => filament}/backend/AcquiredImage.h | 0 .../{ => filament}/backend/BufferDescriptor.h | 0 .../{ => filament}/backend/CallbackHandler.h | 0 .../{ => filament}/backend/DriverApiForward.h | 0 .../{ => filament}/backend/DriverEnums.h | 0 macos/include/{ => filament}/backend/Handle.h | 0 .../{ => filament}/backend/PipelineState.h | 0 .../backend/PixelBufferDescriptor.h | 0 .../include/{ => filament}/backend/Platform.h | 0 .../{ => filament}/backend/PresentCallable.h | 0 .../include/{ => filament}/backend/Program.h | 0 .../include/{ => filament}/backend/README.md | 0 .../backend/SamplerDescriptor.h | 0 .../{ => filament}/backend/TargetBufferInfo.h | 0 .../backend/platforms/OpenGLPlatform.h | 0 .../backend/platforms/PlatformCocoaGL.h | 0 .../backend/platforms/PlatformCocoaTouchGL.h | 0 .../backend/platforms/PlatformEGL.h | 0 .../backend/platforms/PlatformEGLAndroid.h | 0 .../backend/platforms/PlatformEGLHeadless.h | 0 .../backend/platforms/PlatformGLX.h | 0 .../backend/platforms/PlatformWGL.h | 0 .../backend/platforms/PlatformWebGL.h | 0 .../backend/platforms/VulkanPlatform.h | 0 macos/include/{ => filament}/bluegl/BlueGL.h | 0 .../{ => filament}/bluegl/BlueGLDefines.h | 0 .../{ => filament}/camutils/Bookmark.h | 0 .../{ => filament}/camutils/Manipulator.h | 0 .../{ => filament}/camutils/compiler.h | 0 macos/include/{ => filament}/filamat/Enums.h | 0 .../{ => filament}/filamat/IncludeCallback.h | 0 .../{ => filament}/filamat/MaterialBuilder.h | 0 .../include/{ => filament}/filamat/Package.h | 0 .../IBLPrefilterContext.h | 0 macos/include/filament/{ => filament}/Box.h | 0 .../filament/{ => filament}/BufferObject.h | 0 .../include/filament/{ => filament}/Camera.h | 0 macos/include/filament/{ => filament}/Color.h | 0 .../filament/{ => filament}/ColorGrading.h | 0 .../filament/{ => filament}/ColorSpace.h | 0 .../filament/{ => filament}/DebugRegistry.h | 0 .../include/filament/{ => filament}/Engine.h | 0 .../filament/{ => filament}/Exposure.h | 0 macos/include/filament/{ => filament}/Fence.h | 0 .../filament/{ => filament}/FilamentAPI.h | 0 .../include/filament/{ => filament}/Frustum.h | 0 .../filament/{ => filament}/IndexBuffer.h | 0 .../filament/{ => filament}/IndirectLight.h | 0 .../filament/{ => filament}/InstanceBuffer.h | 0 .../filament/{ => filament}/LightManager.h | 0 .../filament/{ => filament}/Material.h | 0 .../{ => filament}/MaterialChunkType.h | 0 .../filament/{ => filament}/MaterialEnums.h | 0 .../{ => filament}/MaterialInstance.h | 0 .../{ => filament}/MorphTargetBuffer.h | 0 .../include/filament/{ => filament}/Options.h | 0 .../filament/{ => filament}/RenderTarget.h | 0 .../{ => filament}/RenderableManager.h | 0 .../filament/{ => filament}/Renderer.h | 0 macos/include/filament/{ => filament}/Scene.h | 0 .../filament/{ => filament}/SkinningBuffer.h | 0 .../include/filament/{ => filament}/Skybox.h | 0 .../include/filament/{ => filament}/Stream.h | 0 .../filament/{ => filament}/SwapChain.h | 0 .../include/filament/{ => filament}/Texture.h | 0 .../filament/{ => filament}/TextureSampler.h | 0 .../filament/{ => filament}/ToneMapper.h | 0 .../{ => filament}/TransformManager.h | 0 .../filament/{ => filament}/VertexBuffer.h | 0 macos/include/filament/{ => filament}/View.h | 0 .../filament/{ => filament}/Viewport.h | 0 .../{ => filament}/filameshio/MeshReader.h | 0 .../geometry/SurfaceOrientation.h | 0 .../geometry/TangentSpaceMesh.h | 0 .../{ => filament}/geometry/Transcoder.h | 0 .../include/{ => filament}/gltfio/Animator.h | 0 .../{ => filament}/gltfio/AssetLoader.h | 0 .../{ => filament}/gltfio/FilamentAsset.h | 0 .../{ => filament}/gltfio/FilamentInstance.h | 0 .../{ => filament}/gltfio/MaterialProvider.h | 0 .../{ => filament}/gltfio/NodeManager.h | 0 .../{ => filament}/gltfio/ResourceLoader.h | 0 .../{ => filament}/gltfio/TextureProvider.h | 0 .../gltfio/TrsTransformManager.h | 0 .../gltfio/materials/uberarchive.h | 0 macos/include/{ => filament}/gltfio/math.h | 0 macos/include/{ => filament}/ibl/Cubemap.h | 0 macos/include/{ => filament}/ibl/CubemapIBL.h | 0 macos/include/{ => filament}/ibl/CubemapSH.h | 0 .../include/{ => filament}/ibl/CubemapUtils.h | 0 macos/include/{ => filament}/ibl/Image.h | 0 macos/include/{ => filament}/ibl/utilities.h | 0 .../{ => filament}/image/ColorTransform.h | 0 macos/include/{ => filament}/image/ImageOps.h | 0 .../{ => filament}/image/ImageSampler.h | 0 .../include/{ => filament}/image/Ktx1Bundle.h | 0 .../{ => filament}/image/LinearImage.h | 0 .../{ => filament}/imageio/BasisEncoder.h | 0 .../{ => filament}/imageio/HDRDecoder.h | 0 .../{ => filament}/imageio/ImageDecoder.h | 0 .../{ => filament}/imageio/ImageDiffer.h | 0 .../{ => filament}/imageio/ImageEncoder.h | 0 .../{ => filament}/ktxreader/Ktx1Reader.h | 0 .../{ => filament}/ktxreader/Ktx2Reader.h | 0 .../include/{ => filament}/math/TMatHelpers.h | 0 .../{ => filament}/math/TQuatHelpers.h | 0 .../include/{ => filament}/math/TVecHelpers.h | 0 macos/include/{ => filament}/math/compiler.h | 0 macos/include/{ => filament}/math/fast.h | 0 macos/include/{ => filament}/math/half.h | 0 macos/include/{ => filament}/math/mat2.h | 0 macos/include/{ => filament}/math/mat3.h | 0 macos/include/{ => filament}/math/mat4.h | 0 macos/include/{ => filament}/math/mathfwd.h | 0 macos/include/{ => filament}/math/norm.h | 0 macos/include/{ => filament}/math/quat.h | 0 macos/include/{ => filament}/math/scalar.h | 0 macos/include/{ => filament}/math/vec2.h | 0 macos/include/{ => filament}/math/vec3.h | 0 macos/include/{ => filament}/math/vec4.h | 0 macos/include/{ => filament}/mathio/ostream.h | 0 .../{ => filament}/mikktspace/mikktspace.h | 0 .../{ => filament}/tsl/robin_growth_policy.h | 0 macos/include/{ => filament}/tsl/robin_hash.h | 0 macos/include/{ => filament}/tsl/robin_map.h | 0 macos/include/{ => filament}/tsl/robin_set.h | 0 .../{ => filament}/uberz/ArchiveEnums.h | 0 .../{ => filament}/uberz/ReadableArchive.h | 0 .../{ => filament}/uberz/WritableArchive.h | 0 .../include/{ => filament}/utils/Allocator.h | 0 .../{ => filament}/utils/BitmaskEnum.h | 0 macos/include/{ => filament}/utils/CString.h | 0 .../include/{ => filament}/utils/CallStack.h | 0 macos/include/{ => filament}/utils/Entity.h | 0 .../{ => filament}/utils/EntityInstance.h | 0 .../{ => filament}/utils/EntityManager.h | 0 .../utils/FixedCapacityVector.h | 0 .../include/{ => filament}/utils/Invocable.h | 0 macos/include/{ => filament}/utils/Log.h | 0 macos/include/{ => filament}/utils/Mutex.h | 0 .../utils/NameComponentManager.h | 0 macos/include/{ => filament}/utils/Panic.h | 0 macos/include/{ => filament}/utils/Path.h | 0 .../utils/PrivateImplementation-impl.h | 0 .../utils/PrivateImplementation.h | 0 .../utils/SingleInstanceComponentManager.h | 0 macos/include/{ => filament}/utils/Slice.h | 0 macos/include/{ => filament}/utils/SpinLock.h | 0 .../{ => filament}/utils/StructureOfArrays.h | 0 .../include/{ => filament}/utils/algorithm.h | 0 .../{ => filament}/utils/android/Systrace.h | 0 .../utils/android/ThermalManager.h | 0 macos/include/{ => filament}/utils/bitset.h | 0 macos/include/{ => filament}/utils/compiler.h | 0 .../{ => filament}/utils/compressed_pair.h | 0 macos/include/{ => filament}/utils/debug.h | 0 .../{ => filament}/utils/generic/Mutex.h | 0 .../{ => filament}/utils/linux/Condition.h | 0 .../{ => filament}/utils/linux/Mutex.h | 0 macos/include/{ => filament}/utils/memalign.h | 0 macos/include/{ => filament}/utils/ostream.h | 0 .../include/{ => filament}/utils/unwindows.h | 0 .../{ => filament}/viewer/AutomationEngine.h | 0 .../{ => filament}/viewer/AutomationSpec.h | 0 .../{ => filament}/viewer/RemoteServer.h | 0 .../include/{ => filament}/viewer/Settings.h | 0 .../include/{ => filament}/viewer/ViewerGui.h | 0 macos/src/AssetManager.cpp | 72 ++-- macos/src/FilamentViewer.cpp | 113 ++++-- macos/src/PolyvoxFilamentApi.cpp | 6 +- macos/src/PolyvoxFilamentFFIApi.cpp | 34 +- 189 files changed, 568 insertions(+), 146 deletions(-) rename macos/include/{ => filament}/GL/glcorearb.h (100%) rename macos/include/{ => filament}/GL/glext.h (100%) rename macos/include/{ => filament}/GL/wglext.h (100%) rename macos/include/{ => filament}/KHR/.clang-format (100%) rename macos/include/{ => filament}/KHR/khrplatform.h (100%) rename macos/include/{ => filament}/backend/AcquiredImage.h (100%) rename macos/include/{ => filament}/backend/BufferDescriptor.h (100%) rename macos/include/{ => filament}/backend/CallbackHandler.h (100%) rename macos/include/{ => filament}/backend/DriverApiForward.h (100%) rename macos/include/{ => filament}/backend/DriverEnums.h (100%) rename macos/include/{ => filament}/backend/Handle.h (100%) rename macos/include/{ => filament}/backend/PipelineState.h (100%) rename macos/include/{ => filament}/backend/PixelBufferDescriptor.h (100%) rename macos/include/{ => filament}/backend/Platform.h (100%) rename macos/include/{ => filament}/backend/PresentCallable.h (100%) rename macos/include/{ => filament}/backend/Program.h (100%) rename macos/include/{ => filament}/backend/README.md (100%) rename macos/include/{ => filament}/backend/SamplerDescriptor.h (100%) rename macos/include/{ => filament}/backend/TargetBufferInfo.h (100%) rename macos/include/{ => filament}/backend/platforms/OpenGLPlatform.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformCocoaGL.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformCocoaTouchGL.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformEGL.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformEGLAndroid.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformEGLHeadless.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformGLX.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformWGL.h (100%) rename macos/include/{ => filament}/backend/platforms/PlatformWebGL.h (100%) rename macos/include/{ => filament}/backend/platforms/VulkanPlatform.h (100%) rename macos/include/{ => filament}/bluegl/BlueGL.h (100%) rename macos/include/{ => filament}/bluegl/BlueGLDefines.h (100%) rename macos/include/{ => filament}/camutils/Bookmark.h (100%) rename macos/include/{ => filament}/camutils/Manipulator.h (100%) rename macos/include/{ => filament}/camutils/compiler.h (100%) rename macos/include/{ => filament}/filamat/Enums.h (100%) rename macos/include/{ => filament}/filamat/IncludeCallback.h (100%) rename macos/include/{ => filament}/filamat/MaterialBuilder.h (100%) rename macos/include/{ => filament}/filamat/Package.h (100%) rename macos/include/{ => filament}/filament-iblprefilter/IBLPrefilterContext.h (100%) rename macos/include/filament/{ => filament}/Box.h (100%) rename macos/include/filament/{ => filament}/BufferObject.h (100%) rename macos/include/filament/{ => filament}/Camera.h (100%) rename macos/include/filament/{ => filament}/Color.h (100%) rename macos/include/filament/{ => filament}/ColorGrading.h (100%) rename macos/include/filament/{ => filament}/ColorSpace.h (100%) rename macos/include/filament/{ => filament}/DebugRegistry.h (100%) rename macos/include/filament/{ => filament}/Engine.h (100%) rename macos/include/filament/{ => filament}/Exposure.h (100%) rename macos/include/filament/{ => filament}/Fence.h (100%) rename macos/include/filament/{ => filament}/FilamentAPI.h (100%) rename macos/include/filament/{ => filament}/Frustum.h (100%) rename macos/include/filament/{ => filament}/IndexBuffer.h (100%) rename macos/include/filament/{ => filament}/IndirectLight.h (100%) rename macos/include/filament/{ => filament}/InstanceBuffer.h (100%) rename macos/include/filament/{ => filament}/LightManager.h (100%) rename macos/include/filament/{ => filament}/Material.h (100%) rename macos/include/filament/{ => filament}/MaterialChunkType.h (100%) rename macos/include/filament/{ => filament}/MaterialEnums.h (100%) rename macos/include/filament/{ => filament}/MaterialInstance.h (100%) rename macos/include/filament/{ => filament}/MorphTargetBuffer.h (100%) rename macos/include/filament/{ => filament}/Options.h (100%) rename macos/include/filament/{ => filament}/RenderTarget.h (100%) rename macos/include/filament/{ => filament}/RenderableManager.h (100%) rename macos/include/filament/{ => filament}/Renderer.h (100%) rename macos/include/filament/{ => filament}/Scene.h (100%) rename macos/include/filament/{ => filament}/SkinningBuffer.h (100%) rename macos/include/filament/{ => filament}/Skybox.h (100%) rename macos/include/filament/{ => filament}/Stream.h (100%) rename macos/include/filament/{ => filament}/SwapChain.h (100%) rename macos/include/filament/{ => filament}/Texture.h (100%) rename macos/include/filament/{ => filament}/TextureSampler.h (100%) rename macos/include/filament/{ => filament}/ToneMapper.h (100%) rename macos/include/filament/{ => filament}/TransformManager.h (100%) rename macos/include/filament/{ => filament}/VertexBuffer.h (100%) rename macos/include/filament/{ => filament}/View.h (100%) rename macos/include/filament/{ => filament}/Viewport.h (100%) rename macos/include/{ => filament}/filameshio/MeshReader.h (100%) rename macos/include/{ => filament}/geometry/SurfaceOrientation.h (100%) rename macos/include/{ => filament}/geometry/TangentSpaceMesh.h (100%) rename macos/include/{ => filament}/geometry/Transcoder.h (100%) rename macos/include/{ => filament}/gltfio/Animator.h (100%) rename macos/include/{ => filament}/gltfio/AssetLoader.h (100%) rename macos/include/{ => filament}/gltfio/FilamentAsset.h (100%) rename macos/include/{ => filament}/gltfio/FilamentInstance.h (100%) rename macos/include/{ => filament}/gltfio/MaterialProvider.h (100%) rename macos/include/{ => filament}/gltfio/NodeManager.h (100%) rename macos/include/{ => filament}/gltfio/ResourceLoader.h (100%) rename macos/include/{ => filament}/gltfio/TextureProvider.h (100%) rename macos/include/{ => filament}/gltfio/TrsTransformManager.h (100%) rename macos/include/{ => filament}/gltfio/materials/uberarchive.h (100%) rename macos/include/{ => filament}/gltfio/math.h (100%) rename macos/include/{ => filament}/ibl/Cubemap.h (100%) rename macos/include/{ => filament}/ibl/CubemapIBL.h (100%) rename macos/include/{ => filament}/ibl/CubemapSH.h (100%) rename macos/include/{ => filament}/ibl/CubemapUtils.h (100%) rename macos/include/{ => filament}/ibl/Image.h (100%) rename macos/include/{ => filament}/ibl/utilities.h (100%) rename macos/include/{ => filament}/image/ColorTransform.h (100%) rename macos/include/{ => filament}/image/ImageOps.h (100%) rename macos/include/{ => filament}/image/ImageSampler.h (100%) rename macos/include/{ => filament}/image/Ktx1Bundle.h (100%) rename macos/include/{ => filament}/image/LinearImage.h (100%) rename macos/include/{ => filament}/imageio/BasisEncoder.h (100%) rename macos/include/{ => filament}/imageio/HDRDecoder.h (100%) rename macos/include/{ => filament}/imageio/ImageDecoder.h (100%) rename macos/include/{ => filament}/imageio/ImageDiffer.h (100%) rename macos/include/{ => filament}/imageio/ImageEncoder.h (100%) rename macos/include/{ => filament}/ktxreader/Ktx1Reader.h (100%) rename macos/include/{ => filament}/ktxreader/Ktx2Reader.h (100%) rename macos/include/{ => filament}/math/TMatHelpers.h (100%) rename macos/include/{ => filament}/math/TQuatHelpers.h (100%) rename macos/include/{ => filament}/math/TVecHelpers.h (100%) rename macos/include/{ => filament}/math/compiler.h (100%) rename macos/include/{ => filament}/math/fast.h (100%) rename macos/include/{ => filament}/math/half.h (100%) rename macos/include/{ => filament}/math/mat2.h (100%) rename macos/include/{ => filament}/math/mat3.h (100%) rename macos/include/{ => filament}/math/mat4.h (100%) rename macos/include/{ => filament}/math/mathfwd.h (100%) rename macos/include/{ => filament}/math/norm.h (100%) rename macos/include/{ => filament}/math/quat.h (100%) rename macos/include/{ => filament}/math/scalar.h (100%) rename macos/include/{ => filament}/math/vec2.h (100%) rename macos/include/{ => filament}/math/vec3.h (100%) rename macos/include/{ => filament}/math/vec4.h (100%) rename macos/include/{ => filament}/mathio/ostream.h (100%) rename macos/include/{ => filament}/mikktspace/mikktspace.h (100%) rename macos/include/{ => filament}/tsl/robin_growth_policy.h (100%) rename macos/include/{ => filament}/tsl/robin_hash.h (100%) rename macos/include/{ => filament}/tsl/robin_map.h (100%) rename macos/include/{ => filament}/tsl/robin_set.h (100%) rename macos/include/{ => filament}/uberz/ArchiveEnums.h (100%) rename macos/include/{ => filament}/uberz/ReadableArchive.h (100%) rename macos/include/{ => filament}/uberz/WritableArchive.h (100%) rename macos/include/{ => filament}/utils/Allocator.h (100%) rename macos/include/{ => filament}/utils/BitmaskEnum.h (100%) rename macos/include/{ => filament}/utils/CString.h (100%) rename macos/include/{ => filament}/utils/CallStack.h (100%) rename macos/include/{ => filament}/utils/Entity.h (100%) rename macos/include/{ => filament}/utils/EntityInstance.h (100%) rename macos/include/{ => filament}/utils/EntityManager.h (100%) rename macos/include/{ => filament}/utils/FixedCapacityVector.h (100%) rename macos/include/{ => filament}/utils/Invocable.h (100%) rename macos/include/{ => filament}/utils/Log.h (100%) rename macos/include/{ => filament}/utils/Mutex.h (100%) rename macos/include/{ => filament}/utils/NameComponentManager.h (100%) rename macos/include/{ => filament}/utils/Panic.h (100%) rename macos/include/{ => filament}/utils/Path.h (100%) rename macos/include/{ => filament}/utils/PrivateImplementation-impl.h (100%) rename macos/include/{ => filament}/utils/PrivateImplementation.h (100%) rename macos/include/{ => filament}/utils/SingleInstanceComponentManager.h (100%) rename macos/include/{ => filament}/utils/Slice.h (100%) rename macos/include/{ => filament}/utils/SpinLock.h (100%) rename macos/include/{ => filament}/utils/StructureOfArrays.h (100%) rename macos/include/{ => filament}/utils/algorithm.h (100%) rename macos/include/{ => filament}/utils/android/Systrace.h (100%) rename macos/include/{ => filament}/utils/android/ThermalManager.h (100%) rename macos/include/{ => filament}/utils/bitset.h (100%) rename macos/include/{ => filament}/utils/compiler.h (100%) rename macos/include/{ => filament}/utils/compressed_pair.h (100%) rename macos/include/{ => filament}/utils/debug.h (100%) rename macos/include/{ => filament}/utils/generic/Mutex.h (100%) rename macos/include/{ => filament}/utils/linux/Condition.h (100%) rename macos/include/{ => filament}/utils/linux/Mutex.h (100%) rename macos/include/{ => filament}/utils/memalign.h (100%) rename macos/include/{ => filament}/utils/ostream.h (100%) rename macos/include/{ => filament}/utils/unwindows.h (100%) rename macos/include/{ => filament}/viewer/AutomationEngine.h (100%) rename macos/include/{ => filament}/viewer/AutomationSpec.h (100%) rename macos/include/{ => filament}/viewer/RemoteServer.h (100%) rename macos/include/{ => filament}/viewer/Settings.h (100%) rename macos/include/{ => filament}/viewer/ViewerGui.h (100%) diff --git a/example/lib/main.dart b/example/lib/main.dart index 66c80741..e8f8e857 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -53,7 +53,7 @@ class _ExampleWidgetState extends State { bool _vertical = false; bool _rendering = false; int _framerate = 60; - + bool _postProcessing = true; bool _initialized = false; bool _coneHidden = false; @@ -111,6 +111,12 @@ class _ExampleWidgetState extends State { _item(() { _filamentController.loadIbl('assets/default_env/default_env_ibl.ktx'); }, 'load IBL'), + _item(() { + setState(() { + _postProcessing = !_postProcessing; + }); + _filamentController.setPostProcessing(_postProcessing); + }, "${_postProcessing ? "Disable" : "Enable"} postprocessing"), _item( () { _filamentController.removeSkybox(); diff --git a/ios/include/FilamentViewer.hpp b/ios/include/FilamentViewer.hpp index ca939013..6cb5e767 100644 --- a/ios/include/FilamentViewer.hpp +++ b/ios/include/FilamentViewer.hpp @@ -106,6 +106,7 @@ namespace polyvox { int32_t addLight(LightManager::Type t, float colour, float intensity, float posX, float posY, float posZ, float dirX, float dirY, float dirZ, bool shadows); void removeLight(EntityId entityId); void clearLights(); + void setPostProcessing(bool enabled); AssetManager* const getAssetManager() { return (AssetManager* const) _assetManager; diff --git a/ios/include/PolyvoxFilamentApi.h b/ios/include/PolyvoxFilamentApi.h index 517f1a85..deac041a 100644 --- a/ios/include/PolyvoxFilamentApi.h +++ b/ios/include/PolyvoxFilamentApi.h @@ -150,6 +150,7 @@ FLUTTER_PLUGIN_EXPORT void set_camera_focal_length(const void* const viewer, flo FLUTTER_PLUGIN_EXPORT void set_camera_focus_distance(const void* const viewer, float focusDistance); FLUTTER_PLUGIN_EXPORT int hide_mesh(void* assetManager, EntityId asset, const char* meshName); FLUTTER_PLUGIN_EXPORT int reveal_mesh(void* assetManager, EntityId asset, const char* meshName); +FLUTTER_PLUGIN_EXPORT void set_post_processing(void* const viewer, bool enabled); FLUTTER_PLUGIN_EXPORT void ios_dummy(); #ifdef __cplusplus } diff --git a/ios/include/PolyvoxFilamentFFIApi.h b/ios/include/PolyvoxFilamentFFIApi.h index c6ce69d8..e78b6771 100644 --- a/ios/include/PolyvoxFilamentFFIApi.h +++ b/ios/include/PolyvoxFilamentFFIApi.h @@ -83,6 +83,7 @@ FLUTTER_PLUGIN_EXPORT int get_animation_count_ffi(void* const assetManager, Enti FLUTTER_PLUGIN_EXPORT void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index); FLUTTER_PLUGIN_EXPORT void get_morph_target_name_ffi(void* const assetManager, EntityId asset, const char *meshName, char *const outPtr, int index); FLUTTER_PLUGIN_EXPORT int get_morph_target_name_count_ffi(void* const assetManager, EntityId asset, const char *meshName); +FLUTTER_PLUGIN_EXPORT void set_post_processing_ffi(void* const viewer, bool enabled); FLUTTER_PLUGIN_EXPORT void ios_dummy_ffi(); diff --git a/ios/src/FilamentViewer.cpp b/ios/src/FilamentViewer.cpp index f3acea8c..85651be8 100644 --- a/ios/src/FilamentViewer.cpp +++ b/ios/src/FilamentViewer.cpp @@ -143,7 +143,6 @@ FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWr Log("Main camera created"); _view = _engine->createView(); - _view->setPostProcessingEnabled(false); Log("View created"); setToneMapping(ToneMapping::ACES); @@ -247,6 +246,10 @@ FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWr _scene->addEntity(imageEntity); } +void FilamentViewer::setPostProcessing(bool enabled) { + _view->setPostProcessingEnabled(enabled); +} + void FilamentViewer::setBloom(float strength) { decltype(_view->getBloomOptions()) opts; opts.enabled = true; @@ -259,14 +262,20 @@ void FilamentViewer::setToneMapping(ToneMapping toneMapping) { ToneMapper* tm; switch(toneMapping) { case ToneMapping::ACES: + Log("Setting tone mapping to ACES"); tm = new ACESToneMapper(); break; case ToneMapping::LINEAR: + Log("Setting tone mapping to Linear"); tm = new LinearToneMapper(); break; case ToneMapping::FILMIC: + Log("Setting tone mapping to Filmic"); tm = new FilmicToneMapper(); break; + default: + Log("ERROR: Unsupported tone mapping"); + return; } @@ -305,7 +314,7 @@ void FilamentViewer::removeLight(EntityId entityId) { if(entity.isNull()) { Log("Error: light entity not found under ID %d", entityId); } else { - auto removed = remove(_lights.begin(), _lights.end(), entity); + remove(_lights.begin(), _lights.end(), entity); _scene->remove(entity); EntityManager::get().destroy(1, &entity); } @@ -437,7 +446,6 @@ void FilamentViewer::loadTextureFromPath(string path) { void FilamentViewer::setBackgroundColor(const float r, const float g, const float b, const float a) { _imageMaterial->setDefaultParameter("showImage", 0); _imageMaterial->setDefaultParameter("backgroundColor", RgbaType::sRGB, float4(r, g, b, a)); - const Viewport& vp = _view->getViewport(); _imageMaterial->setDefaultParameter("transform", _imageScale); } diff --git a/ios/src/PolyvoxFilamentApi.cpp b/ios/src/PolyvoxFilamentApi.cpp index b56fbbb9..d0675696 100644 --- a/ios/src/PolyvoxFilamentApi.cpp +++ b/ios/src/PolyvoxFilamentApi.cpp @@ -232,7 +232,7 @@ extern "C" { ); } - FLUTTER_PLUGIN_EXPORT void set_bone_animation( + FLUTTER_PLUGIN_EXPORT void set_bone_animation( void* assetManager, EntityId asset, const float* const frameData, @@ -254,6 +254,10 @@ extern "C" { ); } + FLUTTER_PLUGIN_EXPORT void set_post_processing(void* const viewer, bool enabled) { + ((FilamentViewer*)viewer)->setPostProcessing(enabled); + } + // void set_bone_transform( diff --git a/ios/src/PolyvoxFilamentFFIApi.cpp b/ios/src/PolyvoxFilamentFFIApi.cpp index 323d2aaa..e5ce2420 100644 --- a/ios/src/PolyvoxFilamentFFIApi.cpp +++ b/ios/src/PolyvoxFilamentFFIApi.cpp @@ -369,28 +369,31 @@ extern "C" // TODO } - void play_animation_ffi(void* const assetManager, EntityId asset, int index, bool loop, bool reverse, bool replaceActive, float crossfade) + FLUTTER_PLUGIN_EXPORT void play_animation_ffi(void* const assetManager, EntityId asset, int index, bool loop, bool reverse, bool replaceActive, float crossfade) { std::packaged_task lambda([&] { play_animation(assetManager, asset, index, loop, reverse, replaceActive, crossfade); }); auto fut = _rl->add_task(lambda); fut.wait(); } - void set_animation_frame_ffi(void* const assetManager, EntityId asset, int animationIndex, int animationFrame) + + FLUTTER_PLUGIN_EXPORT void set_animation_frame_ffi(void* const assetManager, EntityId asset, int animationIndex, int animationFrame) { std::packaged_task lambda([&] { set_animation_frame(assetManager, asset, animationIndex, animationFrame); }); auto fut = _rl->add_task(lambda); fut.wait(); } - void stop_animation_ffi(void* const assetManager, EntityId asset, int index) + + FLUTTER_PLUGIN_EXPORT void stop_animation_ffi(void* const assetManager, EntityId asset, int index) { std::packaged_task lambda([&] { stop_animation(assetManager, asset, index); }); auto fut = _rl->add_task(lambda); fut.wait(); } - int get_animation_count_ffi(void* const assetManager, EntityId asset) + + FLUTTER_PLUGIN_EXPORT int get_animation_count_ffi(void* const assetManager, EntityId asset) { std::packaged_task lambda([&] { return get_animation_count(assetManager, asset); }); @@ -398,7 +401,7 @@ extern "C" fut.wait(); return fut.get(); } - void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index) + FLUTTER_PLUGIN_EXPORT void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index) { std::packaged_task lambda([&] { get_animation_name(assetManager, asset, outPtr, index); @@ -407,6 +410,14 @@ extern "C" fut.wait(); } + FLUTTER_PLUGIN_EXPORT void set_post_processing_ffi(void* const viewer, bool enabled) { + std::packaged_task lambda([&] { + set_post_processing(viewer, enabled); + }); + auto fut = _rl->add_task(lambda); + fut.wait(); + } + FLUTTER_PLUGIN_EXPORT void ios_dummy_ffi() { Log("Dummy called"); } diff --git a/lib/filament_controller_ffi.dart b/lib/filament_controller_ffi.dart index 79068193..32cb7c4b 100644 --- a/lib/filament_controller_ffi.dart +++ b/lib/filament_controller_ffi.dart @@ -642,7 +642,7 @@ class FilamentControllerFFI extends FilamentController { } /// - /// Sets the tone mapping. + /// Sets the tone mapping (requires postprocessing). /// @override Future setToneMapping(ToneMapper mapper) async { @@ -653,6 +653,18 @@ class FilamentControllerFFI extends FilamentController { _lib.set_tone_mapping_ffi(_viewer!, mapper.index); } + /// + /// Enable/disable postprocessing. + /// + @override + Future setPostProcessing(bool enabled) async { + if (_viewer == null || _resizing) { + throw Exception("No viewer available, ignoring"); + } + + _lib.set_post_processing_ffi(_viewer!, enabled); + } + /// /// Sets the strength of the bloom. /// diff --git a/lib/generated_bindings.dart b/lib/generated_bindings.dart index c73d7c8f..e222284e 100644 --- a/lib/generated_bindings.dart +++ b/lib/generated_bindings.dart @@ -108,8 +108,8 @@ class NativeLibrary { late final _create_render_targetPtr = _lookup< ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Int, ffi.Int, - ffi.Int)>>('create_render_target'); + ffi.Void Function(ffi.Pointer, ffi.IntPtr, ffi.Uint32, + ffi.Uint32)>>('create_render_target'); late final _create_render_target = _create_render_targetPtr .asFunction, int, int, int)>(); @@ -320,7 +320,7 @@ class NativeLibrary { ffi.NativeFunction< EntityId Function( ffi.Pointer, - ffi.Int, + ffi.Uint8, ffi.Float, ffi.Float, ffi.Float, @@ -464,7 +464,7 @@ class NativeLibrary { ffi.NativeFunction< ffi.Void Function( ffi.Pointer, - ffi.Int, + ffi.Uint64, ffi.Pointer, ffi.Pointer< ffi.NativeFunction< @@ -499,7 +499,7 @@ class NativeLibrary { late final _create_swap_chainPtr = _lookup< ffi.NativeFunction< ffi.Void Function(ffi.Pointer, ffi.Pointer, - ffi.Int, ffi.Int)>>('create_swap_chain'); + ffi.Uint32, ffi.Uint32)>>('create_swap_chain'); late final _create_swap_chain = _create_swap_chainPtr.asFunction< void Function(ffi.Pointer, ffi.Pointer, int, int)>(); @@ -550,7 +550,7 @@ class NativeLibrary { late final _update_viewport_and_camera_projectionPtr = _lookup< ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Int, ffi.Int, + ffi.Void Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Float)>>('update_viewport_and_camera_projection'); late final _update_viewport_and_camera_projection = _update_viewport_and_camera_projectionPtr @@ -1298,6 +1298,23 @@ class NativeLibrary { late final _reveal_mesh = _reveal_meshPtr.asFunction< int Function(ffi.Pointer, int, ffi.Pointer)>(); + void set_post_processing( + ffi.Pointer viewer, + bool enabled, + ) { + return _set_post_processing( + viewer, + enabled, + ); + } + + late final _set_post_processingPtr = _lookup< + ffi + .NativeFunction, ffi.Bool)>>( + 'set_post_processing'); + late final _set_post_processing = _set_post_processingPtr + .asFunction, bool)>(); + void ios_dummy() { return _ios_dummy(); } @@ -1365,7 +1382,7 @@ class NativeLibrary { late final _create_swap_chain_ffiPtr = _lookup< ffi.NativeFunction< ffi.Void Function(ffi.Pointer, ffi.Pointer, - ffi.Int, ffi.Int)>>('create_swap_chain_ffi'); + ffi.Uint32, ffi.Uint32)>>('create_swap_chain_ffi'); late final _create_swap_chain_ffi = _create_swap_chain_ffiPtr.asFunction< void Function(ffi.Pointer, ffi.Pointer, int, int)>(); @@ -1385,8 +1402,8 @@ class NativeLibrary { late final _create_render_target_ffiPtr = _lookup< ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Int, ffi.Int, - ffi.Int)>>('create_render_target_ffi'); + ffi.Void Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, + ffi.Uint32)>>('create_render_target_ffi'); late final _create_render_target_ffi = _create_render_target_ffiPtr .asFunction, int, int, int)>(); @@ -1481,7 +1498,7 @@ class NativeLibrary { late final _update_viewport_and_camera_projection_ffiPtr = _lookup< ffi.NativeFunction< - ffi.Void Function(ffi.Pointer, ffi.Int, ffi.Int, + ffi.Void Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Float)>>('update_viewport_and_camera_projection_ffi'); late final _update_viewport_and_camera_projection_ffi = _update_viewport_and_camera_projection_ffiPtr @@ -1698,7 +1715,7 @@ class NativeLibrary { ffi.NativeFunction< EntityId Function( ffi.Pointer, - ffi.Int, + ffi.Uint8, ffi.Float, ffi.Float, ffi.Float, @@ -2080,25 +2097,6 @@ class NativeLibrary { late final _get_animation_name_ffi = _get_animation_name_ffiPtr.asFunction< void Function(ffi.Pointer, int, ffi.Pointer, int)>(); - double get_animation_duration_ffi( - ffi.Pointer assetManager, - int asset, - int index, - ) { - return _get_animation_duration_ffi( - assetManager, - asset, - index, - ); - } - - late final _get_animation_duration_ffiPtr = _lookup< - ffi.NativeFunction< - ffi.Float Function(ffi.Pointer, EntityId, - ffi.Int)>>('get_animation_duration_ffi'); - late final _get_animation_duration_ffi = _get_animation_duration_ffiPtr - .asFunction, int, int)>(); - void get_morph_target_name_ffi( ffi.Pointer assetManager, int asset, @@ -2148,6 +2146,23 @@ class NativeLibrary { _get_morph_target_name_count_ffiPtr.asFunction< int Function(ffi.Pointer, int, ffi.Pointer)>(); + int set_post_processing_ffi( + ffi.Pointer viewer, + bool enabled, + ) { + return _set_post_processing_ffi( + viewer, + enabled, + ); + } + + late final _set_post_processing_ffiPtr = _lookup< + ffi + .NativeFunction, ffi.Bool)>>( + 'set_post_processing_ffi'); + late final _set_post_processing_ffi = _set_post_processing_ffiPtr + .asFunction, bool)>(); + void ios_dummy_ffi() { return _ios_dummy_ffi(); } @@ -2157,13 +2172,105 @@ class NativeLibrary { late final _ios_dummy_ffi = _ios_dummy_ffiPtr.asFunction(); } +final class __mbstate_t extends ffi.Union { + @ffi.Array.multi([128]) + external ffi.Array __mbstate8; + + @ffi.LongLong() + external int _mbstateL; +} + +final class __darwin_pthread_handler_rec extends ffi.Struct { + external ffi + .Pointer)>> + __routine; + + external ffi.Pointer __arg; + + external ffi.Pointer<__darwin_pthread_handler_rec> __next; +} + +final class _opaque_pthread_attr_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([56]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_cond_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([40]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_condattr_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([8]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_mutex_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([56]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_mutexattr_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([8]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_once_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([8]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_rwlock_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([192]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_rwlockattr_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + @ffi.Array.multi([16]) + external ffi.Array __opaque; +} + +final class _opaque_pthread_t extends ffi.Struct { + @ffi.Long() + external int __sig; + + external ffi.Pointer<__darwin_pthread_handler_rec> __cleanup_stack; + + @ffi.Array.multi([8176]) + external ffi.Array __opaque; +} + final class ResourceBuffer extends ffi.Struct { external ffi.Pointer data; - @ffi.Int() + @ffi.Int32() external int size; - @ffi.Int() + @ffi.Int32() external int id; } @@ -2189,7 +2296,7 @@ typedef LoadFilamentResourceFromOwner = ffi.Pointer< typedef FreeFilamentResourceFromOwner = ffi.Pointer< ffi .NativeFunction)>>; -typedef EntityId = ffi.Int; +typedef EntityId = ffi.Int32; typedef FilamentRenderCallback = ffi.Pointer< ffi.NativeFunction owner)>>; @@ -2198,3 +2305,179 @@ const int __bool_true_false_are_defined = 1; const int true1 = 1; const int false1 = 0; + +const int __DARWIN_ONLY_64_BIT_INO_T = 1; + +const int __DARWIN_ONLY_UNIX_CONFORMANCE = 1; + +const int __DARWIN_ONLY_VERS_1050 = 1; + +const int __DARWIN_UNIX03 = 1; + +const int __DARWIN_64_BIT_INO_T = 1; + +const int __DARWIN_VERS_1050 = 1; + +const int __DARWIN_NON_CANCELABLE = 0; + +const String __DARWIN_SUF_EXTSN = '\$DARWIN_EXTSN'; + +const int __DARWIN_C_ANSI = 4096; + +const int __DARWIN_C_FULL = 900000; + +const int __DARWIN_C_LEVEL = 900000; + +const int __STDC_WANT_LIB_EXT1__ = 1; + +const int __DARWIN_NO_LONG_LONG = 0; + +const int _DARWIN_FEATURE_64_BIT_INODE = 1; + +const int _DARWIN_FEATURE_ONLY_64_BIT_INODE = 1; + +const int _DARWIN_FEATURE_ONLY_VERS_1050 = 1; + +const int _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1; + +const int _DARWIN_FEATURE_UNIX_CONFORMANCE = 3; + +const int __has_ptrcheck = 0; + +const int __DARWIN_NULL = 0; + +const int __PTHREAD_SIZE__ = 8176; + +const int __PTHREAD_ATTR_SIZE__ = 56; + +const int __PTHREAD_MUTEXATTR_SIZE__ = 8; + +const int __PTHREAD_MUTEX_SIZE__ = 56; + +const int __PTHREAD_CONDATTR_SIZE__ = 8; + +const int __PTHREAD_COND_SIZE__ = 40; + +const int __PTHREAD_ONCE_SIZE__ = 8; + +const int __PTHREAD_RWLOCK_SIZE__ = 192; + +const int __PTHREAD_RWLOCKATTR_SIZE__ = 16; + +const int __DARWIN_WCHAR_MAX = 2147483647; + +const int __DARWIN_WCHAR_MIN = -2147483648; + +const int __DARWIN_WEOF = -1; + +const int _FORTIFY_SOURCE = 2; + +const int NULL = 0; + +const int USER_ADDR_NULL = 0; + +const int __WORDSIZE = 64; + +const int INT8_MAX = 127; + +const int INT16_MAX = 32767; + +const int INT32_MAX = 2147483647; + +const int INT64_MAX = 9223372036854775807; + +const int INT8_MIN = -128; + +const int INT16_MIN = -32768; + +const int INT32_MIN = -2147483648; + +const int INT64_MIN = -9223372036854775808; + +const int UINT8_MAX = 255; + +const int UINT16_MAX = 65535; + +const int UINT32_MAX = 4294967295; + +const int UINT64_MAX = -1; + +const int INT_LEAST8_MIN = -128; + +const int INT_LEAST16_MIN = -32768; + +const int INT_LEAST32_MIN = -2147483648; + +const int INT_LEAST64_MIN = -9223372036854775808; + +const int INT_LEAST8_MAX = 127; + +const int INT_LEAST16_MAX = 32767; + +const int INT_LEAST32_MAX = 2147483647; + +const int INT_LEAST64_MAX = 9223372036854775807; + +const int UINT_LEAST8_MAX = 255; + +const int UINT_LEAST16_MAX = 65535; + +const int UINT_LEAST32_MAX = 4294967295; + +const int UINT_LEAST64_MAX = -1; + +const int INT_FAST8_MIN = -128; + +const int INT_FAST16_MIN = -32768; + +const int INT_FAST32_MIN = -2147483648; + +const int INT_FAST64_MIN = -9223372036854775808; + +const int INT_FAST8_MAX = 127; + +const int INT_FAST16_MAX = 32767; + +const int INT_FAST32_MAX = 2147483647; + +const int INT_FAST64_MAX = 9223372036854775807; + +const int UINT_FAST8_MAX = 255; + +const int UINT_FAST16_MAX = 65535; + +const int UINT_FAST32_MAX = 4294967295; + +const int UINT_FAST64_MAX = -1; + +const int INTPTR_MAX = 9223372036854775807; + +const int INTPTR_MIN = -9223372036854775808; + +const int UINTPTR_MAX = -1; + +const int INTMAX_MAX = 9223372036854775807; + +const int UINTMAX_MAX = -1; + +const int INTMAX_MIN = -9223372036854775808; + +const int PTRDIFF_MIN = -9223372036854775808; + +const int PTRDIFF_MAX = 9223372036854775807; + +const int SIZE_MAX = -1; + +const int RSIZE_MAX = 9223372036854775807; + +const int WCHAR_MAX = 2147483647; + +const int WCHAR_MIN = -2147483648; + +const int WINT_MIN = -2147483648; + +const int WINT_MAX = 2147483647; + +const int SIG_ATOMIC_MIN = -2147483648; + +const int SIG_ATOMIC_MAX = 2147483647; diff --git a/macos/include/FilamentViewer.hpp b/macos/include/FilamentViewer.hpp index ca939013..6cb5e767 100644 --- a/macos/include/FilamentViewer.hpp +++ b/macos/include/FilamentViewer.hpp @@ -106,6 +106,7 @@ namespace polyvox { int32_t addLight(LightManager::Type t, float colour, float intensity, float posX, float posY, float posZ, float dirX, float dirY, float dirZ, bool shadows); void removeLight(EntityId entityId); void clearLights(); + void setPostProcessing(bool enabled); AssetManager* const getAssetManager() { return (AssetManager* const) _assetManager; diff --git a/macos/include/PolyvoxFilamentApi.h b/macos/include/PolyvoxFilamentApi.h index 517f1a85..deac041a 100644 --- a/macos/include/PolyvoxFilamentApi.h +++ b/macos/include/PolyvoxFilamentApi.h @@ -150,6 +150,7 @@ FLUTTER_PLUGIN_EXPORT void set_camera_focal_length(const void* const viewer, flo FLUTTER_PLUGIN_EXPORT void set_camera_focus_distance(const void* const viewer, float focusDistance); FLUTTER_PLUGIN_EXPORT int hide_mesh(void* assetManager, EntityId asset, const char* meshName); FLUTTER_PLUGIN_EXPORT int reveal_mesh(void* assetManager, EntityId asset, const char* meshName); +FLUTTER_PLUGIN_EXPORT void set_post_processing(void* const viewer, bool enabled); FLUTTER_PLUGIN_EXPORT void ios_dummy(); #ifdef __cplusplus } diff --git a/macos/include/PolyvoxFilamentFFIApi.h b/macos/include/PolyvoxFilamentFFIApi.h index a93a83d3..e78b6771 100644 --- a/macos/include/PolyvoxFilamentFFIApi.h +++ b/macos/include/PolyvoxFilamentFFIApi.h @@ -1,6 +1,10 @@ #ifndef _POLYVOX_FILAMENT_FFI_API_H #define _POLYVOX_FILAMENT_FFI_API_H +#ifdef __cplusplus +extern "C" { +#endif + /// /// This header replicates most of the methods in PolyvoxFilamentApi.h, and is only intended to be used to generate client FFI bindings. /// The intention is that calling one of these methods will call its respective method in PolyvoxFilamentApi.h, but wrapped in some kind of thread runner to ensure thread safety. @@ -39,48 +43,52 @@ FLUTTER_PLUGIN_EXPORT void remove_asset_ffi(void* const viewer, EntityId asset); FLUTTER_PLUGIN_EXPORT void clear_assets_ffi(void* const viewer); FLUTTER_PLUGIN_EXPORT bool set_camera_ffi(void* const viewer, EntityId asset, const char *nodeName); FLUTTER_PLUGIN_EXPORT void apply_weights_ffi( - void* const assetManager, - EntityId asset, - const char *const entityName, - float *const weights, - int count - ); + void* const assetManager, + EntityId asset, + const char *const entityName, + float *const weights, + int count + ); FLUTTER_PLUGIN_EXPORT void set_morph_target_weights_ffi( - void* const assetManager, - EntityId asset, - const char *const entityName, - const float *const morphData, - int numWeights - ); + void* const assetManager, + EntityId asset, + const char *const entityName, + const float *const morphData, + int numWeights + ); FLUTTER_PLUGIN_EXPORT bool set_morph_animation_ffi( - void* const assetManager, - EntityId asset, - const char *const entityName, - const float *const morphData, - const int* const morphIndices, - int numMorphTargets, - int numFrames, - float frameLengthInMs); + void* const assetManager, + EntityId asset, + const char *const entityName, + const float *const morphData, + const int* const morphIndices, + int numMorphTargets, + int numFrames, + float frameLengthInMs); FLUTTER_PLUGIN_EXPORT FLUTTER_PLUGIN_EXPORT void set_bone_animation_ffi( - void* const assetManager, - EntityId asset, - const float* const frameData, - int numFrames, - int numBones, - const char** const boneNames, - const char** const meshName, - int numMeshTargets, - float frameLengthInMs); + void* const assetManager, + EntityId asset, + const float* const frameData, + int numFrames, + int numBones, + const char** const boneNames, + const char** const meshName, + int numMeshTargets, + float frameLengthInMs); FLUTTER_PLUGIN_EXPORT void play_animation_ffi(void* const assetManager, EntityId asset, int index, bool loop, bool reverse, bool replaceActive, float crossfade); FLUTTER_PLUGIN_EXPORT void set_animation_frame_ffi(void* const assetManager, EntityId asset, int animationIndex, int animationFrame); FLUTTER_PLUGIN_EXPORT void stop_animation_ffi(void* const assetManager, EntityId asset, int index); FLUTTER_PLUGIN_EXPORT int get_animation_count_ffi(void* const assetManager, EntityId asset); FLUTTER_PLUGIN_EXPORT void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index); -FLUTTER_PLUGIN_EXPORT float get_animation_duration_ffi(void* const assetManager, EntityId asset, int index); FLUTTER_PLUGIN_EXPORT void get_morph_target_name_ffi(void* const assetManager, EntityId asset, const char *meshName, char *const outPtr, int index); FLUTTER_PLUGIN_EXPORT int get_morph_target_name_count_ffi(void* const assetManager, EntityId asset, const char *meshName); +FLUTTER_PLUGIN_EXPORT void set_post_processing_ffi(void* const viewer, bool enabled); FLUTTER_PLUGIN_EXPORT void ios_dummy_ffi(); +#ifdef __cplusplus +} +#endif + #endif // _POLYVOX_FILAMENT_FFI_API_H diff --git a/macos/include/ResourceBuffer.hpp b/macos/include/ResourceBuffer.hpp index a3fd3559..c9e6a4c1 100644 --- a/macos/include/ResourceBuffer.hpp +++ b/macos/include/ResourceBuffer.hpp @@ -2,6 +2,7 @@ #define RESOURCE_BUFFER_H #include + #if defined(__cplusplus) extern "C" { #endif @@ -57,6 +58,8 @@ extern "C" { mFreeFilamentResource(rb); } } + + #endif LoadFilamentResource mLoadFilamentResource; FreeFilamentResource mFreeFilamentResource; @@ -66,7 +69,6 @@ extern "C" { }; typedef struct ResourceLoaderWrapper ResourceLoaderWrapper; - #if defined(__cplusplus) } #endif diff --git a/macos/include/GL/glcorearb.h b/macos/include/filament/GL/glcorearb.h similarity index 100% rename from macos/include/GL/glcorearb.h rename to macos/include/filament/GL/glcorearb.h diff --git a/macos/include/GL/glext.h b/macos/include/filament/GL/glext.h similarity index 100% rename from macos/include/GL/glext.h rename to macos/include/filament/GL/glext.h diff --git a/macos/include/GL/wglext.h b/macos/include/filament/GL/wglext.h similarity index 100% rename from macos/include/GL/wglext.h rename to macos/include/filament/GL/wglext.h diff --git a/macos/include/KHR/.clang-format b/macos/include/filament/KHR/.clang-format similarity index 100% rename from macos/include/KHR/.clang-format rename to macos/include/filament/KHR/.clang-format diff --git a/macos/include/KHR/khrplatform.h b/macos/include/filament/KHR/khrplatform.h similarity index 100% rename from macos/include/KHR/khrplatform.h rename to macos/include/filament/KHR/khrplatform.h diff --git a/macos/include/backend/AcquiredImage.h b/macos/include/filament/backend/AcquiredImage.h similarity index 100% rename from macos/include/backend/AcquiredImage.h rename to macos/include/filament/backend/AcquiredImage.h diff --git a/macos/include/backend/BufferDescriptor.h b/macos/include/filament/backend/BufferDescriptor.h similarity index 100% rename from macos/include/backend/BufferDescriptor.h rename to macos/include/filament/backend/BufferDescriptor.h diff --git a/macos/include/backend/CallbackHandler.h b/macos/include/filament/backend/CallbackHandler.h similarity index 100% rename from macos/include/backend/CallbackHandler.h rename to macos/include/filament/backend/CallbackHandler.h diff --git a/macos/include/backend/DriverApiForward.h b/macos/include/filament/backend/DriverApiForward.h similarity index 100% rename from macos/include/backend/DriverApiForward.h rename to macos/include/filament/backend/DriverApiForward.h diff --git a/macos/include/backend/DriverEnums.h b/macos/include/filament/backend/DriverEnums.h similarity index 100% rename from macos/include/backend/DriverEnums.h rename to macos/include/filament/backend/DriverEnums.h diff --git a/macos/include/backend/Handle.h b/macos/include/filament/backend/Handle.h similarity index 100% rename from macos/include/backend/Handle.h rename to macos/include/filament/backend/Handle.h diff --git a/macos/include/backend/PipelineState.h b/macos/include/filament/backend/PipelineState.h similarity index 100% rename from macos/include/backend/PipelineState.h rename to macos/include/filament/backend/PipelineState.h diff --git a/macos/include/backend/PixelBufferDescriptor.h b/macos/include/filament/backend/PixelBufferDescriptor.h similarity index 100% rename from macos/include/backend/PixelBufferDescriptor.h rename to macos/include/filament/backend/PixelBufferDescriptor.h diff --git a/macos/include/backend/Platform.h b/macos/include/filament/backend/Platform.h similarity index 100% rename from macos/include/backend/Platform.h rename to macos/include/filament/backend/Platform.h diff --git a/macos/include/backend/PresentCallable.h b/macos/include/filament/backend/PresentCallable.h similarity index 100% rename from macos/include/backend/PresentCallable.h rename to macos/include/filament/backend/PresentCallable.h diff --git a/macos/include/backend/Program.h b/macos/include/filament/backend/Program.h similarity index 100% rename from macos/include/backend/Program.h rename to macos/include/filament/backend/Program.h diff --git a/macos/include/backend/README.md b/macos/include/filament/backend/README.md similarity index 100% rename from macos/include/backend/README.md rename to macos/include/filament/backend/README.md diff --git a/macos/include/backend/SamplerDescriptor.h b/macos/include/filament/backend/SamplerDescriptor.h similarity index 100% rename from macos/include/backend/SamplerDescriptor.h rename to macos/include/filament/backend/SamplerDescriptor.h diff --git a/macos/include/backend/TargetBufferInfo.h b/macos/include/filament/backend/TargetBufferInfo.h similarity index 100% rename from macos/include/backend/TargetBufferInfo.h rename to macos/include/filament/backend/TargetBufferInfo.h diff --git a/macos/include/backend/platforms/OpenGLPlatform.h b/macos/include/filament/backend/platforms/OpenGLPlatform.h similarity index 100% rename from macos/include/backend/platforms/OpenGLPlatform.h rename to macos/include/filament/backend/platforms/OpenGLPlatform.h diff --git a/macos/include/backend/platforms/PlatformCocoaGL.h b/macos/include/filament/backend/platforms/PlatformCocoaGL.h similarity index 100% rename from macos/include/backend/platforms/PlatformCocoaGL.h rename to macos/include/filament/backend/platforms/PlatformCocoaGL.h diff --git a/macos/include/backend/platforms/PlatformCocoaTouchGL.h b/macos/include/filament/backend/platforms/PlatformCocoaTouchGL.h similarity index 100% rename from macos/include/backend/platforms/PlatformCocoaTouchGL.h rename to macos/include/filament/backend/platforms/PlatformCocoaTouchGL.h diff --git a/macos/include/backend/platforms/PlatformEGL.h b/macos/include/filament/backend/platforms/PlatformEGL.h similarity index 100% rename from macos/include/backend/platforms/PlatformEGL.h rename to macos/include/filament/backend/platforms/PlatformEGL.h diff --git a/macos/include/backend/platforms/PlatformEGLAndroid.h b/macos/include/filament/backend/platforms/PlatformEGLAndroid.h similarity index 100% rename from macos/include/backend/platforms/PlatformEGLAndroid.h rename to macos/include/filament/backend/platforms/PlatformEGLAndroid.h diff --git a/macos/include/backend/platforms/PlatformEGLHeadless.h b/macos/include/filament/backend/platforms/PlatformEGLHeadless.h similarity index 100% rename from macos/include/backend/platforms/PlatformEGLHeadless.h rename to macos/include/filament/backend/platforms/PlatformEGLHeadless.h diff --git a/macos/include/backend/platforms/PlatformGLX.h b/macos/include/filament/backend/platforms/PlatformGLX.h similarity index 100% rename from macos/include/backend/platforms/PlatformGLX.h rename to macos/include/filament/backend/platforms/PlatformGLX.h diff --git a/macos/include/backend/platforms/PlatformWGL.h b/macos/include/filament/backend/platforms/PlatformWGL.h similarity index 100% rename from macos/include/backend/platforms/PlatformWGL.h rename to macos/include/filament/backend/platforms/PlatformWGL.h diff --git a/macos/include/backend/platforms/PlatformWebGL.h b/macos/include/filament/backend/platforms/PlatformWebGL.h similarity index 100% rename from macos/include/backend/platforms/PlatformWebGL.h rename to macos/include/filament/backend/platforms/PlatformWebGL.h diff --git a/macos/include/backend/platforms/VulkanPlatform.h b/macos/include/filament/backend/platforms/VulkanPlatform.h similarity index 100% rename from macos/include/backend/platforms/VulkanPlatform.h rename to macos/include/filament/backend/platforms/VulkanPlatform.h diff --git a/macos/include/bluegl/BlueGL.h b/macos/include/filament/bluegl/BlueGL.h similarity index 100% rename from macos/include/bluegl/BlueGL.h rename to macos/include/filament/bluegl/BlueGL.h diff --git a/macos/include/bluegl/BlueGLDefines.h b/macos/include/filament/bluegl/BlueGLDefines.h similarity index 100% rename from macos/include/bluegl/BlueGLDefines.h rename to macos/include/filament/bluegl/BlueGLDefines.h diff --git a/macos/include/camutils/Bookmark.h b/macos/include/filament/camutils/Bookmark.h similarity index 100% rename from macos/include/camutils/Bookmark.h rename to macos/include/filament/camutils/Bookmark.h diff --git a/macos/include/camutils/Manipulator.h b/macos/include/filament/camutils/Manipulator.h similarity index 100% rename from macos/include/camutils/Manipulator.h rename to macos/include/filament/camutils/Manipulator.h diff --git a/macos/include/camutils/compiler.h b/macos/include/filament/camutils/compiler.h similarity index 100% rename from macos/include/camutils/compiler.h rename to macos/include/filament/camutils/compiler.h diff --git a/macos/include/filamat/Enums.h b/macos/include/filament/filamat/Enums.h similarity index 100% rename from macos/include/filamat/Enums.h rename to macos/include/filament/filamat/Enums.h diff --git a/macos/include/filamat/IncludeCallback.h b/macos/include/filament/filamat/IncludeCallback.h similarity index 100% rename from macos/include/filamat/IncludeCallback.h rename to macos/include/filament/filamat/IncludeCallback.h diff --git a/macos/include/filamat/MaterialBuilder.h b/macos/include/filament/filamat/MaterialBuilder.h similarity index 100% rename from macos/include/filamat/MaterialBuilder.h rename to macos/include/filament/filamat/MaterialBuilder.h diff --git a/macos/include/filamat/Package.h b/macos/include/filament/filamat/Package.h similarity index 100% rename from macos/include/filamat/Package.h rename to macos/include/filament/filamat/Package.h diff --git a/macos/include/filament-iblprefilter/IBLPrefilterContext.h b/macos/include/filament/filament-iblprefilter/IBLPrefilterContext.h similarity index 100% rename from macos/include/filament-iblprefilter/IBLPrefilterContext.h rename to macos/include/filament/filament-iblprefilter/IBLPrefilterContext.h diff --git a/macos/include/filament/Box.h b/macos/include/filament/filament/Box.h similarity index 100% rename from macos/include/filament/Box.h rename to macos/include/filament/filament/Box.h diff --git a/macos/include/filament/BufferObject.h b/macos/include/filament/filament/BufferObject.h similarity index 100% rename from macos/include/filament/BufferObject.h rename to macos/include/filament/filament/BufferObject.h diff --git a/macos/include/filament/Camera.h b/macos/include/filament/filament/Camera.h similarity index 100% rename from macos/include/filament/Camera.h rename to macos/include/filament/filament/Camera.h diff --git a/macos/include/filament/Color.h b/macos/include/filament/filament/Color.h similarity index 100% rename from macos/include/filament/Color.h rename to macos/include/filament/filament/Color.h diff --git a/macos/include/filament/ColorGrading.h b/macos/include/filament/filament/ColorGrading.h similarity index 100% rename from macos/include/filament/ColorGrading.h rename to macos/include/filament/filament/ColorGrading.h diff --git a/macos/include/filament/ColorSpace.h b/macos/include/filament/filament/ColorSpace.h similarity index 100% rename from macos/include/filament/ColorSpace.h rename to macos/include/filament/filament/ColorSpace.h diff --git a/macos/include/filament/DebugRegistry.h b/macos/include/filament/filament/DebugRegistry.h similarity index 100% rename from macos/include/filament/DebugRegistry.h rename to macos/include/filament/filament/DebugRegistry.h diff --git a/macos/include/filament/Engine.h b/macos/include/filament/filament/Engine.h similarity index 100% rename from macos/include/filament/Engine.h rename to macos/include/filament/filament/Engine.h diff --git a/macos/include/filament/Exposure.h b/macos/include/filament/filament/Exposure.h similarity index 100% rename from macos/include/filament/Exposure.h rename to macos/include/filament/filament/Exposure.h diff --git a/macos/include/filament/Fence.h b/macos/include/filament/filament/Fence.h similarity index 100% rename from macos/include/filament/Fence.h rename to macos/include/filament/filament/Fence.h diff --git a/macos/include/filament/FilamentAPI.h b/macos/include/filament/filament/FilamentAPI.h similarity index 100% rename from macos/include/filament/FilamentAPI.h rename to macos/include/filament/filament/FilamentAPI.h diff --git a/macos/include/filament/Frustum.h b/macos/include/filament/filament/Frustum.h similarity index 100% rename from macos/include/filament/Frustum.h rename to macos/include/filament/filament/Frustum.h diff --git a/macos/include/filament/IndexBuffer.h b/macos/include/filament/filament/IndexBuffer.h similarity index 100% rename from macos/include/filament/IndexBuffer.h rename to macos/include/filament/filament/IndexBuffer.h diff --git a/macos/include/filament/IndirectLight.h b/macos/include/filament/filament/IndirectLight.h similarity index 100% rename from macos/include/filament/IndirectLight.h rename to macos/include/filament/filament/IndirectLight.h diff --git a/macos/include/filament/InstanceBuffer.h b/macos/include/filament/filament/InstanceBuffer.h similarity index 100% rename from macos/include/filament/InstanceBuffer.h rename to macos/include/filament/filament/InstanceBuffer.h diff --git a/macos/include/filament/LightManager.h b/macos/include/filament/filament/LightManager.h similarity index 100% rename from macos/include/filament/LightManager.h rename to macos/include/filament/filament/LightManager.h diff --git a/macos/include/filament/Material.h b/macos/include/filament/filament/Material.h similarity index 100% rename from macos/include/filament/Material.h rename to macos/include/filament/filament/Material.h diff --git a/macos/include/filament/MaterialChunkType.h b/macos/include/filament/filament/MaterialChunkType.h similarity index 100% rename from macos/include/filament/MaterialChunkType.h rename to macos/include/filament/filament/MaterialChunkType.h diff --git a/macos/include/filament/MaterialEnums.h b/macos/include/filament/filament/MaterialEnums.h similarity index 100% rename from macos/include/filament/MaterialEnums.h rename to macos/include/filament/filament/MaterialEnums.h diff --git a/macos/include/filament/MaterialInstance.h b/macos/include/filament/filament/MaterialInstance.h similarity index 100% rename from macos/include/filament/MaterialInstance.h rename to macos/include/filament/filament/MaterialInstance.h diff --git a/macos/include/filament/MorphTargetBuffer.h b/macos/include/filament/filament/MorphTargetBuffer.h similarity index 100% rename from macos/include/filament/MorphTargetBuffer.h rename to macos/include/filament/filament/MorphTargetBuffer.h diff --git a/macos/include/filament/Options.h b/macos/include/filament/filament/Options.h similarity index 100% rename from macos/include/filament/Options.h rename to macos/include/filament/filament/Options.h diff --git a/macos/include/filament/RenderTarget.h b/macos/include/filament/filament/RenderTarget.h similarity index 100% rename from macos/include/filament/RenderTarget.h rename to macos/include/filament/filament/RenderTarget.h diff --git a/macos/include/filament/RenderableManager.h b/macos/include/filament/filament/RenderableManager.h similarity index 100% rename from macos/include/filament/RenderableManager.h rename to macos/include/filament/filament/RenderableManager.h diff --git a/macos/include/filament/Renderer.h b/macos/include/filament/filament/Renderer.h similarity index 100% rename from macos/include/filament/Renderer.h rename to macos/include/filament/filament/Renderer.h diff --git a/macos/include/filament/Scene.h b/macos/include/filament/filament/Scene.h similarity index 100% rename from macos/include/filament/Scene.h rename to macos/include/filament/filament/Scene.h diff --git a/macos/include/filament/SkinningBuffer.h b/macos/include/filament/filament/SkinningBuffer.h similarity index 100% rename from macos/include/filament/SkinningBuffer.h rename to macos/include/filament/filament/SkinningBuffer.h diff --git a/macos/include/filament/Skybox.h b/macos/include/filament/filament/Skybox.h similarity index 100% rename from macos/include/filament/Skybox.h rename to macos/include/filament/filament/Skybox.h diff --git a/macos/include/filament/Stream.h b/macos/include/filament/filament/Stream.h similarity index 100% rename from macos/include/filament/Stream.h rename to macos/include/filament/filament/Stream.h diff --git a/macos/include/filament/SwapChain.h b/macos/include/filament/filament/SwapChain.h similarity index 100% rename from macos/include/filament/SwapChain.h rename to macos/include/filament/filament/SwapChain.h diff --git a/macos/include/filament/Texture.h b/macos/include/filament/filament/Texture.h similarity index 100% rename from macos/include/filament/Texture.h rename to macos/include/filament/filament/Texture.h diff --git a/macos/include/filament/TextureSampler.h b/macos/include/filament/filament/TextureSampler.h similarity index 100% rename from macos/include/filament/TextureSampler.h rename to macos/include/filament/filament/TextureSampler.h diff --git a/macos/include/filament/ToneMapper.h b/macos/include/filament/filament/ToneMapper.h similarity index 100% rename from macos/include/filament/ToneMapper.h rename to macos/include/filament/filament/ToneMapper.h diff --git a/macos/include/filament/TransformManager.h b/macos/include/filament/filament/TransformManager.h similarity index 100% rename from macos/include/filament/TransformManager.h rename to macos/include/filament/filament/TransformManager.h diff --git a/macos/include/filament/VertexBuffer.h b/macos/include/filament/filament/VertexBuffer.h similarity index 100% rename from macos/include/filament/VertexBuffer.h rename to macos/include/filament/filament/VertexBuffer.h diff --git a/macos/include/filament/View.h b/macos/include/filament/filament/View.h similarity index 100% rename from macos/include/filament/View.h rename to macos/include/filament/filament/View.h diff --git a/macos/include/filament/Viewport.h b/macos/include/filament/filament/Viewport.h similarity index 100% rename from macos/include/filament/Viewport.h rename to macos/include/filament/filament/Viewport.h diff --git a/macos/include/filameshio/MeshReader.h b/macos/include/filament/filameshio/MeshReader.h similarity index 100% rename from macos/include/filameshio/MeshReader.h rename to macos/include/filament/filameshio/MeshReader.h diff --git a/macos/include/geometry/SurfaceOrientation.h b/macos/include/filament/geometry/SurfaceOrientation.h similarity index 100% rename from macos/include/geometry/SurfaceOrientation.h rename to macos/include/filament/geometry/SurfaceOrientation.h diff --git a/macos/include/geometry/TangentSpaceMesh.h b/macos/include/filament/geometry/TangentSpaceMesh.h similarity index 100% rename from macos/include/geometry/TangentSpaceMesh.h rename to macos/include/filament/geometry/TangentSpaceMesh.h diff --git a/macos/include/geometry/Transcoder.h b/macos/include/filament/geometry/Transcoder.h similarity index 100% rename from macos/include/geometry/Transcoder.h rename to macos/include/filament/geometry/Transcoder.h diff --git a/macos/include/gltfio/Animator.h b/macos/include/filament/gltfio/Animator.h similarity index 100% rename from macos/include/gltfio/Animator.h rename to macos/include/filament/gltfio/Animator.h diff --git a/macos/include/gltfio/AssetLoader.h b/macos/include/filament/gltfio/AssetLoader.h similarity index 100% rename from macos/include/gltfio/AssetLoader.h rename to macos/include/filament/gltfio/AssetLoader.h diff --git a/macos/include/gltfio/FilamentAsset.h b/macos/include/filament/gltfio/FilamentAsset.h similarity index 100% rename from macos/include/gltfio/FilamentAsset.h rename to macos/include/filament/gltfio/FilamentAsset.h diff --git a/macos/include/gltfio/FilamentInstance.h b/macos/include/filament/gltfio/FilamentInstance.h similarity index 100% rename from macos/include/gltfio/FilamentInstance.h rename to macos/include/filament/gltfio/FilamentInstance.h diff --git a/macos/include/gltfio/MaterialProvider.h b/macos/include/filament/gltfio/MaterialProvider.h similarity index 100% rename from macos/include/gltfio/MaterialProvider.h rename to macos/include/filament/gltfio/MaterialProvider.h diff --git a/macos/include/gltfio/NodeManager.h b/macos/include/filament/gltfio/NodeManager.h similarity index 100% rename from macos/include/gltfio/NodeManager.h rename to macos/include/filament/gltfio/NodeManager.h diff --git a/macos/include/gltfio/ResourceLoader.h b/macos/include/filament/gltfio/ResourceLoader.h similarity index 100% rename from macos/include/gltfio/ResourceLoader.h rename to macos/include/filament/gltfio/ResourceLoader.h diff --git a/macos/include/gltfio/TextureProvider.h b/macos/include/filament/gltfio/TextureProvider.h similarity index 100% rename from macos/include/gltfio/TextureProvider.h rename to macos/include/filament/gltfio/TextureProvider.h diff --git a/macos/include/gltfio/TrsTransformManager.h b/macos/include/filament/gltfio/TrsTransformManager.h similarity index 100% rename from macos/include/gltfio/TrsTransformManager.h rename to macos/include/filament/gltfio/TrsTransformManager.h diff --git a/macos/include/gltfio/materials/uberarchive.h b/macos/include/filament/gltfio/materials/uberarchive.h similarity index 100% rename from macos/include/gltfio/materials/uberarchive.h rename to macos/include/filament/gltfio/materials/uberarchive.h diff --git a/macos/include/gltfio/math.h b/macos/include/filament/gltfio/math.h similarity index 100% rename from macos/include/gltfio/math.h rename to macos/include/filament/gltfio/math.h diff --git a/macos/include/ibl/Cubemap.h b/macos/include/filament/ibl/Cubemap.h similarity index 100% rename from macos/include/ibl/Cubemap.h rename to macos/include/filament/ibl/Cubemap.h diff --git a/macos/include/ibl/CubemapIBL.h b/macos/include/filament/ibl/CubemapIBL.h similarity index 100% rename from macos/include/ibl/CubemapIBL.h rename to macos/include/filament/ibl/CubemapIBL.h diff --git a/macos/include/ibl/CubemapSH.h b/macos/include/filament/ibl/CubemapSH.h similarity index 100% rename from macos/include/ibl/CubemapSH.h rename to macos/include/filament/ibl/CubemapSH.h diff --git a/macos/include/ibl/CubemapUtils.h b/macos/include/filament/ibl/CubemapUtils.h similarity index 100% rename from macos/include/ibl/CubemapUtils.h rename to macos/include/filament/ibl/CubemapUtils.h diff --git a/macos/include/ibl/Image.h b/macos/include/filament/ibl/Image.h similarity index 100% rename from macos/include/ibl/Image.h rename to macos/include/filament/ibl/Image.h diff --git a/macos/include/ibl/utilities.h b/macos/include/filament/ibl/utilities.h similarity index 100% rename from macos/include/ibl/utilities.h rename to macos/include/filament/ibl/utilities.h diff --git a/macos/include/image/ColorTransform.h b/macos/include/filament/image/ColorTransform.h similarity index 100% rename from macos/include/image/ColorTransform.h rename to macos/include/filament/image/ColorTransform.h diff --git a/macos/include/image/ImageOps.h b/macos/include/filament/image/ImageOps.h similarity index 100% rename from macos/include/image/ImageOps.h rename to macos/include/filament/image/ImageOps.h diff --git a/macos/include/image/ImageSampler.h b/macos/include/filament/image/ImageSampler.h similarity index 100% rename from macos/include/image/ImageSampler.h rename to macos/include/filament/image/ImageSampler.h diff --git a/macos/include/image/Ktx1Bundle.h b/macos/include/filament/image/Ktx1Bundle.h similarity index 100% rename from macos/include/image/Ktx1Bundle.h rename to macos/include/filament/image/Ktx1Bundle.h diff --git a/macos/include/image/LinearImage.h b/macos/include/filament/image/LinearImage.h similarity index 100% rename from macos/include/image/LinearImage.h rename to macos/include/filament/image/LinearImage.h diff --git a/macos/include/imageio/BasisEncoder.h b/macos/include/filament/imageio/BasisEncoder.h similarity index 100% rename from macos/include/imageio/BasisEncoder.h rename to macos/include/filament/imageio/BasisEncoder.h diff --git a/macos/include/imageio/HDRDecoder.h b/macos/include/filament/imageio/HDRDecoder.h similarity index 100% rename from macos/include/imageio/HDRDecoder.h rename to macos/include/filament/imageio/HDRDecoder.h diff --git a/macos/include/imageio/ImageDecoder.h b/macos/include/filament/imageio/ImageDecoder.h similarity index 100% rename from macos/include/imageio/ImageDecoder.h rename to macos/include/filament/imageio/ImageDecoder.h diff --git a/macos/include/imageio/ImageDiffer.h b/macos/include/filament/imageio/ImageDiffer.h similarity index 100% rename from macos/include/imageio/ImageDiffer.h rename to macos/include/filament/imageio/ImageDiffer.h diff --git a/macos/include/imageio/ImageEncoder.h b/macos/include/filament/imageio/ImageEncoder.h similarity index 100% rename from macos/include/imageio/ImageEncoder.h rename to macos/include/filament/imageio/ImageEncoder.h diff --git a/macos/include/ktxreader/Ktx1Reader.h b/macos/include/filament/ktxreader/Ktx1Reader.h similarity index 100% rename from macos/include/ktxreader/Ktx1Reader.h rename to macos/include/filament/ktxreader/Ktx1Reader.h diff --git a/macos/include/ktxreader/Ktx2Reader.h b/macos/include/filament/ktxreader/Ktx2Reader.h similarity index 100% rename from macos/include/ktxreader/Ktx2Reader.h rename to macos/include/filament/ktxreader/Ktx2Reader.h diff --git a/macos/include/math/TMatHelpers.h b/macos/include/filament/math/TMatHelpers.h similarity index 100% rename from macos/include/math/TMatHelpers.h rename to macos/include/filament/math/TMatHelpers.h diff --git a/macos/include/math/TQuatHelpers.h b/macos/include/filament/math/TQuatHelpers.h similarity index 100% rename from macos/include/math/TQuatHelpers.h rename to macos/include/filament/math/TQuatHelpers.h diff --git a/macos/include/math/TVecHelpers.h b/macos/include/filament/math/TVecHelpers.h similarity index 100% rename from macos/include/math/TVecHelpers.h rename to macos/include/filament/math/TVecHelpers.h diff --git a/macos/include/math/compiler.h b/macos/include/filament/math/compiler.h similarity index 100% rename from macos/include/math/compiler.h rename to macos/include/filament/math/compiler.h diff --git a/macos/include/math/fast.h b/macos/include/filament/math/fast.h similarity index 100% rename from macos/include/math/fast.h rename to macos/include/filament/math/fast.h diff --git a/macos/include/math/half.h b/macos/include/filament/math/half.h similarity index 100% rename from macos/include/math/half.h rename to macos/include/filament/math/half.h diff --git a/macos/include/math/mat2.h b/macos/include/filament/math/mat2.h similarity index 100% rename from macos/include/math/mat2.h rename to macos/include/filament/math/mat2.h diff --git a/macos/include/math/mat3.h b/macos/include/filament/math/mat3.h similarity index 100% rename from macos/include/math/mat3.h rename to macos/include/filament/math/mat3.h diff --git a/macos/include/math/mat4.h b/macos/include/filament/math/mat4.h similarity index 100% rename from macos/include/math/mat4.h rename to macos/include/filament/math/mat4.h diff --git a/macos/include/math/mathfwd.h b/macos/include/filament/math/mathfwd.h similarity index 100% rename from macos/include/math/mathfwd.h rename to macos/include/filament/math/mathfwd.h diff --git a/macos/include/math/norm.h b/macos/include/filament/math/norm.h similarity index 100% rename from macos/include/math/norm.h rename to macos/include/filament/math/norm.h diff --git a/macos/include/math/quat.h b/macos/include/filament/math/quat.h similarity index 100% rename from macos/include/math/quat.h rename to macos/include/filament/math/quat.h diff --git a/macos/include/math/scalar.h b/macos/include/filament/math/scalar.h similarity index 100% rename from macos/include/math/scalar.h rename to macos/include/filament/math/scalar.h diff --git a/macos/include/math/vec2.h b/macos/include/filament/math/vec2.h similarity index 100% rename from macos/include/math/vec2.h rename to macos/include/filament/math/vec2.h diff --git a/macos/include/math/vec3.h b/macos/include/filament/math/vec3.h similarity index 100% rename from macos/include/math/vec3.h rename to macos/include/filament/math/vec3.h diff --git a/macos/include/math/vec4.h b/macos/include/filament/math/vec4.h similarity index 100% rename from macos/include/math/vec4.h rename to macos/include/filament/math/vec4.h diff --git a/macos/include/mathio/ostream.h b/macos/include/filament/mathio/ostream.h similarity index 100% rename from macos/include/mathio/ostream.h rename to macos/include/filament/mathio/ostream.h diff --git a/macos/include/mikktspace/mikktspace.h b/macos/include/filament/mikktspace/mikktspace.h similarity index 100% rename from macos/include/mikktspace/mikktspace.h rename to macos/include/filament/mikktspace/mikktspace.h diff --git a/macos/include/tsl/robin_growth_policy.h b/macos/include/filament/tsl/robin_growth_policy.h similarity index 100% rename from macos/include/tsl/robin_growth_policy.h rename to macos/include/filament/tsl/robin_growth_policy.h diff --git a/macos/include/tsl/robin_hash.h b/macos/include/filament/tsl/robin_hash.h similarity index 100% rename from macos/include/tsl/robin_hash.h rename to macos/include/filament/tsl/robin_hash.h diff --git a/macos/include/tsl/robin_map.h b/macos/include/filament/tsl/robin_map.h similarity index 100% rename from macos/include/tsl/robin_map.h rename to macos/include/filament/tsl/robin_map.h diff --git a/macos/include/tsl/robin_set.h b/macos/include/filament/tsl/robin_set.h similarity index 100% rename from macos/include/tsl/robin_set.h rename to macos/include/filament/tsl/robin_set.h diff --git a/macos/include/uberz/ArchiveEnums.h b/macos/include/filament/uberz/ArchiveEnums.h similarity index 100% rename from macos/include/uberz/ArchiveEnums.h rename to macos/include/filament/uberz/ArchiveEnums.h diff --git a/macos/include/uberz/ReadableArchive.h b/macos/include/filament/uberz/ReadableArchive.h similarity index 100% rename from macos/include/uberz/ReadableArchive.h rename to macos/include/filament/uberz/ReadableArchive.h diff --git a/macos/include/uberz/WritableArchive.h b/macos/include/filament/uberz/WritableArchive.h similarity index 100% rename from macos/include/uberz/WritableArchive.h rename to macos/include/filament/uberz/WritableArchive.h diff --git a/macos/include/utils/Allocator.h b/macos/include/filament/utils/Allocator.h similarity index 100% rename from macos/include/utils/Allocator.h rename to macos/include/filament/utils/Allocator.h diff --git a/macos/include/utils/BitmaskEnum.h b/macos/include/filament/utils/BitmaskEnum.h similarity index 100% rename from macos/include/utils/BitmaskEnum.h rename to macos/include/filament/utils/BitmaskEnum.h diff --git a/macos/include/utils/CString.h b/macos/include/filament/utils/CString.h similarity index 100% rename from macos/include/utils/CString.h rename to macos/include/filament/utils/CString.h diff --git a/macos/include/utils/CallStack.h b/macos/include/filament/utils/CallStack.h similarity index 100% rename from macos/include/utils/CallStack.h rename to macos/include/filament/utils/CallStack.h diff --git a/macos/include/utils/Entity.h b/macos/include/filament/utils/Entity.h similarity index 100% rename from macos/include/utils/Entity.h rename to macos/include/filament/utils/Entity.h diff --git a/macos/include/utils/EntityInstance.h b/macos/include/filament/utils/EntityInstance.h similarity index 100% rename from macos/include/utils/EntityInstance.h rename to macos/include/filament/utils/EntityInstance.h diff --git a/macos/include/utils/EntityManager.h b/macos/include/filament/utils/EntityManager.h similarity index 100% rename from macos/include/utils/EntityManager.h rename to macos/include/filament/utils/EntityManager.h diff --git a/macos/include/utils/FixedCapacityVector.h b/macos/include/filament/utils/FixedCapacityVector.h similarity index 100% rename from macos/include/utils/FixedCapacityVector.h rename to macos/include/filament/utils/FixedCapacityVector.h diff --git a/macos/include/utils/Invocable.h b/macos/include/filament/utils/Invocable.h similarity index 100% rename from macos/include/utils/Invocable.h rename to macos/include/filament/utils/Invocable.h diff --git a/macos/include/utils/Log.h b/macos/include/filament/utils/Log.h similarity index 100% rename from macos/include/utils/Log.h rename to macos/include/filament/utils/Log.h diff --git a/macos/include/utils/Mutex.h b/macos/include/filament/utils/Mutex.h similarity index 100% rename from macos/include/utils/Mutex.h rename to macos/include/filament/utils/Mutex.h diff --git a/macos/include/utils/NameComponentManager.h b/macos/include/filament/utils/NameComponentManager.h similarity index 100% rename from macos/include/utils/NameComponentManager.h rename to macos/include/filament/utils/NameComponentManager.h diff --git a/macos/include/utils/Panic.h b/macos/include/filament/utils/Panic.h similarity index 100% rename from macos/include/utils/Panic.h rename to macos/include/filament/utils/Panic.h diff --git a/macos/include/utils/Path.h b/macos/include/filament/utils/Path.h similarity index 100% rename from macos/include/utils/Path.h rename to macos/include/filament/utils/Path.h diff --git a/macos/include/utils/PrivateImplementation-impl.h b/macos/include/filament/utils/PrivateImplementation-impl.h similarity index 100% rename from macos/include/utils/PrivateImplementation-impl.h rename to macos/include/filament/utils/PrivateImplementation-impl.h diff --git a/macos/include/utils/PrivateImplementation.h b/macos/include/filament/utils/PrivateImplementation.h similarity index 100% rename from macos/include/utils/PrivateImplementation.h rename to macos/include/filament/utils/PrivateImplementation.h diff --git a/macos/include/utils/SingleInstanceComponentManager.h b/macos/include/filament/utils/SingleInstanceComponentManager.h similarity index 100% rename from macos/include/utils/SingleInstanceComponentManager.h rename to macos/include/filament/utils/SingleInstanceComponentManager.h diff --git a/macos/include/utils/Slice.h b/macos/include/filament/utils/Slice.h similarity index 100% rename from macos/include/utils/Slice.h rename to macos/include/filament/utils/Slice.h diff --git a/macos/include/utils/SpinLock.h b/macos/include/filament/utils/SpinLock.h similarity index 100% rename from macos/include/utils/SpinLock.h rename to macos/include/filament/utils/SpinLock.h diff --git a/macos/include/utils/StructureOfArrays.h b/macos/include/filament/utils/StructureOfArrays.h similarity index 100% rename from macos/include/utils/StructureOfArrays.h rename to macos/include/filament/utils/StructureOfArrays.h diff --git a/macos/include/utils/algorithm.h b/macos/include/filament/utils/algorithm.h similarity index 100% rename from macos/include/utils/algorithm.h rename to macos/include/filament/utils/algorithm.h diff --git a/macos/include/utils/android/Systrace.h b/macos/include/filament/utils/android/Systrace.h similarity index 100% rename from macos/include/utils/android/Systrace.h rename to macos/include/filament/utils/android/Systrace.h diff --git a/macos/include/utils/android/ThermalManager.h b/macos/include/filament/utils/android/ThermalManager.h similarity index 100% rename from macos/include/utils/android/ThermalManager.h rename to macos/include/filament/utils/android/ThermalManager.h diff --git a/macos/include/utils/bitset.h b/macos/include/filament/utils/bitset.h similarity index 100% rename from macos/include/utils/bitset.h rename to macos/include/filament/utils/bitset.h diff --git a/macos/include/utils/compiler.h b/macos/include/filament/utils/compiler.h similarity index 100% rename from macos/include/utils/compiler.h rename to macos/include/filament/utils/compiler.h diff --git a/macos/include/utils/compressed_pair.h b/macos/include/filament/utils/compressed_pair.h similarity index 100% rename from macos/include/utils/compressed_pair.h rename to macos/include/filament/utils/compressed_pair.h diff --git a/macos/include/utils/debug.h b/macos/include/filament/utils/debug.h similarity index 100% rename from macos/include/utils/debug.h rename to macos/include/filament/utils/debug.h diff --git a/macos/include/utils/generic/Mutex.h b/macos/include/filament/utils/generic/Mutex.h similarity index 100% rename from macos/include/utils/generic/Mutex.h rename to macos/include/filament/utils/generic/Mutex.h diff --git a/macos/include/utils/linux/Condition.h b/macos/include/filament/utils/linux/Condition.h similarity index 100% rename from macos/include/utils/linux/Condition.h rename to macos/include/filament/utils/linux/Condition.h diff --git a/macos/include/utils/linux/Mutex.h b/macos/include/filament/utils/linux/Mutex.h similarity index 100% rename from macos/include/utils/linux/Mutex.h rename to macos/include/filament/utils/linux/Mutex.h diff --git a/macos/include/utils/memalign.h b/macos/include/filament/utils/memalign.h similarity index 100% rename from macos/include/utils/memalign.h rename to macos/include/filament/utils/memalign.h diff --git a/macos/include/utils/ostream.h b/macos/include/filament/utils/ostream.h similarity index 100% rename from macos/include/utils/ostream.h rename to macos/include/filament/utils/ostream.h diff --git a/macos/include/utils/unwindows.h b/macos/include/filament/utils/unwindows.h similarity index 100% rename from macos/include/utils/unwindows.h rename to macos/include/filament/utils/unwindows.h diff --git a/macos/include/viewer/AutomationEngine.h b/macos/include/filament/viewer/AutomationEngine.h similarity index 100% rename from macos/include/viewer/AutomationEngine.h rename to macos/include/filament/viewer/AutomationEngine.h diff --git a/macos/include/viewer/AutomationSpec.h b/macos/include/filament/viewer/AutomationSpec.h similarity index 100% rename from macos/include/viewer/AutomationSpec.h rename to macos/include/filament/viewer/AutomationSpec.h diff --git a/macos/include/viewer/RemoteServer.h b/macos/include/filament/viewer/RemoteServer.h similarity index 100% rename from macos/include/viewer/RemoteServer.h rename to macos/include/filament/viewer/RemoteServer.h diff --git a/macos/include/viewer/Settings.h b/macos/include/filament/viewer/Settings.h similarity index 100% rename from macos/include/viewer/Settings.h rename to macos/include/filament/viewer/Settings.h diff --git a/macos/include/viewer/ViewerGui.h b/macos/include/filament/viewer/ViewerGui.h similarity index 100% rename from macos/include/viewer/ViewerGui.h rename to macos/include/filament/viewer/ViewerGui.h diff --git a/macos/src/AssetManager.cpp b/macos/src/AssetManager.cpp index 603966f9..d90b6c0e 100644 --- a/macos/src/AssetManager.cpp +++ b/macos/src/AssetManager.cpp @@ -84,8 +84,7 @@ EntityId AssetManager::loadGltf(const char *uri, ResourceBuffer rbuf = _resourceLoaderWrapper->load(uri); // Parse the glTF file and create Filament entities. - FilamentAsset *asset = - _assetLoader->createAsset((uint8_t *)rbuf.data, rbuf.size); + FilamentAsset *asset = _assetLoader->createAsset((uint8_t *)rbuf.data, rbuf.size); if (!asset) { Log("Unable to parse asset"); @@ -94,53 +93,64 @@ EntityId AssetManager::loadGltf(const char *uri, const char *const *const resourceUris = asset->getResourceUris(); const size_t resourceUriCount = asset->getResourceUriCount(); + + std::vector resourceBuffers; for (size_t i = 0; i < resourceUriCount; i++) { - string uri = - string(relativeResourcePath) + string("/") + string(resourceUris[i]); + string uri = string(relativeResourcePath) + string("/") + string(resourceUris[i]); + Log("Loading resource URI from relative path %s", resourceUris[i], uri.c_str()); ResourceBuffer buf = _resourceLoaderWrapper->load(uri.c_str()); + + resourceBuffers.push_back(buf); ResourceLoader::BufferDescriptor b(buf.data, buf.size); _gltfResourceLoader->addResourceData(resourceUris[i], std::move(b)); - _resourceLoaderWrapper->free(buf); } - _gltfResourceLoader->loadResources(asset); + // load resources synchronously + if (!_gltfResourceLoader->loadResources(asset)) { + Log("Unknown error loading glTF asset"); + _resourceLoaderWrapper->free(rbuf); + for(auto& rb : resourceBuffers) { + _resourceLoaderWrapper->free(rb); + } + return 0; + } const utils::Entity *entities = asset->getEntities(); - RenderableManager &rm = _engine->getRenderableManager(); - for (int i = 0; i < asset->getEntityCount(); i++) { - auto inst = rm.getInstance(entities[i]); - rm.setCulling(inst, false); - } - + + _scene->addEntities(asset->getEntities(), asset->getEntityCount()); + FilamentInstance* inst = asset->getInstance(); inst->getAnimator()->updateBoneMatrices(); inst->recomputeBoundingBoxes(); - _scene->addEntities(asset->getEntities(), asset->getEntityCount()); - asset->releaseSourceData(); - Log("Load complete for GLTF at URI %s", uri); SceneAsset sceneAsset(asset); - utils::Entity e = EntityManager::get().create(); EntityId eid = Entity::smuggle(e); _entityIdLookup.emplace(eid, _assets.size()); _assets.push_back(sceneAsset); + + for(auto& rb : resourceBuffers) { + _resourceLoaderWrapper->free(rb); + } + _resourceLoaderWrapper->free(rbuf); + Log("Finished loading glTF from %s", uri); + return eid; } EntityId AssetManager::loadGlb(const char *uri, bool unlit) { - - Log("Loading GLB at URI %s", uri); - + ResourceBuffer rbuf = _resourceLoaderWrapper->load(uri); - + + Log("Loaded GLB of size %d at URI %s", rbuf.size, uri); + FilamentAsset *asset = _assetLoader->createAsset( (const uint8_t *)rbuf.data, rbuf.size); @@ -153,8 +163,12 @@ EntityId AssetManager::loadGlb(const char *uri, bool unlit) { _scene->addEntities(asset->getEntities(), entityCount); - _gltfResourceLoader->loadResources(asset); - + if (!_gltfResourceLoader->loadResources(asset)) { + Log("Unknown error loading glb asset"); + _resourceLoaderWrapper->free(rbuf); + return 0; + } + const Entity *entities = asset->getEntities(); auto lights = asset->getLightEntities(); @@ -220,12 +234,9 @@ bool AssetManager::reveal(EntityId entityId, const char* meshName) { void AssetManager::destroyAll() { for (auto& asset : _assets) { _scene->removeEntities(asset.mAsset->getEntities(), - asset.mAsset->getEntityCount()); - + asset.mAsset->getEntityCount()); _scene->removeEntities(asset.mAsset->getLightEntities(), - asset.mAsset->getLightEntityCount()); - - _gltfResourceLoader->evictResourceData(); + asset.mAsset->getLightEntityCount()); _assetLoader->destroyAsset(asset.mAsset); } _assets.clear(); @@ -370,6 +381,10 @@ void AssetManager::remove(EntityId entityId) { return; } SceneAsset& sceneAsset = _assets[pos->second]; + + _assets.erase(std::remove_if(_assets.begin(), _assets.end(), + [=](SceneAsset& asset) { return asset.mAsset == sceneAsset.mAsset; }), + _assets.end()); _scene->removeEntities(sceneAsset.mAsset->getEntities(), sceneAsset.mAsset->getEntityCount()); @@ -384,7 +399,8 @@ void AssetManager::remove(EntityId entityId) { } EntityManager& em = EntityManager::get(); em.destroy(Entity::import(entityId)); - sceneAsset.mAsset = nullptr; // still need to remove sceneAsset somewhere... + + } void AssetManager::setMorphTargetWeights(EntityId entityId, const char* const entityName, const float* const weights, const int count) { diff --git a/macos/src/FilamentViewer.cpp b/macos/src/FilamentViewer.cpp index 422c35d6..85651be8 100644 --- a/macos/src/FilamentViewer.cpp +++ b/macos/src/FilamentViewer.cpp @@ -143,7 +143,6 @@ FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWr Log("Main camera created"); _view = _engine->createView(); - _view->setPostProcessingEnabled(false); Log("View created"); setToneMapping(ToneMapping::ACES); @@ -247,6 +246,10 @@ FilamentViewer::FilamentViewer(const void* sharedContext, const ResourceLoaderWr _scene->addEntity(imageEntity); } +void FilamentViewer::setPostProcessing(bool enabled) { + _view->setPostProcessingEnabled(enabled); +} + void FilamentViewer::setBloom(float strength) { decltype(_view->getBloomOptions()) opts; opts.enabled = true; @@ -259,14 +262,20 @@ void FilamentViewer::setToneMapping(ToneMapping toneMapping) { ToneMapper* tm; switch(toneMapping) { case ToneMapping::ACES: + Log("Setting tone mapping to ACES"); tm = new ACESToneMapper(); break; case ToneMapping::LINEAR: + Log("Setting tone mapping to Linear"); tm = new LinearToneMapper(); break; case ToneMapping::FILMIC: + Log("Setting tone mapping to Filmic"); tm = new FilmicToneMapper(); break; + default: + Log("ERROR: Unsupported tone mapping"); + return; } @@ -305,7 +314,7 @@ void FilamentViewer::removeLight(EntityId entityId) { if(entity.isNull()) { Log("Error: light entity not found under ID %d", entityId); } else { - auto removed = remove(_lights.begin(), _lights.end(), entity); + remove(_lights.begin(), _lights.end(), entity); _scene->remove(entity); EntityManager::get().destroy(1, &entity); } @@ -347,11 +356,23 @@ void FilamentViewer::loadKtxTexture(string path, ResourceBuffer rb) { ktxreader::Ktx1Bundle *bundle = new ktxreader::Ktx1Bundle(static_cast(rb.data), static_cast(rb.size)); + + + // because the ResourceBuffer will go out of scope before the texture callback is invoked, we need to make a copy to the heap + ResourceBuffer* rbCopy = new ResourceBuffer(rb); + + std::vector* callbackData = new std::vector { (void*)_resourceLoaderWrapper, rbCopy }; + + _imageTexture = ktxreader::Ktx1Reader::createTexture(_engine, *bundle, false, [](void* userdata) { - Ktx1Bundle* bundle = (Ktx1Bundle*) userdata; - delete bundle; - }, bundle); + std::vector* vec = (std::vector*)userdata; + ResourceLoaderWrapper* loader = (ResourceLoaderWrapper*)vec->at(0); + ResourceBuffer* rb = (ResourceBuffer*) vec->at(1); + loader->free(*rb); + delete rb; + delete vec; + }, callbackData); auto info = bundle->getInfo(); _imageWidth = info.pixelWidth; @@ -396,6 +417,9 @@ void FilamentViewer::loadPngTexture(string path, ResourceBuffer rb) { Texture::Type::FLOAT, nullptr, freeCallback, image); _imageTexture->setImage(*_engine, 0, std::move(pbd)); + // we don't need to free the ResourceBuffer in the texture callback because LinearImage takes a copy + // (check if this is correct ? ) + _resourceLoaderWrapper->free(rb); } void FilamentViewer::loadTextureFromPath(string path) { @@ -417,13 +441,11 @@ void FilamentViewer::loadTextureFromPath(string path) { } else if(endsWith(path, pngExt)) { loadPngTexture(path, rb); } - _resourceLoaderWrapper->free(rb); } void FilamentViewer::setBackgroundColor(const float r, const float g, const float b, const float a) { _imageMaterial->setDefaultParameter("showImage", 0); _imageMaterial->setDefaultParameter("backgroundColor", RgbaType::sRGB, float4(r, g, b, a)); - const Viewport& vp = _view->getViewport(); _imageMaterial->setDefaultParameter("transform", _imageScale); } @@ -685,11 +707,12 @@ bool FilamentViewer::setCamera(EntityId entityId, const char *cameraName) { auto asset = _assetManager->getAssetByEntityId(entityId); if(!asset) { - Log("Failed to find asset attached to specified entity id."); + Log("Failed to find asset under entity id %d.", entityId); + return false; } size_t count = asset->getCameraEntityCount(); if (count == 0) { - Log("Failed, no cameras found in current asset."); + Log("No cameras found attached to specified entity."); return false; } @@ -701,7 +724,7 @@ bool FilamentViewer::setCamera(EntityId entityId, const char *cameraName) { auto inst = _ncm->getInstance(cameras[0]); const char *name = _ncm->getName(inst); target = cameras[0]; - Log("No camera specified, using first : %s", name); + Log("No camera specified, using first camera node found (%s)", name); } else { for (int j = 0; j < count; j++) { auto inst = _ncm->getInstance(cameras[j]); @@ -720,61 +743,76 @@ bool FilamentViewer::setCamera(EntityId entityId, const char *cameraName) { Camera *camera = _engine->getCameraComponent(target); if(!camera) { Log("Failed to retrieve camera component for target"); + return false; } _view->setCamera(camera); const Viewport &vp = _view->getViewport(); const double aspect = (double)vp.width / vp.height; - // const float aperture = camera->getAperture(); - // const float shutterSpeed = camera->getShutterSpeed(); - // const float sens = camera->getSensitivity(); - // camera->setExposure(1.0f); - camera->setScaling({1.0 / aspect, 1.0}); + + Log("Successfully set view camera to target"); + return true; } void FilamentViewer::loadSkybox(const char *const skyboxPath) { - Log("Loading skybox from %s", skyboxPath); removeSkybox(); - if (skyboxPath) { + if (!skyboxPath) { + Log("No skybox path provided, removed skybox."); + } + + Log("Loading skybox from path %s", skyboxPath); + ResourceBuffer skyboxBuffer = _resourceLoaderWrapper->load(skyboxPath); + // because this will go out of scope before the texture callback is invoked, we need to make a copy to the heap + ResourceBuffer* skyboxBufferCopy = new ResourceBuffer(skyboxBuffer); + if(skyboxBuffer.size <= 0) { Log("Could not load skybox resource."); return; } - + + Log("Loaded skybox data of length %d", skyboxBuffer.size); + + std::vector* callbackData = new std::vector { (void*)_resourceLoaderWrapper, skyboxBufferCopy }; + image::Ktx1Bundle *skyboxBundle = new image::Ktx1Bundle(static_cast(skyboxBuffer.data), static_cast(skyboxBuffer.size)); _skyboxTexture = ktxreader::Ktx1Reader::createTexture(_engine, *skyboxBundle, false, [](void* userdata) { - image::Ktx1Bundle* bundle = (image::Ktx1Bundle*) userdata; - delete bundle; - }, skyboxBundle); + std::vector* vec = (std::vector*)userdata; + ResourceLoaderWrapper* loader = (ResourceLoaderWrapper*)vec->at(0); + ResourceBuffer* rb = (ResourceBuffer*) vec->at(1); + loader->free(*rb); + delete rb; + delete vec; + Log("Skybox load complete."); + }, callbackData); _skybox = filament::Skybox::Builder().environment(_skyboxTexture).build(*_engine); _scene->setSkybox(_skybox); - _resourceLoaderWrapper->free(skyboxBuffer); - } + } void FilamentViewer::removeSkybox() { Log("Removing skybox"); + _scene->setSkybox(nullptr); if(_skybox) { - _engine->destroy(_skybox); - _engine->destroy(_skyboxTexture); _skybox = nullptr; + } + if(_skyboxTexture) { + _engine->destroy(_skyboxTexture); _skyboxTexture = nullptr; - } - _scene->setSkybox(nullptr); + } } void FilamentViewer::removeIbl() { @@ -794,6 +832,8 @@ void FilamentViewer::loadIbl(const char *const iblPath, float intensity) { // Load IBL. ResourceBuffer iblBuffer = _resourceLoaderWrapper->load(iblPath); + // because this will go out of scope before the texture callback is invoked, we need to make a copy to the heap + ResourceBuffer* iblBufferCopy = new ResourceBuffer(iblBuffer); if(iblBuffer.size == 0) { Log("Error loading IBL, resource could not be loaded."); @@ -805,11 +845,18 @@ void FilamentViewer::loadIbl(const char *const iblPath, float intensity) { static_cast(iblBuffer.size)); math::float3 harmonics[9]; iblBundle->getSphericalHarmonics(harmonics); - _iblTexture = + + std::vector* callbackData = new std::vector { (void*)_resourceLoaderWrapper, iblBufferCopy }; + + _iblTexture = ktxreader::Ktx1Reader::createTexture(_engine, *iblBundle, false, [](void* userdata) { - image::Ktx1Bundle* bundle = (image::Ktx1Bundle*) userdata; - delete bundle; - }, iblBundle); + std::vector* vec = (std::vector*)userdata; + ResourceLoaderWrapper* loader = (ResourceLoaderWrapper*)vec->at(0); + ResourceBuffer* rb = (ResourceBuffer*) vec->at(1); + loader->free(*rb); + delete rb; + delete vec; + }, callbackData); _indirectLight = IndirectLight::Builder() .reflections(_iblTexture) .irradiance(3, harmonics) @@ -817,9 +864,7 @@ void FilamentViewer::loadIbl(const char *const iblPath, float intensity) { .build(*_engine); _scene->setIndirectLight(_indirectLight); - _resourceLoaderWrapper->free(iblBuffer); - - Log("Skybox/IBL load complete."); + Log("IBL loaded."); } } diff --git a/macos/src/PolyvoxFilamentApi.cpp b/macos/src/PolyvoxFilamentApi.cpp index b56fbbb9..d0675696 100644 --- a/macos/src/PolyvoxFilamentApi.cpp +++ b/macos/src/PolyvoxFilamentApi.cpp @@ -232,7 +232,7 @@ extern "C" { ); } - FLUTTER_PLUGIN_EXPORT void set_bone_animation( + FLUTTER_PLUGIN_EXPORT void set_bone_animation( void* assetManager, EntityId asset, const float* const frameData, @@ -254,6 +254,10 @@ extern "C" { ); } + FLUTTER_PLUGIN_EXPORT void set_post_processing(void* const viewer, bool enabled) { + ((FilamentViewer*)viewer)->setPostProcessing(enabled); + } + // void set_bone_transform( diff --git a/macos/src/PolyvoxFilamentFFIApi.cpp b/macos/src/PolyvoxFilamentFFIApi.cpp index 61ea39f3..e5ce2420 100644 --- a/macos/src/PolyvoxFilamentFFIApi.cpp +++ b/macos/src/PolyvoxFilamentFFIApi.cpp @@ -1,7 +1,5 @@ -extern "C" { - #include "PolyvoxFilamentFFIApi.h" -} +#include "PolyvoxFilamentFFIApi.h" #include "FilamentViewer.hpp" #include "filament/LightManager.h" @@ -190,6 +188,15 @@ extern "C" fut.wait(); } + FLUTTER_PLUGIN_EXPORT EntityId load_gltf_ffi(void* const assetManager, const char *path, const char *relativeResourcePath) + { + std::packaged_task lambda([&]() mutable + { return load_gltf(assetManager, path, relativeResourcePath); }); + auto fut = _rl->add_task(lambda); + fut.wait(); + return fut.get(); + } + FLUTTER_PLUGIN_EXPORT EntityId load_glb_ffi(void* const assetManager, const char *path, bool unlit) { std::packaged_task lambda([&]() mutable @@ -362,28 +369,31 @@ extern "C" // TODO } - void play_animation_ffi(void* const assetManager, EntityId asset, int index, bool loop, bool reverse, bool replaceActive, float crossfade) + FLUTTER_PLUGIN_EXPORT void play_animation_ffi(void* const assetManager, EntityId asset, int index, bool loop, bool reverse, bool replaceActive, float crossfade) { std::packaged_task lambda([&] { play_animation(assetManager, asset, index, loop, reverse, replaceActive, crossfade); }); auto fut = _rl->add_task(lambda); fut.wait(); } - void set_animation_frame_ffi(void* const assetManager, EntityId asset, int animationIndex, int animationFrame) + + FLUTTER_PLUGIN_EXPORT void set_animation_frame_ffi(void* const assetManager, EntityId asset, int animationIndex, int animationFrame) { std::packaged_task lambda([&] { set_animation_frame(assetManager, asset, animationIndex, animationFrame); }); auto fut = _rl->add_task(lambda); fut.wait(); } - void stop_animation_ffi(void* const assetManager, EntityId asset, int index) + + FLUTTER_PLUGIN_EXPORT void stop_animation_ffi(void* const assetManager, EntityId asset, int index) { std::packaged_task lambda([&] { stop_animation(assetManager, asset, index); }); auto fut = _rl->add_task(lambda); fut.wait(); } - int get_animation_count_ffi(void* const assetManager, EntityId asset) + + FLUTTER_PLUGIN_EXPORT int get_animation_count_ffi(void* const assetManager, EntityId asset) { std::packaged_task lambda([&] { return get_animation_count(assetManager, asset); }); @@ -391,7 +401,7 @@ extern "C" fut.wait(); return fut.get(); } - void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index) + FLUTTER_PLUGIN_EXPORT void get_animation_name_ffi(void* const assetManager, EntityId asset, char *const outPtr, int index) { std::packaged_task lambda([&] { get_animation_name(assetManager, asset, outPtr, index); @@ -400,6 +410,14 @@ extern "C" fut.wait(); } + FLUTTER_PLUGIN_EXPORT void set_post_processing_ffi(void* const viewer, bool enabled) { + std::packaged_task lambda([&] { + set_post_processing(viewer, enabled); + }); + auto fut = _rl->add_task(lambda); + fut.wait(); + } + FLUTTER_PLUGIN_EXPORT void ios_dummy_ffi() { Log("Dummy called"); }