Compare commits

...

1499 Commits

Author SHA1 Message Date
Nick Fisher
fa168df28f chore(release): publish packages
- thermion_dart@0.3.2
 - thermion_flutter@0.3.2
 - thermion_flutter_method_channel@0.3.2
 - thermion_flutter_web@0.3.2
 - thermion_flutter_platform_interface@0.3.2
2025-07-08 11:48:25 +08:00
Nick Fisher
ba3d016c1a fix: add missing destroySwapchain argument for web 2025-07-08 11:47:47 +08:00
Nick Fisher
e04d8e76c2 chore(release): publish packages
- thermion_dart@0.3.1
 - thermion_flutter@0.3.1
 - thermion_flutter_method_channel@0.3.1
 - thermion_flutter_web@0.3.1
 - thermion_flutter_platform_interface@0.3.1
2025-07-08 10:33:06 +08:00
Nick Fisher
353b33b7c3 fix: addDestroySwapchain argument to createViewer() (true by default). This is only used on iOS/macOS where a single swapchain is shared between all render targets 2025-07-07 17:37:28 +08:00
Nick Fisher
3c1b26af2c reverse orientation of camera volume 'lens' 2025-07-07 17:21:43 +08:00
Nick Fisher
b4ea80a84c don't allow creating instances for GridOverlay asset and only expose a single entity 2025-07-07 17:21:43 +08:00
Nick Fisher
db44bc6f74 formatting 2025-07-07 17:19:47 +08:00
Nick Fisher
c668549fb0 fix: add flush() to skybox/IBL destroy methods to ensure that textre upload callbacks are completed to avoid stalling 2025-07-07 17:19:36 +08:00
Nick Fisher
a66703b61c (flutter) (example) cleanup 2025-07-07 17:19:06 +08:00
Nick Fisher
cb8943ff72 formatting 2025-07-07 17:18:43 +08:00
Nick Fisher
9f59577f90 fix: duplicate setting for _grid 2025-07-07 16:40:15 +08:00
Nick Fisher
b86145d4c6 refactor: remove covariant keyword from createInstance args 2025-07-04 22:37:15 +08:00
Nick Fisher
cb8672f120 docs: remove camera_manipulation document 2025-07-03 17:49:51 +08:00
Nick Fisher
92578426ac docs: update quickstart 2025-07-03 17:17:44 +08:00
Nick Fisher
4a6479c4d8 docs: fix typo in link 2025-07-03 17:13:47 +08:00
Nick Fisher
2244d3fcb6 docs: remove code from thermion_flutter README.md and point to docs/repository example instead 2025-07-03 17:12:45 +08:00
Nick Fisher
003fd59269 (web) add -Wno-invalid-specialization 2025-07-03 16:23:24 +08:00
Nick Fisher
77e6ef7568 (CI) move to macos for web build 2025-07-03 16:15:20 +08:00
Nick Fisher
6f07d406f8 (CI) move compile-web-wasm to own step 2025-07-03 16:05:49 +08:00
Nick Fisher
bf5551e278 update Makefile to download wasm release libs 2025-07-03 15:51:23 +08:00
Nick Fisher
64577af352 (CI): update web build 2025-07-03 15:27:54 +08:00
Nick Fisher
951894be41 update CHANGELOG 2025-07-03 15:25:14 +08:00
Nick Fisher
c64b2b8659 docs: update showcase 2025-07-03 15:10:11 +08:00
Nick Fisher
322e77d2b7 add additional camera geometry object 2025-07-03 15:00:02 +08:00
Nick Fisher
a8a52bb2f4 docs: update quickstart/getting started/viewer docs 2025-07-03 14:32:07 +08:00
Nick Fisher
c7dfd293e2 (web) add cplusplus guards for material header 2025-07-03 14:22:26 +08:00
Nick Fisher
cf2498b45f (docs) update web 2025-07-03 14:22:08 +08:00
Nick Fisher
edb7538c36 (example) update viewer example + docs 2025-07-03 14:22:01 +08:00
Nick Fisher
b023e2fb97 chore(release): publish packages
- thermion_dart@0.3.0
 - thermion_flutter@0.3.0
 - thermion_flutter_method_channel@0.3.0
 - thermion_flutter_web@0.3.0
 - thermion_flutter_platform_interface@0.3.0
2025-07-03 13:33:19 +08:00
Nick Fisher
b51cc4b1d1 (flutter) remove direct local dependency in pubspec.yaml 2025-07-03 13:16:06 +08:00
Nick Fisher
d995ed8843 (flutter) cleanup widgets to satisfy pub.dev analyzer 2025-07-03 13:15:50 +08:00
Nick Fisher
b0d34bf6a8 (flutter) rename setExposure method in camera widget 2025-07-03 13:13:04 +08:00
Nick Fisher
2e28b0379d bump min Dart constraint to satisfy pub.dev 2025-07-03 13:09:36 +08:00
Nick Fisher
c899e30a7b chore(release): publish packages
- thermion_dart@0.3.0
 - thermion_flutter@0.3.0
 - thermion_flutter_method_channel@0.3.0
 - thermion_flutter_web@0.3.0
 - thermion_flutter_platform_interface@0.3.0
2025-07-03 13:04:44 +08:00
Nick Fisher
37f8558794 add stub method for resizeWebCanvas to make pub.dev happy 2025-07-03 13:04:24 +08:00
Nick Fisher
3cfa26d284 (web) add package:logging to pubspec to make pub.dev happy 2025-07-03 13:00:41 +08:00
Nick Fisher
b22a82e181 delete swift bindings from thermion_dart package 2025-07-03 12:59:28 +08:00
Nick Fisher
3d072594b5 chore(release): publish packages
- thermion_dart@0.3.0
 - thermion_flutter@0.3.0
 - thermion_flutter_method_channel@0.3.0
 - thermion_flutter_web@0.3.0
 - thermion_flutter_platform_interface@0.3.0
2025-07-03 12:56:51 +08:00
Nick Fisher
75590c5dde (CI) fix android build 2025-07-03 12:20:17 +08:00
Nick Fisher
b52d47bb41 (CI) temporarily disable ios build 2025-07-03 12:13:07 +08:00
Nick Fisher
397c575631 (CI) add android/ios builds to runner 2025-07-03 12:01:35 +08:00
Nick Fisher
ddc5af376a update grid material 2025-07-03 11:54:06 +08:00
Nick Fisher
77f843568f return true in listener widget when key handled 2025-07-03 11:53:54 +08:00
Nick Fisher
f706f54eb2 update outline material 2025-07-03 11:53:06 +08:00
Nick Fisher
c12ec892f3 add bbCenter to outline material 2025-07-03 11:52:50 +08:00
Nick Fisher
8e88252337 attach highlight to all entities, not the ultimate owning asset entity 2025-07-03 11:51:42 +08:00
Nick Fisher
23e34e6da4 expose isRenderable 2025-07-03 11:50:18 +08:00
Nick Fisher
5aa14ff5f6 update bindings 2025-07-01 17:00:34 +08:00
Nick Fisher
c0cc9fc26a use premultiplied alpha for grid material 2025-07-01 16:59:48 +08:00
Nick Fisher
946a6ae9d2 use premultiplied alpha for grid material 2025-07-01 16:59:19 +08:00
Nick Fisher
73e6597301 replace overlay render target when viewport resizes 2025-07-01 16:58:46 +08:00
Nick Fisher
e731556e6f add scale parameter to outline material 2025-07-01 14:28:19 +08:00
Nick Fisher
f9a7ac49a1 expose View methods for transparent picking 2025-07-01 14:20:02 +08:00
Nick Fisher
83e4a5142a (CI) update golden ref 2025-07-01 13:27:52 +08:00
Nick Fisher
bb913644f4 (example) add web folder for materials_and_textures example 2025-07-01 13:16:31 +08:00
Nick Fisher
4b9870244a fix material headers for web 2025-07-01 13:16:07 +08:00
Nick Fisher
ce2dc9b1cb update FFI/JS bindings 2025-07-01 13:11:24 +08:00
Nick Fisher
1a2b3b7b59 (test) pass-through render arg to capture() 2025-07-01 13:10:15 +08:00
Nick Fisher
c0ed7cbc90 (test) remove stencil highlight from scene_test.dart 2025-07-01 13:10:02 +08:00
Nick Fisher
a5eab305da add bool render argument to capture() 2025-07-01 13:09:42 +08:00
Nick Fisher
c467e3ca69 (test) add stencil highlight to view_tests 2025-07-01 13:09:20 +08:00
Nick Fisher
e984d8cf71 don't pass View to readPixels (only width/height, x/y offsets needed, and optionally rendertarget) 2025-07-01 13:03:06 +08:00
Nick Fisher
0693a2a95b update overlay tests 2025-07-01 12:17:17 +08:00
Nick Fisher
a2883fbee9 update overlay tests 2025-07-01 12:17:09 +08:00
Nick Fisher
dbcf463fd1 use buildMode from user defines (if present) 2025-07-01 12:14:53 +08:00
Nick Fisher
6ab1411801 (example) add Android support for materials_and_textures example 2025-07-01 12:12:59 +08:00
Nick Fisher
a9b5ca786e update grid material 2025-07-01 12:12:33 +08:00
Nick Fisher
4379313932 move grid material instantiation to GridOverlay 2025-07-01 11:07:44 +08:00
Nick Fisher
8a997d533a remove stencil highlight on remove from scene or destroyAsset 2025-07-01 11:07:17 +08:00
Nick Fisher
b7e79b1ac5 move outline material to embedded binary 2025-07-01 11:07:01 +08:00
Nick Fisher
9a5b737391 move outline material to embedded binary 2025-07-01 11:06:51 +08:00
Nick Fisher
215515a4fc use RenderTarget nativeHandle and don't cast to FFIMaterialInstance 2025-07-01 10:52:04 +08:00
Nick Fisher
3ca1cc0747 add OverlayComponentManager destructor 2025-07-01 10:51:00 +08:00
Nick Fisher
0c2e4e6faa (material) set gridColor when instantiating grid material 2025-07-01 10:42:42 +08:00
Nick Fisher
e50a1b6002 implement RenderTicker::removeSwapChain 2025-07-01 10:42:21 +08:00
Nick Fisher
70c67b59f7 (test) use DEPTH24_STENCIL8 2025-07-01 10:41:32 +08:00
Nick Fisher
2022fa97cc use DEPTH24_STENCIL8 as depth attachment for render target.
I'm not sure this is even used; the backend always allocate its own internal depth/stencil buffer. There may be a final blit from the internal buffer to the render target buffer, but I haven't actually confirmed this yet
2025-07-01 10:28:36 +08:00
Nick Fisher
809f84e1fa logging 2025-07-01 10:27:00 +08:00
Nick Fisher
932971c872 use generic parameter in FilamentApp for renderableManager/transformManager/etc, and only expose as getters in the interface 2025-07-01 10:26:30 +08:00
Nick Fisher
7ed120e854 call removeSwapChain when swapChain is destroyed 2025-07-01 10:25:36 +08:00
Nick Fisher
45c4cea6aa add setBackgroundImageFromTexture method to ThermionViewer 2025-07-01 10:23:25 +08:00
Nick Fisher
2545bbbd35 move set/remove stencilHighlight to View and implement via OverlayManager 2025-07-01 10:22:15 +08:00
Nick Fisher
5b41d594da on macOS/windows, always create stencil buffer by default 2025-07-01 10:22:07 +08:00
Nick Fisher
584abd6086 on macOS, always create stencil buffer by default 2025-07-01 10:21:39 +08:00
Nick Fisher
4b9c20eaa6 move set/remove stencilHighlight to View and implement via OverlayManager 2025-07-01 10:15:41 +08:00
Nick Fisher
d35a7a6de2 remove uv0 requirement from unlit.mat 2025-07-01 10:15:07 +08:00
Nick Fisher
0f9d2492e6 move set/remove stencilHighlight to View and implement via OverlayManager 2025-07-01 10:13:47 +08:00
Nick Fisher
96ef070be7 add linear_depth material 2025-07-01 10:08:36 +08:00
Nick Fisher
506d2fb562 expose Material->getFeautureLevel 2025-07-01 10:07:35 +08:00
Nick Fisher
0b18caf4ff expose Engine->getSupportedFeatureLevel() 2025-07-01 10:07:10 +08:00
Nick Fisher
b3b0e2bae1 Material now implements NativeHandle 2025-07-01 10:06:05 +08:00
Nick Fisher
35369b890f Camera now implements NativeHandle 2025-07-01 10:05:47 +08:00
Nick Fisher
53a2a116aa RenderTarget now implements NativeHandle 2025-07-01 10:04:33 +08:00
Nick Fisher
80ceb5988e RenderTarget now implements NativeHandle 2025-07-01 10:04:13 +08:00
Nick Fisher
9dc81781d1 (doc) debugging fix 2025-06-27 13:52:33 +08:00
Nick Fisher
3e8189ecd4 (CI) update goldens 2025-06-27 13:52:21 +08:00
Nick Fisher
31acdecedf (CI) disable overlay tests 2025-06-27 13:42:54 +08:00
Nick Fisher
feeb757a10 use render thread method for creating grid overlay & reinstate overlay tests 2025-06-27 13:34:01 +08:00
Nick Fisher
1bbf9d26ac (doc): fix debugging docs 2025-06-27 11:34:24 +08:00
Nick Fisher
40e206fc94 expose setScene on View 2025-06-27 11:34:01 +08:00
Nick Fisher
48b631b0a8 add generic parameter to NativeHandle, rather than getNativeHandle() 2025-06-27 11:33:50 +08:00
Nick Fisher
5ac4da5075 (CI) add picking_tests.dart and disable overlay_tests.dart (latter seems to have some issue on Linux 2025-06-27 09:36:59 +08:00
Nick Fisher
bc392bd933 use getNativeHandle for MaterialInstance 2025-06-27 09:36:20 +08:00
Nick Fisher
ceba3915a7 (test) add dithering to postprocessing test 2025-06-27 09:26:26 +08:00
Nick Fisher
c46ac2383c (test) add dithering to postprocessing test 2025-06-27 09:25:43 +08:00
Nick Fisher
a9083d9ba0 update overlay_tests to check if CI is the problem with rendering 2025-06-26 22:30:22 +08:00
Nick Fisher
d9436b8141 (CI) update goldens 2025-06-26 22:16:53 +08:00
Nick Fisher
72cc9b932a add containsChild method to ThermionAsset 2025-06-26 22:11:36 +08:00
Nick Fisher
2c7425fbdb (CI) add overlay_tests.dart 2025-06-26 22:11:13 +08:00
Nick Fisher
b5e699c781 (CI) add scene_tests to CI run 2025-06-26 15:32:27 +08:00
Nick Fisher
a7b0ed6f21 don't share a single material instance for all highlighted objects
destroy highlight material instances on highlight asset destroyed
expose highlight instances on Scene via getAssetForHighlight
2025-06-26 15:32:05 +08:00
Nick Fisher
b5d9a06422 update goldens 2025-06-26 10:45:40 +08:00
Nick Fisher
6b9b13682b (CI) update list of tests 2025-06-26 10:31:13 +08:00
Nick Fisher
fab3240ecf clamp pixel values in image conversion 2025-06-26 10:30:32 +08:00
Nick Fisher
2613ba2423 (example) fix initialInstances arg 2025-06-26 10:25:59 +08:00
Nick Fisher
85e3c98b28 (CI) update goldens 2025-06-26 10:20:10 +08:00
Nick Fisher
9d4802c270 (CI) remove update_goldens step - image artifacts are uploaded for every run, when updating goldens, edit dart.yml to point to the correct run/artifact ID 2025-06-26 10:14:43 +08:00
Nick Fisher
e7227d5f91 (CI) remove update_goldens step - image artifacts are uploaded for every run, when updating goldens, edit dart.yml to point to the correct run/artifact ID 2025-06-26 10:13:36 +08:00
Nick Fisher
ccc0a53abc rename numInstances to initialInstances in loadGltf methods.
when initialInstances > 0, don't wait for createInstance to be called to create corresponding GltfSceneAsset
2025-06-26 10:11:29 +08:00
Nick Fisher
b983c6bb90 (CI) download goldens artifact directly 2025-06-26 09:25:16 +08:00
Nick Fisher
854f1545d3 (CI) use artifact ID for golden download 2025-06-26 09:15:12 +08:00
Nick Fisher
ca110b2b01 (CI) update goldens SHA 2025-06-26 09:03:39 +08:00
Nick Fisher
ced0667a21 (test) add python script to compare goldens 2025-06-26 08:48:20 +08:00
Nick Fisher
240a2d5345 (CI) add dart-tests job 2025-06-26 08:48:20 +08:00
Nick Fisher
cb4479d8ce (CI) factor out shared setup into standalone action 2025-06-26 08:48:20 +08:00
Nick Fisher
f4b473b9ae disable physics test in instancing 2025-06-26 08:47:22 +08:00
Nick Fisher
fac0c727e4 don't track/remove assets when addToScene/removeFromScene is called 2025-06-25 16:51:21 +08:00
Nick Fisher
f0cf20d904 (docs) fix links 2025-06-25 15:56:21 +08:00
Nick Fisher
ebb73a29e1 (docs) add Linux docs 2025-06-25 15:54:08 +08:00
Nick Fisher
e92e59fab4 don't link mikktspace on Linux 2025-06-25 15:47:20 +08:00
Nick Fisher
be47ec0f8b add Linux build dockerfile 2025-06-25 15:47:20 +08:00
Nick Fisher
3657428025 (test) write PNGs, not BMP 2025-06-25 13:31:57 +08:00
Nick Fisher
33f8faac04 (CI) use xvfb 2025-06-25 12:49:55 +08:00
Nick Fisher
e9f0d5b745 use OpenGL backend on Linux tests 2025-06-25 11:13:07 +08:00
Nick Fisher
682881e133 don't ignore .github 2025-06-25 11:06:55 +08:00
Nick Fisher
3e2405aa76 merge linux CI runner 2025-06-25 11:06:47 +08:00
Nick Fisher
52038084f3 (CI) fix workflow 2025-06-25 11:05:45 +08:00
Nick Fisher
af9c2a93dc (Linux) remove OS check for mikktspace & geometry 2025-06-25 11:05:07 +08:00
Nick Fisher
e99ccb3100 (CI) update GitHub workflow runner for Linux 2025-06-25 11:03:48 +08:00
Nick Fisher
ed21eec66e pass through instance owner to FFIAsset so instances can be created on instances 2025-06-24 21:31:10 +08:00
Nick Fisher
05c62d5fa0 fix for macOS support 2025-06-24 15:39:41 +08:00
Nick Fisher
bec34e5b0b (test) update image path 2025-06-24 15:34:12 +08:00
Nick Fisher
634c6d6877 (web) only requestFrame/setState when canvas is imported as widget 2025-06-24 15:33:50 +08:00
Nick Fisher
b47e7f206c update BUILDING.md for Linux 2025-06-24 15:33:24 +08:00
Nick Fisher
1fe1889fa2 remove STB_IMAGE_IMPLEMENTATION (this is already linked) 2025-06-24 15:30:39 +08:00
Nick Fisher
4a43c6169a update build.dart for Linux support 2025-06-24 15:27:27 +08:00
Nick Fisher
6075608bda (CI) fix workflow 2025-06-24 15:26:46 +08:00
Nick Fisher
8a1f320bb7 remove objective_c from dev_dependencies & change test_helper to create render target without importing textures 2025-06-24 13:37:09 +08:00
Nick Fisher
ed5fb03aa4 (CI) update GitHub workflow to add update-goldens 2025-06-24 13:27:33 +08:00
Nick Fisher
21ccb52ab9 fix missing includes for Linux compatibility 2025-06-24 12:30:33 +08:00
Nick Fisher
ff48ce94a3 update build.dart to prepare for Linux support 2025-06-24 10:46:33 +08:00
Nick Fisher
d20ff0a6f1 don't require SwapChain to be passed to viewer.render - this will just render into all registered swapchains 2025-06-24 10:36:10 +08:00
Nick Fisher
c7d4d9cb33 add NativeHandle interface and refactor SwapChain to use getNativeHandle 2025-06-24 10:35:33 +08:00
Nick Fisher
9aec83fd70 throw Exception if createInstance is called on an instance and pass through isInstance/keepData flags 2025-06-24 10:22:40 +08:00
Nick Fisher
4dbd761d16 always request stencil buffer (depth24_stencil8) on macos/ios 2025-06-23 12:48:25 +08:00
Nick Fisher
fc365744ef (test) add cube_texture2.svg 2025-06-23 12:47:02 +08:00
Nick Fisher
900e43b5ec (example) (web) update build_web_compilers dependency 2025-06-23 12:46:45 +08:00
Nick Fisher
c78cd45b8a (example) (web) cleanup js_wasm example HTML when building for wasm 2025-06-23 12:46:18 +08:00
Nick Fisher
1268970ba7 (example) (web) cleanup js_wasm example 2025-06-23 12:45:59 +08:00
Nick Fisher
f93e44abd5 (web) don't hardcore 60fps timer on web 2025-06-23 12:44:37 +08:00
Nick Fisher
d41f29c06d (web) after capture is called on emscripten builds, request the render thread to exit/resume to yield to the browser so the frame is committed 2025-06-23 12:43:40 +08:00
Nick Fisher
e27be37378 add mRestart flag to immediately request the thread exits to force a commit frame 2025-06-23 12:43:03 +08:00
Nick Fisher
a8a7f11d44 add mRestart flag to immediately request the thread exits to force a commit frame 2025-06-23 12:42:53 +08:00
Nick Fisher
c81f2f225c (test) add simple capture test 2025-06-23 12:41:56 +08:00
Nick Fisher
a89c6d0eb3 update key map 2025-06-23 12:39:25 +08:00
Nick Fisher
34c9d5a279 (example) update metadata 2025-06-23 12:39:07 +08:00
Nick Fisher
57999bec3c clean up TextureProjection 2025-06-23 12:38:35 +08:00
Nick Fisher
69400f8b68 update TextureProjection to accept material instances and render multiple target entities 2025-06-23 12:38:06 +08:00
Nick Fisher
18b6b2e5f0 (web) in capture, add extra call to render a frame to flush frame callbacks 2025-06-23 12:27:05 +08:00
Nick Fisher
7e802f7b23 formatting 2025-06-23 12:25:30 +08:00
Nick Fisher
ce23b9f3cd (doc) add documentation for destroyAsset instances 2025-06-23 12:25:18 +08:00
Nick Fisher
45d8c7b929 (example) add user_defines to headless example pubspec 2025-06-23 12:24:46 +08:00
Nick Fisher
7a484ee794 update light tests for IBL from manually-created texture 2025-06-23 12:23:12 +08:00
Nick Fisher
832319ee1b (test) add bounding box test to asset_tests 2025-06-23 12:22:13 +08:00
Nick Fisher
668c001b49 add inUse flag to assist with recycling gltf instances 2025-06-23 12:21:52 +08:00
Nick Fisher
e503dd2e8b docstrings for GltfSceneAsset destroyInstance 2025-06-23 12:21:21 +08:00
Nick Fisher
e1c34cc4d9 formatting 2025-06-23 12:21:04 +08:00
Nick Fisher
b035d45ada (example) remove HTML header from picking web 2025-06-23 12:20:31 +08:00
Nick Fisher
75d34f0afb log user defines in build.dart 2025-06-23 12:20:14 +08:00
Nick Fisher
d053bfd6da move showBoundingBox/hideBoundingBox implementation to ThermionViewerFFI 2025-06-23 12:19:41 +08:00
Nick Fisher
920f81c514 add flipY argument to pixelBufferToPng 2025-06-23 12:18:08 +08:00
Nick Fisher
b64a505ffc formatting 2025-06-23 12:17:52 +08:00
Nick Fisher
00debf509d remove getBoundingBoxAsset and destroyBoundingBoxAsset from ThermionAsset 2025-06-23 12:17:38 +08:00
Nick Fisher
73b32f9c1e start migrating from covariant (for FFIAsset) to getNativeHandle() 2025-06-23 11:58:51 +08:00
Nick Fisher
abd1a1fd55 move bounding box asset methods from ThermionAsset to ThermionViewer 2025-06-23 11:57:15 +08:00
Nick Fisher
e8721b6133 more key mappings 2025-06-23 10:33:50 +08:00
Nick Fisher
a01bf36576 use ENABLE_TRACING from user defines 2025-06-21 10:14:43 +08:00
Nick Fisher
5f92c7feab expose addToScene argument in interface for loadGltfFromBuffer (this was already exposed in the implementation) 2025-06-21 09:25:44 +08:00
Nick Fisher
e1cb517417 allow creating more glTF instances than pre-allocated 2025-06-20 18:46:36 +08:00
Nick Fisher
37c35906d6 add propagateEvents arg to ThermionListenerWidget
expose physical/logical key maps
dont await InputHandler.handle - this no longer returns a future
2025-06-20 18:36:31 +08:00
Nick Fisher
355999562f move Axis class to own file 2025-06-20 18:35:21 +08:00
Nick Fisher
c208972ed7 docstrings 2025-06-20 18:34:08 +08:00
Nick Fisher
6a7ca3cd42 add backtick key 2025-06-20 18:33:47 +08:00
Nick Fisher
b6d869275a InputHandler shouldn't return Future
add mousePanSensitivity
2025-06-20 18:33:35 +08:00
Nick Fisher
64eeacc029 add missing support for Camera_getCullingProjectionMatrix 2025-06-20 12:42:32 +08:00
Nick Fisher
3783081456 in viewer, ensure onTextureUploadComplete callbacks are passed through to KTX1Bundle.createTexture 2025-06-19 11:52:44 +08:00
Nick Fisher
0a9b1a82e2 update instancing tests 2025-06-19 11:01:16 +08:00
Nick Fisher
9322122dac pass through keepData argument when loadGltfFromBuffer is called 2025-06-19 11:01:09 +08:00
Nick Fisher
a823718bcd fix incorrect indexing for material instances when creating an instance 2025-06-19 10:57:54 +08:00
Nick Fisher
7446b0545a update docs 2025-06-18 14:34:03 +08:00
Nick Fisher
3c4bedd43b update headless example README 2025-06-18 13:10:49 +08:00
Nick Fisher
21e8cf0d11 add Dart/headless example 2025-06-18 13:08:51 +08:00
Nick Fisher
86e0f7740f add Fence_waitAndDestroyRenderThread 2025-06-18 13:03:34 +08:00
Nick Fisher
a5a3c73708 add Fence_waitAndDestroy to TEngine.h 2025-06-18 13:02:59 +08:00
Nick Fisher
a44cb9a9cc add Fence_waitAndDestroy to TEngine.h 2025-06-18 13:02:48 +08:00
Nick Fisher
6f97bf3993 update build.dart to set ENABLE_TRACING based on tracing property from user defines 2025-06-18 13:02:24 +08:00
Nick Fisher
42f9538040 implement TSkybox and use setColor method to set the background color, rather than the image 2025-06-18 13:01:25 +08:00
Nick Fisher
df393b075b update bindings for Fence methods 2025-06-18 12:11:36 +08:00
Nick Fisher
13f9a8370b add iOS build instructions 2025-06-18 10:59:04 +08:00
Nick Fisher
558978a0f2 add makeUint8List helper method for ffi/jsinterop 2025-06-17 18:01:18 +08:00
Nick Fisher
a29b194612 ensure highlight entities don't cast/receive shadows 2025-06-17 17:29:40 +08:00
Nick Fisher
3e04bf427f allow passing reflection texture separately from irradiance when calling loadIblFromTexture 2025-06-17 14:13:19 +08:00
Nick Fisher
65ca59ff22 merge native setImage with setImageWithDepth 2025-06-17 13:25:53 +08:00
Nick Fisher
a91aaae131 formatting 2025-06-17 11:51:37 +08:00
Nick Fisher
71bae61015 add loadIblFromTexture method 2025-06-17 11:51:07 +08:00
Nick Fisher
288acb019e add getBackgroundImage to ThermionViewerFFI 2025-06-17 11:49:16 +08:00
Nick Fisher
b9354531b2 add cubemap methods to BackgroundImage 2025-06-17 11:26:27 +08:00
Nick Fisher
388b8556e5 fix incorrect index when creating texture from Ktx1Bundle 2025-06-12 11:54:10 +08:00
Nick Fisher
59d9d87d2f remove unused headers 2025-06-12 11:47:23 +08:00
Nick Fisher
d5824466f7 update generated bindings 2025-06-12 11:39:09 +08:00
Nick Fisher
3e11f09d63 update BUILDING.md 2025-06-12 11:38:25 +08:00
Nick Fisher
6bbab332be rename assetId to asset-id in ffigen config 2025-06-12 11:38:08 +08:00
Nick Fisher
85b86c5f13 formatting 2025-06-12 11:37:45 +08:00
Nick Fisher
d8652e8709 formatting 2025-06-12 11:37:29 +08:00
Nick Fisher
fe5279f942 don't free Int32List for childEntities, stackRestore takes care of this 2025-06-12 11:37:18 +08:00
Nick Fisher
828354abe5 clean up 2025-06-12 11:36:23 +08:00
Nick Fisher
48d9d6751b render() method on viewer now requires a SwapChain argument 2025-06-12 11:36:08 +08:00
Nick Fisher
4bde3d34cf (test) add test to create indirect light from irradiance texture 2025-06-12 11:34:17 +08:00
Nick Fisher
7f2ad7c4e4 (test) rename background_tests.dart to image_tests.dart 2025-06-12 11:33:57 +08:00
Nick Fisher
47807d560f separate native methods for creating IBL from irradiance texture and harmonics 2025-06-12 11:33:38 +08:00
Nick Fisher
ad26fc4563 add Dart IndirectLight and Ktx1Bundle classes, and separate KTX decoding from skybox/IBL creation 2025-06-12 11:31:44 +08:00
Nick Fisher
f252c86152 update image material to support cubemaps 2025-06-12 08:40:28 +08:00
Nick Fisher
e5bcde3ade (web) update bindings 2025-06-11 11:13:43 +08:00
Nick Fisher
9436666d34 (example) update quickstart web to import canvas as widget 2025-06-11 11:08:31 +08:00
Nick Fisher
32fe54ac09 (web) on Emscripten builds, use static global wrapper function for texture upload complete callbacks (this is needed because all callbacks need to be proxied to the main thread 2025-06-11 11:08:13 +08:00
Nick Fisher
0461bb364a use getPrimitiveCount method on FilamentApp, rather than direct FFI method 2025-06-11 09:52:57 +08:00
Nick Fisher
f78c6f258f add test for getBoundingBox 2025-06-11 09:51:24 +08:00
Nick Fisher
b0796f493f (test) move IBL tests to light_tests 2025-06-11 09:51:14 +08:00
Nick Fisher
8998f1f740 add RenderableManager_getBoundingBox 2025-06-11 09:50:48 +08:00
Nick Fisher
6362efcd61 add implementations for getPrimitiveCount/getBoundingBox on FFIFilamentApp 2025-06-11 09:50:35 +08:00
Nick Fisher
dc5c1161cc add setMaterialInstanceAt to FilamentApp interface 2025-06-11 09:50:02 +08:00
Nick Fisher
3e6f95e0bf add removeEntity method on Scene 2025-06-11 09:49:05 +08:00
Nick Fisher
f053c2f852 add removeEntity method on Scene 2025-06-11 09:48:44 +08:00
Nick Fisher
8f1da5e7bd separate skybox/ibl creation from KTX decoding 2025-06-11 09:48:17 +08:00
Nick Fisher
641d92515e move VoidCallback typedef to APIBoundaryTypes (now used outside the render thread header for texture upload callbacks) 2025-06-11 09:45:23 +08:00
Nick Fisher
d447fb8e2a add RenderableManager_getBoundingBox 2025-06-11 09:44:46 +08:00
Nick Fisher
ac87420a87 add setPriority to FilamentApp interface 2025-06-10 11:49:17 +08:00
Nick Fisher
5669ac5c55 Dart wrappers for View/Scene are now stateful 2025-06-10 11:48:31 +08:00
Nick Fisher
ae9ce197c1 move setStencilHighlight/removeStencilHighlight to Scene 2025-06-10 10:27:03 +08:00
Nick Fisher
37c67c2da8 (macos) create render target texture with isStencil:false 2025-06-10 10:24:01 +08:00
Nick Fisher
66d3bf65fd add view test for multiple views rendering into the same render target 2025-06-10 09:08:30 +08:00
Nick Fisher
dba40fb82b update instancing tests 2025-06-09 18:28:58 +08:00
Nick Fisher
95db6d7ebb update generated bindings 2025-06-09 18:28:43 +08:00
Nick Fisher
fef48940fc add implementation methods for getPrimitiveCount, setMaterialInstancesFromMap, getMaterialInstancesAsMap and setMaterialInstanceForAll 2025-06-09 18:28:33 +08:00
Nick Fisher
4086c9bd01 add interface methods for getPrimitiveCount, setMaterialInstancesFromMap, getMaterialInstancesAsMap and setMaterialInstanceForAll 2025-06-09 18:26:36 +08:00
Nick Fisher
928517f80f update gitignore with generated Swift dylib 2025-06-09 18:25:53 +08:00
Nick Fisher
4a9b91c411 (test) update helper to add createStencilBuffer flag 2025-06-09 18:25:39 +08:00
Nick Fisher
9054879722 update Swift bindings and remove dylib from repository (should be recompiled when running via CI/CD?) 2025-06-09 18:25:18 +08:00
Nick Fisher
4c95bc5b70 (macos) add isStencil argument for creating depth texture on macOS (if true, creates texture with .depth24Unorm_stencil8 2025-06-09 18:24:15 +08:00
Nick Fisher
8866ffe210 (test) update helper to add createStencilBuffer flag 2025-06-09 18:23:22 +08:00
Nick Fisher
c33eaef713 replace direct FFI View_ calls with calls to corresponding (Dart) methods on View 2025-06-09 18:18:58 +08:00
Nick Fisher
78e14574ef split stencil/depth tests from unlit material tests 2025-06-09 18:15:17 +08:00
Nick Fisher
073976b40e logging 2025-06-09 18:13:54 +08:00
Nick Fisher
6d0844f873 logging 2025-06-09 18:13:44 +08:00
Nick Fisher
983d1373ba logging 2025-06-09 18:13:35 +08:00
Nick Fisher
0dd64a07bb add helper method to convert between TStencilFace and MaterialInstance::StencilFace (not strictly necessary, but will help if something upstream changes in future 2025-06-09 18:12:17 +08:00
Nick Fisher
6055bd3fa7 fix FFIMaterial so it correctly translates between StencilFace (Dart) and TStencilFace (Dart FFI) enums 2025-06-09 18:10:07 +08:00
Nick Fisher
f3a576005a expose setShadowsEnabled method on View/FFIView 2025-06-09 18:09:27 +08:00
Nick Fisher
ff559997dd (web) regenerate JS bindings 2025-06-05 21:52:47 +08:00
Nick Fisher
79fea25d1b manually edit JS bindings to remove internal (Dart) struct members and fix TFogOptions 2025-06-05 16:42:28 +08:00
Nick Fisher
9ae7c784df pass TFogOptions by value, not pointer, and rearrange struct fields to minimize alignment issues 2025-06-05 16:41:08 +08:00
Nick Fisher
acf03ea0c7 pass TFogOptions by value, not pointer, and rearrange struct fields to minimize alignment issues 2025-06-05 16:40:53 +08:00
Nick Fisher
a9553da1d4 (build) remove libpng 2025-06-05 10:12:41 +08:00
Nick Fisher
fc4686b20f add documentation for Scene 2025-06-04 17:44:24 +08:00
Nick Fisher
ab4743da90 pass keepData flag to instances of FFIAsset when creating geometry 2025-06-04 11:14:02 +08:00
Nick Fisher
7406662853 add nullptr check when loading gltf assets 2025-06-04 11:13:39 +08:00
Nick Fisher
aa2f19442b surround frame request hooks with try/catch, and add a check to avoid concurrency exceptions when adding/removing hooks 2025-06-04 11:13:15 +08:00
Nick Fisher
cc99905eb8 pass through keepData flag when creating geometry via viewer 2025-06-04 11:11:42 +08:00
Nick Fisher
1d697037c0 gltf animation names are immutable, so cache these in a local copy in FFIAsset 2025-06-04 11:10:45 +08:00
Nick Fisher
c024efb8cd store reference to keepData in each FFIAsset and throw exception if an instance is attempted to be created when keepData is false 2025-06-04 11:09:28 +08:00
Nick Fisher
150c0227c8 (test) remove group from asset_tests 2025-06-04 11:08:13 +08:00
Nick Fisher
e594a42496 add test for create/destroy geometry instances 2025-06-04 11:07:58 +08:00
Nick Fisher
c484eeb37f when destroying an asset, remove/destroy instances before destroying the parent asset 2025-06-04 11:07:21 +08:00
Nick Fisher
655ba89b0f logging 2025-06-04 11:05:19 +08:00
Nick Fisher
840f3599e7 logging 2025-06-04 11:04:52 +08:00
Nick Fisher
d0da7f49f3 when destroying a SceneAsset, if the object is an instance, call destroyInstance on the owner of instance rather than deleting the object directly 2025-06-04 10:48:07 +08:00
Nick Fisher
886a4a37aa (test) log to stdout by default when using TestHelper 2025-06-04 10:46:55 +08:00
Nick Fisher
6db82d00c2 don't call removeAnimationComponent in viewer (moved to FilamentApp.destroyAsset) 2025-06-03 16:40:50 +08:00
Nick Fisher
0fb4fd0004 (web) use mimalloc as default allocator on emscripten builds and set SAFE_HEAP to 1 by default for debug builds 2025-06-03 16:40:12 +08:00
Nick Fisher
e147e59d8d don't call endFrame() unless beginFrame() was called
only use condition_variable on non-emscripten builds
2025-06-03 16:39:04 +08:00
Nick Fisher
28aef7e5cc when destroying assets, remove animation component in FilamentApp, not viewer 2025-06-02 14:58:52 +08:00
Nick Fisher
b1617004d7 add missing EMSCRIPTEN_KEEPALIVE from Texture_generateMipMapsRenderThread 2025-06-02 14:58:11 +08:00
Nick Fisher
32b6b1c227 (flutter) add zero size check in TextureWidget 2025-06-02 12:58:53 +08:00
Nick Fisher
1c500fe925 require dispose() on InputHandlerDelegate and update sample implementations 2025-06-02 12:58:26 +08:00
Nick Fisher
3fd15ab91b (flutter) add zero size check for texture descriptors 2025-06-02 12:58:11 +08:00
Nick Fisher
2191f9d44b require dispose() on InputHandlerDelegate and update sample implementations 2025-06-02 12:57:45 +08:00
Nick Fisher
87b63301f2 require dispose() on InputHandlerDelegate and update sample implementations 2025-06-02 12:57:22 +08:00
Nick Fisher
0d5b42c908 add Char to js_interop malloc 2025-06-02 12:15:35 +08:00
Nick Fisher
12e2dca873 change wireframe camera geometry 2025-06-02 12:14:55 +08:00
Nick Fisher
8eae6bf90c add flags to pixelBufferToPng for alpha/float 2025-06-02 12:14:40 +08:00
Nick Fisher
873244879f when batch is true in DelegateInputHandler, filter simultaneous keydown/keyup 2025-06-02 12:14:05 +08:00
Nick Fisher
2ab1732b6b add synthesized property to KeyEvent and add additional keys 2025-06-02 12:12:51 +08:00
Nick Fisher
5eb83a80b3 formatting 2025-06-02 12:08:26 +08:00
Nick Fisher
7141a01101 use render thread method for resetting to rest pose 2025-06-02 11:52:41 +08:00
Nick Fisher
24aaffda9c lock mutex when setting animations manually via AnimationManager 2025-06-02 11:52:08 +08:00
Nick Fisher
82aba605f9 add Texture_generateMipMapsRenderThread, AnimationManager_resetToRestPoseRenderThread 2025-06-02 11:51:43 +08:00
Nick Fisher
7b80723560 add Texture_generateMipMapsRenderThread, AnimationManager_resetToRestPoseRenderThread 2025-06-02 11:51:19 +08:00
Nick Fisher
39a302c23e remove comments 2025-06-02 11:50:26 +08:00
Nick Fisher
059926fe98 add generateMipmapsRenderThread 2025-06-02 10:44:45 +08:00
Nick Fisher
3c9b607109 add geometry tests for destroyAssets 2025-06-02 10:13:08 +08:00
Nick Fisher
70e2933c4b track geometry assets internally to ensure they are destroyed when destroyAssets is called 2025-06-02 10:09:58 +08:00
Nick Fisher
4fb85eb45a don't throw exception on failure to remove animation component 2025-05-31 21:58:32 +08:00
Nick Fisher
afecacfcf0 getChildEntity in FFIAsset should invoke FilamentApp method, not direct binding method 2025-05-31 11:25:24 +08:00
Nick Fisher
2f7f363db9 pass shared NameComponentManager to gltfio AssetLoader 2025-05-31 11:21:57 +08:00
Nick Fisher
7f0ec01937 change RenderThread warning from Log to TRACE 2025-05-30 14:35:48 +08:00
Nick Fisher
ccdf2ecda6 (flutter) better synchronization in ThermionTextureWidget with presentation deadline 2025-05-30 14:35:24 +08:00
Nick Fisher
5f9a7bb959 remove errant comment 2025-05-29 22:30:00 +08:00
Nick Fisher
764fea836b move tests to unlit_material_tests.dart 2025-05-29 22:29:04 +08:00
Nick Fisher
27d6bd0f4a update projection tests to use aspect-ratio other than 1 2025-05-29 22:28:50 +08:00
Nick Fisher
7e810b8265 remove old tests 2025-05-29 22:27:39 +08:00
Nick Fisher
6ad3bfab13 remove old material_tests.dart 2025-05-29 22:27:31 +08:00
Nick Fisher
5ed00164a9 (web) expose HEAPF32 2025-05-29 22:26:59 +08:00
Nick Fisher
86894cf583 add alpha/requireAlpha argument when decoding images
remove size checks from setImage (we are assuming the caller knows the correct size)
This also adds some monkey-patch methods to js_interop to convert Float32List to a UInt8List (but use this with care, because it will only work for emscripten-allocated objects)
2025-05-29 22:26:42 +08:00
Nick Fisher
c789e75af5 (web) fix casing for generateMipMaps 2025-05-29 19:27:22 +08:00
Nick Fisher
6ad76b6217 add stb_image.h 2025-05-29 19:02:35 +08:00
Nick Fisher
2e097f7ec6 (CI) run macos/web samples separately 2025-05-29 18:57:53 +08:00
Nick Fisher
beeb45609c don't take reference to Builder 2025-05-29 18:57:01 +08:00
Nick Fisher
94eacec27e Texture improvements: generateMipmaps(), add levels to createTexture, tests to check auto mip level selection 2025-05-29 18:38:57 +08:00
Nick Fisher
11f7ac459b separate material_tests into ubershader & unlit 2025-05-29 18:02:21 +08:00
Nick Fisher
afd47f9b24 merge test/example assets 2025-05-29 17:58:13 +08:00
Nick Fisher
aab2b0b769 (web) update emcc flags 2025-05-28 21:54:31 +08:00
Nick Fisher
ffc7717149 (web) add explicit check for failure to create context 2025-05-28 21:54:03 +08:00
Nick Fisher
ff5921a505 remove unused StreamBufferAdapter 2025-05-28 21:52:53 +08:00
Nick Fisher
45c7831a17 replace libpng with stb_image for Image_decode 2025-05-28 21:51:56 +08:00
Nick Fisher
fcf57e8850 fix missing return value in EntityManager_createEntity 2025-05-28 21:48:24 +08:00
Nick Fisher
a875f370e5 remove logging 2025-05-28 18:41:02 +08:00
Nick Fisher
b00f37ddaa (web) remove asTypedList from generated JS bindings (replaced by equivalent in js_interop.dart 2025-05-28 11:21:48 +08:00
Nick Fisher
a98d7550ae (web) add asTypedList extension for Pointer<Float>/Float32List 2025-05-28 10:49:44 +08:00
Nick Fisher
b12dc80cfd (flutter) (web) only set position/zIndex for canvas if createCanvas is true 2025-05-28 10:48:39 +08:00
Nick Fisher
f7d6d4786a remove asset from internal list before destroying 2025-05-28 10:48:10 +08:00
Nick Fisher
5db9fe2c9e disable initial clear color (blue) for gl canvas on web 2025-05-28 10:47:44 +08:00
Nick Fisher
d298b0d091 add decodeToTexture static helper method to Texture 2025-05-28 10:47:21 +08:00
Nick Fisher
4a7a366fc6 add setTransform/getWorldTransform to FilamentApp 2025-05-28 10:47:00 +08:00
Nick Fisher
c6ceea4f8b update generated bindings 2025-05-24 16:38:21 +08:00
Nick Fisher
679af95901 allow directly creating an entity and setting transform 2025-05-24 16:34:47 +08:00
Nick Fisher
1e812ebe93 allow directly creating an entity and setting transform 2025-05-24 16:33:58 +08:00
Nick Fisher
75a9950909 update generated bindings 2025-05-24 15:05:29 +08:00
Nick Fisher
81fb0fb583 add setFogOptions 2025-05-24 15:05:03 +08:00
Nick Fisher
4d6c008299 regenerate JS bindings 2025-05-24 10:54:49 +08:00
Nick Fisher
4505cbe325 add missing setExposure methods + reinstate camera tests 2025-05-24 10:51:56 +08:00
Nick Fisher
60cfe32672 (CI) explicitly specify arm64 for runner 2025-05-23 17:48:55 +08:00
Nick Fisher
0decb6b9f1 upload build.log on test failure 2025-05-23 17:41:51 +08:00
Nick Fisher
d799ef0ca0 comment out Dart action (needs software rasterizer or self-hosted runner with GPU)
add basic flutter build for example projects
2025-05-23 17:33:37 +08:00
Nick Fisher
5a72bc835d use flutter pub get before attempting to run with dart 2025-05-23 17:11:59 +08:00
Nick Fisher
3e44716e8c try and use Dart path directly 2025-05-23 17:09:51 +08:00
Nick Fisher
bf295394a8 try and use Dart path directly 2025-05-23 17:06:45 +08:00
Nick Fisher
64bc7f8bf3 update GitHub actions to use flutter action 2025-05-23 17:03:07 +08:00
Nick Fisher
63ba231996 update GitHub actions to remove upload logs step (unavailable on macos?) 2025-05-23 16:59:28 +08:00
Nick Fisher
562c221461 update GitHub actions to remove upload logs step (unavailable on macos?) 2025-05-23 16:58:48 +08:00
Nick Fisher
f123bbf930 update GitHub actions 2025-05-23 16:57:53 +08:00
Nick Fisher
1765350cbe update GitHub actions to run tests on macos 2025-05-23 16:50:13 +08:00
Nick Fisher
94683ab5a9 (test) ensure aspect ratio is correctly set if viewport is not square 2025-05-23 16:28:32 +08:00
Nick Fisher
5a74345fe1 specify texture flags for render target in flutter 2025-05-23 16:28:09 +08:00
Nick Fisher
195a625738 when getMaterialInstance/setMaterialInstance are called, if entity is not renderable, return false
if no entity is passed, iterate through all entities and use the first renderable entity
2025-05-23 16:27:38 +08:00
Nick Fisher
725f36a860 (test) use RGBA32F when creating render target in TestHelper 2025-05-22 15:23:30 +08:00
Nick Fisher
51212bdeed (test) cleanup imports 2025-05-22 15:22:32 +08:00
Nick Fisher
96694be017 remove register/unregister swapchain/view in TextureProjection
since we are rendering each view separately, this is no longer necessary
2025-05-22 15:22:15 +08:00
Nick Fisher
a31f11151e check for beginFrame returning false in project() and correctly calculate numChannels/channelSize 2025-05-22 15:19:03 +08:00
Nick Fisher
10136c8cde use flush() instead of directly calling executeRenderThread (wasm) or flushAndWait (native) 2025-05-22 15:18:19 +08:00
Nick Fisher
c712804bb1 add createLight method to FilamentApp 2025-05-22 15:09:36 +08:00
Nick Fisher
1373ce5a32 use flush() instead of manually invoking different methods for wasm/native 2025-05-22 15:08:29 +08:00
Nick Fisher
1b3d46533c remove unnecessary import 2025-05-22 15:08:02 +08:00
Nick Fisher
5733bc125b add addEntity method to Scene 2025-05-22 15:07:43 +08:00
Nick Fisher
943de8f77b add createCamera method to FilamentApp 2025-05-22 15:07:23 +08:00
Nick Fisher
9a4fd1141e remove logging 2025-05-22 15:06:27 +08:00
Nick Fisher
2bf77f123f remove unused sampledDepth parameter from capture_uv material 2025-05-22 15:03:52 +08:00
Nick Fisher
9785576866 reinstate View tests 2025-05-22 15:03:22 +08:00
Nick Fisher
3007dec127 TextureProjection now makes a separate render pass for each View.
This is needed because changing material properties between beginFrame/endFrame is unsupported
2025-05-22 15:03:06 +08:00
Nick Fisher
1008452198 (test) formatting 2025-05-21 13:16:20 +08:00
Nick Fisher
1f58c13179 (test) formatting 2025-05-21 13:16:06 +08:00
Nick Fisher
5ce2efa638 (web) remove console logging 2025-05-21 13:15:43 +08:00
Nick Fisher
e75805ba06 change output dir for generated swift lib 2025-05-21 13:15:14 +08:00
Nick Fisher
73f04eb0d4 update test helper setup for new objective_c package 2025-05-21 13:14:46 +08:00
Nick Fisher
097d991ea8 move precompiled Swift lib to test/generated and add precompiled objc 2025-05-21 13:14:31 +08:00
Nick Fisher
5cf494def9 remove old input handler test 2025-05-21 12:03:20 +08:00
Nick Fisher
23d6e3a819 (example) update picking example 2025-05-21 12:02:29 +08:00
Nick Fisher
9a6bacc73f pass both logical key & physical key to input handler on keyboard keypress 2025-05-21 12:01:50 +08:00
Nick Fisher
e432b0be1d update tests 2025-05-21 11:58:32 +08:00
Nick Fisher
2dad04a354 (examples) remove logging 2025-05-20 14:57:41 +08:00
Nick Fisher
1fb68b20e9 separate Gltf/Morph/BoneAnimationComponentManager definitions
move gltf animation instantiation to GltfAnimationComponentManager (this helps ensure we are creating the component on the correct entity)
2025-05-20 14:57:26 +08:00
Nick Fisher
d61723dee2 update Emscripten build instructions for macOS compat 2025-05-18 15:13:02 +08:00
Nick Fisher
1afd5ff257 clean up FixedOrbitCameraDelegate 2025-05-18 15:11:52 +08:00
Nick Fisher
04b8b333d4 update materials_and_textures sample 2025-05-18 15:11:52 +08:00
Nick Fisher
fdd3853121 add await to inputHandler calls in ThermionListenerWidget 2025-05-18 15:11:52 +08:00
Nick Fisher
bdba92c842 set emscripten main thread to nullptr when RenderThread is stopped 2025-05-18 15:11:52 +08:00
Nick Fisher
66f3e20489 copy input events before passing to delegate 2025-05-18 15:11:52 +08:00
Nick Fisher
871a327d99 implement js_interop withUint32Callback 2025-05-18 15:11:52 +08:00
Nick Fisher
c53266f12f move ThermionFlutterWebOptions to platform_interface package 2025-05-18 15:11:52 +08:00
Nick Fisher
11ff6c9053 remove TMaterialKey struct and pass directly as function params 2025-05-18 15:11:50 +08:00
Nick Fisher
d392daa2e6 fix Makefile 2025-05-18 15:09:05 +08:00
Nick Fisher
fc75aab94b add bindings for View_pickRenderThread 2025-05-18 15:09:05 +08:00
Nick Fisher
760ae8ed8b add makeInt32List method (to create an Int32List actually backed by heap-allocated memory 2025-05-18 15:09:05 +08:00
Nick Fisher
25ada92574 add View_pickRenderThread method (only used in WASM builds so we can proxy the callback to the main thread 2025-05-18 15:09:05 +08:00
Nick Fisher
12c8031f2b update JS bindings 2025-05-18 15:09:04 +08:00
Nick Fisher
8c78e8e629 update JS interop to accept requestId for VoidCallback 2025-05-18 15:09:03 +08:00
Nick Fisher
dc5cdcb7e1 update all void callbacks to accept an integer requestId 2025-05-18 15:08:47 +08:00
Nick Fisher
383fc221d9 add web docs 2025-05-18 15:08:47 +08:00
Nick Fisher
e4942bad2f add web docs 2025-05-18 15:08:47 +08:00
Nick Fisher
460000308a remove custom camera delegate 2025-05-18 15:08:47 +08:00
Nick Fisher
826a22f348 wip 2025-05-18 15:08:45 +08:00
Nick Fisher
43442e10de update picking index.html 2025-05-18 14:46:56 +08:00
Nick Fisher
b710e0ace3 regenerate JS bindings 2025-05-18 14:46:48 +08:00
Nick Fisher
b0087d8d54 rename loadResource in ThermionFlutterWeb 2025-05-18 14:46:39 +08:00
Nick Fisher
dcef1a5749 symlink cube_with_morph_targets.glb to example assets 2025-05-17 22:23:39 +08:00
Nick Fisher
1c0a7f6b1e update BUILDING.md 2025-05-17 22:23:00 +08:00
Nick Fisher
2444e9a980 add example animations project 2025-05-17 22:19:47 +08:00
Nick Fisher
417ee4648f (flutter) rename resourceLoader to loadResource and don't pass to ThermionViewerFFI 2025-05-17 22:19:09 +08:00
Nick Fisher
4b2342979f update tests + bindings 2025-05-17 21:52:21 +08:00
Nick Fisher
ee306549d8 rename relativeResourcePath to resourceUri
move resource loader from viewer to FilamentApp
2025-05-17 21:51:51 +08:00
Nick Fisher
d3ec825688 rename relativeResourcePath to resourceUri
move resource loader from viewer to FilamentApp
2025-05-17 21:50:58 +08:00
Nick Fisher
fe11479b08 remove relativeResourcePath from gltf resource loading;
all external resources should be added on the Dart side, Filament should never attempt to load these directly from the filesystem.
relativeResourcePath (called gltfPath on the Filament side) is only used for desktop loading, so this is now irrelevant.
Note that Filament must be compiled with GLTFIO_USE_FILESYSTEM=0
2025-05-17 21:48:18 +08:00
Nick Fisher
c98e604e76 split animation components into GltfAnimation/MorphAnimation/BoneAnimation 2025-05-17 10:11:55 +08:00
Nick Fisher
f9d09e17ef return false from AnimationManager_ methods if provided sceneAsset is not a glTF asset
rename playAnimation to playGltfAnimation etc where appropriate
2025-05-17 10:06:12 +08:00
Nick Fisher
27eb117466 remove old WASM viewer 2025-05-17 10:04:49 +08:00
Nick Fisher
46e87fb6a4 add sources to native CMakeLists.txt 2025-05-17 10:04:33 +08:00
Nick Fisher
6d95180870 remove old JS shim/bridge classes 2025-05-17 10:04:19 +08:00
Nick Fisher
c7ad70b81c add glTF animation track to test cube 2025-05-17 10:03:51 +08:00
Nick Fisher
62bf3876f8 update materials_and_textures example 2025-05-13 18:06:33 +08:00
Nick Fisher
cff0893d53 await future in ThermionListenerWidget 2025-05-13 16:42:50 +08:00
Nick Fisher
6135c5eecc (android) use flutter.ndkVersion in thermion_flutter build.gradle 2025-05-13 16:42:32 +08:00
Nick Fisher
170fb4bf6d removing processing check in DelegateInputHandler 2025-05-13 16:41:58 +08:00
Nick Fisher
2f5ce65684 add JNI_OnLoad to Android library. This is needed to manually call ::filament::backend::VirtualMachineEnv::JNI_OnLoad 2025-05-12 14:15:11 +08:00
Nick Fisher
bb272f2579 update web input handler 2025-05-12 10:15:41 +08:00
Nick Fisher
56e132ec15 update picking example for web 2025-05-12 10:15:27 +08:00
Nick Fisher
5379ae7d74 update js/wasm example pubspec 2025-05-12 10:15:06 +08:00
Nick Fisher
9d7e96e996 update Makefile for web 2025-05-12 10:14:51 +08:00
Nick Fisher
8bbe2f0dfb remove manual stack allocation/copy for struct args 2025-05-12 10:14:41 +08:00
Nick Fisher
0794e0ad84 comments 2025-05-12 09:36:12 +08:00
Nick Fisher
3f0f15b441 add _ready check to FixedOrbitCameraDelegate 2025-05-10 12:16:49 +08:00
Nick Fisher
90f17e3bc9 rename camera_manipulation sample to picking 2025-05-10 12:16:16 +08:00
Nick Fisher
8311c95100 update delegates to accept a List<InputEvent>, not Set 2025-05-10 09:08:59 +08:00
Nick Fisher
97da08ae8b explicitly state type 2025-05-10 09:07:52 +08:00
Nick Fisher
12a96cceee InputHandler now accepts a List of events, not a Set
add batch argument to DelegateInputHandler
2025-05-10 09:07:28 +08:00
Nick Fisher
fac7e9a894 transformToUnitCube returns bool (false when transform instance can't be found) 2025-05-10 09:06:53 +08:00
Nick Fisher
c47cfe9b57 transformToUnitCube returns bool (false when transform instance can't be found) 2025-05-10 09:04:06 +08:00
Nick Fisher
671949a5cd transformToUnitCube returns bool (false when transform instance can't be found) 2025-05-10 09:03:46 +08:00
Nick Fisher
602e220024 update ThermionListenerWidget to use newer InputHandler interface 2025-05-09 11:24:28 +08:00
Nick Fisher
ebab1f528d only set mRendered to true when a frame was actually rendered 2025-05-09 11:23:13 +08:00
Nick Fisher
4a5a1d0157 remove debug printing 2025-05-09 11:22:25 +08:00
Nick Fisher
906f5bf931 remove redundant make_render_callback_fn_pointer definition 2025-05-09 11:22:08 +08:00
Nick Fisher
9ef6d46958 update iOS/Android/MacOS project files 2025-05-09 11:21:47 +08:00
Nick Fisher
50c1c871a8 return false from RenderTicker when frame skipped 2025-05-09 11:20:21 +08:00
Nick Fisher
8a6ba637a7 store last render time in RenderTicker 2025-05-09 11:19:13 +08:00
Nick Fisher
abde201bda update bindings 2025-05-09 11:18:33 +08:00
Nick Fisher
428a613b65 update iOS build instructions 2025-05-09 11:18:20 +08:00
Nick Fisher
1ddeac2d31 refactor InputHandler interface/DelegateInputHandler implementation 2025-05-09 11:18:07 +08:00
Nick Fisher
7961ed06f7 exclude libfilamat from iOS and gltfio from iOS/Android 2025-05-09 11:15:20 +08:00
Nick Fisher
cedcb45484 feat!: change default near/far to 0.1/100.0 2025-05-08 17:27:49 +08:00
Nick Fisher
cf6abdcf01 exclude libgltfio from Android (only gltfio_core is available) 2025-05-08 17:27:23 +08:00
Nick Fisher
04d3aee2e9 don't actually invoke markTextureFrameAvailable on Android (the swapchain is attached to the window so this is not necessary 2025-05-08 17:25:54 +08:00
Nick Fisher
5af18cb99b [android] update docs 2025-05-08 16:48:01 +08:00
Nick Fisher
87396ec859 [android] remove legacy references to ResourceBuffer/RenderCallback and switch from JNA to JNI for getting native window handle 2025-05-08 16:47:39 +08:00
Nick Fisher
2f16908992 feat! js_interop improvements 2025-05-07 17:06:38 +08:00
Nick Fisher
63e2dcd0ca add getter for Aabb3 directly (getBoundingBox) on ThermionAsset 2025-05-07 16:53:16 +08:00
Nick Fisher
afd8bff58e remove superseded Linux resource loader 2025-05-07 16:53:16 +08:00
Nick Fisher
2ab56b86bc remove old CMake script 2025-05-07 16:53:16 +08:00
Nick Fisher
e9628511fc remove C++ includes from C headers 2025-05-07 16:53:15 +08:00
Nick Fisher
3402c02d6a Update README.md 2025-04-19 12:38:22 +08:00
Daniel Breedeveld
fdf278cd79 docs: fix typo 'applicaiton' in index.mdx 2025-04-19 12:37:51 +08:00
Nick Fisher
e5b75debed add test for destroy camera 2025-04-19 09:50:18 +08:00
Nick Fisher
eedfbbb934 remove unused material input src files from native CMakeLists 2025-04-19 09:49:59 +08:00
Nick Fisher
2a5a149e83 update bindings 2025-04-19 09:49:35 +08:00
Nick Fisher
4cb725d47e add Engine_destroyCamera 2025-04-19 09:49:19 +08:00
Nick Fisher
8228486ef3 remove asset from internal list when destroyAsset is called 2025-04-19 09:48:17 +08:00
Nick Fisher
c66dc40bab separate getter/create method for boundingBoxAsset 2025-04-19 09:47:18 +08:00
Nick Fisher
4f1a9fb0d5 update stub + generated bindings 2025-04-17 13:36:16 +08:00
Nick Fisher
454ec14b40 allow relativeResourcePath to be null for loadGltfFromBuffer 2025-04-17 13:36:02 +08:00
Nick Fisher
b4f3d865b4 call updateRenderOrder when setRenderable is called on View 2025-04-17 13:35:41 +08:00
Nick Fisher
86779cb629 reinstate GizmoInputHandler 2025-04-17 13:35:22 +08:00
Nick Fisher
e1d5d14ff7 add RenderTarget_destroyRenderThread 2025-04-17 13:35:07 +08:00
Nick Fisher
1be1979c05 rename requestAnimationFrame to requestFrame 2025-04-17 13:34:18 +08:00
Nick Fisher
2b6693a826 change default PixelDataType to FLOAT for capture() 2025-04-17 13:32:35 +08:00
Nick Fisher
7d369ad813 change setBoundingBoxVisibility to getBoundingBoxAsset 2025-04-17 13:32:16 +08:00
Nick Fisher
81a28a2f2e change setBoundingBoxVisibility to getBoundingBoxAsset 2025-04-17 13:31:59 +08:00
Nick Fisher
6b008bd433 change setBoundingBoxVisibility to getBoundingBoxAsset 2025-04-17 13:31:47 +08:00
Nick Fisher
241c0fe07c recompile materials 2025-04-16 19:08:55 +08:00
Nick Fisher
12b6a8c8a5 use render thread methods for all async gltf loading 2025-04-16 19:08:34 +08:00
Nick Fisher
426d6c4ed6 use render thread methods for all async gltf loading 2025-04-16 19:07:55 +08:00
Nick Fisher
4002425c0d add withFloatCallback handler 2025-04-16 19:07:47 +08:00
Nick Fisher
230bb5f9f6 use render thread methods for all async gltf loading 2025-04-16 19:07:31 +08:00
Nick Fisher
8a35060653 write sources to temp dir for Windows 2025-04-16 18:05:03 +08:00
Nick Fisher
2b00d374e0 update generated bindings 2025-04-16 18:01:47 +08:00
Nick Fisher
da87442b3a add async gltf test 2025-04-16 18:01:31 +08:00
Nick Fisher
3c68731fe0 ensure __FILENAME__ is defined even if ENABLE_TRACING is off 2025-04-16 18:00:50 +08:00
Nick Fisher
ef775b2e2c add GltfResourceLoader_asyncBeginLoadRenderThread 2025-04-16 18:00:31 +08:00
Nick Fisher
0759590f4c test fix 2025-04-16 18:00:17 +08:00
Nick Fisher
e7092c416b call render thread method for asyncBeginLoad 2025-04-16 18:00:06 +08:00
Nick Fisher
f272410803 update ffigen/objective_c dependencies 2025-04-16 17:59:46 +08:00
Nick Fisher
b128f385e5 unused unlit material 2025-04-16 17:23:56 +08:00
Nick Fisher
a4227df098 test cleanup 2025-04-16 17:23:56 +08:00
Nick Fisher
230af0ae17 remove unused import 2025-04-16 17:23:55 +08:00
Nick Fisher
aeb644cf16 make swapChain an optional parameter when calling capture() (if not specified, first swapchain will be used) 2025-04-16 17:23:55 +08:00
Nick Fisher
c3e583ac5a make swapChain an optional parameter when calling capture() (if not specified, first swapchain will be used) 2025-04-16 17:23:55 +08:00
Nick Fisher
48654f0e8f documentation 2025-04-16 17:23:55 +08:00
Nick Fisher
a772b86f09 export light options and layers 2025-04-16 17:23:53 +08:00
Nick Fisher
026893d2fe update BUILDING 2025-04-16 17:23:38 +08:00
Nick Fisher
2d4342607d add async gltf resource loading 2025-04-16 17:06:51 +08:00
Nick Fisher
02b6bc4ee6 update camera_manipulation example to use new API 2025-04-16 16:02:46 +08:00
Nick Fisher
0194eb5cd5 update camera_manipulation example to add local thermion_flutter_web in dependency_overrides 2025-04-16 16:02:23 +08:00
Nick Fisher
9ceedb4e1c default to release mode builds 2025-04-16 16:01:49 +08:00
Nick Fisher
85a0451f1b remove outdated resource loader methods for iOS/macOS/Android 2025-04-16 14:01:47 +08:00
Nick Fisher
dfda0eb476 update DefaultPickDelegate to use pick() on view 2025-04-16 14:00:47 +08:00
Nick Fisher
b160932ff3 logging 2025-04-16 14:00:30 +08:00
Nick Fisher
f9c5ee5896 remove pick() from FFI viewer / add setLayerVisibility 2025-04-16 13:59:42 +08:00
Nick Fisher
5097373a22 export layers in package 2025-04-16 13:59:06 +08:00
Nick Fisher
10dd66c7f8 remove pick() from viewer interface and add setLayerVisibility 2025-04-16 13:58:52 +08:00
Nick Fisher
b6e5d2c834 update Windows/Vulkan sample app 2025-04-16 13:58:02 +08:00
Nick Fisher
726f9b8c80 OK to return Flutter texture handle even if width or height don't match 2025-04-16 13:54:10 +08:00
Nick Fisher
7349fa2298 rename utils.h etc to vulkan_utils.h to avoid filename clashes 2025-04-16 13:48:00 +08:00
Nick Fisher
143c4a436d return nullptr if D3D device cannot create render target view 2025-04-16 13:46:04 +08:00
Nick Fisher
60e025e78d cleanup 2025-04-16 13:36:39 +08:00
Nick Fisher
de5bc5c02e cleanup 2025-04-16 13:36:26 +08:00
Nick Fisher
a1ab4186b4 logging on error and return NULL if vkTexture cannot be created 2025-04-16 13:36:08 +08:00
Nick Fisher
d3b9ae45cf (Windows) properly destroy swapchain and don't un-set current unless the swapchain being destroyed is the current swapchain 2025-04-16 13:35:40 +08:00
Nick Fisher
7dfb8a4b19 logging/header path changes 2025-04-16 13:34:45 +08:00
Nick Fisher
2bd64805a9 logging on Windows 2025-04-16 13:34:08 +08:00
Nick Fisher
b17b732c55 update BUILDING.md for Windows 2025-04-16 13:33:44 +08:00
Nick Fisher
8157f3318b revert CameraOrientationWidget 2025-04-16 13:33:15 +08:00
Nick Fisher
fbbb4ed792 specify thermion_dart in thermion_flutter dependency_overrides to fix intellisense in during dev 2025-04-16 13:32:46 +08:00
Nick Fisher
ec3e7ed3ba implement pick() for FFIView with fixed native callable 2025-04-16 13:32:12 +08:00
Nick Fisher
585e0ad087 move pick() to View 2025-04-16 13:30:31 +08:00
Nick Fisher
4815b0309e force /MD for Flutter Windows plugin 2025-04-16 13:30:06 +08:00
Nick Fisher
9d593b8c3b add getHorizontalFieldOfView/getVerticalFieldOfView methods to (Dart) Camera class 2025-04-16 13:29:24 +08:00
Nick Fisher
aaa74f0267 add missing Camera_getFov method 2025-04-16 13:28:02 +08:00
Nick Fisher
cf8e0f6ed2 rename utils.h etc to vulkan_utils.h to avoid filename clashes 2025-04-16 13:27:46 +08:00
Nick Fisher
303174117f destroy background image on viewer dispose 2025-04-02 23:01:13 +08:00
Nick Fisher
ccda475073 logging 2025-04-02 23:00:59 +08:00
Nick Fisher
ddba3c35ab logging 2025-04-02 23:00:44 +08:00
Nick Fisher
87d04fc2c1 properly initialize SwapChainPtr to nullptr 2025-04-02 23:00:27 +08:00
Nick Fisher
a3f05e353d remove view from registered swapchain list on destroy 2025-04-02 23:00:04 +08:00
Nick Fisher
69ce7b1a15 update Dart cli_windows example 2025-04-02 22:29:39 +08:00
Nick Fisher
3922ee536b remove old README 2025-04-02 22:28:59 +08:00
Nick Fisher
cf372f4dc2 call method channel destroyContext on Windows 2025-04-02 22:28:47 +08:00
Nick Fisher
854b142973 call method channel destroyContext 2025-04-02 22:28:25 +08:00
Nick Fisher
7d8f7a726b properly null out texture references on disposal 2025-04-02 22:27:36 +08:00
Nick Fisher
e0b2e1c3b9 add onDestroy hooks for FilamentApp 2025-04-02 22:27:12 +08:00
Nick Fisher
f7a7b6bedf add EMSCRIPTEN_KEEPALIVE to swap chain flags 2025-04-02 22:26:03 +08:00
Nick Fisher
7b0550c713 manually define SceneLayer enum 2025-04-02 22:25:42 +08:00
Nick Fisher
ec8248e10c Windows logging compatibility 2025-04-02 22:25:03 +08:00
Nick Fisher
374d2e5697 update native_toolchain_c/native_assets_cli to latest 2025-04-02 22:24:46 +08:00
Nick Fisher
e407e75389 add EMSCRIPTEN_KEEPALIVE to swap chain flags 2025-04-02 22:23:47 +08:00
Nick Fisher
342ff58cbe finish all pending tasks before joining RenderThread on destruction 2025-04-02 22:23:21 +08:00
Nick Fisher
68842fb4ce update Overlay enum references 2025-04-02 22:22:55 +08:00
Nick Fisher
88f229481d remove old includes 2025-04-02 22:22:36 +08:00
Nick Fisher
09b2a924af (Windows) define M_PI 2025-04-02 22:22:05 +08:00
Nick Fisher
06715f0618 add standalone build script for materials 2025-04-02 22:21:35 +08:00
Nick Fisher
38d190f582 add standalone build script for materials 2025-04-02 22:21:22 +08:00
Nick Fisher
73cb20a2dd remove ResourceBuffer/loadResource/etc from Flutter Windows implementation 2025-04-02 22:21:01 +08:00
Nick Fisher
a08cc7aa62 update Windows Vulkan implementation 2025-04-02 22:20:21 +08:00
Nick Fisher
9d4fd4d6d4 remove camutils 2025-04-02 22:19:42 +08:00
Nick Fisher
e8aa68beb4 update Vulkan implementation headers 2025-04-02 22:19:19 +08:00
Nick Fisher
178da458ad update materials 2025-04-02 22:15:38 +08:00
Nick Fisher
508c184f1a add missing Filament headers for Windows 2025-04-02 22:15:11 +08:00
Nick Fisher
a8cf071f2f Update README.md 2025-03-28 16:23:32 +08:00
Nick Fisher
89768c9303 update BUILDING.md 2025-03-28 16:21:11 +08:00
Nick Fisher
a31142de6d documentation updates 2025-03-28 16:13:36 +08:00
Nick Fisher
66ddcac412 remove gizmo/unlit material from Makefile 2025-03-28 15:55:36 +08:00
Nick Fisher
645ba97c1d update Windows CLI example 2025-03-28 15:55:35 +08:00
Nick Fisher
a26eacb247 add fgviewer/matdbg to build.dart and bump Filament version number 2025-03-28 15:55:35 +08:00
Nick Fisher
667397ad83 update BUILDING.md 2025-03-28 15:55:35 +08:00
Nick Fisher
99217499f9 remove old SceneManager references 2025-03-28 15:55:35 +08:00
Nick Fisher
b083c62bd4 recompile materials 2025-03-28 15:55:35 +08:00
Nick Fisher
d0b297b015 add destructor test 2025-03-28 15:55:35 +08:00
Nick Fisher
ddc5fedc4d recompile materials 2025-03-28 15:55:35 +08:00
Nick Fisher
968e2e508d set FilamentApp.instance to null on disposal 2025-03-28 15:55:35 +08:00
Nick Fisher
7c936547aa update BUILDING.md 2025-03-28 15:55:35 +08:00
Nick Fisher
4ac1b5329c tests: split createViewer from withViewer 2025-03-28 15:55:35 +08:00
Nick Fisher
bf44ca7ddd add precompiled swift lib for macos tests 2025-03-28 15:55:35 +08:00
Nick Fisher
e25d7805d9 comment out tests for merge 2025-03-28 15:55:35 +08:00
Nick Fisher
5aaf212d9a update swift bindings output dir 2025-03-28 15:55:35 +08:00
Nick Fisher
99bd993f25 gitignore native build directory 2025-03-28 15:55:34 +08:00
Nick Fisher
a153bc9916 ignore filamat files 2025-03-28 15:55:34 +08:00
Nick Fisher
77ff8ff4c3 Update README.md 2025-03-28 14:08:16 +08:00
Nick Fisher
709fe35852 instancing tests/demo 2025-03-28 14:06:12 +08:00
Nick Fisher
ecb8d8672a fix instancing so that gltf assets always fill the first instance slot 2025-03-28 13:06:36 +08:00
Nick Fisher
a79e1a86f8 update stub 2025-03-28 11:48:52 +08:00
Nick Fisher
4bdbb170a7 export ViewerWidget 2025-03-28 11:48:39 +08:00
Nick Fisher
7960b55dbd in ThermionViewerFFI, set view renderable by default 2025-03-28 11:48:26 +08:00
Nick Fisher
77465baaf4 cleanup imports 2025-03-28 11:48:08 +08:00
Nick Fisher
dcf13fd53f cleanup imports 2025-03-28 11:48:00 +08:00
Nick Fisher
973804ed14 update ViewerWidget 2025-03-28 11:47:46 +08:00
Nick Fisher
9978d9d75c use View as key for ThermionWidget and update docstrings 2025-03-28 11:47:31 +08:00
Nick Fisher
e4f436fab1 use unregister in ThermionFlutterMethodChannelPlatform 2025-03-28 11:47:00 +08:00
Nick Fisher
ac5b5b89f6 remove old ThermionFlutterWindow class 2025-03-28 11:46:32 +08:00
Nick Fisher
b69977929c in ThermionListenerWidget, don't return child before the input handler has initialized 2025-03-28 11:46:11 +08:00
Nick Fisher
548dccf776 separate quickstart/viewer example projects 2025-03-28 11:45:34 +08:00
Nick Fisher
b4e4eb349c test updates 2025-03-28 10:04:21 +08:00
Nick Fisher
7a5fdb0b77 test updates 2025-03-28 10:04:02 +08:00
Nick Fisher
51e51db229 VDTM tests 2025-03-28 10:03:39 +08:00
Nick Fisher
faba1b3087 add depth sampler material 2025-03-28 10:03:30 +08:00
Nick Fisher
123543a985 test fixes 2025-03-28 10:03:14 +08:00
Nick Fisher
cd9332063c update TestHelper 2025-03-28 10:02:01 +08:00
Nick Fisher
54a0a0befb update TextureProjection 2025-03-28 10:01:49 +08:00
Nick Fisher
289749115b add flush() method on FilamentApp 2025-03-28 10:01:26 +08:00
Nick Fisher
cd1c2f3827 projection work + tests 2025-03-28 10:01:00 +08:00
Nick Fisher
e8169e86d1 VDTM material 2025-03-25 14:54:30 +08:00
Nick Fisher
cac063324d texture projection work 2025-03-25 12:16:38 +08:00
Nick Fisher
aebaa8425c cleanup 2025-03-25 11:34:24 +08:00
Nick Fisher
1b902e36f4 expose setBlendMode on View 2025-03-25 11:34:08 +08:00
Nick Fisher
396b7ed6dc add depth write material 2025-03-25 11:33:37 +08:00
Nick Fisher
d6666d6388 cleanup capture_uv material 2025-03-25 11:33:24 +08:00
Nick Fisher
7d5b183dea add TextureProjection class 2025-03-25 11:33:07 +08:00
Nick Fisher
6c25a3c405 projection tests 2025-03-25 11:32:53 +08:00
Nick Fisher
999b1e613f refactoring + texture projection 2025-03-25 09:39:02 +08:00
Nick Fisher
0cbbc058e0 refactoring 2025-03-22 10:49:24 +08:00
Nick Fisher
a67f42f0de refactoring 2025-03-21 17:18:16 +08:00
Nick Fisher
4ef74c4c70 add native CMakeLists 2025-03-21 14:56:27 +08:00
Nick Fisher
255c0edd49 refactoring 2025-03-21 14:56:20 +08:00
Nick Fisher
1177a71f73 test updates 2025-03-20 18:56:10 +08:00
Nick Fisher
e6bdcb687a refactoring 2025-03-20 18:48:04 +08:00
Nick Fisher
cbff4cd805 refactoring 2025-03-20 11:07:16 +08:00
Nick Fisher
a8a2f14b34 refactoring 2025-03-19 23:22:19 +08:00
Nick Fisher
931aab5159 refactoring 2025-03-19 21:52:59 +08:00
Nick Fisher
a310498c5a refactoring 2025-03-19 18:45:42 +08:00
Nick Fisher
6744c02019 refactoring 2025-03-19 17:54:43 +08:00
Nick Fisher
124f923720 refactor 2025-03-19 16:06:55 +08:00
Nick Fisher
e2048c3efd refactoring 2025-03-19 16:03:44 +08:00
Nick Fisher
ac86dc7ad7 refactoring 2025-03-19 16:02:43 +08:00
Nick Fisher
e73cb9c7d6 refactor 2025-03-19 15:42:33 +08:00
Nick Fisher
102429e090 refactoring 2025-03-19 15:42:11 +08:00
Nick Fisher
627447f8b0 refactoring 2025-03-19 12:27:13 +08:00
Nick Fisher
d5bffd5ad2 refactor 2025-03-18 23:15:13 +08:00
Nick Fisher
951f5daa2d more refactoring 2025-03-18 18:06:17 +08:00
Nick Fisher
77fe40848b refactoring 2025-03-18 16:26:47 +08:00
Nick Fisher
07b80071a4 add destroy methods for skybox/indirect light 2025-03-18 11:42:29 +08:00
Nick Fisher
03f7764da2 add bitmask to createTexture viewer method 2025-03-17 22:37:19 +08:00
Nick Fisher
231b03cd17 add indirect light methods 2025-03-17 22:36:53 +08:00
Nick Fisher
b271b7e433 more render thread methods 2025-03-17 22:36:10 +08:00
Nick Fisher
746ef07e42 add FilamentAsset methods 2025-03-17 22:35:58 +08:00
Nick Fisher
bff76f184e add gltfio FFI methods and expose texture/render target creation directly 2025-03-17 18:53:36 +08:00
Nick Fisher
2244359edd interm texture depth tests 2025-03-17 17:00:47 +08:00
Nick Fisher
b94edf0951 Dart interface updates 2025-03-17 17:00:25 +08:00
Nick Fisher
988e22fe95 rename updateViewport -> setViewport 2025-03-17 16:59:57 +08:00
Nick Fisher
401048e6a8 allow creation/import of Metal depth texture 2025-03-17 16:59:35 +08:00
Nick Fisher
232289003e add generated Swift bindings 2025-03-17 16:59:03 +08:00
Nick Fisher
e18d1246f6 ffigen: generate enums as int 2025-03-17 16:58:39 +08:00
Nick Fisher
95c9e5be66 misc C API updates 2025-03-17 16:58:24 +08:00
Nick Fisher
e1203df087 add depth texture to createRenderTarget, set stencil disabled by default 2025-03-17 16:58:04 +08:00
Nick Fisher
09678c6cdc add more Dart-side Texture methods 2025-03-17 16:57:22 +08:00
Nick Fisher
f2ce4a4044 add depth texture to render target creation 2025-03-17 16:56:17 +08:00
Nick Fisher
c23b991c9c add Dart-side methods 2025-03-17 16:55:53 +08:00
Nick Fisher
4205b86f13 update generated Swift bindings 2025-03-17 16:55:28 +08:00
Nick Fisher
d710ab810c expose more Texture/TextureSampler methods 2025-03-17 16:54:15 +08:00
Nick Fisher
4e5a9be97a add standalone SceneAsset_createGeometry method 2025-03-17 16:53:35 +08:00
Nick Fisher
342a53ae7b add View_setScene and rename View_updateViewport to View_setViewport 2025-03-17 16:53:06 +08:00
Nick Fisher
a0e1971958 logging 2025-03-17 16:52:32 +08:00
Nick Fisher
74502ba5b3 add further TEngine methods 2025-03-17 16:52:05 +08:00
Nick Fisher
09b6aca08f move FFISwapChain to own file 2025-03-17 16:39:28 +08:00
Nick Fisher
03c4afb031 update API boundary types & enums 2025-03-17 16:39:13 +08:00
Nick Fisher
f923b94b84 update Filament headers to v1.58.0 2025-03-17 16:38:52 +08:00
Nick Fisher
20ea43a809 add TScene 2025-03-17 16:38:30 +08:00
Nick Fisher
8b34934755 add TRenderer 2025-03-17 16:37:51 +08:00
Nick Fisher
5ad187d54f add various render thread methods 2025-03-17 16:35:45 +08:00
Nick Fisher
711abe11bd add Camera_lookAt 2025-03-17 16:34:34 +08:00
Nick Fisher
a16c3c7580 add logging to setImage 2025-03-10 22:22:07 +08:00
Nick Fisher
e1446c7eb8 more VDTM work 2025-03-10 22:21:25 +08:00
Nick Fisher
1f4af8c946 more VDTM work 2025-03-10 22:05:10 +08:00
Nick Fisher
75bee32e54 test fix 2025-03-10 18:11:23 +08:00
Nick Fisher
1d49db4767 3D texture tests 2025-03-10 18:06:27 +08:00
Nick Fisher
d39b57f054 initial view-dependent texture projection material 2025-03-10 18:06:18 +08:00
Nick Fisher
e91d1ca0aa support 3D texture/2D texture arrays 2025-03-10 18:05:42 +08:00
Nick Fisher
7d87d229d0 add texture projection material 2025-03-08 13:25:15 +08:00
Nick Fisher
7ed7ff48b9 always initialize uvScale to 1 2025-03-08 12:17:57 +08:00
Nick Fisher
9d311220b1 remove UV1 from geometry 2025-03-08 12:17:39 +08:00
Nick Fisher
e4de0f3ae0 expose setParameterBool/hasParameter on material + instance 2025-03-08 12:17:06 +08:00
Nick Fisher
72711ee64f rename/update materials_and_textures sample project 2025-03-08 11:20:10 +08:00
Nick Fisher
c52052c1b9 ensure any existing Viewers are destroyed on initialize() 2025-03-07 18:58:22 +08:00
Nick Fisher
aa26f4d0df separate out RenderLoop/FilamentViewer construction/destruction 2025-03-07 18:53:36 +08:00
Nick Fisher
be61d5e5ca move image from dev to package dependency 2025-03-07 14:53:38 +08:00
Nick Fisher
1a3d902d23 add image utils 2025-03-07 14:53:13 +08:00
Nick Fisher
35bddd2bb2 fix geometry normals/UVs 2025-03-07 14:53:02 +08:00
Nick Fisher
74ee35bfcd use render thread methods for Texture/Image/TextureSampler 2025-03-07 14:52:45 +08:00
Nick Fisher
2915655695 remove superseded destroyTexture method (call texture.dispose() instead) 2025-03-05 17:32:48 +08:00
Nick Fisher
5b80dd3a3d bounding box geometry doesn't cast/receive shadows 2025-03-05 14:57:20 +08:00
Nick Fisher
593bca3365 feat: expose setCastShadows/setReceiveShadows 2025-03-05 14:47:55 +08:00
Nick Fisher
cca9fba79f add setImage method to set texture image directly from buffer 2025-03-04 18:17:17 +08:00
Nick Fisher
a245cf2915 add bitmap conversion to utils 2025-03-04 18:16:49 +08:00
Nick Fisher
15134c335b hide Texture import inside ThermionTextureWidget to avoid clash 2025-03-04 18:16:36 +08:00
Nick Fisher
85215f6760 flip UV coords for capture material 2025-03-04 18:16:13 +08:00
Nick Fisher
9abb192148 add setImage method to set texture image directly from buffer 2025-03-04 18:15:54 +08:00
Nick Fisher
f7fa02180a add bitmap conversion to utils 2025-03-04 18:15:30 +08:00
Nick Fisher
fc7f5d7b93 create material for texture baking
textures can now be created manually and are no longer tracked by SceneManager (and therefore require manual tracking/disposal)
2025-03-04 14:52:48 +08:00
Nick Fisher
5dca42c3c1 remove unused postprocess material 2025-03-04 14:38:05 +08:00
Nick Fisher
665c2fb39d update projection test 2025-03-04 14:37:13 +08:00
Nick Fisher
3ac79b2080 initial projection material 2025-03-03 16:11:12 +08:00
Nick Fisher
8d52690c97 fix texture/material methods 2025-03-03 15:52:03 +08:00
Nick Fisher
2a8931e1ac add TTexture bindings with TextureFormat, PixelDataType and PixelDataFormat enums 2025-03-03 14:43:20 +08:00
Nick Fisher
94d77ff21b move Engine_ FFI methods to own header/source 2025-03-03 11:32:45 +08:00
Nick Fisher
7a707cda67 move Engine_ FFI methods to own header/source 2025-03-03 11:32:34 +08:00
Nick Fisher
8993d888b1 docstring 2025-03-01 17:23:06 +08:00
Nick Fisher
ffc256228a add fps counters and headroom 2025-03-01 13:02:05 +08:00
Nick Fisher
1b1de0b7c0 add Filament version to README 2025-03-01 12:29:38 +08:00
Nick Fisher
4c1480864e remove thermion_flutter_ffi from thermion_flutter pubspec 2025-03-01 12:29:15 +08:00
Nick Fisher
06cc114daa add geometry_combined lib to libs 2025-03-01 12:28:35 +08:00
Nick Fisher
1258751dda update bindings 2025-03-01 12:00:03 +08:00
Nick Fisher
67ca24a7d9 remove old ThermionDartRenderThreadApi.h 2025-03-01 11:59:52 +08:00
Nick Fisher
282ee6d103 cherry pick changes onto ThermionDartRenderThreadApi.h 2025-03-01 11:59:36 +08:00
Nick Fisher
bb5a8f495d enable GPU validation mode for camera_manipulation iOS project 2025-03-01 11:56:35 +08:00
Nick Fisher
c400ca3993 rename Android project and disable impeller for camera_manipulation 2025-03-01 11:56:35 +08:00
Nick Fisher
d7d7fa7c0b use scale directly for DelegateInputHandler 2025-03-01 11:56:34 +08:00
Nick Fisher
c1be084e3e update generated bindings 2025-03-01 11:56:14 +08:00
Nick Fisher
178e59a618 add enabled/strength params for bloom 2025-03-01 11:55:48 +08:00
Nick Fisher
7fe9c06a7f change setBloom docstring 2025-03-01 11:54:54 +08:00
Nick Fisher
0f4531d3d7 add enabled/strength params to setBloom, add setRenderQuality method 2025-03-01 11:54:29 +08:00
Nick Fisher
c5228dff7e add enabled/strength params to setBloom, add setRenderQuality method 2025-03-01 11:54:12 +08:00
Nick Fisher
7131e7ab86 add enabled/strength params for bloom 2025-03-01 11:53:40 +08:00
Nick Fisher
16ff7ef008 fix: rename msPerFrame property 2025-03-01 11:52:31 +08:00
Nick Fisher
a178035796 internal: set dynamicResolution enabled by default, set frameInterval properly, set bloom disabled by default 2025-03-01 11:52:19 +08:00
Nick Fisher
61abed2fb7 internal: use msPerFrame to control render timing 2025-03-01 11:50:43 +08:00
Nick Fisher
30060578ef chore(release): publish packages
- thermion_dart@0.2.1-dev.20.0
 - thermion_flutter@0.2.1-dev.20.0
 - thermion_flutter_platform_interface@0.2.1-dev.20.0
 - thermion_flutter_ffi@0.2.1-dev.20.0
 - thermion_flutter_web@0.2.0+11
2025-03-01 11:50:41 +08:00
Nick Fisher
2c2beb0e76 internal: add missing Mutex.h header 2025-01-09 09:50:03 +08:00
Nick Fisher
2b864f6f44 example: fix android release build for camera_manipulation 2025-01-08 17:18:27 +08:00
Nick Fisher
0b1da2a15d feat!: use raw pointer scale (>1 meaning zoom in, <1 meaning zoom out) rather than binary -1/1 for DelegateInputHandler 2025-01-08 11:39:40 +08:00
Nick Fisher
ad70ef1461 fix: only use Windows-style ndkRoot when building on Windows 2025-01-08 11:39:34 +08:00
Nick Fisher
6f110a56dd internal: add Gizmo material to Makefile 2025-01-08 09:35:27 +08:00
Nick Fisher
0e5253f7b3 internal: store bounding box with SceneAsset rather than recalculating from renderables 2025-01-07 12:02:44 +08:00
Nick Fisher
124eed0264 fix: don't return entity from SceneManager_addLightRenderThread 2025-01-07 08:43:36 +08:00
Nick Fisher
9a055174e6 fix: return light entity from SceneManager 2025-01-07 08:43:06 +08:00
Nick Fisher
3a231697e5 test: add more tests 2025-01-07 08:42:24 +08:00
Nick Fisher
3e74c8faea internal: regenerate bindings 2025-01-07 08:40:51 +08:00
Nick Fisher
18b0bf19b9 internal: recompile materials 2025-01-07 08:40:51 +08:00
Nick Fisher
020bfbcbf6 feat: update Filament to v1.56.4 2025-01-07 08:40:51 +08:00
Nick Fisher
b1c0d4b2e8 internal: expose more RenderableManager/LightManager bindings 2025-01-07 08:25:48 +08:00
Nick Fisher
6cefe44c64 fix: when creating geometry, normals/uvs are set to false by default. remove wirefame camera container (can now be replaced by bounding box methods 2025-01-07 08:25:48 +08:00
Nick Fisher
4aa8889834 internal: rename Viewer_getMainCamera and return null in Engine_getCameraComponent if camera entity is null 2025-01-07 08:25:48 +08:00
Nick Fisher
aee9c767dd doc: camera improvements 2025-01-07 08:25:48 +08:00
Nick Fisher
916ecd5629 internal: rename Viewer_getMainCamera and return null in Engine_getCameraComponent if camera entity is null 2025-01-07 08:25:48 +08:00
Nick Fisher
d3a6f6e22a fix: add destroyCamera to ThermionViewer interface 2025-01-07 08:25:48 +08:00
Nick Fisher
86ecd53de7 internal: use std::vector for geometry material instances 2025-01-07 08:25:48 +08:00
Nick Fisher
8653ca8398 doc: postprocessing 2025-01-07 08:25:48 +08:00
Nick Fisher
1d615e7568 fix: UV calculation for geometry 2025-01-07 08:25:48 +08:00
Nick Fisher
4cb118ad65 feat: use existing material instances when creating an instance of GeometrySceneAsset and no material instance is passed 2025-01-07 08:25:48 +08:00
Nick Fisher
4e64c4976f refactor!: rename removeAsset to destroyAsset
use render thread methods for lights
2025-01-07 08:25:48 +08:00
Nick Fisher
04adbc39e0 remove Scene class 2025-01-07 08:25:48 +08:00
Nick Fisher
744e39e8dd fix: move removeIbl to render thread 2025-01-07 08:25:48 +08:00
Nick Fisher
baf86d1ade refactor!: move light methods from FilamentViewer to SceneManager/TLightManager and rename clearLights/clearAssets to destroyLights/destroyAssets 2025-01-07 08:25:48 +08:00
Nick Fisher
3e181b6aff fix: allow destroying instances independently of owner 2025-01-07 08:25:48 +08:00
Nick Fisher
8e0ba8ac4e fix: glTF instancing when loaded via buffer 2025-01-07 08:25:48 +08:00
Nick Fisher
3e39aa3630 feat: allow setting material instance directly on ThermionAsset 2025-01-07 08:25:48 +08:00
Nick Fisher
cc1b55b6c9 internal: remove vertexScale from unlit material and multiply by alpha 2025-01-07 08:25:48 +08:00
Nick Fisher
242041c9f6 fix: increase grid material depth 2025-01-07 08:25:48 +08:00
Nick Fisher
7717387909 internal: remove bounding box asset when parent asset removed 2025-01-07 08:25:48 +08:00
Nick Fisher
31e453a4e6 refactor: dont require GizmoInputHandler to wrap an existing InputHandler (you can do this by creating your own InputHandler that wraps two children 2025-01-07 08:25:48 +08:00
Nick Fisher
9b988537e0 internal: allow InputHandler methods to return null 2025-01-07 08:25:48 +08:00
Nick Fisher
d9338f4341 chore: test fixes 2025-01-07 08:25:48 +08:00
Nick Fisher
b6397b5f73 fix!: rename removeEntity to removeAsset 2025-01-07 08:25:48 +08:00
Nick Fisher
584ace23b4 refactor: gizmo/input handler improvements 2025-01-07 08:25:48 +08:00
Nick Fisher
5e89dc43e8 feat: add FocusNode to ThermionListenerWidget 2025-01-07 08:25:48 +08:00
Nick Fisher
024643e3a1 internal: add check for renderable entity when returning bounding box 2025-01-07 08:25:48 +08:00
Nick Fisher
96fe2c89ea internal: add FFI method to check for valid renderable 2025-01-07 08:25:48 +08:00
Nick Fisher
8d8acef481 feat: remove bounding box from SceneAsset and create renderable wireframe bounding box in ThermionAsset 2025-01-07 08:25:48 +08:00
Nick Fisher
51bdca7158 feat!: remove Viewer setRenderTarget method (use the View method instead) 2025-01-07 08:25:48 +08:00
Nick Fisher
658984e784 internal: FFIView getRenderTarget 2025-01-07 08:25:48 +08:00
Nick Fisher
f8ae90b631 internal: add destroyRenderTargetRenderThread 2025-01-07 08:25:48 +08:00
Nick Fisher
b158062ce8 internal: expose View_getRenderTarget and set (Dart) FFIView.renderTarget property on construction 2025-01-07 08:25:48 +08:00
Nick Fisher
dc690bb93a refactor: rename ThermionFlutterTexture->PlatformTextureDescriptor 2025-01-07 08:25:48 +08:00
Nick Fisher
342264eba9 chore: remove unnecessary null check 2025-01-07 08:25:48 +08:00
Nick Fisher
453ce9d1ea fix: fix highlights after first 2025-01-07 08:25:48 +08:00
Nick Fisher
e9c14139c2 chore: disable grid center sphere and fix priority 2025-01-07 08:25:48 +08:00
Nick Fisher
d92d47faa5 chore: logging 2025-01-07 08:25:48 +08:00
Nick Fisher
b6bde0c9d9 fix: set overlay layer visibility when adding grid 2025-01-07 08:25:48 +08:00
Nick Fisher
f873f7da66 feat: add setTransparencyMode to Dart Material class 2025-01-07 08:25:48 +08:00
Nick Fisher
aabea985bd fix: transparency/depth fixes for grid.mat 2025-01-07 08:25:48 +08:00
Nick Fisher
9f9b34f662 feat: expose attached entity as Stream on GizmoInputHandler 2025-01-07 08:25:48 +08:00
Nick Fisher
fc4842ed6d chore: remove colors from Gizmo 2025-01-07 08:25:48 +08:00
Nick Fisher
eb4e70a7cf chore: remove colors from Gizmo 2025-01-07 08:25:48 +08:00
Nick Fisher
19ffa91164 chore: update stubbed viewer 2025-01-07 08:25:48 +08:00
Nick Fisher
a519701510 chore: logging 2025-01-07 08:25:48 +08:00
Nick Fisher
5fb5e42b98 feat: allow custom material for grid overlay, and material creation from Uint8List 2025-01-07 08:25:48 +08:00
Nick Fisher
ba3636a203 fix: use render thread methods for grid overlay creation and create ubershader instance 2025-01-07 08:25:48 +08:00
Nick Fisher
e0b4ebc349 chore: regenerate bindings 2025-01-07 08:25:48 +08:00
Nick Fisher
1d1a3cbfe6 chore: rename to FFIMaterialInstance 2025-01-07 08:25:48 +08:00
Nick Fisher
7aa0367a3b internal: *Material_createInstance 2025-01-07 08:25:48 +08:00
Nick Fisher
0817efc33e internal: add Dart FFIMaterial type 2025-01-07 08:25:48 +08:00
Nick Fisher
0facb3f906 internal: add TMaterial type 2025-01-07 08:25:48 +08:00
Nick Fisher
355c28477b internal: add Material_createInstance 2025-01-07 08:25:48 +08:00
Nick Fisher
c1a294315a internal: expose Engine getters (TransformManager, RenderableManager), and build/desotry material methods 2025-01-07 08:25:48 +08:00
Nick Fisher
f27628e719 internal: add createGrid/destroyMaterial render thread methods 2025-01-07 08:25:48 +08:00
Nick Fisher
fd1faa6023 feat: allow passing custom material for grid overlay 2025-01-07 08:25:48 +08:00
Nick Fisher
8fa43e5306 feat: allow passing custom material for grid overlay 2025-01-07 08:25:48 +08:00
Nick Fisher
94863134fc feat: allow passing custom material for grid overlay 2025-01-07 08:25:48 +08:00
Nick Fisher
1b979252db feat: re-implement grid overlay 2025-01-07 08:25:48 +08:00
Nick Fisher
852cb58ba9 fix: move material/instance creation to render thread 2025-01-07 08:25:48 +08:00
Nick Fisher
7cf1468f38 feat: more rotation gizmo improvements 2025-01-07 08:25:48 +08:00
Nick Fisher
62cd85c148 feat: rotation gizmo improvements 2025-01-07 08:25:48 +08:00
Nick Fisher
771f851784 feat: add rotation gizmo 2025-01-07 08:25:48 +08:00
Nick Fisher
def85614d8 feat: add rotation gizmo 2025-01-07 08:25:48 +08:00
Nick Fisher
0ad73d06e0 internal: pass NameComponentManager to GltfSceneAsset, used for finding child entities by name 2025-01-07 08:25:48 +08:00
Nick Fisher
6c236da675 feat: add rotation gizmo asset + resource file 2025-01-07 08:25:48 +08:00
Nick Fisher
6b883f3352 chore: update hit test entities used for gizmo 2025-01-07 08:25:48 +08:00
Nick Fisher
ffa0f77a42 chore: ignore TRACE when ENABLE_TRACING not set 2025-01-07 08:25:48 +08:00
Nick Fisher
26ae21910f feat: add rotation gizmo asset + resource file 2025-01-07 08:25:48 +08:00
Nick Fisher
5c3af255e4 chore: remove unused transform parameter from unlit_fixed_size material 2025-01-07 08:25:48 +08:00
Nick Fisher
29c35f9037 refactor: Gizmo internals 2025-01-07 08:25:48 +08:00
Nick Fisher
1e1d6fdcc9 chore: add dummy bounding box to GridOverlay 2025-01-07 08:25:48 +08:00
Nick Fisher
113f769160 chore: regenerate materials 2025-01-07 08:25:48 +08:00
Nick Fisher
278575c3e2 internal: add bounding box to SceneAsset & subclasses 2025-01-07 08:25:48 +08:00
Nick Fisher
27e150ebf6 chore: clean up static_cast 2025-01-07 08:25:48 +08:00
Nick Fisher
fe0f63c4cb chore: update gizmo materials 2025-01-07 08:25:48 +08:00
Nick Fisher
b94aeb8b4a chore: whitespace 2025-01-07 08:25:48 +08:00
Nick Fisher
8b9b299786 chore: update generated bindings 2025-01-07 08:25:48 +08:00
Nick Fisher
6ce743057b chore: whitespace 2025-01-07 08:25:48 +08:00
Nick Fisher
fbb53f9033 fix: use createGizmoRenderThread 2025-01-07 08:25:48 +08:00
Nick Fisher
8a894f7e88 refactor: add createGizmoRenderThread 2025-01-07 08:25:48 +08:00
Nick Fisher
5e88a710ae chore: explicitly build debug symbols in debug mode, and add gizmo.c/gizmo_glb.c to build 2025-01-07 08:25:48 +08:00
Nick Fisher
6b36d67ed7 feat: add gizmo.glb to assets/resources 2025-01-07 08:25:48 +08:00
Nick Fisher
5564be9ce9 feat: add TRACE macro 2025-01-07 08:25:48 +08:00
Nick Fisher
9f676f42b9 remove old HighlightOverlay class 2025-01-07 08:25:48 +08:00
Nick Fisher
981fd63963 update overlay tests 2025-01-07 08:25:48 +08:00
Nick Fisher
cb9320f3a1 remove pragma from Geometry builder cpp 2025-01-07 08:25:48 +08:00
Nick Fisher
6d5bc305dc fix SceneManager_createCameraRenderThread 2025-01-07 08:25:48 +08:00
Nick Fisher
1c5b5c890b reimplement grid as SceneAsset 2025-01-07 08:25:48 +08:00
Nick Fisher
e43e1c9cbd flip camera wireframe direction 2025-01-07 08:25:48 +08:00
Nick Fisher
5fe985d2c7 add create/set camera render thread functions 2025-01-07 08:25:48 +08:00
Nick Fisher
80ca4b97a9 add create/set camera render thread functions 2025-01-07 08:25:48 +08:00
Nick Fisher
d3b4bed654 move grid clipspace.z closer to camera to allow for skybox 2025-01-07 08:25:48 +08:00
Nick Fisher
c117555b2c gizmo improvements, use render thread methods for createCamera, allow setParent null to unparent transform 2025-01-07 08:25:48 +08:00
Nick Fisher
abbf2d5391 update bindings 2025-01-07 08:25:48 +08:00
Nick Fisher
a31c800204 add wireframe camera to geometry 2025-01-07 08:25:48 +08:00
Nick Fisher
877e8def80 add dithering to view 2025-01-07 08:25:48 +08:00
Nick Fisher
fb650dbd52 allow null parent to setParent 2025-01-07 08:25:48 +08:00
Nick Fisher
c34c7d5545 change grid priority 2025-01-07 08:25:48 +08:00
Nick Fisher
fe37d45e1a return null entity for grid overlay 2025-01-07 08:25:48 +08:00
Nick Fisher
bf3d4f7c0e add dithering to view 2025-01-07 08:25:48 +08:00
Nick Fisher
69643e26f6 whitespace 2025-01-07 08:25:48 +08:00
Nick Fisher
44b502a1e4 add dithering to view 2025-01-07 08:25:48 +08:00
Nick Fisher
6d36dc7923 add dithering to view 2025-01-07 08:25:48 +08:00
Nick Fisher
151935913f allow null parent to setParent 2025-01-07 08:25:48 +08:00
Nick Fisher
d72ed58436 in createGeometry, all geometry entities to scene 2025-01-07 08:25:48 +08:00
Nick Fisher
d53a8b20b8 move Geometry asset builder from header to own implementation 2025-01-07 08:25:48 +08:00
Nick Fisher
600ab1ad28 update tests 2025-01-07 08:25:48 +08:00
Nick Fisher
aa7350c419 gizmo & picking improvements 2025-01-07 08:25:48 +08:00
Nick Fisher
c2077cb6b1 fix: store reference to material instances in ThermionViewer so they can be cleaned up on dispose 2025-01-07 08:25:48 +08:00
Nick Fisher
bedd50ec38 chore: update pubspec.yaml with new package name 2025-01-07 08:25:48 +08:00
Nick Fisher
8a3525d879 chore: temporarily disable ThermionWidgetWebImpl 2025-01-07 08:25:48 +08:00
Nick Fisher
853f1d1a68 feat!: remove superseded ThermionWindows widget 2025-01-07 08:25:48 +08:00
Nick Fisher
7e50f0317e feat: use new createTextureAndBindToView in ThermionTextureWidget 2025-01-07 08:25:48 +08:00
Nick Fisher
724d7532e2 chore: docstring fixes 2025-01-07 08:25:48 +08:00
Nick Fisher
45a548afd2 feat!: rename thermion_flutter_ffi package to thermion_flutter_method_channel 2025-01-07 08:25:48 +08:00
Nick Fisher
e8b4b7806b feat!: rename thermion_flutter_ffi package to thermion_flutter_method_channel 2025-01-07 08:25:48 +08:00
Nick Fisher
133367669d feat: create separate createTexture and createTextureAndBindToView interface methods 2025-01-07 08:25:48 +08:00
Nick Fisher
60a09a1cd9 chore: rename thermion_flutter_ffi in example projects 2025-01-07 08:25:48 +08:00
Nick Fisher
9128fbbd61 chore: rename local variable in ThermionTexture.swift to avoid compiler warning 2025-01-07 08:25:48 +08:00
Nick Fisher
c3c6465908 documentation 2025-01-07 08:25:48 +08:00
Nick Fisher
ed444b0615 feature!:
This is a breaking change needed to fully implement instancing and stencil highlighting.

Previously, users would work directly with entities (on the Dart side, ThermionEntity), e.g.

final entity = await viewer.loadGlb("some.glb");

However, Filament "entities" are a lower-level abstraction.

Loading a glTF file, for example, inserts multiple entities into the scene.

For example, each mesh, light, and camera within a glTF asset will be assigned an entity. A top-level (non-renderable) entity will also be created for the glTF asset, which can be used to transform the entire hierarchy.

"Asset" is a better representation for loading/inserting objects into the scene; think of this as a bundle of entities.

Unless you need to work directly with transforms, instancing, materials and renderables, you can work directly with ThermionAsset.
2024-11-27 15:02:37 +11:00
Nick Fisher
9ada6aae64 chore: rename to Viewer_destroy 2024-11-21 12:32:52 +08:00
Nick Fisher
0ef0f37bbf chore: update stubs 2024-11-21 12:32:34 +08:00
Nick Fisher
df37f5e95f test cleanup 2024-11-21 12:32:17 +08:00
Nick Fisher
468cada6c6 update bindings 2024-11-21 12:31:58 +08:00
Nick Fisher
e60ab51b79 fix: remove MaterialInstance from SceneManager storage when destroyed 2024-11-21 12:31:36 +08:00
Nick Fisher
d58a48061c fix: remove MaterialInstance from SceneManager storage when destroyed 2024-11-21 12:31:04 +08:00
Nick Fisher
cabb62043d feat: re-add uvScale, vertexScale to unlit material 2024-11-21 12:30:51 +08:00
Nick Fisher
b7bc46b94a feat: re-add uvScale, vertexScale to unlit material 2024-11-21 12:30:20 +08:00
Nick Fisher
bc8edb7eb4 fix: remove MaterialInstance from SceneManager storage when destroyed 2024-11-21 12:29:54 +08:00
Nick Fisher
5deb2ad7cf chore: factor out SceneManager_ methods 2024-11-21 11:16:54 +08:00
Nick Fisher
dcc523edff chore(release): publish packages
- thermion_dart@0.2.1-dev.19.0
 - thermion_flutter@0.2.1-dev.19.0
 - thermion_flutter_web@0.2.0+10
 - thermion_flutter_platform_interface@0.2.1-dev.19.0
 - thermion_flutter_ffi@0.2.1-dev.19.0
2024-11-21 10:08:10 +08:00
Nick Fisher
26eba7ae09 fix!: update Makefile & rebuild materials for Vulkan 2024-11-21 10:07:08 +08:00
Nick Fisher
9692c07da9 chore: free flight handler cleanup 2024-11-21 10:03:48 +08:00
Nick Fisher
2860db3fbd feat: use InputAction.ZOOM for scroll wheel in free flight handler 2024-11-21 08:44:36 +08:00
Nick Fisher
1ce5bd3bcf feat: free flight camera improvements 2024-11-19 16:30:35 +08:00
Nick Fisher
9d3f87218e chore(release): publish packages
- thermion_dart@0.2.1-dev.18.0
 - thermion_flutter@0.2.1-dev.18.0
 - thermion_flutter_web@0.2.0+9
 - thermion_flutter_platform_interface@0.2.1-dev.18.0
 - thermion_flutter_ffi@0.2.1-dev.18.0
2024-11-18 22:56:40 +08:00
Nick Fisher
505b4bb156 fix: fix windows import header 2024-11-18 22:55:25 +08:00
Nick Fisher
25320f45af chore: fix spelling 2024-11-15 22:58:04 +08:00
Nick Fisher
0b9f3160d9 feat: add MaterialInstance.setDepthFunc 2024-11-15 22:56:40 +08:00
Nick Fisher
bb27f40cb2 chore: add TMaterialInstance to ffigen.yaml 2024-11-15 22:55:16 +08:00
Nick Fisher
9853d6b721 chore: remove uvScale parameter from SceneManager and add some explicit logging 2024-11-15 22:24:30 +08:00
Nick Fisher
52f041afba chore: move TMaterialInstance FFI methods to own file/header 2024-11-15 22:24:07 +08:00
Nick Fisher
646814126f chore: test cleanup 2024-11-15 22:23:28 +08:00
Nick Fisher
05cb4325da chore: rebuild materials 2024-11-15 22:23:07 +08:00
Nick Fisher
e8b3468a3a chore: remove uvScale from unlit.mat 2024-11-15 22:22:49 +08:00
Nick Fisher
741607b78b chore: add checks to Makefile for FILAMENT_PATH 2024-11-15 22:22:31 +08:00
Nick Fisher
70414bb83c chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.17
 - thermion_flutter@0.2.1-dev.17
 - thermion_flutter_web@0.2.0+8
 - thermion_flutter_platform_interface@0.2.1-dev.17
 - thermion_flutter_ffi@0.2.1-dev.17
2024-11-15 17:59:12 +08:00
Nick Fisher
436873a455 successfully creating D3D texture with D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
successfully allocating with VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT

working copying vulkan texture

successfully passing D3D texture back to Flutter

chore: Dart/Windows sample project: remove unnnecessary InvalidateRect from update()

chore: Dart/Windows sample project: add generated bindings

successfully blitting from Vulkan swapchain to D3D texture

working Vulkan texture integration with Flutter

refactor to allow disposal of resources in destructors

handle destroyTexture correctly

correctly implement surface resizing/destruction

move Windows engine to Vulkan backend and flush after creating swapchain

add vulkan + vkshaders to Windows libs

update materials with Vulkan

move Vulkan implementation to thermion_Dart

remove extras folder

thermion_flutter plugin updates

update build hook to copy .lib file to output directory and use -vulkan lib zip file

thermion_flutter cleanup

reinstate stereoscopic on Windows

add dxgi and d3d11.lib to windows header pragma

update cli_windows sample project

copy filament/vulkan headers to output directory. This was originally added to facilitate linking on Windows (where thermion_flutter_plugin.cpp needs the Vulkan-related headers), but this doesn't actually solve the problem because there's no way that I've found to get the directory structure correct in the Dart native_assets build directory unless you explicitly address each inidivual file. The current approach is therefore to just keep a permanent copy of the headers in the thermion_filament directory (meaning these will need to be updated manually if the Filament version changes). However, I decided to keep the changes to build.dart because it doesn't have much negative impact and may be helpful in future.

disable stereoscopic on Windows and disable handle use after free checks

use filament headers for thermion_flutter

throw Exception for MSAA on Windows (note that passing msaa:true for setAntiAliasing doesn't actually set MSAA on other platforms, but at least it won't cause the engine to crash)

change header include path for Windows/Vulkan

change header include path for Windows/Vulkan

add filament/vulkan headers for flutter (Windows)

ensure destroyTexture platform methods accept an integer rather than a list

handle Android/Windows swapchain creation separately
2024-11-11 12:49:40 +08:00
Nick Fisher
b59cadc061 add first pass vulkan implementation 2024-11-11 12:49:40 +08:00
Nick Fisher
bdcbd90ec6 split D3D/GLES texture creation 2024-11-11 12:49:40 +08:00
Nick Fisher
f3e96fe94a remove external/internal D3D textures 2024-11-11 12:49:40 +08:00
Nick Fisher
ef97f0e6c2 refactor Windows rendering into standalone DLL 2024-11-11 12:49:40 +08:00
Nick Fisher
8976eb9621 update extras/Windows include path 2024-11-11 12:49:40 +08:00
Nick Fisher
e2cfe9247e improvements to BackingWindow (?) 2024-11-11 12:49:40 +08:00
Nick Fisher
6472670ec3 add createRenderTargetRenderThread 2024-11-11 12:49:40 +08:00
Nick Fisher
0eb81114dd expose GetSharedContext method on FlutterRenderContext 2024-11-11 12:49:40 +08:00
Nick Fisher
31c5ef41eb use texture backed platform on Windows 2024-11-11 12:49:40 +08:00
Nick Fisher
73470fa504 refactor WGLContext for easier legibility 2024-11-11 12:49:40 +08:00
Nick Fisher
14b815e009 remove unnecessary _context property from FilamentViewer 2024-11-11 12:49:40 +08:00
Nick Fisher
5ae028f1e9 print default gpu in cli_windows thermion_window 2024-11-11 12:49:40 +08:00
Nick Fisher
859a514bc5 chore: remove DLL from cli_windows project 2024-11-11 12:49:40 +08:00
Nick Fisher
4d97126ef6 chore: update cli_windows project 2024-11-11 12:49:40 +08:00
Nick Fisher
cc34cb20bd Merge branch 'develop' of https://github.com/nmfisher/thermion into develop 2024-11-02 16:32:06 +08:00
Nick Fisher
9c555c9ec0 chore: update cli_windows project 2024-11-02 16:29:36 +08:00
Nick Fisher
9537f75bc2 Update dart.yml 2024-11-02 16:41:14 +11:00
Nick Fisher
30e0012da6 Update dart.yml 2024-11-02 16:31:38 +11:00
Nick Fisher
1892235d5c Update dart.yml 2024-11-02 16:11:51 +11:00
Nick Fisher
82bd84b60d Update dart.yml 2024-11-02 16:07:04 +11:00
Nick Fisher
814adf8567 Update dart.yml 2024-11-02 16:01:09 +11:00
Nick Fisher
671880b405 chore: move windows extras to standalone cli_windows example 2024-11-02 12:55:56 +08:00
Nick Fisher
6ce2e22fac Update dart.yml 2024-11-02 15:54:05 +11:00
Nick Fisher
51d3dae1db Update dart.yml 2024-11-02 15:49:39 +11:00
Nick Fisher
a33a18da42 Merge branch 'develop' of https://github.com/nmfisher/thermion into develop 2024-11-02 13:24:18 +11:00
Nick Fisher
6ff04fb76a feat: add Dart methods for getRenderableBoundingBox, setParameterInt and setParameterFloat4 2024-11-02 10:23:36 +08:00
Nick Fisher
124938dbc2 temporarily disable UnprojectTexture 2024-11-02 10:23:36 +08:00
Nick Fisher
902f67e97d expose setParameterInt/setParameterFloat4, rename to getScreenSpaceBoundingBox, and expose method for getting renderable bounding box 2024-11-02 10:23:36 +08:00
Nick Fisher
08c02c1590 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.16
 - thermion_flutter@0.2.1-dev.16
 - thermion_flutter_web@0.2.0+7
 - thermion_flutter_platform_interface@0.2.1-dev.16
 - thermion_flutter_ffi@0.2.1-dev.16
2024-11-02 10:23:36 +08:00
Nick Fisher
4650ae1295 feat: Rename Gizmo material to UnlitFixedSize, and expose methods for using this material on other entities. Also exposes new methods for setting single float parameters. 2024-11-02 10:23:36 +08:00
Nick Fisher
c77ede9109 doc: fix links in README 2024-11-02 10:23:36 +08:00
Nick Fisher
0f56cbe7e7 doc: README 2024-11-02 10:23:36 +08:00
Nick Fisher
708e90117d doc: update README 2024-11-02 10:23:36 +08:00
Nick Fisher
33e5350605 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.15
 - thermion_flutter@0.2.1-dev.15
 - thermion_flutter_web@0.2.0+6
 - thermion_flutter_platform_interface@0.2.1-dev.15
 - thermion_flutter_ffi@0.2.1-dev.15
2024-11-02 10:23:35 +08:00
Nick Fisher
d1924cfdf4 chore: add logging to ThermionTextureWidget 2024-11-02 10:23:35 +08:00
Nick Fisher
dff214259a fix: multiply coordinates by pixelRatio for scale events 2024-11-02 10:23:35 +08:00
Nick Fisher
d25edfc097 fix: remove superfluous ceil() calls for picking coordinates 2024-11-02 10:23:35 +08:00
Nick Fisher
8c2b8a6cba feat: expose zoomSensitivity argument for flight input handler 2024-11-02 10:23:35 +08:00
Nick Fisher
eccbde4ebb chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.14
 - thermion_flutter@0.2.1-dev.14
 - thermion_flutter_platform_interface@0.2.1-dev.14
 - thermion_flutter_ffi@0.2.1-dev.14
 - thermion_flutter_web@0.2.0+5
2024-11-02 10:23:35 +08:00
Nick Fisher
27e1456b9f chore: add Dart/windows-only example project 2024-11-02 13:10:36 +11:00
Nick Fisher
9c6b2a92ac fix: replace assets symlink for quickstart project 2024-10-30 12:03:48 +08:00
Nick Fisher
1d6cb9cad2 fix: replace symlinks for camera_manipulation project 2024-10-30 15:01:15 +11:00
Nick Fisher
d31e6c8183 feat: sanitize file paths in build.dart for Windows compatibility 2024-10-30 14:35:49 +11:00
Nick Fisher
cf1a50c2e5 chore: use dependency_overrides for camera_manipulation project 2024-10-30 14:28:06 +11:00
Nick Fisher
7c15125a97 fix: reduce size of pick functor for compatibility with armeabi-v7a 2024-10-30 10:47:39 +08:00
Nick Fisher
b7c14ebbda chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.13
 - thermion_flutter_web@0.2.0+4
 - thermion_flutter@0.2.1-dev.13
 - thermion_flutter_ffi@0.2.1-dev.13
 - thermion_flutter_platform_interface@0.2.1-dev.13
2024-10-30 10:47:39 +08:00
Nick Fisher
2969321b8c chore: test cleanup 2024-10-30 10:47:39 +08:00
Nick Fisher
036369a8dc feat: pass through fragment coordinates for picking 2024-10-30 10:47:39 +08:00
Nick Fisher
7be2b43c35 chore: remove sandbox from macos quickstart project 2024-10-30 10:47:39 +08:00
Nick Fisher
e5fe6d95e9 test: add perspective projection test 2024-10-30 10:47:39 +08:00
Nick Fisher
a8480a9eee Update dart.yml 2024-10-25 17:26:07 +08:00
Nick Fisher
1a4f53a3f9 Update dart.yml 2024-10-25 17:19:26 +08:00
Nick Fisher
11c374c25d Update dart.yml 2024-10-25 17:17:11 +08:00
Nick Fisher
618d633602 Update dart.yml 2024-10-25 17:16:02 +08:00
Nick Fisher
3effb837b7 chore: dummy tests 2024-10-25 16:59:27 +08:00
Nick Fisher
68d363388d chore: dummy tests 2024-10-25 14:49:11 +08:00
Nick Fisher
10fd78276c chore: dummy tests 2024-10-25 14:22:28 +08:00
Nick Fisher
4d778326c6 chore: dummy test for GitHub actions 2024-10-25 14:17:14 +08:00
Nick Fisher
e2d381b6b7 chore: rename test 2024-10-25 13:57:21 +08:00
Nick Fisher
4fc819e9b9 Update dart.yml 2024-10-25 13:51:39 +08:00
Nick Fisher
f0feb8aeb1 Merge branch 'develop' of https://github.com/nmfisher/thermion into develop 2024-10-25 16:45:58 +11:00
Nick Fisher
85013743fe chore: (flutter) (example) use dependency overrides for local thermion packages. We want to build this application for CI before releasing, so we need to be testing the packages that will be built 2024-10-25 16:45:44 +11:00
Nick Fisher
e5a1585c25 chore: (windows) remove unused libs 2024-10-25 16:44:42 +11:00
Nick Fisher
dd8bf920a5 chore: update dart.yml 2024-10-25 12:31:29 +08:00
Nick Fisher
b70c144784 chore: update dart.yml 2024-10-25 12:26:39 +08:00
Nick Fisher
d9849717de chore: cleanup tests 2024-10-25 12:25:47 +08:00
Nick Fisher
ec4fd5fd44 Update dart.yml 2024-10-25 12:20:10 +08:00
Nick Fisher
52b83d933d Update dart.yml 2024-10-25 12:04:11 +08:00
Nick Fisher
f1f2a237bb chore: remove combined integration_test 2024-10-25 12:01:01 +08:00
Nick Fisher
4a90031054 Update dart.yml 2024-10-25 11:55:34 +08:00
Nick Fisher
cf34b7867d Update dart.yml 2024-10-25 11:51:21 +08:00
Nick Fisher
e49330c34a Update dart.yml 2024-10-25 11:45:16 +08:00
Nick Fisher
53ff1de23c Merge branch 'master' into develop 2024-10-25 11:42:00 +08:00
Nick Fisher
7165b13d48 chore: clean up thermion_dart test directory for GitHub actions 2024-10-25 11:41:45 +08:00
Nick Fisher
f330721c0c Update dart.yml 2024-10-25 11:40:38 +08:00
Nick Fisher
01fe469a28 Update dart.yml 2024-10-25 11:36:59 +08:00
Nick Fisher
e716b55b5c Update dart.yml 2024-10-25 11:32:36 +08:00
Nick Fisher
e7ebf6e8b2 Update dart.yml 2024-10-25 11:31:00 +08:00
Nick Fisher
16e34bf76a Update dart.yml 2024-10-25 11:29:36 +08:00
Nick Fisher
3dce7a61a8 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.12
 - thermion_flutter@0.2.1-dev.12
 - thermion_flutter_web@0.2.0+3
 - thermion_flutter_platform_interface@0.2.1-dev.12
 - thermion_flutter_ffi@0.2.1-dev.12
2024-10-25 11:25:11 +08:00
Nick Fisher
5dac06d335 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.12
 - thermion_flutter_web@0.2.0+2
 - thermion_flutter_platform_interface@0.2.1-dev.11
 - thermion_flutter_ffi@0.2.1-dev.11
 - thermion_flutter@0.2.1-dev.11
2024-10-25 11:24:32 +08:00
Nick Fisher
a8d21fe316 Merge pull request #72 from nmfisher/develop
Gesture handling improvements & build fixes
2024-10-25 14:24:20 +11:00
Nick Fisher
d784efa44a Update dart.yml 2024-10-25 11:22:49 +08:00
Nick Fisher
b2a4955d54 Update dart.yml 2024-10-25 11:19:50 +08:00
Nick Fisher
02d7a0acfd Update dart.yml 2024-10-25 14:16:29 +11:00
Nick Fisher
ee5c08f795 fix: (flutter) (windows) remove deleted source file from Windows CMakeLists 2024-10-25 14:16:22 +11:00
Nick Fisher
d7debf981c Merge branch 'master' into develop 2024-10-25 14:15:51 +11:00
Nick Fisher
2b4a73f355 feat: add SCALE2_MOVE InputType 2024-10-25 10:37:57 +08:00
Nick Fisher
06b20ec6fc fix: properly pass through loadResourcesAsync flag for loadGlbFromBuffer 2024-10-25 10:37:34 +08:00
Nick Fisher
a3b6d60e16 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.11
 - thermion_flutter@0.2.1-dev.10
 - thermion_flutter_web@0.2.0+1
 - thermion_flutter_platform_interface@0.2.1-dev.10
 - thermion_flutter_ffi@0.2.1-dev.10
2024-10-24 12:59:43 +08:00
Nick Fisher
37608a8fbe fix: LFS materials 2024-10-24 12:58:13 +08:00
Nick Fisher
2713286ca5 Merge pull request #71 from nmfisher/develop
Allow finer control over input handling
2024-10-24 15:56:11 +11:00
Nick Fisher
6f648702e9 feat: add SCALE2_ROTATE to InputHandler 2024-10-24 12:52:14 +08:00
Nick Fisher
5e17e0c6d1 feat!: expose velocity, rotation and timestamp for scale events in listener. accept rotationSensitivity/zoomSensitivity for FixedOrbitRotateInputHandlerDelegate 2024-10-24 10:07:32 +08:00
Nick Fisher
0fcc44bff8 doc: update docstrings for setLayerVisibilty and setVisibilityLayer 2024-10-23 15:48:34 +08:00
Nick Fisher
f65324e555 chore: cleanup LFS 2024-10-23 15:17:25 +08:00
Nick Fisher
1ba4b2a5be chore: merge master 2024-10-23 15:16:06 +08:00
Nick Fisher
de4733edf1 chore: remove superseded LFS files 2024-10-23 15:12:46 +08:00
Nick Fisher
75936c75d0 doc: fix doc index 2024-10-23 15:04:26 +08:00
Nick Fisher
6f6ee807cf chore: update published dependency for sample project 2024-10-23 14:59:31 +08:00
Nick Fisher
7a1ce5c281 docs: update doc index 2024-10-23 14:59:09 +08:00
Nick Fisher
d4a3985a65 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.10
 - thermion_flutter@0.2.1-dev.9
 - thermion_flutter_ffi@0.2.1-dev.9
 - thermion_flutter_platform_interface@0.2.1-dev.9
 - thermion_flutter_web@0.2.0
2024-10-23 14:46:40 +08:00
Nick Fisher
d73e723003 feat: set SCALE2:InputAction.ZOOM by default 2024-10-23 14:45:48 +08:00
Nick Fisher
02c3876131 doc: update camera_manipulation example project and docs 2024-10-23 14:45:48 +08:00
Nick Fisher
641ed45b59 doc: add camera_manipulation example project 2024-10-23 14:45:48 +08:00
Nick Fisher
aa7306fc4c feat: track zoom delta for DelegateInputHandler 2024-10-23 14:45:48 +08:00
Nick Fisher
d8296f85bf feat: set InputType.SCALE1 to ROTATE by default for DelegateInputHandler.fixedOrbit 2024-10-23 14:45:47 +08:00
Nick Fisher
b96dda26c0 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.9
 - thermion_flutter@0.2.1-dev.8
 - thermion_flutter_ffi@0.2.1-dev.8
 - thermion_flutter_web@0.1.1
 - thermion_flutter_platform_interface@0.2.1-dev.8
2024-10-23 14:45:47 +08:00
Nick Fisher
3ba16e019c chore: add quickstart .metadata 2024-10-23 14:45:47 +08:00
Nick Fisher
12f97cf78f chore: test cleanup 2024-10-23 14:45:47 +08:00
Nick Fisher
219dfa801f chore: test cleanup 2024-10-23 14:45:47 +08:00
Nick Fisher
1826c23692 chore: test cleanup 2024-10-23 14:45:47 +08:00
Nick Fisher
b5dd62a614 doc: add BUILDING.md with Windows instructions 2024-10-23 14:45:47 +08:00
Nick Fisher
59e7d7c7c3 chore!: View.getCamera returns Future<Camera> 2024-10-23 14:45:47 +08:00
Nick Fisher
e66cb35899 fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 14:45:47 +08:00
Nick Fisher
d9aa90350c feat: produce debug symbols on Windows 2024-10-23 14:45:47 +08:00
Nick Fisher
4a9d28e59d fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 14:45:47 +08:00
Nick Fisher
636e1961dd fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 14:45:47 +08:00
Nick Fisher
ff27652fb6 chore: rename SceneManager* methods 2024-10-23 14:45:47 +08:00
Nick Fisher
3b6285cff8 fix: dont calculate surface orientation for non-triangle geometry 2024-10-23 14:45:47 +08:00
Nick Fisher
0d865977b4 chore: test cleanup 2024-10-23 14:45:47 +08:00
Nick Fisher
a6872f5a77 cleanup tests 2024-10-23 14:45:46 +08:00
Nick Fisher
d26d786f67 fix!: (windows) add flushAndWait call to capture() to prevent stalling on Windows; use provided buffer as pixelBuffer rather than duplicate allocation 2024-10-23 14:45:46 +08:00
Nick Fisher
71aa4be3b1 fix!: add meshoptimizer lib on Windows 2024-10-23 14:45:46 +08:00
Nick Fisher
70507a5919 fix!: Dart-only release mode builds on Window 2024-10-23 14:45:46 +08:00
Nick Fisher
b99886095b fix: fix all Windows warnings so apps will compile with /WX 2024-10-23 14:45:46 +08:00
Nick Fisher
8dabe08792 feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 14:45:46 +08:00
Nick Fisher
de4fd3b8d0 feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 14:45:46 +08:00
Nick Fisher
7778afe3ec feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 14:45:46 +08:00
Nick Fisher
f817406dbc feat: (flutter) (windows) add Destroy() to BackingWindow 2024-10-23 14:45:46 +08:00
Nick Fisher
a16e3fcd3c chore: cleanup thermion_flutter pubspec.yaml 2024-10-23 14:45:46 +08:00
Nick Fisher
2bbaff5f15 chore: cleanup quickstart pubspec.yaml 2024-10-23 14:45:46 +08:00
Nick Fisher
18023f1606 chore: cleanup thermion_flutter_ffi pubspec 2024-10-23 14:45:46 +08:00
Nick Fisher
707793c6b2 chore: rearrange thermion_flutter_ffi src dir 2024-10-23 14:45:44 +08:00
Nick Fisher
f080720712 chore: update quickstart for Windows 2024-10-23 14:45:23 +08:00
Nick Fisher
cf7d8e45f4 doc: add camera_manipulation 2024-10-23 14:45:23 +08:00
Nick Fisher
a5c3d7b215 feat: simplify FixedOrbitCameraRotationDelegate 2024-10-23 14:45:23 +08:00
Nick Fisher
68053b0f5a rename gestureHandler to inputHandler 2024-10-23 14:45:23 +08:00
Nick Fisher
39762c8132 chore: update quickstart 2024-10-23 14:45:23 +08:00
Nick Fisher
e27a8ee601 doc: update README 2024-10-23 14:45:23 +08:00
Nick Fisher
0a10dc426b fix: on resize, destroy swapchain if destroySwapChainOnResize is true 2024-10-23 14:45:23 +08:00
Nick Fisher
53ee466fb6 chore: update quickstart android project files 2024-10-23 14:45:23 +08:00
Nick Fisher
33acc73ab7 chore: add flutter quickstart example, assets and update README 2024-10-23 14:45:23 +08:00
Nick Fisher
dbbb4d7123 fix: add listener in ThermionFlutterTextureBackedPlatform to unset viewer on dispose 2024-10-23 14:45:22 +08:00
Nick Fisher
de39af13d0 fix: add listener in ThermionFlutterMethodChannelInterface to unset viewer on dispose 2024-10-23 14:45:22 +08:00
Nick Fisher
9244009350 fix: clean up destruction logic for FlutterPlatformTexture 2024-10-23 14:45:22 +08:00
Nick Fisher
bb10a75f0e fix: use internal Set for determining first ThermionTextureWidget to call requestFrame and cleanup destruction logic 2024-10-23 14:45:22 +08:00
Nick Fisher
6cf4efdf31 chore: await future in ThermionFlutterPlugin 2024-10-23 14:45:22 +08:00
Nick Fisher
83fe74253f chore: remove destroy() methods from FFIRenderTarget/FFISwapChain, implement destroyRenderTarget/destroySwapChain and clean up ThermionViewerFFI disposal 2024-10-23 14:45:22 +08:00
Nick Fisher
4be95072fd chore: update stubbed methods 2024-10-23 14:45:22 +08:00
Nick Fisher
9a8c245e31 chore: add destroySwapChain/destroyRenderTarget methods to Dart vieer and allow setting null renderTarget 2024-10-23 14:45:22 +08:00
Nick Fisher
f2e0f32054 chore: remove destroy() methods from RenderTarget and SwapChain (these need to be managed by Viewer to handle instances where the viewer itself has been disposed 2024-10-23 14:45:22 +08:00
Nick Fisher
a6c9ee60a9 fix: set View render target to nullptr if Dart renderTarget is null 2024-10-23 14:45:21 +08:00
Nick Fisher
9cef768dfc docs: add quickstart to README 2024-10-23 14:45:21 +08:00
Nick Fisher
75d5fb2f8d docs: remove Windows native_toolchain_c fixes from docs 2024-10-23 14:45:21 +08:00
Nick Fisher
e417756971 fix: set render target to null for each view and then destroy render targets when viewer disposed 2024-10-23 14:45:21 +08:00
Nick Fisher
9d961af8ed chore: rename Viewer_destroyOnRenderThread method and cleanup unused SwapChain parameter in render threa 2024-10-23 14:45:21 +08:00
Nick Fisher
ac25475155 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.8
 - thermion_flutter_web@0.1.0+9
 - thermion_flutter@0.2.1-dev.7
 - thermion_flutter_platform_interface@0.2.1-dev.7
 - thermion_flutter_ffi@0.2.1-dev.7
2024-10-23 14:45:21 +08:00
Nick Fisher
983228a8ac fix: move ThermionWin32.h to include 2024-10-23 14:45:21 +08:00
Nick Fisher
6e627d8f9f chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.7
 - thermion_flutter_web@0.1.0+8
 - thermion_flutter@0.2.1-dev.6
 - thermion_flutter_platform_interface@0.2.1-dev.6
 - thermion_flutter_ffi@0.2.1-dev.6
2024-10-23 14:45:21 +08:00
Nick Fisher
dd82d5d3e7 Windows embedder fixes 2024-10-23 14:45:21 +08:00
Nick Fisher
df319f007f cleanup 2024-10-23 14:45:21 +08:00
Nick Fisher
880551aaa3 cleanup 2024-10-23 14:45:21 +08:00
Nick Fisher
b8c76a16cc (flutter) set view renderable on Windows 2024-10-23 14:45:21 +08:00
Nick Fisher
a52f835288 move standalone Windows file to extras 2024-10-23 14:45:21 +08:00
Nick Fisher
bd9295bc90 cleanup 2024-10-23 14:45:21 +08:00
Nick Fisher
a43ee8fa3a don't call endFrame() if no views were rendered 2024-10-23 14:45:21 +08:00
Nick Fisher
d8a42a4136 add files to run standalone Windows 2024-10-23 14:45:21 +08:00
Nick Fisher
e2d11014d0 fix Windows build.dart to avoid native_assets fork; add implementations for ThermionFlutterWindows 2024-10-23 14:45:20 +08:00
Nick Fisher
6d1e56caac mobile gesture handler 2024-10-23 14:45:20 +08:00
Nick Fisher
c322c6aff9 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.6
 - thermion_flutter_web@0.1.0+7
 - thermion_flutter_platform_interface@0.2.1-dev.5
 - thermion_flutter@0.2.1-dev.5
 - thermion_flutter_ffi@0.2.1-dev.5
2024-10-23 14:45:20 +08:00
Nick Fisher
7631aec796 add native_assets_cli to dependencies 2024-10-23 14:45:20 +08:00
Nick Fisher
033e863750 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.5
 - thermion_flutter_platform_interface@0.2.1-dev.4
 - thermion_flutter_web@0.1.0+6
 - thermion_flutter@0.2.1-dev.4
 - thermion_flutter_ffi@0.2.1-dev.4
2024-10-23 14:45:20 +08:00
Nick Fisher
05b96c6972 add animation tests 2024-10-23 14:45:20 +08:00
Nick Fisher
9fc26a2078 update cube test asset with morph targets 2024-10-23 14:45:20 +08:00
Nick Fisher
c894925db1 update cube test asset with morph targets 2024-10-23 14:45:20 +08:00
Nick Fisher
b0da2f63a8 update tests 2024-10-23 14:45:20 +08:00
Nick Fisher
1c05793f03 bump animation_tools_dart dependency 2024-10-23 14:45:20 +08:00
Nick Fisher
bd123ba2f1 bump animation_tools_dart dependency 2024-10-23 14:45:20 +08:00
Nick Fisher
4aad34ce93 add pick to view tests 2024-10-23 14:45:20 +08:00
Nick Fisher
b2bd8ee66f add fall-through for InputAction.ZOOM for Third Person camera delegate 2024-10-23 14:45:20 +08:00
Nick Fisher
018434ea57 move zoom delta to InputAction.ZOOM for FreeFlight rotation delegate 2024-10-23 14:45:20 +08:00
Nick Fisher
71c230552d move zoom delta to InputAction.ZOOM for FixedOrbit rotation delegate 2024-10-23 14:45:20 +08:00
Nick Fisher
2a4b440db2 pass through sensitivity options in DelegateGestureHandler and implement cameraUpdated 2024-10-23 14:45:20 +08:00
Nick Fisher
22eeb492b0 rearrange package folders 2024-10-23 14:45:19 +08:00
Nick Fisher
19a1bc0f1d add stubbed methods 2024-10-23 14:45:19 +08:00
Nick Fisher
58010dafde add InputAction.ZOOM 2024-10-23 14:45:19 +08:00
Nick Fisher
6e64cc3617 add DefaultPickDelegate 2024-10-23 14:45:19 +08:00
Nick Fisher
056ba55f1c use condition_variable for render thread requestFrame as well as tasks 2024-10-23 14:45:19 +08:00
Nick Fisher
abd1fdefca rearrange utils dir 2024-10-23 14:45:19 +08:00
Nick Fisher
1fc3807fa8 add Axis class and rearrange utils dir 2024-10-23 14:45:19 +08:00
Nick Fisher
ae91e09943 add option for async loading glTF resources 2024-10-23 14:45:19 +08:00
Nick Fisher
5087cc48f5 return View when picking, use uint32_t for morphIndices 2024-10-23 14:45:19 +08:00
Nick Fisher
f7da303d29 set bloom enabled by default, but 0 strength 2024-10-23 14:45:19 +08:00
Nick Fisher
f90bc7b165 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.4
 - thermion_flutter_web@0.1.0+5
 - thermion_flutter@0.2.1-dev.3
 - thermion_flutter_platform_interface@0.2.1-dev.3
 - thermion_flutter_ffi@0.2.1-dev.3
2024-10-23 14:45:19 +08:00
Nick Fisher
9a1354d287 chore: make pub.dev happy 2024-10-23 14:45:19 +08:00
Nick Fisher
b3721122f0 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.3
 - thermion_flutter_web@0.1.0+4
 - thermion_flutter@0.2.1-dev.2
 - thermion_flutter_platform_interface@0.2.1-dev.2
 - thermion_flutter_ffi@0.2.1-dev.2
2024-10-23 14:45:19 +08:00
Nick Fisher
3c9ee7f82f chore: make pub.dev happy 2024-10-23 14:45:19 +08:00
Nick Fisher
6ec57d02fd chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.2
 - thermion_flutter_web@0.1.0+3
 - thermion_flutter_ffi@0.2.1-dev.1
 - thermion_flutter@0.2.1-dev.1
 - thermion_flutter_platform_interface@0.2.1-dev.1
2024-10-23 14:45:19 +08:00
Nick Fisher
99f0bb8468 chore: make pub.dev happy 2024-10-23 14:45:18 +08:00
Nick Fisher
a6738a8493 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.1
 - thermion_flutter_web@0.1.0+2
 - thermion_flutter@0.2.1-dev.0
 - thermion_flutter_platform_interface@0.2.1-dev.0
 - thermion_flutter_ffi@0.2.1-dev.0
2024-10-23 14:45:18 +08:00
Nick Fisher
17d6ca9459 chore: move swift bindings to test folder to make pub.dev happy 2024-10-23 14:45:18 +08:00
Nick Fisher
11fa485440 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.0
 - thermion_flutter@0.2.1-dev.0.0.0
 - thermion_flutter_ffi@0.2.1-dev.0.0.0
 - thermion_flutter_platform_interface@0.2.1-dev.0.0.0
 - thermion_flutter_web@0.1.0+1
2024-10-23 14:45:18 +08:00
Nick Fisher
3e67b64b90 chore(release): publish packages
- thermion_dart@0.2.0
 - thermion_flutter@0.2.0
 - thermion_flutter_ffi@0.2.0
 - thermion_flutter_platform_interface@0.2.0
 - thermion_flutter_web@0.1.0
2024-10-23 14:45:18 +08:00
Nick Fisher
021180dbe3 chore(release): publish packages
- thermion_dart@0.2.0-dev.8.0.0
 - thermion_flutter@0.2.0-dev.8.0.0
 - thermion_flutter_ffi@0.2.0-dev.8.0.0
 - thermion_flutter_platform_interface@0.2.0-dev.8.0.0
 - thermion_flutter_web@0.1.0-dev.8.0.0
2024-10-23 14:45:18 +08:00
Nick Fisher
4f012662e6 feat: camera and resizing improvements 2024-10-23 14:45:18 +08:00
Nick Fisher
4adcf7bca5 chore: remove EMSCRIPTEN ifdefs in *RenderThread methods (no longer used) 2024-10-23 14:45:18 +08:00
Nick Fisher
8ddaf24a94 chore: cleanup 2024-10-23 14:45:18 +08:00
Nick Fisher
50ed0bdfda feat: support multiple ThermionWidget on Android 2024-10-23 14:45:18 +08:00
Nick Fisher
e1efd5e4e0 feat: use imported texture on iOS 2024-10-23 14:45:18 +08:00
Nick Fisher
fbd54a2a09 feat: working implementation of multiple widgets on macos 2024-10-23 14:45:14 +08:00
Nick Fisher
22020d8607 refactor: continual refactor to support multiple render targets 2024-10-23 14:45:04 +08:00
Nick Fisher
767aa88930 chore: upgrade Swift interop gen 2024-10-23 14:45:04 +08:00
Nick Fisher
3596723d3d chore: refactoring and cleanup for Gizmo 2024-10-23 14:45:04 +08:00
Nick Fisher
03ab646713 feat: more work on multiple views/swapchains 2024-10-23 14:45:04 +08:00
Nick Fisher
a5ca6132f0 refactor!: refactor to support multiple Views/Render Targets 2024-10-23 14:45:04 +08:00
Nick Fisher
ef5b12af4f feat!: big refactor to support multiple swapchains 2024-10-23 14:45:04 +08:00
Nick Fisher
11f668e163 chore: don't keep superfluous handle to rtDepth and rtColor 2024-10-23 14:45:04 +08:00
Nick Fisher
bb303f98d2 chore: cleanup 2024-10-23 14:45:04 +08:00
Nick Fisher
56061e6471 chore: update bindings 2024-10-23 14:45:04 +08:00
Nick Fisher
faabe2f2a2 feat: add rendering check to ThermionWidget ticker 2024-10-23 14:45:04 +08:00
Nick Fisher
6dd09a12da fix!: replace queuePosition/Rotation with queueTransforms 2024-10-23 14:45:04 +08:00
Nick Fisher
68ccd983a0 fix!: replace queuePosition/Rotation with queueTransforms 2024-10-23 14:45:04 +08:00
Nick Fisher
89cdf5e52d feat: add setParameterFloat2 method 2024-10-23 14:45:04 +08:00
Nick Fisher
dc27396c6f feat: add setParameterFloat2 method 2024-10-23 14:45:03 +08:00
Nick Fisher
e2eb1137d2 refactor!: remove RenderThread methods no longer needed 2024-10-23 14:45:03 +08:00
Nick Fisher
b5d47ae2a5 fix!: replace queuePosition/Rotation with queueTransforms 2024-10-23 14:45:03 +08:00
Nick Fisher
c2b1d8660e fix!: replace queuePosition/Rotation with queueTransforms 2024-10-23 14:45:03 +08:00
Nick Fisher
b2024d38b5 feat: add uvScale to unlit material 2024-10-23 14:45:03 +08:00
Nick Fisher
589201ad39 feat: add ThirdPersonCameraDelegate 2024-10-23 14:45:03 +08:00
Nick Fisher
34c0d87703 feat!: set baseColorIndex to -1 by default in unlit materialss 2024-10-23 14:45:03 +08:00
Nick Fisher
f71078e112 chore: update tests 2024-10-23 14:45:03 +08:00
Nick Fisher
fb8c82d838 add ThirdPersonCameraDelegate 2024-10-23 14:45:03 +08:00
Nick Fisher
41432a07ed chore: getter for native camera view matrix 2024-10-23 14:45:03 +08:00
Nick Fisher
2408104bd0 more camera work 2024-10-23 14:45:03 +08:00
Nick Fisher
d1cd68cda6 more camera work 2024-10-23 14:45:03 +08:00
Nick Fisher
3dffaddfe8 chore: rearrange library/export structure 2024-10-23 14:45:03 +08:00
Nick Fisher
f023810859 chore: camera transform tests 2024-10-23 14:45:03 +08:00
Nick Fisher
256d5d4eb1 feat: set camera model matrix directly 2024-10-23 14:45:03 +08:00
Nick Fisher
7edbf8fc8d chore: rearrange library dirs, gesture handler improvements 2024-10-23 14:45:02 +08:00
Nick Fisher
2a20075797 chore: import cleanup 2024-10-23 14:45:02 +08:00
Nick Fisher
c91cbeba1a chore: rearrange flutter gesture/widget directory structure 2024-10-23 14:45:02 +08:00
Nick Fisher
9da4710d54 chore: rearrange flutter gesture/widget directory structure 2024-10-23 14:45:02 +08:00
Nick Fisher
2d1ee3bbbe chore: rename thermion_flutter src dir 2024-10-23 14:45:02 +08:00
Nick Fisher
758704d464 renaming/refactoring and allow creating new cameras 2024-10-23 14:45:02 +08:00
Nick Fisher
9639caf019 feat: expose more camera methods 2024-10-23 14:45:02 +08:00
Nick Fisher
0d45365ba3 chore(release): publish packages
- thermion_dart@0.2.0-dev.7.0
 - thermion_flutter_web@0.1.0-dev.7.0
 - thermion_flutter@0.2.0-dev.7.0
 - thermion_flutter_platform_interface@0.2.0-dev.7.0
 - thermion_flutter_ffi@0.2.0-dev.7.0
2024-10-23 14:45:02 +08:00
Nick Fisher
c19a1b3154 fix!: fix min SDK for thermion_dart 2024-10-23 14:45:02 +08:00
Nick Fisher
ac45bd2963 chore(release): publish packages
- thermion_dart@0.2.0-dev.6.0
 - thermion_flutter_web@0.1.0-dev.6.0
 - thermion_flutter@0.2.0-dev.6.0
 - thermion_flutter_platform_interface@0.2.0-dev.6.0
 - thermion_flutter_ffi@0.2.0-dev.6.0
2024-10-23 14:45:02 +08:00
Nick Fisher
f2d94878da chore!: cleanup deleted export 2024-10-23 14:45:02 +08:00
Nick Fisher
532eadf434 chore(release): publish packages
- thermion_flutter@0.2.0-dev.6.0
2024-10-23 14:45:02 +08:00
Nick Fisher
673842acbc chore!: remove superseded HardwareKeyboard* classes 2024-10-23 14:45:02 +08:00
Nick Fisher
aaca5ad372 chore(release): publish packages
- thermion_dart@0.2.0-dev.5.0
 - thermion_flutter_web@0.1.0-dev.5.0
 - thermion_flutter@0.2.0-dev.5.0
 - thermion_flutter_platform_interface@0.2.0-dev.5.0
 - thermion_flutter_ffi@0.2.0-dev.5.0
2024-10-23 14:45:02 +08:00
Nick Fisher
f6906ac3fd chore!: remove EntityTransformController (requires replacement) 2024-10-23 14:45:02 +08:00
Nick Fisher
38a5395c78 chore(release): publish packages
- thermion_dart@0.2.0-dev.4.0
 - thermion_flutter_web@0.1.0-dev.4.0
 - thermion_flutter@0.2.0-dev.4.0
 - thermion_flutter_platform_interface@0.2.0-dev.4.0
 - thermion_flutter_ffi@0.2.0-dev.4.0
2024-10-23 14:45:01 +08:00
Nick Fisher
85dcd5a5b9 fix!: (web/wasm) free pick callbacks on dispose 2024-10-23 14:45:01 +08:00
Nick Fisher
92fbe2e5d5 chore!: restructure viewer folders as libraries to only export the public interface 2024-10-23 14:45:01 +08:00
Nick Fisher
779d5cba1c chore(release): publish packages
- thermion_flutter@0.2.0-dev.3.0
2024-10-23 14:45:01 +08:00
Nick Fisher
f4217401e2 chore: add path to dev deps 2024-10-23 14:45:01 +08:00
Nick Fisher
e99bf6b14b chore!: (flutter) cleanup for pub.dev publishing 2024-10-23 14:45:01 +08:00
Nick Fisher
84775f7e2a fix!: remove EntityControllerMouseWidget (replace with GestureHandler) 2024-10-23 14:45:01 +08:00
Nick Fisher
8c6bc456a8 chore(release): publish packages
- thermion_flutter@0.2.0-dev.2.0
2024-10-23 14:45:01 +08:00
Nick Fisher
d58d8bbc35 chore: (flutter) web packaging fixes (use logger) 2024-10-23 14:45:01 +08:00
Nick Fisher
0738f32751 chore: (flutter) web packaging fixes 2024-10-23 14:45:01 +08:00
Nick Fisher
110962cc37 chore: (flutter) web packaging fixes 2024-10-23 14:45:01 +08:00
Nick Fisher
70e529605c chore: (flutter) add package:web to flutter deps 2024-10-23 14:45:01 +08:00
Nick Fisher
aa02e04091 chore!: remove EntityListWidget - will replace with new Scene 2024-10-23 14:45:01 +08:00
Nick Fisher
a670ce1cf0 chore(release): publish packages
- thermion_dart@0.2.0-dev.1.0
 - thermion_flutter@0.2.0-dev.1.0
 - thermion_flutter_ffi@0.2.0-dev.1.0
 - thermion_flutter_platform_interface@0.2.0-dev.1.0
 - thermion_flutter_web@0.1.0-dev.1.0
2024-10-23 14:45:01 +08:00
Nick Fisher
f552e61157 rename Android plugin class in pubspec.yaml 2024-10-23 14:45:01 +08:00
Nick Fisher
e397b68060 add namespace for build.gradle 2024-10-23 14:45:00 +08:00
Nick Fisher
cb5580d770 add namespace for AndroidManifest.xml 2024-10-23 14:45:00 +08:00
Nick Fisher
0cd4ecf701 rename Android package/paths 2024-10-23 14:45:00 +08:00
Nick Fisher
46291d4a63 (flutter) provide nicer implementation of FixedOrbitCameraRotationDelegate 2024-10-23 14:45:00 +08:00
Nick Fisher
1344d1c424 (flutter) update FreeFlight camera delegate 2024-10-23 14:45:00 +08:00
Nick Fisher
bb0f3d417f add PickDelegate to DelegateGestureHandler 2024-10-23 14:45:00 +08:00
Nick Fisher
0f6d02a83f add PICK_ENTITY to GestureAction 2024-10-23 14:45:00 +08:00
Nick Fisher
56e00c9c55 add background color tests 2024-10-23 14:45:00 +08:00
Nick Fisher
943ca26eae normalize direction in addLight 2024-10-23 14:45:00 +08:00
Nick Fisher
8e1c611e92 set clearOptions to true 2024-10-23 14:45:00 +08:00
Nick Fisher
ed5f23faf2 introduce stronger native typing, camera projection/culling methods, update tests 2024-10-23 14:45:00 +08:00
Nick Fisher
60bd7498ea (flutter) use scheduleFrameCallback to invoke requestFrame to match Flutter/vsync 2024-10-23 14:45:00 +08:00
Nick Fisher
ab1de78b74 rename from *FFI to *RenderThread, return bool from render() to check frame timings, update render loop to wait on condition variable, add requestFrame() method 2024-10-23 14:45:00 +08:00
Nick Fisher
493d547c7b add Dart Camera type 2024-10-23 14:45:00 +08:00
Nick Fisher
7bcfd0f805 rename CameraPtr to TCamera and use named arguments for setCameraLensProjection 2024-10-23 14:45:00 +08:00
Nick Fisher
3e1b151488 move MaterialInstance methods to own class 2024-10-23 14:45:00 +08:00
Nick Fisher
820ad7cb28 rename setLayerEnabled to setLayerVisibility, add setVisibilityLayer method 2024-10-23 14:45:00 +08:00
Nick Fisher
686b4800aa add PickDelegate 2024-10-23 14:44:59 +08:00
Nick Fisher
cb7828820d add ThermionPickResult typedef 2024-10-23 14:44:59 +08:00
Nick Fisher
a6d457f664 update bindings 2024-10-23 14:44:59 +08:00
Nick Fisher
fd95c634f1 add setMaterialDepthWrite method 2024-10-23 14:44:59 +08:00
Nick Fisher
df0a744cc9 add setMaterialDepthWrite method 2024-10-23 14:44:59 +08:00
Nick Fisher
af55ef56c9 update tests 2024-10-23 14:44:59 +08:00
Nick Fisher
6c6991f0a9 update stub 2024-10-23 14:44:59 +08:00
Nick Fisher
d248a85aee add createUnlitMaterialInstance, setMaterialPropertyInt methods to viewer interface 2024-10-23 14:44:59 +08:00
Nick Fisher
64642204fc update bindings 2024-10-23 14:44:59 +08:00
Nick Fisher
5bb84618c3 replace some async methods with futures, fix setMaterialProperty4, update unproject, setMaterialPropertyInt, createUnlitMaterialInstance 2024-10-23 14:44:59 +08:00
Nick Fisher
fc5cce71b7 export geometry from thermion_dart 2024-10-23 14:44:59 +08:00
Nick Fisher
b00aa0696f remove image.mat from LFS 2024-10-23 14:44:59 +08:00
Nick Fisher
02aa14d7b7 remove image.mat from LFS 2024-10-23 14:44:59 +08:00
Nick Fisher
f9dfb68e9f update built unlit material 2024-10-23 14:44:59 +08:00
Nick Fisher
208eb4ad06 remove old default paramsf rom UnlitMaterialProvider 2024-10-23 14:44:59 +08:00
Nick Fisher
5608abdf79 add setMaterialProperty for int, add create_unlit_material_instance, use double4 instead of float4 2024-10-23 14:44:59 +08:00
Nick Fisher
2e404f2087 add setMaterialProperty for int, add create_unlit_material_instance 2024-10-23 14:44:59 +08:00
Nick Fisher
024201a7b7 set default layer for loadGlb to 0,. add setMaterialProperty for int, add SceneManager::createUnlitMaterialInstance 2024-10-23 14:44:58 +08:00
Nick Fisher
7dde3b5d27 add base color/texture to unlit 2024-10-23 14:44:58 +08:00
Nick Fisher
834726b49e set default layer for loadGlb to 0,. add setMaterialProperty for int 2024-10-23 14:44:58 +08:00
Nick Fisher
204f8204f1 change float4 to double4 2024-10-23 14:44:58 +08:00
Nick Fisher
3cf4790148 update tests 2024-10-23 14:44:58 +08:00
Nick Fisher
180f3f08dc update unproject texture to accept input texture 2024-10-23 14:44:58 +08:00
Nick Fisher
67698775a3 update unproject texture to accept input texture 2024-10-23 14:44:58 +08:00
Nick Fisher
22f97beeaa update unproject texture to accept input texture 2024-10-23 14:44:58 +08:00
Nick Fisher
9f98f21d38 update unproject texture to accept input texture 2024-10-23 14:44:58 +08:00
Nick Fisher
94ff71281f don't call clearBackgroundImage when setBackgroundImage is called (would deadlock) 2024-10-23 14:44:58 +08:00
Nick Fisher
4a96df1574 set default material for geometry to baseColorIndex 0 2024-10-23 14:44:58 +08:00
Nick Fisher
80448d4a24 depth pre-pass when projecting texture 2024-10-23 14:44:58 +08:00
Nick Fisher
257c4b29f2 add spot constructor 2024-10-23 14:44:58 +08:00
Nick Fisher
3f9db33340 add test cube texture image 2024-10-23 14:44:58 +08:00
Nick Fisher
2c42fbd38d update test 2024-10-23 14:44:58 +08:00
Nick Fisher
8eca3ec76b add image methods to test helper 2024-10-23 14:44:58 +08:00
Nick Fisher
0b64bc580d update showcase 2024-10-23 14:44:58 +08:00
Nick Fisher
ce2266d0ed test updates 2024-10-23 14:44:57 +08:00
Nick Fisher
60530fad6b widget updates 2024-10-23 14:44:57 +08:00
Nick Fisher
b8f94ed8a9 increase min Dart SDK to 3.5 for .address FFI accessors 2024-10-23 14:44:57 +08:00
Nick Fisher
330b1ca5d8 update ffigen with new headers 2024-10-23 14:44:57 +08:00
Nick Fisher
40a7f86cef fixes for createMaterialInstance 2024-10-23 14:44:57 +08:00
Nick Fisher
a9b3050265 gesture detector fixes 2024-10-23 14:44:57 +08:00
Nick Fisher
b7e64b3abe ThermionViewer: add create/destroy materialinstance, add MaterialInstance property to createGeometry, priority/layer to loadGlbFromBuffer 2024-10-23 14:44:57 +08:00
Nick Fisher
56baa44c99 widget cleanup 2024-10-23 14:44:57 +08:00
Nick Fisher
357d815489 use TMaterialInstance for FFI API, add priority/layer params to load_glb_from_buffer 2024-10-23 14:44:57 +08:00
Nick Fisher
e542855639 add priority/layer to FFI viewer, use struct for model matrix, add createUbershaderMaterialInstance and destroyMaterialInstance 2024-10-23 14:44:57 +08:00
Nick Fisher
6fc3f49152 update bindings 2024-10-23 14:44:57 +08:00
Nick Fisher
e67c77b322 use SceneManager::LAYERS enum for Overlay, set priority/layer in loadGlbFromBuffer, add create/destroy material instance 2024-10-23 14:44:57 +08:00
Nick Fisher
c3291f672e use SceneManager::LAYERS enum for Overlay 2024-10-23 14:44:57 +08:00
Nick Fisher
176036402a use SceneManager::LAYERS enum for gizmo 2024-10-23 14:44:57 +08:00
Nick Fisher
9d5488b82d add priority/layer to load_glb_from_buffer 2024-10-23 14:44:57 +08:00
Nick Fisher
a2618dab31 native types, add create/destroy material instance, add SceneManager::LAYERS enum 2024-10-23 14:44:57 +08:00
Nick Fisher
bb46241f98 refactor: native types 2024-10-23 14:44:57 +08:00
Nick Fisher
ff7fee2d94 refactor: native types 2024-10-23 14:44:57 +08:00
Nick Fisher
9a23a24bd3 refactor: move native types to own header, add methods for create/destroy material instance, add priority/layer to load_glb_from_buffer 2024-10-23 14:44:56 +08:00
Nick Fisher
a62762be92 refactor: Dart types 2024-10-23 14:44:56 +08:00
Nick Fisher
60dbc4ffd6 add texture methods (including unproject) 2024-10-23 14:44:39 +08:00
Nick Fisher
773077ab9c don't store gizmo material in LFS 2024-10-23 14:44:39 +08:00
Nick Fisher
679d208c8d test update 2024-10-23 14:44:39 +08:00
Nick Fisher
19bec9a9cf restructure viewer/types/helper folders, remove old WASM/web FFI interop, add SceneUpdated stream 2024-10-23 14:44:39 +08:00
Nick Fisher
a7f6ae19f0 update tests 2024-10-23 14:44:39 +08:00
Nick Fisher
475f90d224 restructure viewer/types/helper folders, remove old WASM/web FFI interop, add SceneUpdated stream 2024-10-23 14:44:39 +08:00
Nick Fisher
285c9016d7 gesture handler & delegate improvements 2024-10-23 14:44:39 +08:00
Nick Fisher
5923d07abc allow setting material property by name 2024-10-23 14:44:39 +08:00
Nick Fisher
91cece81fb (flutter) export delegate gesture handler 2024-10-23 14:44:38 +08:00
Nick Fisher
b714d421f6 remove using namespace filament* 2024-10-23 14:44:38 +08:00
Nick Fisher
20852c7ae5 update bindings 2024-10-23 14:44:38 +08:00
Nick Fisher
f18f04734d allow setting material property by name 2024-10-23 14:44:38 +08:00
Nick Fisher
2eb7cc286b remove using namespace filament* 2024-10-23 14:44:38 +08:00
Nick Fisher
ae91e3e2c1 geometry receives/casts shadows by default 2024-10-23 14:44:38 +08:00
Nick Fisher
d73b437104 gesture handler improvements 2024-10-23 14:44:38 +08:00
Nick Fisher
04b9d9e400 remove superseded desktop/mobile gesture detector widget 2024-10-23 14:44:38 +08:00
Nick Fisher
6e7741706e add pan camera implementation and fix velocity timer 2024-10-23 14:44:38 +08:00
Nick Fisher
af0ee0584d add delegate-based implementations for gesture handlers 2024-10-23 14:44:38 +08:00
Nick Fisher
cabed69c48 remove double sided from HighlightOverlay material 2024-10-23 14:44:38 +08:00
Nick Fisher
2832686193 adjust gizmo size 2024-10-23 14:44:38 +08:00
Nick Fisher
d7149c8282 fix setCameraModelMatrix4 2024-10-23 14:44:38 +08:00
Nick Fisher
571c7e60aa update bindings 2024-10-23 14:44:38 +08:00
Nick Fisher
a434829a6c initialize viewportDimensions to (0,0) in ThermionViewer 2024-10-23 14:44:38 +08:00
Nick Fisher
60b8716315 fix winding order in GeometryHelper 2024-10-23 14:44:38 +08:00
Nick Fisher
7aba6d15b7 reduce size of gizmo 2024-10-23 14:44:37 +08:00
Nick Fisher
48ada59a2f remove logging 2024-10-23 14:44:37 +08:00
Nick Fisher
c5aa1abb30 culling fixes for HighlightOverlay 2024-10-23 14:44:37 +08:00
Nick Fisher
daeedd6f73 add v2 gesture handlers 2024-10-23 14:44:37 +08:00
Nick Fisher
cac80159ff add v2 gesture handlers 2024-10-23 14:44:37 +08:00
Nick Fisher
a5cb23c32e chore!: rename controller to viewer in gesture detector widgets 2024-10-23 14:44:37 +08:00
Nick Fisher
0f5b7e5e6d update material building in Makefile 2024-10-23 14:44:37 +08:00
Nick Fisher
12aaebd154 update test 2024-10-23 14:44:37 +08:00
Nick Fisher
8899d4b960 use opaque CameraPtr to set camera matrices/properties/etc 2024-10-23 14:44:37 +08:00
Nick Fisher
1ba91a1fd6 rename getBoundingBox to getViewportBoundingBox and add camera methods 2024-10-23 14:44:37 +08:00
Nick Fisher
c34d89affd rename getBoundingBox to getViewportBoundingBox 2024-10-23 14:44:37 +08:00
Nick Fisher
e07a4fac97 explicitly mark type of Camera for Gizmo 2024-10-23 14:44:37 +08:00
Nick Fisher
76428b2e70 use opaque CameraPtr to set camera matrices/properties/etc 2024-10-23 14:44:37 +08:00
Nick Fisher
78a0763ad7 remove camera methods from FilamentViewer 2024-10-23 14:44:37 +08:00
Nick Fisher
32591f5af7 remove camera methods from FilamentViewer 2024-10-23 14:44:37 +08:00
Nick Fisher
c1898b97c9 use opaque CameraPtr to set camera matrices/properties/etc 2024-10-23 14:44:37 +08:00
Nick Fisher
5c82b6351c mark all ffigen functions as leaf 2024-10-23 14:44:37 +08:00
Nick Fisher
14f62a6427 remove update_viewport_and_camera_projection_ffi 2024-10-23 14:44:36 +08:00
Nick Fisher
2a30a6f2e1 remove update_viewport_and_camera_projection_ffi 2024-10-23 14:44:36 +08:00
Nick Fisher
7b96ee0d9c add matrix helper 2024-10-23 14:44:36 +08:00
Nick Fisher
5994908197 update stubbed ThermionViewer methods 2024-10-23 14:44:36 +08:00
Nick Fisher
d6c3badbba remove unused get_camera_position method 2024-10-23 14:44:36 +08:00
Nick Fisher
9aa9e84bc0 update stub ThermionViewer 2024-10-23 14:44:36 +08:00
Nick Fisher
f3637eab3f update bindings 2024-10-23 14:44:36 +08:00
Nick Fisher
9f9ee09f9c add loadGlbFromBuffer implementation to ThermionViewerFFI 2024-10-23 14:44:36 +08:00
Nick Fisher
08b986c5e3 add createGeometryWithNormals to SceneManager 2024-10-23 14:44:36 +08:00
Nick Fisher
c8f6c2582b add createGeometryWithNormals to SceneManager 2024-10-23 14:44:36 +08:00
Nick Fisher
ae1c8dbdfc add normals to CustomGeometry implementation 2024-10-23 14:44:36 +08:00
Nick Fisher
3b5c91b15c add normals to CustomGeometry interface 2024-10-23 14:44:36 +08:00
Nick Fisher
7a6e9cd598 HighlightOverlay fixes 2024-10-23 14:44:36 +08:00
Nick Fisher
6a8f0bda09 don't set stencil highlight in Gizmo 2024-10-23 14:44:36 +08:00
Nick Fisher
05305aa27d add create_geometry_with_normals method 2024-10-23 14:44:36 +08:00
Nick Fisher
ae59288b1f add create_geometry_with_normals method 2024-10-23 14:44:36 +08:00
Nick Fisher
7269a5e527 add create_geometry_with_normals_ffi method, switch load_glb_from_buffer type to uint8_t for Dart leaf compat and add keepData param 2024-10-23 14:44:36 +08:00
Nick Fisher
02dffaade5 add create_geometry_with_normals_ffi method, switch load_glb_from_buffer type to uint8_t for Dart leaf compat and add keepData param 2024-10-23 14:44:35 +08:00
Nick Fisher
9686650987 update test helpers 2024-10-23 14:44:35 +08:00
Nick Fisher
eefa3cbe98 (flutter) add experimental GestureHandler widget and decouple from ThermionGestureDetectorDesktop 2024-10-23 14:44:35 +08:00
Nick Fisher
0a4b5c8676 (flutter) add experimental GestureHandler widget and decouple from ThermionGestureDetectorDesktop 2024-10-23 14:44:35 +08:00
Nick Fisher
dff3cc21fa add loadGlbFromBuffer method and normals param to ThermionViewer 2024-10-23 14:44:35 +08:00
Nick Fisher
d7bb0e492c (flutter) set enablePicking to false by default in ThermionGestureDetector 2024-10-23 14:44:35 +08:00
Nick Fisher
af92c26124 (flutter) add const FlutterWebOptions 2024-10-23 14:44:35 +08:00
Nick Fisher
d1ffa246a9 (flutter) add CameraOrientationWidget 2024-10-23 14:44:35 +08:00
Nick Fisher
4e7b79f98d (flutter) add const constructor for flutter options 2024-10-23 14:44:35 +08:00
Nick Fisher
9cff791ce5 add GeometryHelper 2024-10-23 14:44:35 +08:00
Nick Fisher
fdb2d75cf0 (flutter) add CameraOrientationWidget 2024-10-23 14:44:35 +08:00
Nick Fisher
825c6e1a80 feat: parent the cloned entity instance when setting stencil highlight 2024-10-23 14:44:35 +08:00
Nick Fisher
ec9366d72b feat: add getAncestor method 2024-10-23 14:44:35 +08:00
Nick Fisher
ff304ad3d4 feat: add getAncestor method 2024-10-23 14:44:35 +08:00
Nick Fisher
b71ba411fd update bindings 2024-10-23 14:44:35 +08:00
Nick Fisher
dfe7b4e6c6 feat: set stencil highlight on gizmo attach 2024-10-23 14:44:35 +08:00
Nick Fisher
96e2de6de1 update tests 2024-10-23 14:44:35 +08:00
Nick Fisher
d4d4dc4fd7 feat: move createGeometry to SceneManager, add queueRelativePositionUpdateFromViewportVector and removeStencilHighlight 2024-10-23 14:44:34 +08:00
Nick Fisher
2ccbb4c0c4 chore: remove createGeometry method from FilamentViewer, set default view blend mode 2024-10-23 14:44:34 +08:00
Nick Fisher
709b098054 fix: properly destroy entities/material/etc in Gizmo on destruction, remove custom scene creation logic 2024-10-23 14:44:34 +08:00
Nick Fisher
53ff6c72f0 feat: move HighlightOverlay to nested class, move createGeometry to SceneManager, add queueRelativePositionUpdateFromViewportVector 2024-10-23 14:44:34 +08:00
Nick Fisher
8044adcc50 feat: add removeStencilHighlight, accept color param for setStencilHighlight, queuePositionUpdateFromViewportCoords to ThermionDartApi 2024-10-23 14:44:34 +08:00
Nick Fisher
9b91da3798 feat: add removeStencilHighlight, queuePositionUpdateFromViewportCoords to ThermionViewer 2024-10-23 14:44:34 +08:00
Nick Fisher
286910e722 chore: delete old unlit_opaque material 2024-10-23 14:44:34 +08:00
Nick Fisher
8fe4322536 chore: rebuild unlit material 2024-10-23 14:44:34 +08:00
Nick Fisher
a7005d13df feat: add scale parameter to unlit material 2024-10-23 14:44:34 +08:00
Nick Fisher
8ca4205d2c fix: add Fence to capture() and set stencil buffer by default 2024-10-23 14:44:34 +08:00
Nick Fisher
af30b27724 test: add test cube.glb 2024-10-23 14:44:34 +08:00
Nick Fisher
2d688e74f2 chore: remove old materials Makefile 2024-10-23 14:44:34 +08:00
Nick Fisher
0a4e3501dc feat: add flag for keepData for gltf instancing, add highlightScene, add stencilHighlight method 2024-10-23 14:44:34 +08:00
Nick Fisher
1b50ca2b57 chore: minor widget fixes 2024-10-23 14:44:34 +08:00
Nick Fisher
b454bbd662 feat: add grid material 2024-10-23 14:44:34 +08:00
Nick Fisher
1480920938 feat: allow passing null options to ThermionWidget 2024-10-23 14:44:34 +08:00
Nick Fisher
65a6231f23 feat: grid uses own material 2024-10-23 14:44:33 +08:00
Nick Fisher
4b70116754 chore: clean up old commented code 2024-10-23 14:44:33 +08:00
Nick Fisher
e136b0a9f1 fix: ignore pick results directly on axis 2024-10-23 14:44:33 +08:00
Nick Fisher
e45cc0267f feat: add grid material 2024-10-23 14:44:33 +08:00
Nick Fisher
d17cce2ca4 feat: expose setLightDirection and setLightPosition 2024-10-23 14:44:33 +08:00
Nick Fisher
c93cc296a0 chore: update binding 2024-10-23 14:44:33 +08:00
Nick Fisher
f63d42a75b chore: (js) stub missing methods 2024-10-23 14:44:33 +08:00
Nick Fisher
1ae7be0846 chore: (wasm) add missing interop methods 2024-10-23 14:44:33 +08:00
Nick Fisher
c3388f2a48 feat: (flutter) (web) if importCanvasAsWidget is false, render transparency 2024-10-23 14:44:33 +08:00
Nick Fisher
4909f4395d chore: stub ThermionWidget methods 2024-10-23 14:44:33 +08:00
Nick Fisher
2a8122e280 feat: (flutter) move DPR calculation to resizeTexture and add createViewerWithOptions method to ThermionFlutterFFI 2024-10-23 14:44:33 +08:00
Nick Fisher
937eaaaaa1 fix: (flutter) pass ThermionFlutterOptions to ThermionWidget, use dpr for resizeTexture, delete unnecessary TransparencyPainter class 2024-10-23 14:44:33 +08:00
Nick Fisher
f0974509bf feat: add createViewerWithOptions to ThermionFlutterPlugin and mark createViewer as deprecated 2024-10-23 14:44:33 +08:00
Nick Fisher
0d71b0d8fe feat: add createViewerWithOptions to ThermionFlutterPlugin and mark createViewer as deprecated 2024-10-23 14:44:33 +08:00
Nick Fisher
cf0a76c343 feat: (flutter) (web) use options to determine whether to create canvas, and set fixed position + offset 2024-10-23 14:44:33 +08:00
Nick Fisher
0f5b90998e test: update viewport gizmo test 2024-10-23 14:44:33 +08:00
Nick Fisher
8963b79db0 chore: (flutter) export platform interface from thermion_flutter package 2024-10-23 14:44:33 +08:00
Nick Fisher
dc0a698330 chore: stub new methods 2024-10-23 14:44:32 +08:00
Nick Fisher
6e54ed096f doc: pixelRatio 2024-10-23 14:44:32 +08:00
Nick Fisher
a552c11983 feat: add ThermionFlutterOptions classes, rename interface parameter for offsetTop and ensure pixelRatio is passed to resizeTexture 2024-10-23 14:44:32 +08:00
Nick Fisher
1bdf6888c6 fix: emscripten export visibility for add_light 2024-10-23 14:44:32 +08:00
Nick Fisher
f69fcbb783 chore: use float instead of float32_t in FilamentViewer 2024-10-23 14:44:32 +08:00
Nick Fisher
6771431038 chore: add nested PickCallbackHandler to Gizmo 2024-10-23 14:44:32 +08:00
Nick Fisher
712568d118 chore: update Makefile to add missing headers to resgen files 2024-10-23 14:44:32 +08:00
Nick Fisher
4916c4cc50 fix: (flutter/web) use window.devicePixelRatio for viewport 2024-10-23 14:44:32 +08:00
Nick Fisher
8ed26c72e2 fix: (wasm) use correct coords for pick, free memory correctly, keep pixelratio copy 2024-10-23 14:44:32 +08:00
Nick Fisher
919010235c fix: (flutter) desktop gesture detector changes for new Gizmo methods 2024-10-23 14:44:32 +08:00
Nick Fisher
580d795054 chore: Dart Gizmo class cleanup 2024-10-23 14:44:32 +08:00
Nick Fisher
329193f2f2 feat: add setGizmoVisibility/pickGizmo methods to ThermionViewer 2024-10-23 14:44:32 +08:00
Nick Fisher
b20acaec6f feat: remove gizmo view references, exclude gizmo entities from picking, add createIbl 2024-10-23 14:44:32 +08:00
Nick Fisher
516d420a1e feat: createIbl 2024-10-23 14:44:32 +08:00
Nick Fisher
b92b34a8ad chore: init SceneManager pointers to nullptr 2024-10-23 14:44:32 +08:00
Nick Fisher
7d7596bbdd fix: add more nan checks for gizmo manipulation 2024-10-23 14:44:31 +08:00
Nick Fisher
acac2dba90 feat: expose API methods for create_ibl, pick/set gizmo visibility 2024-10-23 14:44:31 +08:00
Nick Fisher
727ac7d9df feat: create transparent overlay for gizmo for easier picking 2024-10-23 14:44:31 +08:00
Nick Fisher
2fc54ae343 feat: rescale gizmo based on distance from camera 2024-10-23 14:44:31 +08:00
Nick Fisher
e04cd0488e feat: rescale gizmo based on distance from camera 2024-10-23 14:44:31 +08:00
Nick Fisher
f867e21647 fix: add check for nan NDC coordinates for viewport translation 2024-10-23 14:44:31 +08:00
Nick Fisher
ec27935d81 fix stub methods 2024-10-23 14:44:31 +08:00
Nick Fisher
08ae0387a9 add implementations to JS bridge/shim classes 2024-10-23 14:44:31 +08:00
Nick Fisher
ca69c783d3 add missing methods to wasm viewer 2024-10-23 14:44:31 +08:00
Nick Fisher
12198dd6df feat: highlight gizmo on hover 2024-10-23 14:44:31 +08:00
Nick Fisher
d1fbbe1167 add implementations to FFI viewer 2024-10-23 14:44:31 +08:00
Nick Fisher
65e79b0d07 fix!: (flutter) pass pixelRatio to createTexture 2024-10-23 14:44:31 +08:00
Nick Fisher
9fb9df1843 (flutter) (web) initialize viewer to 1x1 then resize on createTexture 2024-10-23 14:44:31 +08:00
Nick Fisher
b15166a599 feat!: (flutter) (web) upgrade package:web dep to 1.0.0 2024-10-23 14:44:31 +08:00
Nick Fisher
bf81dfe806 fix!: (flutter) pass pixelRatio to createTexture 2024-10-23 14:44:31 +08:00
Nick Fisher
f588b3b6e7 feat: expose setLayerEnabled, viewportDimensions and getCameraFov on ThermionView 2024-10-23 14:44:31 +08:00
Nick Fisher
c29db74b1d stub out new methods 2024-10-23 14:44:31 +08:00
Nick Fisher
213fc3da91 fix!: (flutter) pass pixelRatio to createTexture 2024-10-23 14:44:30 +08:00
Nick Fisher
ab4f721914 fix!: (flutter) pass pixelRatio to createTexture 2024-10-23 14:44:30 +08:00
Nick Fisher
8ac9876ec3 chore: update bindings 2024-10-23 14:44:30 +08:00
Nick Fisher
4fbc113fcb chore: add viewport test 2024-10-23 14:44:30 +08:00
Nick Fisher
4d3d744cd6 feat: layers, grid 2024-10-23 14:44:30 +08:00
Nick Fisher
21416fa8c8 feat: layers, grid 2024-10-23 14:44:30 +08:00
Nick Fisher
f2f973bf00 feat: ignore grid overlay and gizmo center when picking, implement highlighting 2024-10-23 14:44:30 +08:00
Nick Fisher
0c655dbfd4 feat: SceneManager updates (setLayer, add grid, queueRelativePositionUpdateWorld 2024-10-23 14:44:30 +08:00
Nick Fisher
ebac947c92 feat: expose set_layer_enabled, get_camera_fov and queue_relative_position_updateg_world_axis to ThermionDartApi.h 2024-10-23 14:44:30 +08:00
Nick Fisher
ce85a9d0b1 feat: add getCameraFov to FilamentViewer 2024-10-23 14:44:30 +08:00
Nick Fisher
f114ca33d5 feat: add new grid overlay files to web CmakeLists 2024-10-23 14:44:30 +08:00
Nick Fisher
850628f7f6 chore: rebuild materials 2024-10-23 14:44:30 +08:00
Nick Fisher
8681d58ffb fix: update material output path in Makefile 2024-10-23 14:44:30 +08:00
Nick Fisher
8f2cd5a353 add grid overlay 2024-10-23 14:44:30 +08:00
Nick Fisher
f6f12e2566 use inactive/active color gizmo 2024-10-23 14:44:30 +08:00
Nick Fisher
3512ed6da3 chore: don't use shader to overlay gizmo 2024-10-23 14:44:30 +08:00
Nick Fisher
4a29a77a78 feat: re-implement (native) Gizmo class, expose preserveScaling parameter for setParent, add methods for getting viewport bounding box from renderable entity 2024-10-23 14:44:29 +08:00
Nick Fisher
aa17962936 fix: (web) add emscripten guards for flushAndWait call when swapchain destroyed 2024-10-23 14:44:29 +08:00
Nick Fisher
10cab8dcb4 feat!: (web) (flutter) create canvas when createViewer is called (no longer need to manually add canvas element to web HTML) 2024-10-23 14:44:29 +08:00
Nick Fisher
0a720fae72 feat: add capture() function and expose viewportDimensions on ThermionViewer (allows easier saving of captured images to PNG) 2024-10-23 14:44:29 +08:00
Nick Fisher
0153b5be22 feat: (web) allow table growth in emscripten module for passing C-style callback function pointers 2024-10-23 14:44:29 +08:00
Nick Fisher
479a9ead03 feat: (web) add capture() method and missing camera navigation controls 2024-10-23 14:44:29 +08:00
Nick Fisher
b207a48175 feat!: resize canvas on web 2024-10-23 14:44:29 +08:00
Nick Fisher
9e3311c6f9 feat!: update web/http dependencies 2024-10-23 14:44:29 +08:00
Nick Fisher
88257c7e03 feat: download WASM module directly on web (no need to embed in index.html any more) and expose updateViewportAndCameraProjection 2024-10-23 14:44:29 +08:00
Nick Fisher
a30e2f295f feat: add startOffset parameter to gltf playAnimation 2024-10-23 14:44:29 +08:00
Nick Fisher
96ad9dee18 chore(release): publish packages
- thermion_dart@0.1.3
 - thermion_flutter_ffi@0.1.0+12
 - thermion_flutter_web@0.0.3
 - thermion_flutter_platform_interface@0.1.0+11
 - thermion_flutter@0.1.1+13
2024-10-23 14:44:29 +08:00
Nick Fisher
8800195c2c chore: remove top-level .gitattributes 2024-10-23 14:41:21 +08:00
Nick Fisher
74b7c938a8 feat: set SCALE2:InputAction.ZOOM by default 2024-10-23 14:36:47 +08:00
Nick Fisher
3dcacfe631 doc: update camera_manipulation example project and docs 2024-10-23 14:36:26 +08:00
Nick Fisher
bf02406bf4 doc: add camera_manipulation example project 2024-10-23 14:11:48 +08:00
Nick Fisher
4371dbda3c feat: track zoom delta for DelegateInputHandler 2024-10-23 14:10:41 +08:00
Nick Fisher
c6640cef96 feat: set InputType.SCALE1 to ROTATE by default for DelegateInputHandler.fixedOrbit 2024-10-23 14:03:47 +08:00
Nick Fisher
11ca6972c6 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.9
 - thermion_flutter@0.2.1-dev.8
 - thermion_flutter_ffi@0.2.1-dev.8
 - thermion_flutter_web@0.1.1
 - thermion_flutter_platform_interface@0.2.1-dev.8
2024-10-23 13:46:45 +08:00
Nick Fisher
e235d22c7c chore: add quickstart .metadata 2024-10-23 13:46:00 +08:00
Nick Fisher
512d74568a chore: test cleanup 2024-10-23 16:43:17 +11:00
Nick Fisher
617c2ba578 chore: test cleanup 2024-10-23 16:43:02 +11:00
Nick Fisher
5476c6248c chore: test cleanup 2024-10-23 16:42:33 +11:00
Nick Fisher
916366bd10 doc: add BUILDING.md with Windows instructions 2024-10-23 16:42:09 +11:00
Nick Fisher
5e66893719 chore!: View.getCamera returns Future<Camera> 2024-10-23 16:41:51 +11:00
Nick Fisher
16964b4987 fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 16:40:55 +11:00
Nick Fisher
73846ffa9b feat: produce debug symbols on Windows 2024-10-23 16:40:30 +11:00
Nick Fisher
d5824239f5 fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 16:39:42 +11:00
Nick Fisher
c4270fc918 fix:move createUnlitMaterialInstance and createGeometry to render thread 2024-10-23 16:38:23 +11:00
Nick Fisher
a29a1605a7 chore: rename SceneManager* methods 2024-10-23 16:28:42 +11:00
Nick Fisher
22868a594f fix: dont calculate surface orientation for non-triangle geometry 2024-10-23 16:28:00 +11:00
Nick Fisher
aed64a27e8 chore: test cleanup 2024-10-23 15:11:33 +11:00
Nick Fisher
2b338a63ba cleanup tests 2024-10-23 15:08:14 +11:00
Nick Fisher
cda4027f83 fix!: (windows) add flushAndWait call to capture() to prevent stalling on Windows; use provided buffer as pixelBuffer rather than duplicate allocation 2024-10-23 15:02:28 +11:00
Nick Fisher
7814269e15 Create dart.yml 2024-10-23 14:35:44 +11:00
Nick Fisher
e2175db7cb fix!: add meshoptimizer lib on Windows 2024-10-23 14:16:03 +11:00
Nick Fisher
f1828b0c92 fix!: Dart-only release mode builds on Window 2024-10-23 14:15:41 +11:00
Nick Fisher
5cf9fab4f2 fix: fix all Windows warnings so apps will compile with /WX 2024-10-23 02:41:16 +11:00
Nick Fisher
c3764df4e2 feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 02:25:06 +11:00
Nick Fisher
a2a1033701 feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 02:24:49 +11:00
Nick Fisher
2536f7fc6f feat: (flutter) (windows) add DestroyRenderingSurface method 2024-10-23 02:24:34 +11:00
Nick Fisher
b6fe78b82c feat: (flutter) (windows) add Destroy() to BackingWindow 2024-10-23 02:23:54 +11:00
Nick Fisher
f8cddf0bce chore: cleanup thermion_flutter pubspec.yaml 2024-10-23 02:23:15 +11:00
Nick Fisher
2c7a32b47e chore: cleanup quickstart pubspec.yaml 2024-10-23 02:22:45 +11:00
Nick Fisher
e6dd4c6cfe chore: cleanup thermion_flutter_ffi pubspec 2024-10-23 02:22:23 +11:00
Nick Fisher
fb756fe9ba chore: rearrange thermion_flutter_ffi src dir 2024-10-23 02:22:04 +11:00
Nick Fisher
c21e890b48 chore: update quickstart for Windows 2024-10-23 02:21:00 +11:00
Nick Fisher
3720aa98df Merge branch 'develop' of https://github.com/nmfisher/thermion into develop 2024-10-23 01:24:44 +11:00
Nick Fisher
640aa7854a doc: add camera_manipulation 2024-10-22 22:23:51 +08:00
Nick Fisher
9689690730 feat: simplify FixedOrbitCameraRotationDelegate 2024-10-22 22:23:35 +08:00
Nick Fisher
a08620d7c9 rename gestureHandler to inputHandler 2024-10-22 22:23:13 +08:00
Nick Fisher
fdbdc8e3f3 chore: update quickstart 2024-10-22 22:22:30 +08:00
Nick Fisher
071d3b3023 doc: update README 2024-10-22 22:22:16 +08:00
Nick Fisher
f6b12d946a merge 2024-10-23 01:20:22 +11:00
Nick Fisher
11572b4939 fix: on resize, destroy swapchain if destroySwapChainOnResize is true 2024-10-22 14:11:02 +08:00
Nick Fisher
0c75b9a994 chore: update quickstart android project files 2024-10-22 14:10:22 +08:00
Nick Fisher
ed44aad076 chore: add flutter quickstart example, assets and update README 2024-10-22 13:11:48 +08:00
Nick Fisher
6dc00bff74 fix: add listener in ThermionFlutterTextureBackedPlatform to unset viewer on dispose 2024-10-22 12:48:26 +08:00
Nick Fisher
5f2407baeb fix: add listener in ThermionFlutterMethodChannelInterface to unset viewer on dispose 2024-10-22 12:48:05 +08:00
Nick Fisher
45f41f3cf7 fix: clean up destruction logic for FlutterPlatformTexture 2024-10-22 12:47:35 +08:00
Nick Fisher
0c29d61a35 fix: use internal Set for determining first ThermionTextureWidget to call requestFrame and cleanup destruction logic 2024-10-22 12:47:13 +08:00
Nick Fisher
58e549e3b3 chore: await future in ThermionFlutterPlugin 2024-10-22 12:46:36 +08:00
Nick Fisher
2ae4f6b338 chore: remove destroy() methods from FFIRenderTarget/FFISwapChain, implement destroyRenderTarget/destroySwapChain and clean up ThermionViewerFFI disposal 2024-10-22 12:46:18 +08:00
Nick Fisher
e28e41c1d9 chore: update stubbed methods 2024-10-22 12:45:30 +08:00
Nick Fisher
05dfe51260 chore: add destroySwapChain/destroyRenderTarget methods to Dart vieer and allow setting null renderTarget 2024-10-22 12:45:16 +08:00
Nick Fisher
ec6e94f4ca chore: remove destroy() methods from RenderTarget and SwapChain (these need to be managed by Viewer to handle instances where the viewer itself has been disposed 2024-10-22 12:44:46 +08:00
Nick Fisher
bdb332bd79 fix: set View render target to nullptr if Dart renderTarget is null 2024-10-22 12:44:00 +08:00
Nick Fisher
9295dfc7c1 docs: add quickstart to README 2024-10-22 12:43:31 +08:00
Nick Fisher
fb4bee4801 docs: remove Windows native_toolchain_c fixes from docs 2024-10-22 12:43:15 +08:00
Nick Fisher
8b7c2aa48d fix: set render target to null for each view and then destroy render targets when viewer disposed 2024-10-22 12:42:50 +08:00
Nick Fisher
9bec96f160 chore: rename Viewer_destroyOnRenderThread method and cleanup unused SwapChain parameter in render threa 2024-10-22 12:42:19 +08:00
Nick Fisher
cb517c907d chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.8
 - thermion_flutter_web@0.1.0+9
 - thermion_flutter@0.2.1-dev.7
 - thermion_flutter_platform_interface@0.2.1-dev.7
 - thermion_flutter_ffi@0.2.1-dev.7
2024-10-14 09:36:55 +08:00
Nick Fisher
a6f5e59cbb fix: move ThermionWin32.h to include 2024-10-14 09:36:28 +08:00
Nick Fisher
9420143a36 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.7
 - thermion_flutter_web@0.1.0+8
 - thermion_flutter@0.2.1-dev.6
 - thermion_flutter_platform_interface@0.2.1-dev.6
 - thermion_flutter_ffi@0.2.1-dev.6
2024-10-14 09:25:59 +08:00
Nick Fisher
eb8835b63a Merge pull request #69 from nmfisher/feature/multiple_swapchains
Support multiple views/widgets/swapchains
2024-10-14 12:05:21 +11:00
Nick Fisher
f9468db266 Windows embedder fixes 2024-10-14 11:23:56 +11:00
Nick Fisher
1135ba054c cleanup 2024-10-12 15:07:14 +11:00
Nick Fisher
8f7509a23f cleanup 2024-10-12 15:06:57 +11:00
Nick Fisher
cba9ee98ad (flutter) set view renderable on Windows 2024-10-12 14:56:04 +11:00
Nick Fisher
0ec0fef8f3 move standalone Windows file to extras 2024-10-12 14:55:41 +11:00
Nick Fisher
a348562f56 cleanup 2024-10-12 14:36:51 +11:00
Nick Fisher
392a606bbc don't call endFrame() if no views were rendered 2024-10-12 14:36:05 +11:00
Nick Fisher
440bed4485 add files to run standalone Windows 2024-10-12 14:34:42 +11:00
Nick Fisher
a321966e5b fix Windows build.dart to avoid native_assets fork; add implementations for ThermionFlutterWindows 2024-10-12 02:14:37 +11:00
Nick Fisher
f180c1018f mobile gesture handler 2024-10-11 15:37:03 +08:00
Nick Fisher
f267aa6dc6 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.6
 - thermion_flutter_web@0.1.0+7
 - thermion_flutter_platform_interface@0.2.1-dev.5
 - thermion_flutter@0.2.1-dev.5
 - thermion_flutter_ffi@0.2.1-dev.5
2024-10-10 20:58:19 +08:00
Nick Fisher
1c74e83c2c add native_assets_cli to dependencies 2024-10-10 20:57:50 +08:00
Nick Fisher
099a895eb6 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.5
 - thermion_flutter_platform_interface@0.2.1-dev.4
 - thermion_flutter_web@0.1.0+6
 - thermion_flutter@0.2.1-dev.4
 - thermion_flutter_ffi@0.2.1-dev.4
2024-10-10 20:49:40 +08:00
Nick Fisher
3b810f84da add animation tests 2024-10-10 20:49:08 +08:00
Nick Fisher
10f2c7d36b update cube test asset with morph targets 2024-10-10 20:49:01 +08:00
Nick Fisher
5b849638de update cube test asset with morph targets 2024-10-10 20:48:54 +08:00
Nick Fisher
857fd6f782 update tests 2024-10-10 20:48:41 +08:00
Nick Fisher
29edec63ab bump animation_tools_dart dependency 2024-10-10 20:47:45 +08:00
Nick Fisher
c6afc4756a bump animation_tools_dart dependency 2024-10-10 20:47:33 +08:00
Nick Fisher
365657cf88 add pick to view tests 2024-10-10 20:47:17 +08:00
Nick Fisher
5441dedcf4 add fall-through for InputAction.ZOOM for Third Person camera delegate 2024-10-10 20:47:00 +08:00
Nick Fisher
254b6d8af2 move zoom delta to InputAction.ZOOM for FreeFlight rotation delegate 2024-10-10 20:46:34 +08:00
Nick Fisher
1459aea5cf move zoom delta to InputAction.ZOOM for FixedOrbit rotation delegate 2024-10-10 20:46:16 +08:00
Nick Fisher
80d8525671 pass through sensitivity options in DelegateGestureHandler and implement cameraUpdated 2024-10-10 20:45:33 +08:00
Nick Fisher
389a165ed3 rearrange package folders 2024-10-10 20:44:55 +08:00
Nick Fisher
d8f309d21b add stubbed methods 2024-10-10 20:44:39 +08:00
Nick Fisher
ee983ddfaa add InputAction.ZOOM 2024-10-10 20:43:58 +08:00
Nick Fisher
c1cdd37e9d add DefaultPickDelegate 2024-10-10 20:43:31 +08:00
Nick Fisher
646f05933d use condition_variable for render thread requestFrame as well as tasks 2024-10-10 20:43:04 +08:00
Nick Fisher
3f854a7f27 rearrange utils dir 2024-10-10 14:59:11 +08:00
Nick Fisher
740dbea8bd add Axis class and rearrange utils dir 2024-10-10 14:58:50 +08:00
Nick Fisher
95a44936ac add option for async loading glTF resources 2024-10-10 14:58:09 +08:00
Nick Fisher
9deafc7371 return View when picking, use uint32_t for morphIndices 2024-10-10 08:42:16 +08:00
Nick Fisher
c1af7e374d set bloom enabled by default, but 0 strength 2024-10-10 08:39:48 +08:00
Nick Fisher
cd71db72be chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.4
 - thermion_flutter_web@0.1.0+5
 - thermion_flutter@0.2.1-dev.3
 - thermion_flutter_platform_interface@0.2.1-dev.3
 - thermion_flutter_ffi@0.2.1-dev.3
2024-10-02 17:59:56 +08:00
Nick Fisher
a9d90f966b chore: make pub.dev happy 2024-10-02 17:59:34 +08:00
Nick Fisher
1a323ca551 chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.3
 - thermion_flutter_web@0.1.0+4
 - thermion_flutter@0.2.1-dev.2
 - thermion_flutter_platform_interface@0.2.1-dev.2
 - thermion_flutter_ffi@0.2.1-dev.2
2024-10-02 17:58:24 +08:00
Nick Fisher
2d85e191bc chore: make pub.dev happy 2024-10-02 17:58:08 +08:00
Nick Fisher
1b971a859c chore(release): publish packages
- thermion_dart@0.2.1-dev.0.0.2
 - thermion_flutter_web@0.1.0+3
 - thermion_flutter_ffi@0.2.1-dev.1
 - thermion_flutter@0.2.1-dev.1
 - thermion_flutter_platform_interface@0.2.1-dev.1
2024-10-02 17:56:55 +08:00
Nick Fisher
78b697d1c2 chore: make pub.dev happy 2024-10-02 17:56:37 +08:00
Nick Fisher
3e1d785f58 Merge pull request #65 from nmfisher/develop
Documentation
2024-07-23 09:41:23 +08:00
Nick Fisher
7a362411b1 Merge pull request #56 from payl-ampa/patch-2
docs: correct link to windows page in quickstart page
2024-07-05 10:26:21 +10:00
Paul Ampadu
e95dfe4671 Update quickstart.mdx 2024-07-04 10:59:27 -07:00
Nick Fisher
e7b79bb6b9 fix: web/JS bool checks need to compare to int 2024-07-04 21:49:13 +08:00
Nick Fisher
59bc309f5b feat: allow passing assetPathPrefix to ThermionViewerWasm to account for Flutter build asset paths 2024-07-04 16:29:56 +08:00
Nick Fisher
d2fb40f317 fix: shadow JS<->WASM bridge methods 2024-07-04 16:29:08 +08:00
1684 changed files with 300074 additions and 83720 deletions

392
.gitattributes vendored
View File

@@ -1,392 +0,0 @@
thermion_dart/native/lib/macos/debug/libbackendtest_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libgeometry_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libsdl2.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmathio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmatdbg_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libspirv-cross-msl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libtinyexr.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV-Tools.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libimageio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libOGLCompiler.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV-Tools-diff.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilamat_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmathio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libassimp.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmatlang.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmatdbg_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/swift/ThermionTexture.h filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilamat_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbasis_encoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libimgui.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libimageio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbackend_test.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgetopt.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgtest.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmatdbg_resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libpng.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmatdbg_resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libsuzanne-resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilamat_lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgeometry_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmath.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libpng16.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbenchmark_main.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbluegl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/swift/build.sh filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libbluegl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libpng.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libglslang.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbenchmark.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgltf-demo-resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV-Tools-lint.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilagui.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libsample-resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libOSDependent.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libspirv-cross-glsl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libgltfio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libpng.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libgltfio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libmatdbg.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libspirv-cross-core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilamat_lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilagui.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmath.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/swift/libdartfilamenttexture.dylib filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilamat_lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV-Tools-link.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libz.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libtinyexr.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmatdbg.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/swift filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libtinyexr.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libSPIRV-Tools-reduce.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/debug/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/ios/libimageio.a filter=lfs diff=lfs merge=lfs -text
materials/Makefile filter=lfs diff=lfs merge=lfs -text
materials/gizmo.filamat filter=lfs diff=lfs merge=lfs -text
materials/image.filamat filter=lfs diff=lfs merge=lfs -text
materials/unlit_opaque.mat filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64 filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86 filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/arm64-v8a/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/armeabi-v7a/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86_64/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/android/x86/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_flutter_federated/thermion_flutter/example/web/thermion_dart.wasm filter=lfs diff=lfs merge=lfs -text
thermion_flutter_federated/thermion_flutter/example/web/main.unopt.wasm filter=lfs diff=lfs merge=lfs -text
thermion_flutter_federated/thermion_flutter/example/web/main.wasm filter=lfs diff=lfs merge=lfs -text
thermion_flutter_federated/thermion_flutter/example/web/thermion_dart.js filter=lfs diff=lfs merge=lfs -text
thermion_flutter_federated/thermion_flutter/example/web/thermion_dart.worker.js filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmatdbg_resources.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libuberarchive.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libbasis_transcoder.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libcivetweb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libgltfio_core.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libimage.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libviewer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libvkshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilagui.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilamat_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libshaders.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libtinyexr.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmeshoptimizer.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libcamutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilamat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libibl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmikktspace.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libuberzlib.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libutils.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libzstd.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilaflat.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilamat_lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libgltfio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libimageio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libgeometry_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libbluevk.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libdracodec.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilabridge.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilameshio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libktxreader.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmatdbg.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmathio.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libsmol-v.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libbackend.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libbluegl.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilament.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libgeometry.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libstb.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libpng.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libfilament-iblprefilter.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libibl-lite.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmatdbg_combined.a filter=lfs diff=lfs merge=lfs -text
thermion_dart/native/lib/macos/release/libmath.a filter=lfs diff=lfs merge=lfs -text
examples/assets/default_env/default_env_skybox.ktx filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/shapes.gltf filter=lfs diff=lfs merge=lfs -text
examples/assets/3.glb filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/Boden_baseColor.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet.bin filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet.gltf filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_occlusionRoughnessMetallic1.png filter=lfs diff=lfs merge=lfs -text
examples/assets/default_env filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/Boden_metallicRoughness.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_baseColor3.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_occlusionRoughnessMetallic4.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/README.md filter=lfs diff=lfs merge=lfs -text
examples/assets/default_env/default_env_ibl.ktx filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/shapes.blend filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/assets/2.glb filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_normal.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_normal1.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_occlusionRoughnessMetallic3.png filter=lfs diff=lfs merge=lfs -text
examples/assets/background.ktx filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/scene.bin filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_baseColor4.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_normal4.png filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/shapes.blend1 filter=lfs diff=lfs merge=lfs -text
examples/assets/solidcolor.mat filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/body_baseColor.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/body_emissive.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_occlusionRoughnessMetallic.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_occlusionRoughnessMetallic2.png filter=lfs diff=lfs merge=lfs -text
examples/assets/solidcolor.filamat filter=lfs diff=lfs merge=lfs -text
examples/assets/1.glb filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/scene.gltf filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_normal2.png filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/texture_test.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_normal3.png filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/Boden_normal.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/body_normal.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/material_metallicRoughness.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_baseColor.png filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_baseColor2.png filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes filter=lfs diff=lfs merge=lfs -text
examples/assets/shapes/shapes.bin filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/body_metallicRoughness.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/material_baseColor.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/BusterDrone/textures/material_normal.jpg filter=lfs diff=lfs merge=lfs -text
examples/assets/FlightHelmet/FlightHelmet_baseColor1.png filter=lfs diff=lfs merge=lfs -text
examples/assets/background.png filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/assets/shapes/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/assets/debug/flutter_assets/assets/2.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/assets/debug/flutter_assets/assets/3.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/example.app/Contents/Frameworks/App.framework/Versions/A/Resources/flutter_assets/assets/shapes/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/assets/debug/flutter_assets/assets/1.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/flutter/debug/flutter_assets/assets/shapes/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/example.app/Contents/Frameworks/App.framework/Versions/A/Resources/flutter_assets/assets/1.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/example.app/Contents/Frameworks/App.framework/Versions/A/Resources/flutter_assets/assets/3.glb filter=lfs diff=lfs merge=lfs -text
thermion_dart/test/assets/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/flutter/debug/flutter_assets/assets/1.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/assets/1.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/flutter/debug/flutter_assets/assets/3.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/assets/2.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/App.framework/Versions/A/Resources/flutter_assets/assets/3.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/macos/Build/Products/Debug/example.app/Contents/Frameworks/App.framework/Versions/A/Resources/flutter_assets/assets/2.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/assets/debug/flutter_assets/assets/shapes/shapes.glb filter=lfs diff=lfs merge=lfs -text
examples/flutter/example/build/app/intermediates/flutter/debug/flutter_assets/assets/2.glb filter=lfs diff=lfs merge=lfs -text

View File

@@ -0,0 +1,29 @@
name: 'Setup Build Environment'
description: 'Set up LLVM, MESA, and Flutter for builds'
runs:
using: 'composite'
steps:
- uses: actions/checkout@v4
- name: Setup LLVM
uses: KyleMayes/install-llvm-action@v1
with:
version: "16"
- name: Add LLVM to PATH
shell: bash
run: |
echo "${{ github.workspace }}/llvm/bin" >> $GITHUB_PATH
echo "LD_LIBRARY_PATH=${{ github.workspace }}/llvm/lib/x86_64-unknown-linux-gnu/" >> $GITHUB_ENV
- name: Verify installation
shell: bash
run: clang --version
- name: Install MESA
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y xvfb
sudo apt-get install -y libosmesa6-dev
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: master
architecture: X64

183
.github/workflows/dart.yml vendored Normal file
View File

@@ -0,0 +1,183 @@
name: Dart
on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]
jobs:
compile-web-wasm:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.25.0' # or 'latest'
- name: Setup Emscripten
uses: mymindstorm/setup-emsdk@v14
with:
version: 'latest'
- name: Compile web
run: make wasm
dart-tests:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-build-env
- run: |
cd thermion_dart
dart pub get
xvfb-run dart --enable-experiment=native-assets test \
test/asset_tests.dart \
test/instancing_tests.dart \
test/light_tests.dart \
test/entity_tests.dart \
test/geometry_tests.dart \
test/view_tests.dart \
test/postprocessing_tests.dart \
test/scene_tests.dart \
test/picking_tests.dart \
--concurrency=1
#test/overlay_tests.dart \
- name: Zip output
run: zip -r output.zip ./thermion_dart/test/output
- name: Upload test output
uses: actions/upload-artifact@v4
with:
name: golden-images-${{ github.sha }}
path: output.zip
- name: Download golden images from previous run
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh run download 15990504915 \
--name golden-images-4b9870244a529bf086280331d38c55e294425b4f \
--dir ./thermion_dart/test/golden-downloads
- name: Unzip golden images
run: |
cd thermion_dart/test/golden-downloads && unzip output.zip
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install Pillow numpy
- name: Compare golden images
run: cd thermion_dart/test && python compare_goldens.py
- name: Upload logs
if: failure() || steps.build.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: build-logs
path: |
${{ github.workspace }}/thermion_dart/.dart_tool/thermion_dart/log/build.log
retention-days: 5
flutter_examples:
name: flutter_examples
runs-on: macos-latest
defaults:
run:
working-directory: examples/flutter
steps:
- uses: actions/checkout@v4
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: master
architecture: ARM64
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Install Android SDK
uses: android-actions/setup-android@v3
with:
api-level: 34
build-tools: 34.0.0
cmake-version: 3.22.1
ndk-version: 25.1.893739
- name: Accept Android SDK licenses
run: |
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- run: cd quickstart && flutter pub get && flutter build macos
# - run: cd quickstart && flutter pub get && flutter build ios
- run: cd quickstart && flutter pub get && flutter build appbundle
- run: cd quickstart && flutter build web
- run: cd picking && flutter pub get && flutter build macos
# - run: cd picking && flutter pub get && flutter build ios
- run: cd picking && flutter pub get && flutter build appbundle
- run: cd picking && flutter build web
- name: Upload logs
if: failure() || steps.build.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: build-logs
path: |
# D:\a\thermion\thermion\thermion_dart\.dart_tool\thermion_dart\log\build.log
/Users/runner/work/thermion/thermion/thermion_dart/.dart_tool/thermion_dart/log/build.log
retention-days: 5
# thermion_dart:
# name: thermion_dart
# runs-on: macos-latest
# defaults:
# run:
# working-directory: thermion_dart
# steps:
# - uses: actions/checkout@v4
# - name: Set up Flutter
# uses: subosito/flutter-action@v2
# with:
# channel: master
# - run: flutter pub get
# - run: dart --enable-experiment=native-assets test -j1 test/light_tests.dart
# thermion_flutter:
# name: thermion_flutter
# runs-on: macos-13
# defaults:
# run:
# working-directory: thermion_flutter/thermion_flutter # Adjust this path
# steps:
# - uses: actions/checkout@v4
# - uses: dart-lang/setup-dart@9a04e6d73cca37bd455e0608d7e5092f881fd603
# - name: Install dependencies
# run: dart pub get
#
#
##- uses: actions/checkout@v4
#- name: Setup LLVM
# uses: KyleMayes/install-llvm-action@v1
# with:
# version: "16"
#- name: Add LLVM to PATH
# run: |
# echo "${{ github.workspace }}/llvm/bin" >> $GITHUB_PATH
# echo "LD_LIBRARY_PATH=${{ github.workspace }}/llvm/lib/x86_64-unknown-linux-gnu/" >> $GITHUB_ENV
#- name: Verify installation
# run: clang --version
#- name: Install MESA
# run: |
# sudo apt-get update
# sudo apt-get install -y xvfb
# sudo apt-get install -y libosmesa6-dev
# #sudo apt-get -y build-dep mesa
# #git clone https://gitlab.freedesktop.org/mesa/mesa.git
# #cd mesa
# #git checkout mesa-23.2.1
# #mkdir -p out
# #meson setup builddir/ -Dprefix="$(pwd)/out" -Dosmesa=true -Dglx=xlib -Dgallium-drivers=swrast -Dvulkan-drivers=swrast
# #meson install -C builddir/
#- name: Install Vulkan SDK and dependencies
# run: |
# wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
# sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
# sudo apt-get update
# sudo apt-get install -y vulkan-sdk
#- name: Set up Flutter
# uses: subosito/flutter-action@v2
# with:
# channel: master
# architecture: X64

2
.gitignore vendored
View File

@@ -1,5 +1,4 @@
**/*/.cxx
**/.github
**/.idea
.dart_tool
**/.dart_tool
@@ -10,3 +9,4 @@
pubspec_overrides.yaml
/pubspec.lock
*.iml
**/*/*.filamat

File diff suppressed because it is too large Load Diff

76
Dockerfile Normal file
View File

@@ -0,0 +1,76 @@
FROM ubuntu:22.04
# Set non-interactive mode for apt
ENV DEBIAN_FRONTEND=noninteractive
# Install dependencies and add LLVM repository
RUN apt-get update && apt-get install -y \
git \
build-essential \
cmake \
ninja-build \
libgl1-mesa-dev \
libc++-dev \
libc++abi-dev \
libsdl2-dev \
libxi-dev \
libtbb-dev \
libassimp-dev \
python3 \
python3-pip \
curl \
wget \
software-properties-common \
lsb-release \
&& rm -rf /var/lib/apt/lists/*
# Add LLVM repository and install Clang 16
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
&& add-apt-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \
&& apt-get update \
&& apt-get install -y \
clang-16 \
clang++-16 \
libc++-16-dev \
libc++abi-16-dev \
&& rm -rf /var/lib/apt/lists/*
# Set Clang 16 as default
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-16 100 \
&& update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-16 100
# Set environment variables for Clang
ENV CC=clang-16
ENV CXX=clang++-16
# Set working directory
WORKDIR /opt
# Clone the filament repository
RUN git clone https://github.com/google/filament.git
# Change to filament directory
WORKDIR /opt/filament
# Checkout the specific version
RUN git checkout v1.58.0
# Add CMAKE_POSITION_INDEPENDENT_CODE setting after project() line
RUN sed -i '/^project(/a set(CMAKE_POSITION_INDEPENDENT_CODE ON)\nadd_compile_definitions(GLTFIO_USE_FILESYSTEM=0)' CMakeLists.txt
RUN sed -i -e '/^#define GLTFIO_USE_FILESYSTEM 1$/i\
#ifndef GLTFIO_USE_FILESYSTEM' -e '/^#define GLTFIO_USE_FILESYSTEM 1$/a\
#endif' libs/gltfio/src/FFilamentAsset.h
# Make build script executable
RUN chmod +x build.sh
# Run the build commands
RUN ./build.sh -l -i -f -p desktop release
RUN ./build.sh -l -i -f -p desktop release zstd
RUN ./build.sh -l -i -f -p desktop release tinyexr
RUN ./build.sh -l -i -f -p desktop release imageio
RUN zip -r filament-v1.58.0-linux-release.zip /opt/filament/out/release/filament/lib/x86_64/*.a /opt/filament/out/cmake-release/third_party/tinyexr/tnt/libtinyexr.a /opt/filament/out/cmake-release/libs/imageio/libimageio.a
# Set the working directory to the build output
WORKDIR /opt/filament/out/release
CMD ["/bin/bash"]

View File

@@ -1,36 +1,59 @@
dart-web:
cd thermion_dart/native/web; mkdir -p build && cd build && emcmake cmake .. && emmake make
dart-web-clean:
wasm:
@if [ ! -f thermion_dart/native/web/lib/release/filament-v1.58.0-web-release.zip ]; then \
echo "Downloading filament-v1.58.0-web-release.zip..."; \
mkdir -p thermion_dart/native/web/lib/release; \
curl -L -o thermion_dart/native/web/lib/release/filament-v1.58.0-web-release.zip \
https://pub-c8b6266320924116aaddce03b5313c0a.r2.dev/filament-v1.58.0-web-release.zip; \
echo "Extracting filament-v1.58.0-web-release.zip..."; \
cd thermion_dart/native/web/lib/release && \
unzip filament-v1.58.0-web-release.zip; \
fi
cd thermion_dart/native/web && \
mkdir -p build && \
cd build && \
emcmake cmake .. && \
emmake make
wasm-clean:
cd thermion_dart/native/web && rm -rf build
dart-wasm-cli-example: dart-web-clean dart-web
cd thermion_dart/examples/cli_wasm/bin && dart compile wasm example_cli.dart && node main.js
dart-web-example: dart-web
cp thermion_dart/native/web/build/build/out/thermion_dart* examples/web_wasm/bin
cd thermion_dart/examples/web_wasm/bin && dart compile wasm example_web.dart
wasm-example-web:
cd examples/dart/js_wasm
mkdir -p build
dart compile js web/example.dart -o build/example.dart.js
flutter-example-web: dart-web-clean dart-web
cd thermion_flutter_federated/thermion_flutter/example/web && dart compile wasm main.dart && cd .. && flutter build web --wasm --profile
flutter-example-macos:
cd thermion_flutter_federated/thermion_flutter/example/web && flutter run -d macos
swift-bindings:
swiftc -c thermion_flutter/thermion_flutter/macos/Classes/ThermionTexture.swift -module-name swift_module -emit-objc-header-path thermion_dart/native/include/generated/ThermionTextureSwiftObjCAPI.h -emit-library -o thermion_dart/test/libThermionTextureSwift.dylib
swiftc -c thermion_dart/native/macos/ThermionTexture.swift -module-name swift_module -emit-objc-header-path thermion_dart/native/include/generated/ThermionTextureSwiftObjCAPI.h -emit-library -o thermion_dart/test/generated/libThermionTextureSwift.dylib
cd thermion_dart/ && dart --enable-experiment=native-assets run ffigen --config ffigen/swift.yaml
bindings:
cd thermion_dart/ && dart --enable-experiment=native-assets run ffigen --config ffigen/native.yaml
shared:
cd thermion_dart/native && make
# We compile a small set of custom materials for various helpers (background image, gizmo, etc)
# You must specify the `FILAMENT_PATH` environment variable, either the path /out/release
# eg: FILAMENT_PATH=/path/to/filament/out/release/bin make materials
#
materials: FORCE
ifndef FILAMENT_PATH
@echo "FILAMENT_PATH is not set"
else
@echo "Using Filament build from ${FILAMENT_PATH}"
@for material in unlit image gizmo grid; do \
${FILAMENT_PATH}/matc -a opengl -a metal -o materials/$$material.filamat materials/$$material.mat; \
$(FILAMENT_PATH)/resgen -c -p $$material -x thermion_dart/native/include/material/ materials/$$material.filamat; \
echo '#include "'$$material'.h"' | cat - thermion_dart/native/include/material/$$material.c > thermion_dart/native/include/material/$$material.c.new; \
mv thermion_dart/native/include/material/$$material.c.new thermion_dart/native/include/material/$$material.c; \
done
./materials/build.sh
endif
#rm materials/*.filamat
resources: FORCE
ifndef FILAMENT_PATH
@echo "FILAMENT_PATH is not set"
else
@echo "Using Filament build from ${FILAMENT_PATH}"
@for gizmo in translation rotation; do \
$(FILAMENT_PATH)/resgen -c -p $${gizmo}_gizmo_glb -x thermion_dart/native/include/resources assets/$${gizmo}_gizmo.glb || exit 1; \
echo '#include "'$${gizmo}_gizmo_glb.h'"' | cat - thermion_dart/native/include/resources/$${gizmo}_gizmo_glb.c > thermion_dart/native/include/resources/$${gizmo}_gizmo_glb.c.new; \
mv thermion_dart/native/include/resources/$${gizmo}_gizmo_glb.c.new thermion_dart/native/include/resources/$${gizmo}_gizmo_glb.c; \
done
endif
FORCE: ;

View File

@@ -3,7 +3,7 @@
<p align="center">
<a href="https://thermion.dev/quickstart">Quickstart (Flutter)</a> •
<a href="https://thermion.dev/">Documentation</a> •
<a href="https://thermion.dev/examples">Showcase</a> •
<a href="https://thermion.dev/showcase">Showcase</a> •
<a href="https://dartpad.thermion.dev/">Playground</a> •
<a href="https://discord.gg/h2VdDK3EAQ">Discord</a>
</p>
@@ -15,6 +15,8 @@
<a href="https://discord.gg/h2VdDK3EAQ"><img src="https://img.shields.io/discord/993167615587520602?logo=discord&logoColor=fff&labelColor=333940" alt="discord"></a>
<a href="https://github.com/nmfisher/thermion"><img src="https://img.shields.io/github/contributors/nmfisher/flutter_filament?logo=github&labelColor=333940" alt="contributors"></a>
https://github.com/user-attachments/assets/b0c07b5a-6156-4e42-a09b-5f9bd85fbf32
### Features
- Supports iOS (arm64), MacOS (arm64/x64), Android (arm64), Windows (x64) (>= 10), Web/WASM
@@ -22,6 +24,47 @@
- camera/entity manipulation with mouse (desktop) and gestures (mobile)
- skinning + morph animations
Uses the Filament PBR engine (currently v1.56.4).
### Quickstart (Flutter)
From the command line:
```bash
flutter channel master
flutter upgrade
flutter config --enable-native-assets
```
In your Flutter app:
```dart
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: [
Positioned.fill(
child: ViewerWidget(
assetPath: "assets/cube.glb",
skyboxPath: "assets/default_env_skybox.ktx",
iblPath: "assets/default_env_ibl.ktx",
transformToUnitCube: true,
initialCameraPosition: Vector3(0, 0, 6),
background: Colors.blue,
manipulatorType: ManipulatorType.ORBIT,
onViewerAvailable: (viewer) async {
await Future.delayed(const Duration(seconds: 5));
await viewer.removeSkybox();
},
initial: Container(
color: Colors.red,
),
))]));
}
```
> the first time you build an app that consumes this package, the Dart native-assets build system will download static binaries from Cloudflare. This may take a few minutes (depending on which platform you are compiling for). These will be cached, so subsequent builds will be much faster.
### Sponsors, Contributors & Acknowledgments
Thermion uses the [Filament](https://github.com/google/filament) Physically Based Rendering engine under the hood.
@@ -35,4 +78,5 @@ Thank you to the following people:
- @daverin for MacOS library contributions
- @LukasPoque for CI/refactoring work
- @alexmercerind for his work on integrating ANGLE textures on Flutter Windows
- @BrutalCoding for documentation fixes

BIN
assets/rotation_gizmo.glb Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -7,14 +7,21 @@
"Getting Started",
[
["Overview", "/"],
["Quick Start", "/quickstart"]
["Getting Started", "/getting_started"],
["Quick Start", "/quickstart"],
["Viewer", "/viewer"],
["Camera Manipulation", "/camera_manipulation"]
]
],
["Misc.", [
["Debugging", "/debugging"],
["Playground", "https://dartpad.thermion.dev"],
["Showcase", "/showcase"],
["Windows", "/windows"],
["Android", "/android"],
["iOS", "/ios"],
["Web", "/web"],
["Linux", "/linux"],
["Contributing", "/contributing"],
["Discord", "https://discord.gg/h2VdDK3EAQ"]
]]

View File

@@ -1,12 +1,14 @@
## Android
In release mode, you must add the following to your `app/build.gradle`:
### Min SDK version
```
buildTypes {
release {
shrinkResources false
minifyEnabled false
}
Thermion requires Android SDK version 22, so change your `app/android/build.gradle` to match this version or higher
```groovy
defaultConfig {
...
minSdk = 22
...
}
```

27
docs/debugging.mdx Normal file
View File

@@ -0,0 +1,27 @@
# Debugging
If something is crashing or not working as expected, you can enable verbose logging and/or debug builds (particularly useful for debugging with lldb or getting legible stack traces):
Add a `hooks` section to your app's `pubspec.yaml`, e.g.
```
name: example_cli
description: A sample command-line application.
version: 1.0.0
environment:
sdk: ^3.3.0
# Add the below
hooks:
user_defines:
thermion_dart:
mode: debug
tracing: enabled
```
After changing the `hooks` section, make sure you run `flutter clean` to propagate the changes correctly.
> [!CAUTION]
> Debug builds won't work for Android. This is a known upstream issue with Filament.
Unless `mode: debug` is specified in your `pubspec.yaml`, Thermion will use release builds under the hood, even if your app is compiled/runing in debug mode.

40
docs/getting_started.mdx Normal file
View File

@@ -0,0 +1,40 @@
## Getting Started
Thermion currently requires the Flutter `master` channel with the `native-assets` experiment enabled.
1. Switch to Flutter master channel, upgrade Flutter, create a new project, then add `thermion_flutter` as a dependency
```bash
$ flutter channel master
$ flutter upgrade
$ flutter config --enable-native-assets
$ cd your_flutter_project
$ flutter pub add thermion_flutter
```
2. If running on iOS or MacOS, change the minimum deployment target to OSX 13
<Accordion title="Click to open iOS/MacOS instructions">
Make sure the `platform` entry refers to `13.0` in your Podfile.
In `macos/Podfile` (for macOS):
```
platform :osx, '13.0'
```
In `ios/Podfile`, (for iOS):
```
platform :ios, '13.0'
```
Then open XCode:
```
open macos/Runner.xcworkspace
```
and change the minimum deployment target to 13.0:
![XCode screenshot](images/macos_min_deployment.png)
</Accordion>

View File

@@ -16,7 +16,7 @@ Thermion is divided into two packages:
With this structure, the Flutter-specific components are not coupled to the Dart components, meaning Thermion can be used for rendering in both Flutter and non-Flutter applications.
For example, Thermion ships with examples for rendering with Dart only (no Flutter) with a CLI/headless application on MacOS, and with a Javascript/WASM/HTML applicaiton in browsers.
For example, Thermion ships with examples for rendering with Dart only (no Flutter) with a CLI/headless application on MacOS, and with a Javascript/WASM/HTML application in browsers.
`thermion_flutter` exports `thermion_dart`, so if you are working with a Flutter application, you will only need to import `thermion_fluttter`.

55
docs/ios.mdx Normal file
View File

@@ -0,0 +1,55 @@
## iOS
### Min iOS version
Thermion requires a minimum iOS version of 13.0. When building a Flutter application, ensure your application's `ios/Podfile` contains the following:
```ruby
platform :ios, '13.0'
```
and in ios/Info.plist:
```xml
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
```
When submitting to the App Store, you may encounter an error saying `thermion_dart.framework does not supported the minimum deployment target in Info.plist`.
This is because Flutter hardcodes a deployment target of iOS 12.0 when invoking the native assets build, which conflicts with actual requirement.
After running `flutter build ios` (but before archiving the build and submitting to the App Store), run the following script to replace the `MinimumOSVersion`:
```
#!/bin/zsh
# Array of directories containing Info.plist files
directories=(
"./build/ios/iphoneos/Runner.app/Frameworks/thermion_dart.framework"
"./build/ios/Release-iphoneos/Runner.app/Frameworks/thermion_dart.framework"
"./build/native_assets/ios/thermion_dart.framework"
)
# Loop through each directory
for dir in "${directories[@]}"; do
plist_path="$dir/Info.plist"
# Check if Info.plist exists in the directory
if [[ -f "$plist_path" ]]; then
echo "Processing: $plist_path"
# Use PlistBuddy to change the MinimumOSVersion
/usr/libexec/PlistBuddy -c "Set :MinimumOSVersion 13.0" "$plist_path" 2>/dev/null
if [[ $? -eq 0 ]]; then
echo "✓ Successfully updated version to 13.0"
else
echo "✗ Failed to update version in $plist_path"
fi
else
echo "✗ Info.plist not found in $dir"
fi
done
```

10
docs/linux.mdx Normal file
View File

@@ -0,0 +1,10 @@
## Linux support
Currently, only the Dart package (`thermion_dart`) will work on Linux (primarily for the automated build/testing pipeline).
Filament has been built for Ubuntu 22.04; other distributions may work, but YMMV.
The Flutter package (`thermion_flutter`) won't work; it's missing the platform glue code necessary to set up the render target. Support will eventually be added, but there is currently no estimated timeline.
Contributions are welcome and it's actually not a lot of work. Join the Discord if you want to help out.

View File

@@ -1,221 +1,197 @@
## Quickstart (Flutter)
# Quick Start
> You can find the entire project below in the [flutter/quickstart](https://github.com/nmfisher/thermion_examples/tree/master/flutter/quickstart) folder of the `thermion_examples` repository.
If all you need is a quick and easy route to rendering a single 3D model in your Flutter application, start with `ViewerWidget`.
1. Switch to Flutter master channel, upgrade Flutter, create a new project, then add `thermion_flutter` as a dependency
This is a simplified, Flutter-only wrapper around the underlying 3D rendering API with sane defaults for most people.
```bash
$ flutter channel master
$ flutter upgrade
$ flutter config --enable-native-assets
$ flutter create thermion_sample_project && cd thermion_sample_project
$ flutter pub add thermion_flutter
```
`ViewerWidget` handles all the setup and configuration of the underlying Thermion API, including:
- Loading 3D models (glTF assets)
- Configuring skyboxes and image-based lighting
- Setting up camera positions and manipulators
- Managing the rendering lifecycle
2. If running on iOS or MacOS, change the minimum deployment target to OSX 13
## Setup
<Accordion title="Click to open iOS/MacOS instructions">
Follow the steps listed in [Getting Started](./getting_started) to configure your Flutter installation and project.
Make sure the `platform` entry refers to `13.0` in your Podfile.
In `macos/Podfile` (for macOS):
```
platform :osx, '13.0'
```
In `ios/Podfile`, (for iOS):
```
platform :ios, '13.0'
```
Then open XCode:
```
open macos/Runner.xcworkspace
```
and change the minimum deployment target to 13.0:
![XCode screenshot](images/macos_min_deployment.png)
</Accordion>
<Accordion title="Click to open Windows instructions">
See the [/windows](/windows) page for steps needed to build on Windows.
</Accordion>
2. Add a folder containing your assets (glTF model + skybox ktx) to your `pubspec.yaml` asset list
```yaml
...
flutter
uses-material-design: true
assets:
- assets/
```
3. Create an instance of `ThermionFlutterPlugin` in your app.
## Basic Usage
```dart
import 'package:flutter/material.dart';
import 'package:thermion_flutter/thermion_flutter.dart';
import 'path_to_your_viewer_widget.dart';
class _MyAppState extends State<MyApp> {
  late ThermionFlutterPlugin _thermionFlutterPlugin; 
late Future<ThermionViewer> _thermionViewer;
  void initState() {   
_thermionFlutterPlugin = ThermionFlutterPlugin();   
_thermionViewer = _thermionFlutterPlugin.createViewer(); 
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ViewerWidget(
assetPath: 'assets/my_model.glb',
initialCameraPosition: Vector3(0, 0, 5),
manipulatorType: ManipulatorType.ORBIT,
),
),
);
}
}
```
## Properties
4. Add a `ThermionWidget` to your widget hierarchy
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `initial` | `Widget` | Red decorated box | Widget to display while the viewer is loading |
| `initialCameraPosition` | `Vector3` | `Vector3(0, 0, 5)` | The starting position for the camera (looking towards origin) |
| `showFpsCounter` | `bool` | `false` | Whether to show an FPS counter overlay |
| `assetPath` | `String?` | `null` | Path to the glTF asset to load |
| `skyboxPath` | `String?` | `null` | Path to a KTX skybox image |
| `iblPath` | `String?` | `null` | Path to a KTX image for image-based lighting |
| `directLightType` | `LightType?` | `null` | Type of direct light to add to the scene |
| `transformToUnitCube` | `bool` | `true` | If true, rescales the model to fit within a 1x1x1 cube |
| `postProcessing` | `bool` | `true` | Enables ACES tone mapping and basic anti-aliasing |
| `background` | `Color?` | `null` | Background color (not visible when skybox is provided) |
| `destroyEngineOnUnload` | `bool` | `false` | If true, disposes the engine when widget is disposed |
| `manipulatorType` | `ManipulatorType` | `ORBIT` | Type of camera control to use |
| `onViewerAvailable` | `Future Function(ThermionViewer)?` | `null` | Callback when viewer is ready |
## Camera Manipulators
`ViewerWidget` supports three different camera manipulation modes:
- `ManipulatorType.NONE`: No camera controls, static view
- `ManipulatorType.ORBIT`: Orbit controls (pinch to zoom, swipe to rotate)
- `ManipulatorType.FREE_FLIGHT`: Free flight controls for unrestricted movement
Example:
```dart
ViewerWidget(
assetPath: 'assets/model.glb',
manipulatorType: ManipulatorType.FREE_FLIGHT,
)
```
class _MyAppState extends State<MyApp> {
## Lighting
ThermionViewer? _thermionViewer;
void initState() {   
_thermionFlutterPlugin.createViewer().then((viewer) {
You can set up lighting in multiple ways:
### Image-Based Lighting
```dart
ViewerWidget(
assetPath: 'assets/model.glb',
iblPath: 'assets/environment.ktx',
)
```
### Direct Light
```dart
ViewerWidget(
assetPath: 'assets/model.glb',
directLightType: LightType.SUN,
)
```
## Advanced Usage
### Accessing the Viewer
You can get access to the underlying `ThermionViewer` object for more advanced control:
```dart
ViewerWidget(
assetPath: 'assets/model.glb',
onViewerAvailable: (viewer) async {
// Now you can use the viewer directly
final camera = await viewer.getActiveCamera();
await camera.lookAt(Vector3(0, 1, 5));
// Add custom lights, manipulate materials, etc.
},
)
```
### Changing Manipulator at Runtime
The `manipulatorType` is the only property that can be changed after the widget is created:
```dart
class _MyWidgetState extends State<MyWidget> {
ManipulatorType _manipulatorType = ManipulatorType.ORBIT;
@override
Widget build(BuildContext context) {
return Column(
children: [
Expanded(
child: ViewerWidget(
assetPath: 'assets/model.glb',
manipulatorType: _manipulatorType,
),
),
Row(
children: [
ElevatedButton(
onPressed: () {
setState(() {
_thermionViewer = viewer;
_manipulatorType = ManipulatorType.ORBIT;
});
},
child: Text('Orbit'),
),
ElevatedButton(
onPressed: () {
setState(() {
_manipulatorType = ManipulatorType.FREE_FLIGHT;
});
}   
Widget build(BuildContext context) {
return Stack(children:[
if(_thermionViewer != null)
    Positioned.fill(
child:ThermionWidget(
plugin:_thermionViewer!
        ) 
    )
    ]); 
}
}
```
4. Add a button to load the model when pressed
```dart
...
class _MyAppState extends State<MyApp> {
...
bool _loaded = false;
Widget build(BuildContext context) {
return Stack(children:[
    if(_thermionViewer != null)
    Positioned.fill(
child:ThermionWidget(
plugin:_thermionViewer!
        ) 
    ),
if (!_loaded)
Center(
child: ElevatedButton(
child: const Text("Load"),
onPressed: () async {
// TODO
_loaded = true;
setState(() {});
}))
    ]); 
}}
```
5. When the button is pressed, load a skybox, lighting and the glb asset
You will need to import the `dart:math` and `package:vector_math` libraries.
```dart
import 'package:vector_math/vector_math_64.dart' as v;
import 'dart:math';
...
class _MyAppState extends State<MyApp> {
...
Widget build(BuildContext context) {
return Stack(children:[
...
if(!_loaded)
Center(
child: ElevatedButton(
child: const Text("Load"),
onPressed: () async {
var viewer = await _thermionViewer;
await viewer.loadIbl("assets/default_env_ibl.ktx");
await viewer.loadSkybox("assets/default_env_skybox.ktx");
await viewer.loadGlb("assets/cube.glb");
await viewer.setCameraPosition(0, 1, 10);
await viewer.setCameraRotation(v.Quaternion.axisAngle(
v.Vector3(1, 0, 0), -30 / 180 * pi) *
v.Quaternion.axisAngle(v.Vector3(0, 1, 0), 15 / 180 * pi));
await viewer.addLight(
LightType.SUN, 7500, 50000, 0, 0, 0, 1, -1, -1);
await viewer.setRendering(true);
_loaded = true;
setState(() {});
}
)
)
]);
},
child: Text('Free Flight'),
),
],
),
],
);
}
}
```
Here, we've added a skybox (the background (cube) image rendered behind all other elements in the scene), image-based lighting (where an image is used to determine the direction and intensity of a light source) and a directional light (Sun).
## Limitations
Anything added to the scene is referred to as an "entity" (including lights and cameras).
- Only the `manipulatorType` property can be changed at runtime. For any other property changes, create a new widget.
- The widget requires that you have the correct environment setup for Thermion (Flutter master channel with native assets enabled).
Entities are always added to the scene at position (0,0,0).
## Example
The default scene camera is located at (0,0,0) (and is looking at -Z, or "into" the screen), so by adding a cube at (0,0,0), the camera will now be inside the cube.
Here's a complete example showing how to use `ViewerWidget` with multiple configuration options:
We need to move the camera outside the cube so it's visible.
6. Change the camera orientation
```dart
var viewer = await _thermionViewer;
await viewer.loadSkybox("assets/default_env_skybox.ktx");
await viewer.loadGlb("assets/cube.glb");
import 'package:flutter/material.dart';
import 'package:thermion_flutter/thermion_flutter.dart';
import 'package:vector_math/vector_math_64.dart';
await viewer.setCameraPosition(0, 1, 10);
await viewer.setCameraRotation(v.Quaternion.axisAngle(
v.Vector3(1, 0, 0), -30 / 180 * pi) *
v.Quaternion.axisAngle(v.Vector3(0, 1, 0), 15 / 180 * pi));
class ModelViewer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('3D Model Viewer')),
body: ViewerWidget(
assetPath: 'assets/robot.glb',
skyboxPath: 'assets/studio_skybox.ktx',
iblPath: 'assets/studio_ibl.ktx',
initialCameraPosition: Vector3(0, 1.5, 3),
manipulatorType: ManipulatorType.ORBIT,
showFpsCounter: true,
background: Colors.grey,
postProcessing: true,
transformToUnitCube: true,
onViewerAvailable: (viewer) async {
// You can perform additional setup here
print('Viewer is ready!');
},
),
);
}
}
```
The cube still won't be visible until we add a light to the scene and tell Thermion to start rendering.
7. Add a light and turn rendering on
```dart
...
await viewer.addLight(
LightType.SUN, 7500, 50000, 0, 0, 0, 1, -1, -1);
await viewer.setRendering(true);
...
````
8. Run the project
```
$ flutter run -d macos
```
> You may experience a noticeable delay the very first time you run the project. Don't panic, it's not frozen! This is due to the build system downloading the prebuilt Filament binaries from Cloudflare, which can take some time (particularly on Windows). These binaries will be cached after first download, so subsequent runs will be much faster (though every time you run flutter clean, the binaries will be re-downloaded).
![Screenshot of Thermion Quickstart project](images/thermion_sample_project.png)
Your first Thermion project is complete!

View File

@@ -1,18 +1,25 @@
## Showcase
## KTX Viewer
https://ktxviewer.com
A basic HTML + Dart site for viewing KTX textures in browser.
## DartPad Playground
A custom DartPad that lets you experiment with Thermion from your browser (currently, only Chrome is supported).
[![Screenshot of Thermion Dartpad](images/dartpad.thermion.dev_.png)](https://dartpad.thermion.dev)
(Outdated, needs to be upgraded to Thermion `0.3.0`);
## mixreel (Flutter/Web)
Create 3D worlds and translate to AI video.
[![Screenshot of the mixreeel app](images/ixlabs.app_app.png)](https://mixreel.ai)
## Nick Fisher
My personal website, where I create an interactive clone of myself with Avaturn & Cartesia (no Flutter, made with Thermion and the [Jaspr Dart UI framework](https://github.com/schultek/jaspr)).
@@ -21,3 +28,4 @@ My personal website, where I create an interactive clone of myself with Avaturn

186
docs/viewer.mdx Normal file
View File

@@ -0,0 +1,186 @@
## ThermionViewer (Flutter)
If you just want to display a 3D object in the viewport with some basic camera controls, use the [ViewerWidget described in the Quickstart section](./quickstart).
If you need want more fine-grained control
> You can find the entire project below in the [examples/flutter/viewer](https://github.com/nmfisher/thermion/tree/master/examples/flutter/viewer) folder of the repository.
2. Add a folder containing your assets (glTF model + skybox ktx) to your `pubspec.yaml` asset list
```yaml
...
flutter
assets:
- assets/
```
3. Create an instance of `ThermionFlutterPlugin` in your app.
```dart
class _MyAppState extends State<MyApp> {
late Future<ThermionViewer> _thermionViewer;
  void initState() {   
ThermionFlutterPlugin.createViewer().then((viewer) {
_thermionViewer = viewer;
});
}
}
```
4. Add a `ThermionWidget` to your widget hierarchy
```dart
class _MyAppState extends State<MyApp> {
ThermionViewer? _thermionViewer;
void initState() {   
_thermionFlutterPlugin.createViewer().then((viewer) {
setState(() {
_thermionViewer = viewer;
});
});
}   
Widget build(BuildContext context) {
return Stack(children:[
if(_thermionViewer != null)
    Positioned.fill(
child:ThermionWidget(
plugin:_thermionViewer!
        ) 
    )
    ]); 
}
}
```
4. Add a button to load the model when pressed
```dart
...
class _MyAppState extends State<MyApp> {
...
bool _loaded = false;
Widget build(BuildContext context) {
return Stack(children:[
    if(_thermionViewer != null)
    Positioned.fill(
child:ThermionWidget(
plugin:_thermionViewer!
        ) 
    ),
if (!_loaded)
Center(
child: ElevatedButton(
child: const Text("Load"),
onPressed: () async {
// TODO
_loaded = true;
setState(() {});
}))
    ]); 
}}
```
5. When the button is pressed, load a skybox, lighting and the glb asset
You will need to import the `dart:math` and `package:vector_math` libraries.
```dart
import 'package:vector_math/vector_math_64.dart' as v;
import 'dart:math';
...
class _MyAppState extends State<MyApp> {
...
Widget build(BuildContext context) {
return Stack(children:[
...
if(!_loaded)
Center(
child: ElevatedButton(
child: const Text("Load"),
onPressed: () async {
var viewer = await _thermionViewer;
await viewer.loadIbl("assets/default_env_ibl.ktx");
await viewer.loadSkybox("assets/default_env_skybox.ktx");
await viewer.loadGlb("assets/cube.glb");
await viewer.setCameraPosition(0, 1, 10);
await viewer.setCameraRotation(v.Quaternion.axisAngle(
v.Vector3(1, 0, 0), -30 / 180 * pi) *
v.Quaternion.axisAngle(v.Vector3(0, 1, 0), 15 / 180 * pi));
await viewer.addLight(
LightType.SUN, 7500, 50000, 0, 0, 0, 1, -1, -1);
await viewer.setRendering(true);
_loaded = true;
setState(() {});
}
)
)
]);
}
}
```
Here, we've added a skybox (the background (cube) image rendered behind all other elements in the scene), image-based lighting (where an image is used to determine the direction and intensity of a light source) and a directional light (Sun).
Anything added to the scene is referred to as an "entity" (including lights and cameras).
Entities are always added to the scene at position (0,0,0).
The default scene camera is located at (0,0,0) (and is looking at -Z, or "into" the screen), so by adding a cube at (0,0,0), the camera will now be inside the cube.
We need to move the camera outside the cube so it's visible.
6. Change the camera orientation
```dart
var viewer = await _thermionViewer;
await viewer.loadSkybox("assets/default_env_skybox.ktx");
await viewer.loadGlb("assets/cube.glb");
await viewer.setCameraPosition(0, 1, 10);
await viewer.setCameraRotation(v.Quaternion.axisAngle(
v.Vector3(1, 0, 0), -30 / 180 * pi) *
v.Quaternion.axisAngle(v.Vector3(0, 1, 0), 15 / 180 * pi));
```
The cube still won't be visible until we add a light to the scene and tell Thermion to start rendering.
7. Add a light and turn rendering on
```dart
...
await viewer.addLight(
LightType.SUN, 7500, 50000, 0, 0, 0, 1, -1, -1);
await viewer.setRendering(true);
...
````
8. Run the project
```
$ flutter run -d macos
```
> You may experience a noticeable delay the very first time you run the project. Don't panic, it's not frozen! This is due to the build system downloading the prebuilt Filament binaries from Cloudflare, which can take some time (particularly on Windows). These binaries will be cached after first download, so subsequent runs will be much faster (though every time you run flutter clean, the binaries will be re-downloaded).
![Screenshot of Thermion Quickstart project](images/thermion_sample_project.png)
Your first Thermion project is complete!

42
docs/web.mdx Normal file
View File

@@ -0,0 +1,42 @@
## Web
Web support is still experimental and currently requires you to manually compile Thermion to WASM first.
Requirements:
1) GNU Make
2) CMake
3) Emscripten
From the project root directory
```
thermion % ls -l
total 272
drwxr-xr-x 4 nickfisher staff 128 Jul 3 14:06 assets
-rw-r--r-- 1 nickfisher staff 84532 Jul 3 14:06 CHANGELOG.md
-rw-r--r-- 1 nickfisher staff 2349 Jul 3 14:06 Dockerfile
drwxr-xr-x 19 nickfisher staff 608 Jul 3 14:06 docs
-rw-r--r-- 1 nickfisher staff 748 Jul 3 14:06 docs.json
drwxr-xr-x 7 nickfisher staff 224 Jan 8 17:01 examples
-rw-r--r-- 1 nickfisher staff 11341 Oct 23 2024 LICENSE
-rw-r--r-- 1 nickfisher staff 2161 Jul 3 14:06 Makefile
drwxr-xr-x@ 13 nickfisher staff 416 Jul 3 14:06 materials
-rw-r--r--@ 1 nickfisher staff 517 Oct 23 2024 melos_thermion_workspace.iml
-rw-r--r-- 1 nickfisher staff 77 Oct 23 2024 melos.yaml
-rw-r--r--@ 1 nickfisher staff 9865 Jul 1 13:03 pubspec.lock
-rw-r--r-- 1 nickfisher staff 97 Jun 12 11:38 pubspec.yaml
-rw-r--r-- 1 nickfisher staff 3355 Jul 3 14:06 README.md
drwxr-xr-x@ 22 nickfisher staff 704 Jul 3 14:06 thermion_dart
drwxr-xr-x 7 nickfisher staff 224 Jul 3 14:06 thermion_flutter
thermion % make wasm
```
### Flutter
Copy thermion_dart.js and thermion_dart.wasm to the `/web` folder for your target app.
```
flutter run -d chrome --web-header Cross-Origin-Embedder-Policy=require-corp --web-header Cross-Origin-Opener-Policy=same-origin
```

View File

@@ -1,32 +1,6 @@
## Windows
## CMakeLists
You will need to disable the `/WX` compiler flag.
In your project, open the `windows/CMakeList.txt` file and find the following line:
`target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")`
Delete the `/WX`:
`target_compile_options(${TARGET} PRIVATE /W4 /wd"4100")`
## pubspec.yaml
On Windows, you will need to add a custom version of `native_toolchain_c` to your `dependency_overrides`. This is currently needed to link static libraries when building a DLL.
```
dependency_overrides:
native_toolchain_c:
git:
url: https://github.com/nmfisher/native.git
path: pkgs/native_toolchain_c
ref: windows_dll_fix
```
This will eventually be fixed upstream in the `native_toolchain_c` package, so this should be a short-term/temporary issue only.
If you're not a Thermion developer, you can ignore this.
## ANGLE build (not currently working)
To support embedding GPU textures in Flutter (rather than copying to a CPU pixel buffer on every frame), we need to build a slightly customized version of Filament that uses GLES on Windows (rather than the default, which uses OpenGL).

5
examples/README.md Normal file
View File

@@ -0,0 +1,5 @@
# Thermion Examples
This repository contains example Dart and Flutter projects for the Thermion rendering toolkit.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

View File

@@ -0,0 +1,755 @@
{
"accessors": [
{
"componentType": 5123,
"count": 24408,
"type": "SCALAR"
},
{
"componentType": 5126,
"count": 8468,
"type": "VEC2"
},
{
"componentType": 5126,
"count": 8468,
"type": "VEC3"
},
{
"componentType": 5126,
"count": 8468,
"type": "VEC4"
},
{
"componentType": 5126,
"count": 8468,
"type": "VEC3",
"max": [
0.131662,
0.137638986,
0.10078799
],
"min": [
-0.131333,
-0.028128,
-0.137763992
]
},
{
"componentType": 5123,
"count": 65688,
"type": "SCALAR"
},
{
"componentType": 5126,
"count": 12552,
"type": "VEC2"
},
{
"componentType": 5126,
"count": 12552,
"type": "VEC3"
},
{
"componentType": 5126,
"count": 12552,
"type": "VEC4"
},
{
"componentType": 5126,
"count": 12552,
"type": "VEC3",
"max": [
0.11722149,
0.196387976,
0.132422984
],
"min": [
-0.11722149,
-0.196387976,
-0.132422984
]
},
{
"componentType": 5123,
"count": 2208,
"type": "SCALAR"
},
{
"componentType": 5126,
"count": 436,
"type": "VEC2"
},
{
"componentType": 5126,
"count": 436,
"type": "VEC3"
},
{
"componentType": 5126,
"count": 436,
"type": "VEC4"
},
{
"componentType": 5126,
"count": 436,
"type": "VEC3",
"max": [
0.09527509,
0.114654,
-0.08429489
],
"min": [
-0.0952748954,
0.0551489964,
-0.14295499
]
},
{
"componentType": 5123,
"count": 60288,
"type": "SCALAR"
},
{
"componentType": 5126,
"count": 17186,
"type": "VEC2"
},
{
"componentType": 5126,
"count": 17186,
"type": "VEC3"
},
{
"componentType": 5126,
"count": 17186,
"type": "VEC4"
},
{
"componentType": 5126,
"count": 17186,
"type": "VEC3",
"max": [
0.1572095,
0.2716865,
0.162181988
],
"min": [
-0.1572095,
-0.2716865,
-0.162181988
]
},
{
"componentType": 5123,
"count": 131574,
"type": "SCALAR"
},
{
"componentType": 5126,
"count": 24148,
"type": "VEC2"
},
{
"componentType": 5126,
"count": 24148,
"type": "VEC3"
},
{
"componentType": 5126,
"count": 24148,
"type": "VEC4"
},
{
"componentType": 5126,
"count": 24148,
"type": "VEC3",
"max": [
0.1504075,
0.328366965,
0.173673
],
"min": [
-0.1504075,
-0.328366965,
-0.173673
]
}
],
"asset": {
"generator": "glTF Tools for Unity",
"version": "2.0"
},
"bufferViews": [
{
"buffer": 0,
"byteOffset": 0,
"byteLength": 59806
},
{
"buffer": 0,
"byteOffset": 59808,
"byteLength": 99674
},
{
"buffer": 0,
"byteOffset": 159484,
"byteLength": 4875
},
{
"buffer": 0,
"byteOffset": 164360,
"byteLength": 133545
},
{
"buffer": 0,
"byteOffset": 297908,
"byteLength": 203914
}
],
"buffers": [
{
"name": "FlightHelmet",
"byteLength": 501824,
"uri": "FlightHelmet.bin"
}
],
"images": [
{
"name": "FlightHelmet_baseColor",
"uri": "FlightHelmet_baseColor.png"
},
{
"name": "FlightHelmet_occlusionRoughnessMetallic",
"uri": "FlightHelmet_occlusionRoughnessMetallic.png"
},
{
"name": "FlightHelmet_normal",
"uri": "FlightHelmet_normal.png"
},
{
"name": "FlightHelmet_baseColor1",
"uri": "FlightHelmet_baseColor1.png"
},
{
"name": "FlightHelmet_occlusionRoughnessMetallic1",
"uri": "FlightHelmet_occlusionRoughnessMetallic1.png"
},
{
"name": "FlightHelmet_normal1",
"uri": "FlightHelmet_normal1.png"
},
{
"name": "FlightHelmet_baseColor2",
"uri": "FlightHelmet_baseColor2.png"
},
{
"name": "FlightHelmet_occlusionRoughnessMetallic2",
"uri": "FlightHelmet_occlusionRoughnessMetallic2.png"
},
{
"name": "FlightHelmet_normal2",
"uri": "FlightHelmet_normal2.png"
},
{
"name": "FlightHelmet_baseColor3",
"uri": "FlightHelmet_baseColor3.png"
},
{
"name": "FlightHelmet_occlusionRoughnessMetallic3",
"uri": "FlightHelmet_occlusionRoughnessMetallic3.png"
},
{
"name": "FlightHelmet_normal3",
"uri": "FlightHelmet_normal3.png"
},
{
"name": "FlightHelmet_baseColor4",
"uri": "FlightHelmet_baseColor4.png"
},
{
"name": "FlightHelmet_occlusionRoughnessMetallic4",
"uri": "FlightHelmet_occlusionRoughnessMetallic4.png"
},
{
"name": "FlightHelmet_normal4",
"uri": "FlightHelmet_normal4.png"
}
],
"meshes": [
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 1,
"NORMAL": 2,
"TANGENT": 3,
"POSITION": 4
},
"indices": 0,
"material": 0,
"mode": 4,
"extensions": {
"KHR_draco_mesh_compression": {
"bufferView": 0,
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
}
}
}
}
],
"name": "GlassPlastic_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 6,
"NORMAL": 7,
"TANGENT": 8,
"POSITION": 9
},
"indices": 5,
"material": 1,
"mode": 4,
"extensions": {
"KHR_draco_mesh_compression": {
"bufferView": 1,
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
}
}
}
}
],
"name": "LeatherParts_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 11,
"NORMAL": 12,
"TANGENT": 13,
"POSITION": 14
},
"indices": 10,
"material": 2,
"mode": 4,
"extensions": {
"KHR_draco_mesh_compression": {
"bufferView": 2,
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
}
}
}
}
],
"name": "Lenses_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 16,
"NORMAL": 17,
"TANGENT": 18,
"POSITION": 19
},
"indices": 15,
"material": 3,
"mode": 4,
"extensions": {
"KHR_draco_mesh_compression": {
"bufferView": 3,
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
}
}
}
}
],
"name": "MetalParts_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 21,
"NORMAL": 22,
"TANGENT": 23,
"POSITION": 24
},
"indices": 20,
"material": 4,
"mode": 4,
"extensions": {
"KHR_draco_mesh_compression": {
"bufferView": 4,
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
}
}
}
}
],
"name": "RubberWood_low"
}
],
"materials": [
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 0,
"texCoord": 0
},
"metallicRoughnessTexture": {
"index": 1,
"texCoord": 0
},
"baseColorFactor": [
1,
1,
1,
1
],
"metallicFactor": 1,
"roughnessFactor": 1
},
"normalTexture": {
"index": 2,
"texCoord": 0
},
"occlusionTexture": {
"index": 1,
"texCoord": 0
},
"name": "GlassPlasticMat",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE",
"doubleSided": false
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 3,
"texCoord": 0
},
"metallicRoughnessTexture": {
"index": 4,
"texCoord": 0
},
"baseColorFactor": [
1,
1,
1,
1
],
"metallicFactor": 1,
"roughnessFactor": 1
},
"normalTexture": {
"index": 5,
"texCoord": 0
},
"occlusionTexture": {
"index": 4,
"texCoord": 0
},
"name": "LeatherPartsMat",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE",
"doubleSided": false
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 6,
"texCoord": 0
},
"metallicRoughnessTexture": {
"index": 7,
"texCoord": 0
},
"baseColorFactor": [
1,
1,
1,
1
],
"metallicFactor": 1,
"roughnessFactor": 1
},
"normalTexture": {
"index": 8,
"texCoord": 0
},
"occlusionTexture": {
"index": 7,
"texCoord": 0
},
"alphaMode": "BLEND",
"name": "LensesMat",
"emissiveFactor": [
0,
0,
0
],
"doubleSided": false
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 9,
"texCoord": 0
},
"metallicRoughnessTexture": {
"index": 10,
"texCoord": 0
},
"baseColorFactor": [
1,
1,
1,
1
],
"metallicFactor": 1,
"roughnessFactor": 1
},
"normalTexture": {
"index": 11,
"texCoord": 0
},
"occlusionTexture": {
"index": 10,
"texCoord": 0
},
"name": "MetalPartsMat",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE",
"doubleSided": false
},
{
"doubleSided": true,
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 12,
"texCoord": 0
},
"metallicRoughnessTexture": {
"index": 13,
"texCoord": 0
},
"baseColorFactor": [
1,
1,
1,
1
],
"metallicFactor": 1,
"roughnessFactor": 1
},
"normalTexture": {
"index": 14,
"texCoord": 0
},
"occlusionTexture": {
"index": 13,
"texCoord": 0
},
"name": "RubberWoodMat",
"emissiveFactor": [
0,
0,
0
],
"alphaMode": "OPAQUE"
}
],
"nodes": [
{
"mesh": 0,
"name": "GlassPlastic_low"
},
{
"mesh": 1,
"translation": [
0.000434499962,
0.032592997,
0.011676996
],
"name": "LeatherParts_low",
"rotation": [
0,
0,
0,
1
],
"scale": [
1,
1,
1
]
},
{
"mesh": 2,
"name": "Lenses_low"
},
{
"mesh": 3,
"translation": [
0.0331545,
-0.1488645,
-0.0242879968
],
"name": "MetalParts_low",
"rotation": [
0,
0,
0,
1
],
"scale": [
1,
1,
1
]
},
{
"mesh": 4,
"translation": [
-0.00190849893,
-0.111985,
-0.013313001
],
"name": "RubberWood_low",
"rotation": [
0,
0,
0,
1
],
"scale": [
1,
1,
1
]
},
{
"children": [
0,
1,
2,
3,
4
],
"rotation": [
0,
1,
0,
0
],
"name": "FlightHelmet",
"translation": [
0,
0,
0
],
"scale": [
1,
1,
1
]
}
],
"scene": 0,
"scenes": [
{
"nodes": [
5
]
}
],
"textures": [
{
"source": 0
},
{
"source": 1
},
{
"source": 2
},
{
"source": 3
},
{
"source": 4
},
{
"source": 5
},
{
"source": 6
},
{
"source": 7
},
{
"source": 8
},
{
"source": 9
},
{
"source": 10
},
{
"source": 11
},
{
"source": 12
},
{
"source": 13
},
{
"source": 14
}
],
"extensionsRequired": [
"KHR_draco_mesh_compression"
],
"extensionsUsed": [
"KHR_draco_mesh_compression"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

View File

@@ -0,0 +1,16 @@
# Flight Helmet
## Screenshot
![screenshot](screenshot/screenshot.jpg)
## License Information
Donated by Microsoft for glTF testing
[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)](http://creativecommons.org/publicdomain/zero/1.0/)
To the extent possible under law, Microsoft has waived all copyright and related or neighboring rights to this asset.
Draco compression was done via Cesium tools on 27-03-2020 as follows.
gltf-pipeline -i FlightHelmet.gltf -o FlightHelmet.gltf -d -s --keep-unused-elements

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 KiB

BIN
examples/assets/cube.bin Normal file

Binary file not shown.

BIN
examples/assets/cube.glb Normal file

Binary file not shown.

121
examples/assets/cube.gltf Normal file
View File

@@ -0,0 +1,121 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.2.60",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0
]
}
],
"nodes":[
{
"mesh":0,
"name":"Cube"
}
],
"materials":[
{
"doubleSided":true,
"name":"Material",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"metallicFactor":0,
"roughnessFactor":0.5
}
}
],
"meshes":[
{
"name":"Cube",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3,
"material":0
}
]
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":24,
"max":[
1,
1,
1
],
"min":[
-1,
-1,
-1
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":24,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":24,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":36,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":288,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":288,
"byteOffset":288,
"target":34962
},
{
"buffer":0,
"byteLength":192,
"byteOffset":576,
"target":34962
},
{
"buffer":0,
"byteLength":72,
"byteOffset":768,
"target":34963
}
],
"buffers":[
{
"byteLength":840,
"uri":"cube.bin"
}
]
}

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="200"
height="200"
viewBox="0 0 1 1"
version="1.1"
id="svg10"
sodipodi:docname="cube_texture2.svg"
inkscape:export-filename="cube_texture_512x512.png"
inkscape:export-xdpi="245.75999"
inkscape:export-ydpi="245.75999"
inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs10" />
<sodipodi:namedview
id="namedview10"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.5185118"
inkscape:cx="255.18405"
inkscape:cy="172.86662"
inkscape:window-width="1920"
inkscape:window-height="964"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg10"
showgrid="false" />
<!-- Background Grid (optional, for visual aid) -->
<rect
x="0"
y="0"
width="1"
height="1"
fill="#f0f0f0"
id="rect1" />
<line
x1="0.333"
y1="0"
x2="0.333"
y2="1"
stroke="#ccc"
stroke-width="0.005"
id="line1" />
<line
x1="0.666"
y1="0"
x2="0.666"
y2="1"
stroke="#ccc"
stroke-width="0.005"
id="line2" />
<line
y1="0.25"
x1="0"
y2="0.25"
x2="1"
stroke="#ccc"
stroke-width="0.005"
id="line3" />
<line
y1="0.5"
x1="0"
y2="0.5"
x2="1"
stroke="#ccc"
stroke-width="0.005"
id="line4" />
<line
y1="0.75"
x1="0"
y2="0.75"
x2="1"
stroke="#ccc"
stroke-width="0.005"
id="line5" />
<!-- Front Face -->
<rect
x="0.333"
y="0"
width="0.333"
height="0.25"
fill="#ff0000"
id="rect5" />
<text
x="0.5"
y="0.125"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.1"
fill="white"
id="text5">Front</text>
<!-- Back Face -->
<rect
x="0.333"
y="0.5"
width="0.333"
height="0.25"
fill="#00ff00"
id="rect6" />
<text
x="0.5"
y="0.625"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.1"
fill="white"
id="text6">Back</text>
<!-- Top Face -->
<rect
x="0.666"
y="0.25"
width="0.333"
height="0.25"
fill="#0000ff"
id="rect7" />
<text
x="0.833"
y="0.375"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.1"
fill="white"
id="text7">Top</text>
<!-- Bottom Face -->
<rect
x="0"
y="0.25"
width="0.333"
height="0.25"
fill="#ffff00"
id="rect8" />
<text
x="0.15610458"
y="0.37936932"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.0733811px"
fill="#000000"
id="text8"
style="stroke-width:0.733811">Bottom</text>
<!-- Right Face -->
<rect
x="0.333"
y="0.25"
width="0.333"
height="0.25"
fill="#ff00ff"
id="rect9" />
<text
x="0.5"
y="0.375"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.1"
fill="white"
id="text9">Right</text>
<!-- Left Face -->
<rect
x="0.333"
y="0.75"
width="0.333"
height="0.25"
fill="#00ffff"
id="rect10" />
<text
x="0.5"
y="0.875"
text-anchor="middle"
dominant-baseline="middle"
font-size="0.1"
fill="black"
id="text10">Left</text>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

View File

@@ -0,0 +1,14 @@
material {
name : SolidColor,
shadingModel : unlit,
culling : none,
featureLevel : 1,
vertexDomain: object
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor = vec4(0.1f, 0.5f, 0.9f, 1.0f);
}
}

4
examples/dart/cli_headless/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# https://dart.dev/guides/libraries/private-files
# Created by `dart pub`
.dart_tool/
output/**

View File

@@ -0,0 +1,3 @@
## 1.0.0
- Initial version.

View File

@@ -0,0 +1,9 @@
# cli_headless
A simple headless Dart CLI app using Thermion to render to a bitmap.
To run:
`dart --enable-experiment=native-assets run bin/example.dart`
Currently, this will probably only work on a non-virtualized macOS host.

View File

@@ -0,0 +1,30 @@
# This file configures the static analysis results for your project (errors,
# warnings, and lints).
#
# This enables the 'recommended' set of lints from `package:lints`.
# This set helps identify many issues that may lead to problems when running
# or consuming Dart code, and enforces writing Dart using a single, idiomatic
# style and format.
#
# If you want a smaller set of lints you can change this to specify
# 'package:lints/core.yaml'. These are just the most critical lints
# (the recommended set includes the core lints).
# The core lints are also what is used by pub.dev for scoring packages.
include: package:lints/recommended.yaml
# Uncomment the following section to specify additional rules.
# linter:
# rules:
# - camel_case_types
# analyzer:
# exclude:
# - path/to/excluded/files/**
# For more information about the core and recommended set of lints, see
# https://dart.dev/go/core-lints
# For additional information about configuring this file, see
# https://dart.dev/guides/language/analysis-options

View File

@@ -0,0 +1,32 @@
import 'dart:io';
import 'dart:isolate';
import 'package:thermion_dart/thermion_dart.dart';
import 'package:thermion_dart/src/filament/src/implementation/ffi_filament_app.dart';
void main() async {
await FFIFilamentApp.create();
final (width, height) = (500, 500);
final sc = await FilamentApp.instance!.createHeadlessSwapChain(width, height);
var viewer = ThermionViewerFFI();
await viewer.initialized;
await FilamentApp.instance!.register(sc, viewer.view);
await viewer.view.setFrustumCullingEnabled(false);
await viewer.setBackgroundColor(1, 0, 1, 1);
await viewer.setViewport(width, height);
final result = await FilamentApp.instance!.capture(
sc,
view: viewer.view,
);
final bitmap = await pixelBufferToBmp(result.first.$2, width, height,
hasAlpha: true, isFloat: true);
var outfile = File("output/render.bmp");
outfile.parent.create();
outfile.writeAsBytesSync(bitmap);
await FilamentApp.instance!.destroy();
Isolate.current.kill();
}

View File

@@ -0,0 +1,21 @@
name: example_cli
description: A sample command-line application.
version: 1.0.0
environment:
sdk: ^3.3.0
hooks:
user_defines:
thermion_dart:
mode: debug
tracing: enabled
dependencies:
thermion_dart:
path: ../../../thermion_dart
dev_dependencies:
ffigen: ^11.0.0
lints: ^3.0.0
test: ^1.24.0

3
examples/dart/cli_windows/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# https://dart.dev/guides/libraries/private-files
# Created by `dart pub`
.dart_tool/

View File

@@ -0,0 +1,3 @@
## 1.0.0
- Initial version.

View File

@@ -0,0 +1,7 @@
# Thermion Example - Dart/Windows-only (no Flutter)
A (Windows-only) command-line application that renders into a window without Flutter.
```
dart --enable-experiment=native-assets bin\cli_windows.dart
```

View File

@@ -0,0 +1,30 @@
# This file configures the static analysis results for your project (errors,
# warnings, and lints).
#
# This enables the 'recommended' set of lints from `package:lints`.
# This set helps identify many issues that may lead to problems when running
# or consuming Dart code, and enforces writing Dart using a single, idiomatic
# style and format.
#
# If you want a smaller set of lints you can change this to specify
# 'package:lints/core.yaml'. These are just the most critical lints
# (the recommended set includes the core lints).
# The core lints are also what is used by pub.dev for scoring packages.
include: package:lints/recommended.yaml
# Uncomment the following section to specify additional rules.
# linter:
# rules:
# - camel_case_types
# analyzer:
# exclude:
# - path/to/excluded/files/**
# For more information about the core and recommended set of lints, see
# https://dart.dev/go/core-lints
# For additional information about configuring this file, see
# https://dart.dev/guides/language/analysis-options

View File

@@ -0,0 +1,54 @@
import 'dart:ffi';
import 'dart:io';
import 'dart:math';
import 'package:ffi/ffi.dart';
import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_filament_app.dart';
import 'package:thermion_dart/src/viewer/src/ffi/src/thermion_viewer_ffi.dart';
import 'package:thermion_dart/src/viewer/src/ffi/src/thermion_dart.g.dart';
import 'package:thermion_dart/thermion_dart.dart';
import 'package:vector_math/vector_math_64.dart';
import 'package:cli_windows/thermion_window.g.dart';
void main(List<String> arguments) async {
var hwnd = create_thermion_window(500, 500, 0, 0);
update();
await FFIFilamentApp.create();
var viewer = ThermionViewerFFI(
loadAssetFromUri: (path) async => File(path.replaceAll("file://", "")).readAsBytesSync());
await viewer.initialized;
var swapChain = await FilamentApp.instance!.createSwapChain(Pointer<Void>.fromAddress(hwnd));
var view = viewer.view;
await view.setViewport(500, 500);
var camera = await viewer.getActiveCamera();
await camera.setLensProjection();
await FilamentApp.instance!.register(swapChain, view);
await viewer.setBackgroundColor(1.0, 0.0, 0.0, 1.0);
var skyboxPath = File("..\\..\\assets\\default_env_skybox.ktx").absolute;
await viewer.loadSkybox("file://${skyboxPath.uri.toFilePath(windows: true)}");
final cube = await viewer.createGeometry(GeometryHelper.cube());
var stopwatch = Stopwatch();
stopwatch.start();
var last = 0;
await camera.lookAt(Vector3(0, 0, 10));
while(true) {
var angle = (stopwatch.elapsedMilliseconds / 1000) * 2 * pi;
var rotation = Quaternion.axisAngle(Vector3(0,1,0), angle);
var position = Vector3(10 * sin(angle), 0, 10 * cos(angle));
var modelMatrix = Matrix4.compose(position, rotation, Vector3.all(1));
await camera.setModelMatrix(modelMatrix);
await FilamentApp.instance!.requestFrame();
update();
await Future.delayed(Duration(milliseconds: 17));
}
}

View File

@@ -0,0 +1,32 @@
import 'package:logging/logging.dart';
import 'package:native_assets_cli/native_assets_cli.dart';
import 'package:native_toolchain_c/native_toolchain_c.dart';
import 'package:path/path.dart' as path;
void main(List<String> args) async {
final logger = Logger("")
..level = Level.ALL
..onRecord.listen((record) => print(
record.message + "\n"));
await build(args, (input, output) async {
final cbuilder = CBuilder.library(
name: input.packageName,
language: Language.cpp,
assetName: 'cli_windows.dart',
sources: ['native/thermion_window.cpp'],
includes: ['native', '../../../thermion_dart/native/include'],
defines: {"UNICODE":"1"},
flags:[],
dartBuildFiles: ['hook/build.dart'],
);
await cbuilder.run(
input: input,
output: output,
logger: logger,
);
});
}

View File

@@ -0,0 +1,19 @@
// AUTO GENERATED FILE, DO NOT EDIT.
//
// Generated by `package:ffigen`.
// ignore_for_file: type=lint
@ffi.DefaultAsset('package:cli_windows/cli_windows.dart')
library;
import 'dart:ffi' as ffi;
@ffi.Native<ffi.Int Function(ffi.Int, ffi.Int, ffi.Int, ffi.Int)>(isLeaf: true)
external int create_thermion_window(
int width,
int height,
int left,
int top,
);
@ffi.Native<ffi.Void Function()>(isLeaf: true)
external void update();

View File

@@ -0,0 +1,390 @@
#pragma comment(lib, "dwmapi.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "Gdi32.lib")
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "dxgi.lib")
#include <dxgi.h>
#include <cstdint>
#include <chrono>
#include <thread>
#include <algorithm>
#include <Windows.h>
#include <dwmapi.h>
#include <ShObjIdl.h>
#include <iostream>
#include <Windows.h>
#include "thermion_window.h"
namespace thermion {
void PrintDefaultGPU() {
IDXGIFactory* factory = nullptr;
CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&factory);
IDXGIAdapter* adapter = nullptr;
factory->EnumAdapters(0, &adapter); // 0 is the default adapter
DXGI_ADAPTER_DESC desc;
adapter->GetDesc(&desc);
std::wcout << L"GPU: " << desc.Description << std::endl;
adapter->Release();
factory->Release();
}
///
/// Instantiating a ThermionWindow creates a HWND that can be passed
/// to Filament to create a swapchain.
///
///
class ThermionWindow {
public:
ThermionWindow(
int width,
int height,
int left,
int top);
HWND GetHandle();
void Resize(int width, int height, int left, int top);
uint32_t _width = 0;
uint32_t _height = 0;
uint32_t _left = 0;
uint32_t _top = 0;
private:
HWND _windowHandle;
};
static ThermionWindow* _window;
static bool _running = false;
static std::thread _renderThread;
// Add these for timing and stats
static int _frameCount = 0;
static std::chrono::time_point<std::chrono::steady_clock> _lastFpsLog;
static void RenderLoop() {
_lastFpsLog = std::chrono::steady_clock::now();
auto lastFrame = std::chrono::steady_clock::now();
while (_running) {
auto now = std::chrono::steady_clock::now();
auto frameDuration = std::chrono::duration_cast<std::chrono::microseconds>(now - lastFrame).count();
// Force a redraw
InvalidateRect(_window->GetHandle(), NULL, FALSE);
// Process any pending messages
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
_running = false;
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Wait for vsync
DwmFlush();
// Update timing stats
lastFrame = now;
_frameCount++;
// Log FPS every second
auto timeSinceLastLog = std::chrono::duration_cast<std::chrono::milliseconds>(now - _lastFpsLog).count();
if (timeSinceLastLog >= 1000) { // Every second
float fps = (_frameCount * 1000.0f) / timeSinceLastLog;
float avgFrameTime = timeSinceLastLog / (float)_frameCount;
std::cout << "FPS: " << fps << " Frame Time: " << avgFrameTime << "ms"
<< " Last Frame: " << frameDuration / 1000.0f << "ms" << std::endl;
_frameCount = 0;
_lastFpsLog = now;
}
}
}
extern "C" {
EMSCRIPTEN_KEEPALIVE intptr_t create_thermion_window(int width, int height, int left, int top) {
_window = new ThermionWindow(width, height, left, top);
// Start the render thread
_running = true;
_renderThread = std::thread(RenderLoop);
return (intptr_t)_window->GetHandle();
}
// Update function can now be simplified or removed since rendering happens in the thread
EMSCRIPTEN_KEEPALIVE void update() {
}
// Add a cleanup function
EMSCRIPTEN_KEEPALIVE void cleanup() {
_running = false;
if (_renderThread.joinable()) {
_renderThread.join();
}
if (_window) {
delete _window;
_window = nullptr;
}
}
}
static constexpr auto kClassName = L"THERMION_WINDOW";
static constexpr auto kWindowName = L"thermion_window";
static bool was_window_hidden_due_to_minimize_ = false;
static WPARAM last_wm_size_wparam_ = SIZE_RESTORED;
uint64_t last_thread_time_ = 0;
static constexpr auto kNativeViewPositionAndShowDelay = 300;
typedef enum _WINDOWCOMPOSITIONATTRIB {
WCA_UNDEFINED = 0,
WCA_NCRENDERING_ENABLED = 1,
WCA_NCRENDERING_POLICY = 2,
WCA_TRANSITIONS_FORCEDISABLED = 3,
WCA_ALLOW_NCPAINT = 4,
WCA_CAPTION_BUTTON_BOUNDS = 5,
WCA_NONCLIENT_RTL_LAYOUT = 6,
WCA_FORCE_ICONIC_REPRESENTATION = 7,
WCA_EXTENDED_FRAME_BOUNDS = 8,
WCA_HAS_ICONIC_BITMAP = 9,
WCA_THEME_ATTRIBUTES = 10,
WCA_NCRENDERING_EXILED = 11,
WCA_NCADORNMENTINFO = 12,
WCA_EXCLUDED_FROM_LIVEPREVIEW = 13,
WCA_VIDEO_OVERLAY_ACTIVE = 14,
WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15,
WCA_DISALLOW_PEEK = 16,
WCA_CLOAK = 17,
WCA_CLOAKED = 18,
WCA_ACCENT_POLICY = 19,
WCA_FREEZE_REPRESENTATION = 20,
WCA_EVER_UNCLOAKED = 21,
WCA_VISUAL_OWNER = 22,
WCA_HOLOGRAPHIC = 23,
WCA_EXCLUDED_FROM_DDA = 24,
WCA_PASSIVEUPDATEMODE = 25,
WCA_USEDARKMODECOLORS = 26,
WCA_LAST = 27
} WINDOWCOMPOSITIONATTRIB;
typedef struct _WINDOWCOMPOSITIONATTRIBDATA {
WINDOWCOMPOSITIONATTRIB Attrib;
PVOID pvData;
SIZE_T cbData;
} WINDOWCOMPOSITIONATTRIBDATA;
typedef enum _ACCENT_STATE {
ACCENT_DISABLED = 0,
ACCENT_ENABLE_GRADIENT = 1,
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
ACCENT_ENABLE_BLURBEHIND = 3,
ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,
ACCENT_ENABLE_HOSTBACKDROP = 5,
ACCENT_INVALID_STATE = 6
} ACCENT_STATE;
typedef struct _ACCENT_POLICY {
ACCENT_STATE AccentState;
DWORD AccentFlags;
DWORD GradientColor;
DWORD AnimationId;
} ACCENT_POLICY;
typedef BOOL(WINAPI* _GetWindowCompositionAttribute)(
HWND, WINDOWCOMPOSITIONATTRIBDATA*);
typedef BOOL(WINAPI* _SetWindowCompositionAttribute)(
HWND, WINDOWCOMPOSITIONATTRIBDATA*);
static _SetWindowCompositionAttribute g_set_window_composition_attribute = NULL;
static bool g_set_window_composition_attribute_initialized = false;
typedef LONG NTSTATUS, *PNTSTATUS;
#define STATUS_SUCCESS (0x00000000)
typedef NTSTATUS(WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);
RTL_OSVERSIONINFOW GetWindowsVersion() {
HMODULE hmodule = ::GetModuleHandleW(L"ntdll.dll");
if (hmodule) {
RtlGetVersionPtr rtl_get_version_ptr =
(RtlGetVersionPtr)::GetProcAddress(hmodule, "RtlGetVersion");
if (rtl_get_version_ptr != nullptr) {
RTL_OSVERSIONINFOW rovi = {0};
rovi.dwOSVersionInfoSize = sizeof(rovi);
if (STATUS_SUCCESS == rtl_get_version_ptr(&rovi)) {
return rovi;
}
}
}
RTL_OSVERSIONINFOW rovi = {0};
return rovi;
}
void SetWindowComposition(HWND window, int32_t accent_state,
int32_t gradient_color) {
// TODO: Look for a better available API.
if (GetWindowsVersion().dwBuildNumber >= 18362) {
if (!g_set_window_composition_attribute_initialized) {
auto user32 = ::GetModuleHandleA("user32.dll");
if (user32) {
g_set_window_composition_attribute =
reinterpret_cast<_SetWindowCompositionAttribute>(
::GetProcAddress(user32, "SetWindowCompositionAttribute"));
if (g_set_window_composition_attribute) {
g_set_window_composition_attribute_initialized = true;
}
}
}
ACCENT_POLICY accent = {static_cast<ACCENT_STATE>(accent_state), 2,
static_cast<DWORD>(gradient_color), 0};
WINDOWCOMPOSITIONATTRIBDATA data;
data.Attrib = WCA_ACCENT_POLICY;
data.pvData = &accent;
data.cbData = sizeof(accent);
g_set_window_composition_attribute(window, &data);
}
}
// Add tracking for drag state
static bool isDragging = false;
static POINT dragStart = {0, 0};
static POINT windowStart = {0, 0};
LRESULT CALLBACK FilamentWindowProc(HWND const window, UINT const message,
WPARAM const wparam,
LPARAM const lparam) noexcept {
switch (message) {
case WM_DESTROY: {
PostQuitMessage(0);
return 0;
}
case WM_NCHITTEST: {
POINT pt = { LOWORD(lparam), HIWORD(lparam) };
ScreenToClient(window, &pt);
return HTCAPTION;
}
case WM_MOUSEMOVE: {
TRACKMOUSEEVENT event;
event.cbSize = sizeof(event);
event.hwndTrack = window;
event.dwFlags = TME_HOVER;
event.dwHoverTime = 200;
auto user_data = ::GetWindowLongPtr(window, GWLP_USERDATA);
if (user_data) {
HWND flutterRootWindow = reinterpret_cast<HWND>(user_data);
LONG ex_style = ::GetWindowLong(flutterRootWindow, GWL_EXSTYLE);
ex_style &= ~(WS_EX_TRANSPARENT | WS_EX_LAYERED);
::SetWindowLong(flutterRootWindow, GWL_EXSTYLE, ex_style);
}
break;
}
case WM_ERASEBKGND: {
HDC hdc = (HDC)wparam;
RECT rect;
GetClientRect(window, &rect);
ThermionWindow* thermionWindow = reinterpret_cast<ThermionWindow*>(
GetWindowLongPtr(window, GWLP_USERDATA));
if (thermionWindow) {
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
FillRect(hdc, &rect, brush);
DeleteObject(brush);
}
return TRUE;
}
case WM_SIZE:
case WM_MOVE:
case WM_MOVING:
case WM_WINDOWPOSCHANGED: {
auto user_data = ::GetWindowLongPtr(window, GWLP_USERDATA);
if (user_data) {
HWND flutterRootWindow = reinterpret_cast<HWND>(user_data);
LONG ex_style = ::GetWindowLong(flutterRootWindow, GWL_EXSTYLE);
ex_style &= ~(WS_EX_TRANSPARENT | WS_EX_LAYERED);
::SetWindowLong(flutterRootWindow, GWL_EXSTYLE, ex_style);
}
break;
}
default:
return ::DefWindowProc(window, message, wparam, lparam);
}
return 0;
}
ThermionWindow::ThermionWindow(int width,
int height,
int left,
int top) : _width(width), _height(height), _left(left), _top(top) {
PrintDefaultGPU();
auto window_class = WNDCLASSEX{};
::SecureZeroMemory(&window_class, sizeof(window_class));
window_class.cbSize = sizeof(window_class);
window_class.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
window_class.lpfnWndProc = FilamentWindowProc;
window_class.hInstance = GetModuleHandle(nullptr);
window_class.lpszClassName = L"THERMION_WINDOW";
window_class.hCursor = ::LoadCursorW(nullptr, IDC_ARROW);
window_class.hbrBackground = ::CreateSolidBrush(RGB(0,255,0));
::RegisterClassExW(&window_class);
// Create a normal popup window without forcing it to be topmost
_windowHandle = ::CreateWindowW(
L"THERMION_WINDOW",
L"thermion_window",
WS_OVERLAPPEDWINDOW,
left, top, width, height,
nullptr, nullptr,
GetModuleHandle(nullptr),
nullptr
);
// Store the this pointer for use in window procedure
::SetWindowLongPtr(_windowHandle, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
// Disable DWM animations
auto disable_window_transitions = TRUE;
DwmSetWindowAttribute(_windowHandle, DWMWA_TRANSITIONS_FORCEDISABLED,
&disable_window_transitions,
sizeof(disable_window_transitions));
::ShowWindow(_windowHandle, SW_SHOW);
UpdateWindow(_windowHandle);
}
void ThermionWindow::Resize(int width, int height, int left, int top) {
_width = width;
_height = height;
_left = left;
_top = top;
::SetWindowPos(_windowHandle, nullptr, left, top, width, height,
SWP_NOZORDER | SWP_NOACTIVATE);
}
HWND ThermionWindow::GetHandle() { return _windowHandle; }
} // namespace thermion

View File

@@ -0,0 +1,14 @@
#pragma once
#ifdef IS_DLL
#define EMSCRIPTEN_KEEPALIVE __declspec(dllimport)
#else
#define EMSCRIPTEN_KEEPALIVE __declspec(dllexport)
#endif
extern "C" {
intptr_t create_thermion_window(int width, int height, int left, int top);
void update();
}

View File

@@ -0,0 +1,21 @@
name: cli_windows
description: A sample command-line application with basic argument parsing.
version: 0.0.1
environment:
sdk: ^3.6.0-326.0.dev
dependencies:
args: ^2.5.0
thermion_dart:
path: ../../../thermion_dart
ffi: ^2.1.3
vector_math: ^2.1.4
native_toolchain_c: ^0.9.0
native_assets_cli: ^0.12.0
dev_dependencies:
lints: ^5.0.0
test: ^1.24.0

View File

@@ -0,0 +1,19 @@
name: example_web
description: A sample command-line application.
version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
sdk: ^3.3.0
dependencies:
thermion_dart:
path: ../../../thermion_dart
logging: ^1.3.0
dev_dependencies:
lints: ^3.0.0
test: ^1.24.0
build_runner: ^2.4.13
build_test: ^2.2.2
build_web_compilers: ^4.1.5

View File

@@ -0,0 +1 @@
../../../assets/

View File

@@ -0,0 +1,101 @@
import 'dart:async';
import 'dart:js_interop';
import 'dart:math';
import 'package:web/web.dart';
import 'package:logging/logging.dart';
import 'package:thermion_dart/thermion_dart.dart'
hide NativeLibrary, Image_decode;
import 'package:thermion_dart/src/filament/src/implementation/ffi_filament_app.dart';
import 'web_input_handler.dart';
import 'package:thermion_dart/src/bindings/src/thermion_dart_js_interop.g.dart';
void main(List<String> arguments) async {
Logger.root.onRecord.listen((record) {
print(record);
});
NativeLibrary.initBindings("thermion_dart");
final canvas =
document.getElementById("thermion_canvas") as HTMLCanvasElement;
try {
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
} catch (err) {
print(err.toString());
}
final config = FFIFilamentConfig(backend: Backend.OPENGL);
await FFIFilamentApp.create(config: config);
var swapChain = await FilamentApp.instance!
.createHeadlessSwapChain(canvas.width, canvas.height);
final viewer = ThermionViewerFFI();
await viewer.initialized;
await FilamentApp.instance!.setClearOptions(1.0, 0.0, 0.0, 1.0);
await FilamentApp.instance!.register(swapChain, viewer.view);
await viewer.setViewport(canvas.width, canvas.height);
await viewer.setRendering(true);
final rnd = Random();
// ignore: prefer_function_declarations_over_variables
bool resizing = false;
// ignore: prefer_function_declarations_over_variables
final resizer = () async {
if (resizing) {
return;
}
try {
resizing = true;
await viewer.setViewport(canvas.clientWidth, canvas.clientHeight);
Thermion_resizeCanvas(canvas.clientWidth, canvas.clientHeight);
} catch (err) {
print(err);
} finally {
resizing = false;
}
};
// ignore: unused_local_variable, prefer_function_declarations_over_variables
final jsWrapper = () {
var promise = resizer().toJS;
return promise;
};
window.addEventListener('resize', jsWrapper.toJS);
// // await FilamentApp.instance!.render();
// // await Future.delayed(Duration(seconds: 1));
// // await FilamentApp.instance!.setClearOptions(1.0, 1.0, 0.0, 1.0);
// // await FilamentApp.instance!.render();
// // await Future.delayed(Duration(seconds: 1));
await viewer.loadSkybox("assets/default_env_skybox.ktx");
await viewer.loadGltf("assets/cube.glb");
final camera = await viewer.getActiveCamera();
var zOffset = 10.0;
final inputHandler = DelegateInputHandler.flight(viewer);
final webInputHandler =
WebInputHandler(inputHandler: inputHandler, canvas: canvas);
await camera.lookAt(Vector3(0, 0, zOffset));
DateTime lastRender = DateTime.now();
while (true) {
var stackPtr = stackSave();
var now = DateTime.now();
await FilamentApp.instance!.requestFrame();
now = DateTime.now();
var timeSinceLast =
now.microsecondsSinceEpoch - lastRender.microsecondsSinceEpoch;
lastRender = now;
if (timeSinceLast < 1667) {
var waitFor = 1667 - timeSinceLast;
await Future.delayed(Duration(microseconds: waitFor));
}
stackRestore(stackPtr);
// inputHandler.keyDown(PhysicalKey.S);
// await camera.lookAt(Vector3(0,0,zOffset));
// zOffset +=0.1;
}
}

View File

@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="./thermion_dart.js"></script>
<script type="module">
try {
window.thermion_dart = await thermion_dart();
} catch(err) {
console.error(err);
}
const script = document.createElement('script')
script.src = 'example.dart.js'
document.head.append(script);
</script>
<style>
html, body {
margin:0;
padding:0;
}
canvas {
position:absolute;
left:0;
right:0;
top:0;
bottom:0;
width:100%;
height:100%;
}
</style>
</head>
<body>
<canvas id="thermion_canvas"></canvas>
</body>
</html>

View File

@@ -0,0 +1,35 @@
<html>
<head>
<script src="thermion_dart.js"></script>
<style>
html, body {
margin:0;
padding:0;
}
canvas {
position:absolute;
left:0;
right:0;
top:0;
bottom:0;
width:100%;
height:100%;
}
</style>
</head>
<script type="module">
try {
window.thermion_dart = await thermion_dart();
} catch(err) {
console.error(err);
}
const dartModulePromise = WebAssembly.compileStreaming(fetch('./example.wasm'));
const imports = {};
const dart2wasm_runtime = await import('./example.mjs');
const moduleInstance = await dart2wasm_runtime.instantiate(dartModulePromise, imports);
await dart2wasm_runtime.invoke(moduleInstance);
</script>
<body>
<canvas id="canvas"></canvas>
</body>
</html>

View File

@@ -0,0 +1,22 @@
import { readFile } from 'fs/promises';
import { compile } from './example.mjs';
import thermion_dart from './thermion_dart.js';
async function runDartWasm() {
globalThis['thermion_dart'] = await thermion_dart();
const wasmBytes = await readFile('example.wasm');
const compiledApp = await compile(wasmBytes);
const instantiatedApp = await compiledApp.instantiate({});
try {
instantiatedApp.invokeMain();
} catch(err) {
console.error("Failed");
console.error(err);
}
}
runDartWasm().catch(console.error);

View File

@@ -0,0 +1 @@
../../../../thermion_dart/native/web/build/build/out/thermion_dart.js

View File

@@ -0,0 +1 @@
../../../../thermion_dart/native/web/build/build/out/thermion_dart.wasm

View File

@@ -0,0 +1,299 @@
import 'dart:js_interop';
import 'package:web/web.dart' as web;
import 'package:thermion_dart/thermion_dart.dart';
class WebInputHandler {
final InputHandler inputHandler;
final web.HTMLCanvasElement canvas;
late double pixelRatio;
final Map<int, Vector2> _touchPositions = {};
WebInputHandler({
required this.inputHandler,
required this.canvas,
}) {
pixelRatio = web.window.devicePixelRatio;
_initializeEventListeners();
}
void _initializeEventListeners() {
canvas.addEventListener('mousedown', _onMouseDown.toJS);
canvas.addEventListener('mousemove', _onMouseMove.toJS);
canvas.addEventListener('mouseup', _onMouseUp.toJS);
canvas.addEventListener('wheel', _onMouseWheel.toJS);
web.window.addEventListener('keydown', _onKeyDown.toJS);
web.window.addEventListener('keyup', _onKeyUp.toJS);
canvas.addEventListener('touchstart', _onTouchStart.toJS);
canvas.addEventListener('touchmove', _onTouchMove.toJS);
canvas.addEventListener('touchend', _onTouchEnd.toJS);
canvas.addEventListener('touchcancel', _onTouchCancel.toJS);
}
void _onMouseDown(web.MouseEvent event) {
final localPos = _getLocalPositionFromEvent(event);
final button = _getMouseButtonFromEvent(event);
inputHandler.handle(MouseEvent(
MouseEventType.buttonDown,
button,
localPos,
Vector2.zero(),
));
event.preventDefault();
}
void _onMouseMove(web.MouseEvent event) {
final localPos = _getLocalPositionFromEvent(event);
final delta = Vector2(event.movementX ?? 0, event.movementY ?? 0);
final button = _getMouseButtonFromEvent(event);
inputHandler.handle(MouseEvent(
MouseEventType.move,
button,
localPos,
delta,
));
event.preventDefault();
}
void _onMouseUp(web.MouseEvent event) {
final localPos = _getLocalPositionFromEvent(event);
final button = _getMouseButtonFromEvent(event);
inputHandler.handle(MouseEvent(
MouseEventType.buttonUp,
button,
localPos,
Vector2.zero(),
));
event.preventDefault();
}
void _onMouseWheel(web.WheelEvent event) {
final localPos = _getLocalPositionFromEvent(event);
final delta = event.deltaY;
inputHandler.handle(ScrollEvent(
localPosition: localPos,
delta: delta,
));
event.preventDefault();
}
void _onKeyDown(web.KeyboardEvent event) {
PhysicalKey? physicalKey = _getPhysicalKeyFromEvent(event);
LogicalKey? logicalKey = _getLogicalKeyFromEvent(event);
if (physicalKey != null && logicalKey != null) {
inputHandler.handle(KeyEvent(KeyEventType.down, logicalKey, physicalKey));
}
event.preventDefault();
}
void _onKeyUp(web.KeyboardEvent event) {
LogicalKey? logicalKey = _getLogicalKeyFromEvent(event);
PhysicalKey? physicalKey = _getPhysicalKeyFromEvent(event);
if (physicalKey != null && logicalKey != null) {
inputHandler.handle(KeyEvent(KeyEventType.up, logicalKey, physicalKey));
}
event.preventDefault();
}
void _onTouchStart(web.TouchEvent event) {
for (var touch in event.changedTouches.toList()) {
final pos = _getLocalPositionFromTouch(touch);
_touchPositions[touch.identifier] = pos;
}
final touchCount = event.touches.toList().length;
if (touchCount == 1) {
final touch = event.touches.toList().first;
final pos = _getLocalPositionFromTouch(touch);
inputHandler.handle(TouchEvent(
TouchEventType.tap,
pos,
null,
));
}
if (touchCount >= 2) {
final focalPoint = _calculateFocalPoint(event.touches.toList());
inputHandler.handle(ScaleStartEvent(
numPointers: touchCount,
localFocalPoint: (focalPoint.x, focalPoint.y),
));
}
event.preventDefault();
}
void _onTouchMove(web.TouchEvent event) {
for (var touch in event.changedTouches.toList()) {
final id = touch.identifier;
final currPos = _getLocalPositionFromTouch(touch);
final prevPos = _touchPositions[id];
if (prevPos != null) {
_touchPositions[id] = currPos;
}
}
final touchCount = event.touches.toList().length;
if (touchCount >= 2) {
final touches = event.touches.toList();
final focalPoint = _calculateFocalPoint(touches);
// Calculate scale
final currPositions = touches.map((t) => _getLocalPositionFromTouch(t)).toList();
final prevPositions = touches.map((t) => _touchPositions[t.identifier] ?? _getLocalPositionFromTouch(t)).toList();
final currDist = (currPositions[0] - currPositions[1]).length;
final prevDist = (prevPositions[0] - prevPositions[1]).length;
final scale = prevDist > 0 ? currDist / prevDist : 1.0;
// Calculate focal point delta
final prevFocalPoint = _calculateFocalPoint(touches, prevPositions);
final focalPointDelta = focalPoint - prevFocalPoint;
inputHandler.handle(ScaleUpdateEvent(
numPointers: touchCount,
localFocalPoint: (focalPoint.x, focalPoint.y),
localFocalPointDelta: (focalPointDelta.x, focalPointDelta.y),
rotation: 0.0, // We don't track rotation in the web implementation
scale: scale,
horizontalScale: scale,
verticalScale: scale,
));
}
event.preventDefault();
}
void _onTouchEnd(web.TouchEvent event) {
for (var touch in event.changedTouches.toList()) {
_touchPositions.remove(touch.identifier);
}
final touchCount = event.touches.toList().length;
inputHandler.handle(ScaleEndEvent(
numPointers: touchCount,
));
event.preventDefault();
}
void _onTouchCancel(web.TouchEvent event) {
for (var touch in event.changedTouches.toList()) {
_touchPositions.remove(touch.identifier);
}
final touchCount = event.touches.toList().length;
inputHandler.handle(ScaleEndEvent(
numPointers: touchCount,
));
event.preventDefault();
}
MouseButton? _getMouseButtonFromEvent(web.MouseEvent event) {
if (event.button == 1 || (event.buttons & 4 != 0)) {
return MouseButton.middle;
} else if (event.button == 0 || (event.buttons & 1 != 0)) {
return MouseButton.left;
} else if (event.button == 2 || (event.buttons & 2 != 0)) {
return MouseButton.right;
}
return null;
}
PhysicalKey? _getPhysicalKeyFromEvent(web.KeyboardEvent event) {
switch (event.code) {
case 'KeyW':
return PhysicalKey.w;
case 'KeyA':
return PhysicalKey.a;
case 'KeyS':
return PhysicalKey.s;
case 'KeyD':
return PhysicalKey.d;
default:
return null;
}
}
LogicalKey? _getLogicalKeyFromEvent(web.KeyboardEvent event) {
switch (event.key) {
case 'KeyW':
return LogicalKey.w;
case 'KeyA':
return LogicalKey.a;
case 'KeyS':
return LogicalKey.s;
case 'KeyD':
return LogicalKey.d;
default:
return null;
}
}
Vector2 _getLocalPositionFromEvent(web.Event event) {
final rect = canvas.getBoundingClientRect();
double clientX = 0, clientY = 0;
if (event is web.MouseEvent) {
clientX = event.clientX.toDouble();
clientY = event.clientY.toDouble();
} else if (event is web.TouchEvent) {
final touch = event.touches.toList().firstOrNull;
if (touch != null) {
clientX = touch.clientX;
clientY = touch.clientY;
}
}
return Vector2(
(clientX - rect.left) * pixelRatio,
(clientY - rect.top) * pixelRatio,
);
}
Vector2 _getLocalPositionFromTouch(web.Touch touch) {
final rect = canvas.getBoundingClientRect();
return Vector2(
(touch.clientX - rect.left) * pixelRatio,
(touch.clientY - rect.top) * pixelRatio,
);
}
Vector2 _calculateFocalPoint(List<web.Touch> touches, [List<Vector2>? positions]) {
if (touches.isEmpty) return Vector2.zero();
final points = positions ?? touches.map((t) => _getLocalPositionFromTouch(t)).toList();
Vector2 sum = Vector2.zero();
for (var point in points) {
sum += point;
}
return sum.scaled(1.0 / points.length);
}
void dispose() {
canvas.removeEventListener('mousedown', _onMouseDown.toJS);
canvas.removeEventListener('mousemove', _onMouseMove.toJS);
canvas.removeEventListener('mouseup', _onMouseUp.toJS);
canvas.removeEventListener('wheel', _onMouseWheel.toJS);
web.window.removeEventListener('keydown', _onKeyDown.toJS);
web.window.removeEventListener('keyup', _onKeyUp.toJS);
canvas.removeEventListener('touchstart', _onTouchStart.toJS);
canvas.removeEventListener('touchmove', _onTouchMove.toJS);
canvas.removeEventListener('touchend', _onTouchEnd.toJS);
canvas.removeEventListener('touchcancel', _onTouchCancel.toJS);
}
}

45
examples/flutter/animations/.gitignore vendored Normal file
View File

@@ -0,0 +1,45 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.build/
.buildlog/
.history
.svn/
.swiftpm/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
.pub/
/build/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

View File

@@ -0,0 +1,30 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "bae79714317430baa8e9d2edeb6accdaedfd5e06"
channel: "master"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: bae79714317430baa8e9d2edeb6accdaedfd5e06
base_revision: bae79714317430baa8e9d2edeb6accdaedfd5e06
- platform: android
create_revision: bae79714317430baa8e9d2edeb6accdaedfd5e06
base_revision: bae79714317430baa8e9d2edeb6accdaedfd5e06
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

View File

@@ -0,0 +1,4 @@
# Thermion Example - Camera Manipulation
A Flutter project demonstrating how to use the Thermion rendering toolkit to manipulate the camera position programatically and via device input (mouse pointer or touch screen).

View File

@@ -0,0 +1,28 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View File

@@ -0,0 +1,13 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks

View File

@@ -0,0 +1,46 @@
plugins {
id "com.android.application"
id "kotlin-android"
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id "dev.flutter.flutter-gradle-plugin"
}
android {
namespace = "com.example.quickstart"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.quickstart"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = 22
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.debug
shrinkResources false
minifyEnabled false
}
}
}
flutter {
source = "../.."
}

View File

@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View File

@@ -0,0 +1,48 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="camera_manipulation"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />
</application>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>

Some files were not shown because too many files have changed in this diff Show More