From 4635f854b006c5f61def47467664d7cfdba4164d Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 19 Aug 2026 18:52:32 +0000 Subject: [PATCH 1/6] docs: research plan for runtime material compilation & hot-reload Maps the current matc/resgen build-time pipeline and runtime createMaterial path, verifies Filament v1.75.0's runtime compile stack (matp + filamat::MaterialBuilder) against thermion's own R2 artifacts (end-to-end .mat -> filamat proof on Linux), and proposes a phased plan: reload-only MVP, desktop runtime compile, then Android/iOS artifact work. Research only; no code changes. Co-Authored-By: Claude --- docs/research/runtime-material-compile.md | 246 ++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 docs/research/runtime-material-compile.md diff --git a/docs/research/runtime-material-compile.md b/docs/research/runtime-material-compile.md new file mode 100644 index 000000000..5c33bb252 --- /dev/null +++ b/docs/research/runtime-material-compile.md @@ -0,0 +1,246 @@ +# Runtime material compilation / hot-reload — research & implementation plan + +Status: research/plan (no code changes). Date: 2026-08-19. Branch: `asb/runtime-material-compile`. +Scope: how thermion could (1) compile `.mat` / material source to a runnable material **at runtime**, and (2) **hot-reload** materials in a running app. + +Everything marked **[verified]** below was checked directly in this repo or reproduced in a container against the exact libraries thermion ships (R2 artifact `filament-v1.75.0-*-release.zip`). + +--- + +## 1. Current material path, end to end + +### 1.1 Build time (today, the only compilation path) + +``` +materials/*.mat + └─ matc -a … -o X.filamat X.mat (materials/build.sh:66-67) + └─ resgen -c -p -x X.filamat (materials/build.sh:68) + └─ _.c/.h (uint8_t arrays, embedded in native lib) + └─ hook/build.dart picks ONE variant per platform (build.dart:200-214) + └─ compiled into libthermion_dart.so / wasm +``` + +- `make materials` (Makefile:45-51) requires `FILAMENT_PATH` and runs `materials/build.sh`. +- `scripts/regenerate-materials.sh` downloads a **custom, WebGPU-enabled** `matc`/`resgen` pair from thermion's R2 bucket (`filament-v1.75.0-linux-release-webgpu.zip`, tools-only: `bin/matc` 17.8 MB + `bin/resgen`; no libs/headers inside) — [verified]. +- 8 variants per material (`apple|android|desktop|opengl|vulkan|webgpu|web_webgl|web_combined`, materials/build.sh:147-154); the `.filamat` intermediates are **deleted** after `resgen` (materials/build.sh:94). +- Web: `native/web/CMakeLists.txt:102-117` picks one variant (default `web_webgl`) and links it into the wasm executable. +- Exception: 3 example materials are kept as real `.filamat` files in `examples/assets/` (compiled with all 4 target APIs, materials/build.sh:229-233). + +### 1.2 Runtime (loading a compiled material) + +- Dart: `FilamentApp.createMaterial(Uint8List)` → `Engine_buildMaterialRenderThread(engine, data.address, data.length, cb)` — `lib/src/filament/src/implementation/ffi_filament_app.dart:603-611`. +- Native: `Engine_buildMaterial` (`native/src/c_api/TEngine.cpp:287-294`) = `Material::Builder().package(data, len).build(*engine)`. Destruction: `Engine_destroyMaterial` (TEngine.cpp:296-301). +- Built-in materials (grid/gizmo/image/…) are compiled into the library and built from embedded arrays in `native/src/c_api/TMaterialInstance.cpp` (e.g. lines 56-66) via `MaterialProvider` / `MaterialProvider_createMaterialInstanceRenderThread`. +- Applying to geometry: `RenderableManager_setMaterialInstanceAt` / `getMaterialInstanceAt` (`native/src/c_api/TRenderableManager.cpp:26-46`); Dart wrappers in `lib/src/filament/src/implementation/ffi_asset.dart:232-269`. +- There is **no** `TMaterial.cpp`; Material-related exports live in `TEngine.cpp`/`TMaterialInstance.cpp`. No code anywhere in thermion calls `filamat::*`, `matp::*` or compiles shaders at runtime — [verified by repo-wide grep]. + +So: **the runtime load path already accepts arbitrary filamat bytes**; everything missing is on the *produce* side (mat → filamat at runtime) and the *swap* side (live replacement bookkeeping). + +--- + +## 2. What Filament v1.75.0 offers at runtime — verified + +The full matc pipeline exists as linkable libraries; matc is just a CLI wrapper around them: + +| Piece | API | Notes | +|---|---|---| +| `.mat` parser | `matp::MaterialParser` (`filament-matp/MaterialParser.h`) | `parse(builder, config&, size&, buffer&)` fills a `MaterialBuilder`; `resolveIncludes()` handles `#include` (needed by `grid.mat` → `shared.h`). Library `libmatp.a`, ~600 KB, deps: filamat/filabridge/utils. matc uses exactly this (`tools/matc/src/matc/MaterialCompiler.cpp:92-105`). | +| Material compiler | `filamat::MaterialBuilder` (`filamat/MaterialBuilder.h`) | `init()` once → set `.platform()/.targetApi()/.optimization()/.materialSource(src)` → `build(engine.getJobSystem())` → `Package` (`getData()/getSize()/isValid()`). `materialSource(std::string_view)` takes the raw `.mat` text; it is also embedded into the filamat (MaterialBuilder.cpp:1770) which is what matdbg-style tools consume. | +| Material creation | `Material::Builder().package(data, size).build(engine)` | Already used by thermion today (TEngine.cpp:290). | +| Live swap | `RenderableManager::setMaterialInstanceAt(inst, prim, mi)` | RenderableManager.h:880 — supported on live renderables. | +| Material→instances | `Material::createInstance()`, `getDefaultInstance()` | A `MaterialInstance` **cannot change its parent Material** (no API) — reload = new Material + new instances + re-apply. `MaterialInstance::getMaterial()` exists (MaterialInstance.h:118). | +| Parameter reflection | `Material::getParameterCount()/getParameters()/hasParameter()` | Material.h:368+. Values are **write-only** on MaterialInstance (no getters) — reload must re-apply values from a client-side shadow copy. | +| Shader hot-swap in a package | `matdbg::ShaderReplacer` (`matdbg/ShaderReplacer.h`) | Edits shader source inside an existing filamat → new package. Dev-tooling angle only. | + +`matp::Config` is abstract (matc implements it via its CLI config); a runtime implementation is ~15 lines setting `mPlatform`/`mTargetApi`/`mOptimization` — prototyped below. + +### 2.1 End-to-end proof (run in this research, Linux, thermion's own artifact) + +Linked **only** against libs extracted from `filament-v1.75.0-linux-release.zip` (the artifact `hook/build.dart` already downloads), built a normal executable and a **shared library**: + +```cpp +RuntimeConfig cfg(Platform::DESKTOP, TargetApi::OPENGL); // matp::Config subclass +filamat::MaterialBuilder::init(); +filamat::MaterialBuilder b; +b.platform(...).targetApi(...).optimization(...).materialSource(matText); +matp::MaterialParser p; p.parse(b, cfg, size, buffer); // status OK +filamat::Package pkg = b.build(engine.getJobSystem()); // valid, 105 KB +// pkg.getData()/getSize() == a normal .filamat (magic "MATVERS") +``` + +Results — [verified]: +- Parse + build of a real `.mat` (lit, float3 param) → **valid 105 KB filamat**, ~1.7 s cold for DESKTOP+OPENGL with `Optimization::PERFORMANCE` (all variants). Faster with `Optimization::NONE` / single shader model — measure per case. +- Shared-lib link (`-shared -fPIC`) works: the whole stack (incl. glslang/SPIRV) is **PIC**. Stripped `.so` carrying the full compiler = **11.2 MB** (x86-64) — the realistic per-platform size cost. +- Link order note: `libmatp.a` must precede `libutils.a` (it references `utils::Path`). +- `utils/JobSystem.h` is *not* in the artifact's headers (private) but is unneeded: `MaterialBuilder.h` forward-declares it and `Engine::getJobSystem()` (Engine.h:1276) supplies the reference. + +### 2.2 What thermion's artifacts and link config already contain — [verified by inspecting R2 zips + build.dart] + +| Platform | `libfilamat.a` in artifact | `libmatp.a` | glslang/SPIRV | Linked into thermion today | +|---|---|---|---|---| +| Linux | 34.9 MB (combined: filamat+glslang+SPIRV-Tools+spirv-cross+zstd) | 592 KB | bundled inside filamat | **Yes — inside `--whole-archive`** (build.dart:231, 493-497) → the compiler is *already shipped* in the Linux .so | +| Windows | 9.3 MB + separate `glslang.lib`, `SPIRV*.lib`, `spirv-cross-*.lib` | 3.7 MB | separate libs, present | Yes (pragma, `native/include/ThermionWin32.h:19`) | +| macOS | 45 MB combined | 756 KB | bundled | Yes (build.dart:231) | +| Android (4 ABIs) | 25–30 MB per ABI, combined | **missing** | bundled | Yes (build.dart:231; the ZSTD link fix at build.dart:260-268 proves filamat objects are pulled into Android binaries) | +| iOS | 39 MB combined | **missing** | bundled | **No** — explicitly excluded (build.dart:231) | +| Web/wasm | **missing** | **missing** | — | No (declared as imported target `native/web/CMakeLists.txt:213-216` but never linked, lines 334-359) | + +Also: `scripts/build_linux.sh` already patches `libs/filamat/CMakeLists.txt` with `CMAKE_POSITION_INDEPENDENT_CODE ON` ("Patch libs/filamat/CMakeLists.txt for position independent code") — someone already prepared filamat for shared-lib linking. + +**Conclusion of feasibility: in-process runtime compilation (`Option A`) requires no new Filament upstream work.** On desktop it is (almost) *just writing the call*; on Android it needs `matp` added to the artifact; iOS additionally needs a link-list change; web needs real build work (§6). + +--- + +## 3. Design options — runtime compilation + +### A. In-process compile with `matp` + `filamat::MaterialBuilder` — **recommended** +Compile `.mat` text → `Package` → `Material` inside libthermion_dart, same process as the engine. + +- Pros: no external tools; works offline; single source of truth (same libs as matc → identical output); `#include` support via `resolveIncludes`; already 90% built on desktop (§2.2). +- Cons: +~11 MB stripped binary per platform when the compiler code is pulled in (Linux already pays this today via whole-archive); compile latency ~0.1–1.7 s per material; glslang is a large attack surface for untrusted input (fuzzing story: Filament fuzzes matc paths upstream). +- Effort: see phased plan (§5). 1–2 weeks to a cross-platform API, most of it in CI/artifacts and tests, not the code. + +### B. Bundle `matc` and shell out at runtime +Ship the 17.8 MB matc binary next to the app; run it as a subprocess on a temp dir. + +- Pros: zero new link/ABI risk; identical to the build-time path. +- Cons: **not viable on iOS** (no subprocess/App Store rules), awkward on Android (`exec` restrictions on API 29+), useless on web; two copies of the compiler if A is also shipped; temp-file plumbing. +- Effort: deceptively large (per-platform bundling, signing, paths). **Not recommended** except as a dev-only desktop tool. + +### C. Remote compile service +App uploads `.mat`, server runs matc, returns filamat bytes (thermion already has `createMaterial(bytes)` to consume them). + +- Pros: keeps clients thin; works on web/iOS; central version control. +- Cons: network dependency, latency, hosting cost; must match the app's Filament version exactly (filamat chunk versions are version-locked); security surface. +- Effort: ~1 week for a minimal HTTP service (matc in a container) + client. Worth having as the **web fallback**, not as the primary. + +### D. No runtime compile — reload only +Keep build-time matc; hot-reload by re-reading a rebuilt `.filamat` (§4). This is the cheapest useful increment and is a strict subset of A. + +### E. Adjacent Filament tooling worth knowing +- `matdbg` (in artifacts, 10 MB) — embedded debug server + `ShaderReplacer` for live shader edits; dev-only, requires `FILAMENT_ENABLE_MATDBG` builds (thermion debug zips already link it on mac/linux/android — build.dart:280). +- `filamat_lite` — interchangeable, no-glslang variant (OpenGL target only, `Optimization::NONE`, no validation, no SPIR-V). **Not built in any thermion artifact today** — a candidate if Android/iOS size matters more than optimization quality. +- `matedit` — matc-adjacent tool for re-packaging materials with externally compiled shaders (e.g. iOS precompiled Metal); not a live editor. + +--- + +## 4. Design options — reload (live replacement) + +Facts that constrain the design: +1. `MaterialInstance` cannot be re-parented to a new `Material` — [verified: no such API in MaterialInstance.h]. +2. `RenderableManager::setMaterialInstanceAt` swaps instances on live renderables — already exported (TRenderableManager.cpp:26). +3. MaterialInstance parameter values cannot be read back — reload must re-apply values the app (or thermion's Dart layer) remembers. +4. Filament's `Engine` caches compiled programs per Material; destroying the old Material after swap frees them (destroy must happen on the engine thread, after no renderable references remain). + +### 4.1 Reload shape (works with D today, with A later) + +``` +newMat = createMaterial(filamatBytes) // exists: ffi_filament_app.dart:603 +for each (entity, prim) using oldMat: + mi = newMat.createInstance() // exists + mi.copyParamsFrom(shadowParams) // NEW: Dart-side shadow map of set values + setMaterialInstanceAt(entity, prim, mi) // exists: ffi_asset.dart:261 +engine.destroyMaterial(oldMat) (after swap) // exists: Engine_destroyMaterial +``` + +Two levels: +- **L1 — instance swap (recommended MVP):** new Material + fresh instances, params re-applied from a Dart-side shadow map recorded by thermion's existing `MaterialInstance.set*` wrappers. Deterministic, no reflection gaps. Cost: values set behind thermion's back (native/gltf defaults) fall back to the new material's defaults. +- **L2 — default-instance takeover:** additionally re-point every renderable that referenced the *default instance*; needs an entity→(material, prim) index. Thermion does not keep one today; build it lazily by walking `RenderableManager` at reload time, or maintain it on `setMaterialInstanceAt`. + +Note on glTF materials: gltfio materials come from the uberarchive; the same swap API applies per-prim, but a full glTF "re-material" should go through `GltfSceneAsset`'s instance lists (`native/src/scene/GltfSceneAsset.cpp:162` already loops `setMaterialInstanceAt`). + +--- + +## 5. Recommended phased plan + +Effort assumes one engineer comfortable with the repo; "d" = working days. + +### Phase 0 — Reload-only MVP (no compiler) — **~2-3 d** +1. Dart: `MaterialInstance` wrappers record `(name → value/texture)` on every `set*` (shadow map). +2. Dart: `Future reloadMaterialFromBytes(Material old, Uint8List filamat)` implementing §4.1 L1 (+ entity scan helper for L2). +3. Example/test: loop that re-reads `examples/assets/*.filamat` and hot-swaps (pattern already half-present in `test/depth_tests.dart:104-106`). +No native, no build changes. Ships everywhere immediately (incl. web). + +### Phase 1 — Runtime compile API, desktop first (linux/macOS/Windows) — **~4-6 d** +1. Native (`TEngine.cpp` or new `TMaterialCompiler.cpp`): + ```cpp + // called on the engine/render thread like Engine_buildMaterialRenderThread + TMaterial* Engine_compileMaterialRenderThread( + TEngine*, const char* matSource, size_t length, + uint32_t platformFlags, uint32_t targetApiFlags, uint32_t optimization, + const char* definesJson, // {"NAME":"value",...} + char* outError, size_t outErrorCap); // parse/build failure text + ``` + Implementation = the proven §2.1 sequence: `matp::MaterialParser::parse` (after `resolveIncludes` when include paths are given) → `MaterialBuilder::build(engine->getJobSystem())` → `Material::Builder().package()`. `MaterialBuilder::init()` once (refcounted; serialize against `shutdown`). +2. Link config: `matp` is already in linux/macos/windows artifacts — add `"matp"` to the libs list (build.dart:227-281) and a `#pragma comment(lib, "matp.lib")` (ThermionWin32.h). On Linux matp lands inside whole-archive (fine). +3. Defaults: infer `Platform`/`TargetApi` from `engine->getBackend()` via `targetApiFromBackend()` (MaterialBuilder.h) so users don't specify anything. +4. Dart API: + ```dart + Future compileMaterial(String matSource, { + MaterialTargetApi? targetApi, // default: engine backend + MaterialOptimization optimization = performance, + Map defines = const {}, + List includePaths = const [], // for #include + bool embedSource = true, // MaterialSource chunk, aids debugging + }); + ``` + + ffigen regen (`make bindings`), web stub throwing `UnsupportedError` initially. +5. Tests: golden — runtime-compiled filamat for each shipped `.mat` in `materials/` must equal (or be accepted by `Material::Builder` identically to) the matc output for the same flags; parse-error path returns message. + +### Phase 2 — Android — **~3-5 d (mostly CI)** +1. `scripts/build_android.sh` / `zip_android.sh`: build+package `libmatp.a` per ABI (matp is host-agnostic C++; filament's android build currently doesn't install it — add `ninja matp` + copy step). +2. Add `"matp"` to android libs; measure `.so` delta per ABI (expect ≈ +8-12 MB uncompressed; document; consider R8/strip + `Optimization` guidance for dev vs release). +3. Same C API as Phase 1; no new Dart surface. + +### Phase 3 — iOS — **~3-5 d** +1. Re-enable `"filamat"` for iOS (build.dart:231) + ship `libmatp.a` in the iOS artifact (same CI change as Phase 2). +2. Verify the iOS `libfilamat.a` (41 MB, combined) links into a dylib (PIC is the default for iOS archives — still verify; desktop was verified here). +3. Decide policy: full filamat vs `filamat_lite` (needs a filament build flag; OpenGL-only target is irrelevant on Metal — so realistically *full* filamat; budget ~+10-15 MB to the app). +4. App Store review risk for a shader compiler embedded: low (it's Filament's supported path, used by filamat-android consumers), but note it. + +### Phase 4 — Web — **defer or use option C — 1-2 weeks if attempted** +The web artifact contains no filamat/matp and the wasm module doesn't link them (native/web/CMakeLists.txt:334-359). Emscripten *can* build glslang (pure C++), thermion web already enables pthreads (8 workers), so `build_web.sh` + CMake changes are the work — but expect +15-25 MB wasm and slower compiles. Recommendation: keep web on build-time matc (Phase 0 reload still works: bytes in, `createMaterial` works on web today) and, if runtime compile on web is truly needed, use the Phase-C remote service. + +### Optional Phase 5 — Dev-experience polish — **~3-5 d** +- File watcher (`watch` package) + `hotReloadMaterial(path)` in the example app: on change → compile (Phase 1) or read `.filamat` (Phase 0) → §4.1 swap. This is the "hot-reload a material in a running app" demo. +- Embed `materialSource` in runtime-built packages (default true) so a future matdbg-style inspector works on runtime materials too. +- Expose `Optimization::NONE` as an "iteration mode" (faster compiles, larger shaders). + +--- + +## 6. Cross-platform summary + +| | A: in-process | B: bundle matc | C: remote | D: reload-only | +|---|---|---|---|---| +| Linux/Win/macOS | ✅ (near-free) | ✅ | ✅ | ✅ | +| Android | ✅ (CI work) | ⚠️ exec restrictions | ✅ | ✅ | +| iOS | ✅ (link+CI work) | ❌ | ✅ | ✅ | +| Web | ⚠️ heavy wasm | ❌ | ✅ | ✅ | +| AOT/size cost | +~11 MB stripped/platform | +18 MB host tool | 0 | 0 | + +No platform needs a *platform shader compiler* at runtime: MaterialBuilder emits GLSL/SPIR-V/MSL/WGSL itself via glslang+spirv-cross (all CPU-side, in-process, no driver/JIT involvement). iOS/Android AOT is not a factor. + +--- + +## 7. Risks & unknowns (with verification steps) + +1. **Current Linux .so already contains the compiler (whole-archive)** — verify: build current main, `nm -D libthermion_dart.so | grep MaterialBuilder`. If yes, Phase 1 on Linux adds ~0 bytes and we could even exclude filamat from whole-archive later if we want to slim release builds (feature-flag via separate build define). +2. **Android/iOS `libmatp.a` absence** — CI change; confirm filament's android/ios cmake graphs build matp unmodified (pure C++; expected yes). +3. **iOS PIC + codesign of embedded compiler** — link test in CI before promising. +4. **Binary-size regressions on Android** — measure per-ABI delta; mitigation: link matp+filamat only when a `THERMION_RUNTIME_MATERIALS` define is set (opt-in build), or evaluate filamat_lite. +5. **Compile latency** — measured 1.7 s cold/1 target/PERFORMANCE. For editor-like iteration use `Optimization::NONE` + single `TargetApi`; run on a worker and marshal to the engine thread only for `Material::Builder().build()`. +6. **Error surfacing** — `matp` parse errors come back as `utils::Status` (message string — good). Shader *compile* errors go through filament's `LOG(ERROR)`/stderr; there is no first-class callback. Verify whether `utils::Log` can be redirected in-process (utils/Log.h) — else capture stderr in dev builds. **Needs verification.** +7. **Thread-safety** — `MaterialBuilder::init()` is refcounted (atomic) but glslang initialization is not; serialize init/first-build with a mutex. Builds themselves use the provided JobSystem (use `engine->getJobSystem()`; don't `adopt()` a private one inside the engine process). +8. **Version lock** — runtime-built packages must be consumed by the same Filament version (thermion ships both from one artifact — fine today; document that a `compileMaterial` result is not portable across engine versions). +9. **`#include` resolution** — `matp::MaterialParser::resolveIncludes(buffer, size, materialFilePath, ...)` needs real paths; on Flutter assets aren't files. Plan: Dart resolves includes itself (it already has asset loading) and passes a flattened source, or pass virtual include-dir callbacks. **Design detail for Phase 1.** +10. **glTF/uberarchive materials** — out of scope for reload MVP; swapping those needs `GltfSceneAsset` awareness (§4.1 note). + +--- + +## 8. TL;DR + +- The runtime compiler Filament offers (`matp` + `filamat::MaterialBuilder`) is complete, PIC, and **already sitting in thermion's own build artifacts**; on Linux it is *already linked whole-archive into the shipped .so*. Feasibility is proven end to end in this research: `.mat` text → valid filamat in ~1.7 s using only artifact libs. +- Do **Phase 0 (reload MVP, 2-3 d)** now — pure Dart, all platforms. +- Do **Phase 1 (desktop runtime compile, 4-6 d)** next — small native function + link-list entry + ffigen. +- **Phase 2/3 (Android/iOS)** are CI/artifact work (3-5 d each). **Web** stays build-time/remote. +- Biggest real risks: Android/iOS size delta, error-message plumbing, and include-resolution ergonomics — all tractable, none architectural. From 686a55c520099f0c6fe2721bbbf44fa56d7c19ff Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 19 Aug 2026 20:19:08 +0000 Subject: [PATCH 2/6] feat: material hot-reload from compiled bytes (Phase 0) Add reloadMaterialFromBytes + findRenderablesUsingMaterial to FilamentApp, per docs/research/runtime-material-compile.md section 4.1. Filament cannot re-parent a MaterialInstance to a different Material, and instances are write-only (no parameter getters). So: - FFIMaterialInstance now records every setParameter*/raster-state call in a MaterialInstanceShadowState, and applyTo() replays the recording onto a fresh instance. - Scene_scanForMaterial (new C API) walks each scene's renderables and reports the primitives whose instance belongs to a material. MaterialInstance_getMaterial (new C API) exposes instance->material. - FFIFilamentApp.reloadMaterialFromBytes builds the new material, creates one replacement instance per distinct old instance, replays recorded state, re-points primitives, then destroys the old instances and material on the render thread. - findRenderablesUsingMaterial unions the native scene scan with an app-level attachment registry (records from setMaterialInstanceAt) so renderables not yet in a scene are still found; stale records are pruned by re-validating against the renderable's current instance. - MaterialInstance wrappers are cached per native pointer so repeated getMaterialInstanceAt calls return the same wrapper and keep the shadow recording intact; destroy() is idempotent and unregisters. Tests: test/material_reload_tests.dart (scan, replay + pixel check, instance-sharing preservation, destroyOld=false ownership). Co-Authored-By: Claude --- .../src/bindings/src/thermion_dart_ffi.g.dart | 7226 +++++----- .../src/thermion_dart_js_interop.g.dart | 11238 ++++++++-------- .../src/implementation/ffi_filament_app.dart | 182 +- .../src/implementation/ffi_material.dart | 62 +- .../ffi_renderable_manager.dart | 18 +- .../implementation/material_shadow_state.dart | 176 + .../filament/src/interface/filament_app.dart | 56 + .../native/include/c_api/TMaterialInstance.h | 1 + thermion_dart/native/include/c_api/TScene.h | 10 + .../native/src/c_api/TMaterialInstance.cpp | 10 + thermion_dart/native/src/c_api/TScene.cpp | 53 +- thermion_dart/test/material_reload_tests.dart | 154 + 12 files changed, 9990 insertions(+), 9196 deletions(-) create mode 100644 thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart create mode 100644 thermion_dart/test/material_reload_tests.dart diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart index ce0563476..cb9489179 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart @@ -19,829 +19,772 @@ external int TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER; @ffi.Native() external int TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER; -@ffi.Native)>(isLeaf: true) -external TViewport View_getViewport(ffi.Pointer view); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createLinear(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createACES(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createACESLegacy(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createFilmic(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createPBRNeutral(ffi.Pointer tEngine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer AnimationManager_create(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createAGX(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external void AnimationManager_destroy(ffi.Pointer tAnimationManager); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer ToneMapper_createAGXWithLook(ffi.Pointer tEngine, int look); +@ffi.Native, ffi.Uint64)>(isLeaf: true) +external void AnimationManager_update(ffi.Pointer tAnimationManager, int frameTimeInNanos); -@ffi.Native Function(ffi.Pointer, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>( - isLeaf: true, -) -external ffi.Pointer ToneMapper_createGeneric( - ffi.Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_addGltfAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createDisplayRange(ffi.Pointer tEngine); - -@ffi.Native)>(isLeaf: true) -external void ToneMapper_destroy(ffi.Pointer toneMapper); - -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer ColorGradingBuilder_create(); - -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ColorGradingBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_removeGltfAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); -@ffi.Native)>(isLeaf: true) -external void ColorGradingBuilder_destroy(ffi.Pointer builder); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void ColorGrading_destroy(ffi.Pointer engine, ffi.Pointer colorGrading); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void ColorGradingBuilder_quality(ffi.Pointer builder, int level); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void ColorGradingBuilder_format(ffi.Pointer builder, int format); - -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void ColorGradingBuilder_dimensions(ffi.Pointer builder, int dim); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void ColorGradingBuilder_toneMapper( - ffi.Pointer builder, - ffi.Pointer toneMapper, +@ffi.Native, EntityId)>(isLeaf: true) +external void AnimationManager_addMorphAnimationComponent( + ffi.Pointer tAnimationManager, + int entityId, ); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_exposure(ffi.Pointer builder, double exposure); +@ffi.Native, EntityId)>(isLeaf: true) +external void AnimationManager_removeMorphAnimationComponent( + ffi.Pointer tAnimationManager, + int entityId, +); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_nightAdaptation(ffi.Pointer builder, double adaptation); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_addBoneAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, +); -@ffi.Native, ffi.Float, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_whiteBalance( - ffi.Pointer builder, - double temperature, - double tint, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_removeBoneAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_contrast(ffi.Pointer builder, double contrast); +@ffi.Native< + ffi.Bool Function( + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Float, + ) +>(isLeaf: true) +external bool AnimationManager_setMorphAnimation( + ffi.Pointer tAnimationManager, + int entityId, + ffi.Pointer morphData, + ffi.Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, +); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_vibrance(ffi.Pointer builder, double vibrance); +@ffi.Native, EntityId)>(isLeaf: true) +external bool AnimationManager_clearMorphAnimation(ffi.Pointer tAnimationManager, int entityId); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_saturation(ffi.Pointer builder, double saturation); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void AnimationManager_resetToRestPose( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, +); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Pointer, + ffi.Int, ffi.Float, ffi.Float, ffi.Float, ffi.Float, + ffi.Bool, ) >(isLeaf: true) -external void ColorGradingBuilder_channelMixer( - ffi.Pointer builder, - double outRedR, - double outRedG, - double outRedB, - double outGreenR, - double outGreenG, - double outGreenB, - double outBlueR, - double outBlueG, - double outBlueB, +external bool AnimationManager_addBoneAnimation( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int skinIndex, + int boneIndex, + ffi.Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Pointer, ffi.Int) >(isLeaf: true) -external void ColorGradingBuilder_shadowsMidtonesHighlights( - ffi.Pointer builder, - double shadowsR, - double shadowsG, - double shadowsB, - double shadowsW, - double midtonesR, - double midtonesG, - double midtonesB, - double midtonesW, - double highlightsR, - double highlightsG, - double highlightsB, - double highlightsW, - double rangesX, - double rangesY, - double rangesZ, - double rangesW, +external void AnimationManager_getRestLocalTransforms( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int skinIndex, + ffi.Pointer out, + int numBones, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Int, ffi.Pointer) +>(isLeaf: true) +external void AnimationManager_getInverseBindMatrix( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int skinIndex, + int boneIndex, + ffi.Pointer out, +); + +@ffi.Native< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Bool, ffi.Float, ffi.Float, ffi.Float, ) >(isLeaf: true) -external void ColorGradingBuilder_slopeOffsetPower( - ffi.Pointer builder, - double slopeR, - double slopeG, - double slopeB, - double offsetR, - double offsetG, - double offsetB, - double powerR, - double powerG, - double powerB, -); +external bool AnimationManager_playGltfAnimation( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, +); + +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool AnimationManager_stopGltfAnimation( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int index, +); + +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external double AnimationManager_getGltfAnimationDuration( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int animationIndex, +); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external int AnimationManager_getGltfAnimationCount( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, +); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Int) >(isLeaf: true) -external void ColorGradingBuilder_curves( - ffi.Pointer builder, - double shadowGammaR, - double shadowGammaG, - double shadowGammaB, - double midPointR, - double midPointG, - double midPointB, - double highlightScaleR, - double highlightScaleG, - double highlightScaleB, +external void AnimationManager_getGltfAnimationName( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + ffi.Pointer outPtr, + int index, ); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void ColorGradingBuilder_luminanceScaling(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) +external int AnimationManager_getMorphTargetNameCount( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int childEntity, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void ColorGradingBuilder_gamutMapping(ffi.Pointer builder, bool enabled); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer, EntityId, ffi.Pointer, ffi.Int) +>(isLeaf: true) +external void AnimationManager_getMorphTargetName( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int childEntity, + ffi.Pointer outPtr, + int index, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setColorGrading(ffi.Pointer tView, ffi.Pointer tColorGrading); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_updateBoneMatrices( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getColorGrading(ffi.Pointer tView); +@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool AnimationManager_setMorphTargetWeights( + ffi.Pointer tAnimationManager, + int entityId, + ffi.Pointer morphData, + int numWeights, +); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void View_setBlendMode(ffi.Pointer view, int blendMode); +@ffi.Native, ffi.Pointer, ffi.Int, ffi.Float)>( + isLeaf: true, +) +external bool AnimationManager_setGltfAnimationTime( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, +); -@ffi.Native, ffi.Uint32, ffi.Uint32)>(isLeaf: true) -external void View_setViewport(ffi.Pointer view, int width, int height); +@ffi.Native, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) +external void Camera_setExposure(ffi.Pointer camera, double aperture, double shutterSpeed, double sensitivity); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setRenderTarget(ffi.Pointer view, ffi.Pointer renderTarget); +@ffi.Native)>(isLeaf: true) +external double Camera_getAperture(ffi.Pointer camera); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setFrustumCullingEnabled(ffi.Pointer view, bool enabled); +@ffi.Native)>(isLeaf: true) +external double Camera_getShutterSpeed(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external int View_getVisibleRenderableCount(ffi.Pointer view); +@ffi.Native)>(isLeaf: true) +external double Camera_getSensitivity(ffi.Pointer camera); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getRenderTarget(ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getModelMatrix(ffi.Pointer camera); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setPostProcessing(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getViewMatrix(ffi.Pointer camera); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setShadowsEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getProjectionMatrix(ffi.Pointer camera); -@ffi.Native, ffi.Int)>(isLeaf: true) -external void View_setShadowType(ffi.Pointer tView, int shadowType); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getCullingProjectionMatrix(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external int View_getShadowType(ffi.Pointer tView); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Camera_getFrustum(ffi.Pointer camera, ffi.Pointer out); -@ffi.Native, TSoftShadowOptions)>(isLeaf: true) -external void View_setSoftShadowOptions(ffi.Pointer tView, TSoftShadowOptions options); +@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setProjectionMatrix( + ffi.Pointer camera, + ffi.Pointer matrix, + double near, + double far, +); -@ffi.Native)>(isLeaf: true) -external TSoftShadowOptions View_getSoftShadowOptions(ffi.Pointer tView); +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double, ffi.Bool)>( + isLeaf: true, +) +external void Camera_setProjectionFromFov( + ffi.Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, +); -@ffi.Native, TVsmShadowOptions)>(isLeaf: true) -external void View_setVsmShadowOptions(ffi.Pointer tView, TVsmShadowOptions options); +@ffi.Native)>(isLeaf: true) +external double Camera_getFocalLength(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external TVsmShadowOptions View_getVsmShadowOptions(ffi.Pointer tView); +@ffi.Native, double3, double3, double3)>(isLeaf: true) +external void Camera_lookAt(ffi.Pointer camera, double3 eye, double3 focus, double3 up); -@ffi.Native, ffi.Bool, ffi.Float)>(isLeaf: true) -external void View_setBloom(ffi.Pointer tView, bool enabled, double strength); +@ffi.Native)>(isLeaf: true) +external double Camera_getNear(ffi.Pointer camera); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void View_setRenderQuality(ffi.Pointer tView, int qualityLevel); +@ffi.Native)>(isLeaf: true) +external double Camera_getCullingFar(ffi.Pointer camera); -@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool)>(isLeaf: true) -external void View_setAntiAliasing(ffi.Pointer tView, bool msaa, bool fxaa, bool taa); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external double Camera_getFov(ffi.Pointer camera, bool horizontal); -@ffi.Native, ffi.Int, ffi.Bool)>(isLeaf: true) -external void View_setLayerEnabled(ffi.Pointer tView, int layer, bool visible); +@ffi.Native)>(isLeaf: true) +external double Camera_getFocusDistance(ffi.Pointer camera); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setCamera(ffi.Pointer tView, ffi.Pointer tCamera); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void Camera_setFocusDistance(ffi.Pointer camera, double focusDistance); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getScene(ffi.Pointer tView); +@ffi.Native, double4x4, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setCustomProjectionWithCulling( + ffi.Pointer camera, + double4x4 projectionMatrix, + double near, + double far, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getCamera(ffi.Pointer tView); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Camera_setModelMatrix(ffi.Pointer camera, ffi.Pointer tModelMatrix); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setStencilBufferEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setLensProjection( + ffi.Pointer camera, + double near, + double far, + double aspect, + double focalLength, +); -@ffi.Native)>(isLeaf: true) -external bool View_isStencilBufferEnabled(ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external int Camera_getEntity(ffi.Pointer camera); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setDitheringEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.UnsignedInt, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ) +>(isLeaf: true) +external void Camera_setProjection( + ffi.Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, +); -@ffi.Native)>(isLeaf: true) -external bool View_isDitheringEnabled(ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getEntityCount(ffi.Pointer filamentAsset); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setScene(ffi.Pointer tView, ffi.Pointer tScene); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void FilamentAsset_getEntities(ffi.Pointer filamentAsset, ffi.Pointer out); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setFrontFaceWindingInverted(ffi.Pointer tView, bool inverted); +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getWireframe(ffi.Pointer filamentAsset); -@ffi.Native, TAmbientOcclusionOptions)>(isLeaf: true) -external void View_setAmbientOcclusionOptions(ffi.Pointer tView, TAmbientOcclusionOptions options); - -@ffi.Native)>(isLeaf: true) -external TAmbientOcclusionOptions View_getAmbientOcclusionOptions(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer FilamentAsset_getSourceAsset(ffi.Pointer filamentAsset); -@ffi.Native, TFogOptions)>(isLeaf: true) -external void View_setFogOptions(ffi.Pointer tView, TFogOptions tFogOptions); +@ffi.Native)>(isLeaf: true) +external TViewport View_getViewport(ffi.Pointer view); -@ffi.Native)>(isLeaf: true) -external TFogOptions View_getFogOptions(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createLinear(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setTransparentPickingEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createACES(ffi.Pointer tEngine); -@ffi.Native)>(isLeaf: true) -external bool View_isTransparentPickingEnabled(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createACESLegacy(ffi.Pointer tEngine); -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) -external void View_pick(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createFilmic(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setName(ffi.Pointer tView, ffi.Pointer name); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createPBRNeutral(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getName(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createAGX(ffi.Pointer tEngine); -@ffi.Native(isLeaf: true) -external void Gizmo_dummy(int t); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer ToneMapper_createAGXWithLook(ffi.Pointer tEngine, int look); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ) ->(isLeaf: true) -external ffi.Pointer Gizmo_create( +@ffi.Native Function(ffi.Pointer, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>( + isLeaf: true, +) +external ffi.Pointer ToneMapper_createGeneric( ffi.Pointer tEngine, - ffi.Pointer assetLoader, - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tView, - ffi.Pointer tMaterial, - int tGizmoType, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, ); -@ffi.Native, ffi.Uint32, ffi.Uint32, GizmoPickCallback)>(isLeaf: true) -external void Gizmo_pick(ffi.Pointer tGizmo, int x, int y, GizmoPickCallback callback); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void Gizmo_highlight(ffi.Pointer tGizmo, int axis); - -@ffi.Native)>(isLeaf: true) -external void Gizmo_unhighlight(ffi.Pointer tGizmo); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createInstance(ffi.Pointer tMaterial); - -@ffi.Native)>(isLeaf: true) -external int Material_getFeatureLevel(ffi.Pointer tMaterial); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createImageMaterial(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createGridMaterial(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createGizmoMaterial(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createSilhouetteMaterial(ffi.Pointer tEngine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createDisplayRange(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createEdgeOutlineMaterial(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external void ToneMapper_destroy(ffi.Pointer toneMapper); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createWireframeMaterial(ffi.Pointer tEngine); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer ColorGradingBuilder_create(); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createTranslationAxisMaterial(ffi.Pointer tEngine); +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ColorGradingBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createBoneOverlayMaterial(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external void ColorGradingBuilder_destroy(ffi.Pointer builder); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool Material_hasParameter(ffi.Pointer tMaterial, ffi.Pointer propertyName); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void ColorGrading_destroy(ffi.Pointer engine, ffi.Pointer colorGrading); -@ffi.Native)>(isLeaf: true) -external bool MaterialInstance_isStencilWriteEnabled(ffi.Pointer materialInstance); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void ColorGradingBuilder_quality(ffi.Pointer builder, int level); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setStencilWrite(ffi.Pointer materialInstance, bool enabled); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void ColorGradingBuilder_format(ffi.Pointer builder, int format); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setCullingMode(ffi.Pointer materialInstance, int culling); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void ColorGradingBuilder_dimensions(ffi.Pointer builder, int dim); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDoubleSided(ffi.Pointer materialInstance, bool doubleSided); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void ColorGradingBuilder_toneMapper( + ffi.Pointer builder, + ffi.Pointer toneMapper, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDepthWrite(ffi.Pointer materialInstance, bool enabled); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_exposure(ffi.Pointer builder, double exposure); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDepthCulling(ffi.Pointer materialInstance, bool enabled); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_nightAdaptation(ffi.Pointer builder, double adaptation); -@ffi.Native, ffi.Pointer, ffi.Double)>(isLeaf: true) -external void MaterialInstance_setParameterFloat( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double value, +@ffi.Native, ffi.Float, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_whiteBalance( + ffi.Pointer builder, + double temperature, + double tint, ); -@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>( - isLeaf: true, -) -external void MaterialInstance_setParameterFloat2( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, -); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_contrast(ffi.Pointer builder, double contrast); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Double, ffi.Double, ffi.Double) ->(isLeaf: true) -external void MaterialInstance_setParameterFloat3( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, - double z, -); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_vibrance(ffi.Pointer builder, double vibrance); + +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_saturation(ffi.Pointer builder, double saturation); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32) + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ) >(isLeaf: true) -external void MaterialInstance_setParameterFloat3Array( - ffi.Pointer tMaterialInstance, - ffi.Pointer propertyName, - ffi.Pointer raw, - int length, +external void ColorGradingBuilder_channelMixer( + ffi.Pointer builder, + double outRedR, + double outRedG, + double outRedB, + double outGreenR, + double outGreenG, + double outGreenB, + double outBlueR, + double outBlueG, + double outBlueB, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, ) >(isLeaf: true) -external void MaterialInstance_setParameterFloat4( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, - double w, - double z, +external void ColorGradingBuilder_shadowsMidtonesHighlights( + ffi.Pointer builder, + double shadowsR, + double shadowsG, + double shadowsB, + double shadowsW, + double midtonesR, + double midtonesG, + double midtonesB, + double midtonesW, + double highlightsR, + double highlightsG, + double highlightsB, + double highlightsW, + double rangesX, + double rangesY, + double rangesZ, + double rangesW, ); -@ffi.Native, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external void MaterialInstance_setParameterMat3( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer matrix, -); - -@ffi.Native, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external void MaterialInstance_setParameterMat4( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer matrix, -); - -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external void MaterialInstance_setParameterInt( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - int value, -); - -@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setParameterBool( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - bool value, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ) +>(isLeaf: true) +external void ColorGradingBuilder_slopeOffsetPower( + ffi.Pointer builder, + double slopeR, + double slopeG, + double slopeB, + double offsetR, + double offsetG, + double offsetB, + double powerR, + double powerG, + double powerB, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, ) >(isLeaf: true) -external void MaterialInstance_setParameterTexture( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer texture, - ffi.Pointer sampler, +external void ColorGradingBuilder_curves( + ffi.Pointer builder, + double shadowGammaR, + double shadowGammaG, + double shadowGammaB, + double midPointR, + double midPointG, + double midPointB, + double highlightScaleR, + double highlightScaleG, + double highlightScaleB, ); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setDepthFunc(ffi.Pointer materialInstance, int depthFunc); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void ColorGradingBuilder_luminanceScaling(ffi.Pointer builder, bool enabled); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpStencilFail( - ffi.Pointer materialInstance, - int op, - int face, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void ColorGradingBuilder_gamutMapping(ffi.Pointer builder, bool enabled); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpDepthFail(ffi.Pointer materialInstance, int op, int face); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setColorGrading(ffi.Pointer tView, ffi.Pointer tColorGrading); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpDepthStencilPass( - ffi.Pointer materialInstance, - int op, - int face, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getColorGrading(ffi.Pointer tView); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilCompareFunction( - ffi.Pointer materialInstance, - int func, - int face, -); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void View_setBlendMode(ffi.Pointer view, int blendMode); -@ffi.Native, ffi.Uint8, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilReferenceValue( - ffi.Pointer materialInstance, - int value, - int face, -); +@ffi.Native, ffi.Uint32, ffi.Uint32)>(isLeaf: true) +external void View_setViewport(ffi.Pointer view, int width, int height); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void MaterialInstance_setStencilReadMask(ffi.Pointer materialInstance, int mask); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setRenderTarget(ffi.Pointer view, ffi.Pointer renderTarget); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void MaterialInstance_setStencilWriteMask(ffi.Pointer materialInstance, int mask); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setFrustumCullingEnabled(ffi.Pointer view, bool enabled); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setTransparencyMode( - ffi.Pointer materialInstance, - int transparencyMode, -); +@ffi.Native)>(isLeaf: true) +external int View_getVisibleRenderableCount(ffi.Pointer view); -@ffi.Native)>(isLeaf: true) -external int MaterialInstance_getTransparencyMode(ffi.Pointer materialInstance); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getRenderTarget(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external int Material_getBlendingMode(ffi.Pointer material); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setPostProcessing(ffi.Pointer tView, bool enabled); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer NameComponentManager_create(); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setShadowsEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native)>(isLeaf: true) -external void NameComponentManager_destroy(ffi.Pointer tNameComponentManager); +@ffi.Native, ffi.Int)>(isLeaf: true) +external void View_setShadowType(ffi.Pointer tView, int shadowType); -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer NameComponentManager_getName( - ffi.Pointer tNameComponentManager, - int entity, -); +@ffi.Native)>(isLeaf: true) +external int View_getShadowType(ffi.Pointer tView); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.UnsignedInt, - Aabb3, - ) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createFromBuffers( - ffi.Pointer tEngine, - ffi.Pointer tVertexBuffer, - ffi.Pointer tIndexBuffer, - ffi.Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, -); +@ffi.Native, TSoftShadowOptions)>(isLeaf: true) +external void View_setSoftShadowOptions(ffi.Pointer tView, TSoftShadowOptions options); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createFromFilamentAsset( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tFilamentAsset, - bool rebuildVertices, -); +@ffi.Native)>(isLeaf: true) +external TSoftShadowOptions View_getSoftShadowOptions(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getFilamentAsset(ffi.Pointer tSceneAsset); +@ffi.Native, TVsmShadowOptions)>(isLeaf: true) +external void View_setVsmShadowOptions(ffi.Pointer tView, TVsmShadowOptions options); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getType(ffi.Pointer tSceneAsset); +@ffi.Native)>(isLeaf: true) +external TVsmShadowOptions View_getVsmShadowOptions(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external void SceneAsset_destroy(ffi.Pointer tSceneAsset); +@ffi.Native, ffi.Bool, ffi.Float)>(isLeaf: true) +external void View_setBloom(ffi.Pointer tView, bool enabled, double strength); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_addToScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void View_setRenderQuality(ffi.Pointer tView, int qualityLevel); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_removeFromScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); +@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool)>(isLeaf: true) +external void View_setAntiAliasing(ffi.Pointer tView, bool msaa, bool fxaa, bool taa); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getEntity(ffi.Pointer tSceneAsset); +@ffi.Native, ffi.Int, ffi.Bool)>(isLeaf: true) +external void View_setLayerEnabled(ffi.Pointer tView, int layer, bool visible); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getChildEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setCamera(ffi.Pointer tView, ffi.Pointer tCamera); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_getChildEntities(ffi.Pointer tSceneAsset, ffi.Pointer out); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getScene(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getCameraEntities(ffi.Pointer tSceneAsset); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getCamera(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getCameraEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setStencilBufferEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getLightEntities(ffi.Pointer tSceneAsset); +@ffi.Native)>(isLeaf: true) +external bool View_isStencilBufferEnabled(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getLightEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setDitheringEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getInstance(ffi.Pointer tSceneAsset, int index); +@ffi.Native)>(isLeaf: true) +external bool View_isDitheringEnabled(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getInstanceCount(ffi.Pointer tSceneAsset); - -@ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer>, ffi.Int) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createInstance( - ffi.Pointer asset, - ffi.Pointer> materialInstances, - int materialInstanceCount, -); - -@ffi.Native)>(isLeaf: true) -external Aabb3 SceneAsset_getBoundingBox(ffi.Pointer asset); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setScene(ffi.Pointer tView, ffi.Pointer tScene); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getVertexBuffer( - ffi.Pointer tSceneAsset, - int primitiveIndex, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setFrontFaceWindingInverted(ffi.Pointer tView, bool inverted); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getIndexBuffer(ffi.Pointer tSceneAsset, int primitiveIndex); +@ffi.Native, TAmbientOcclusionOptions)>(isLeaf: true) +external void View_setAmbientOcclusionOptions(ffi.Pointer tView, TAmbientOcclusionOptions options); -@ffi.Native, EntityId)>(isLeaf: true) -external int SceneAsset_getPrimitiveOffsetForEntity(ffi.Pointer tSceneAsset, int entity); +@ffi.Native)>(isLeaf: true) +external TAmbientOcclusionOptions View_getAmbientOcclusionOptions(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external void SceneAsset_releaseSourceData(ffi.Pointer tSceneAsset); +@ffi.Native, TFogOptions)>(isLeaf: true) +external void View_setFogOptions(ffi.Pointer tView, TFogOptions tFogOptions); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void SceneAsset_setFlatShading(ffi.Pointer tSceneAsset, bool flatShading); +@ffi.Native)>(isLeaf: true) +external TFogOptions View_getFogOptions(ffi.Pointer tView); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_getBones(ffi.Pointer tSceneAsset, int skinIndex, ffi.Pointer out); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setTransparentPickingEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native, ffi.Size)>(isLeaf: true) -external int SceneAsset_getBoneCount(ffi.Pointer tSceneAsset, int skinIndex); +@ffi.Native)>(isLeaf: true) +external bool View_isTransparentPickingEnabled(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Size)>(isLeaf: true) -external ffi.Pointer SceneAsset_getBoneName( - ffi.Pointer tSceneAsset, - int skinIndex, - int boneIndex, -); +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) +external void View_pick(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); -@ffi.Native, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) -external void Camera_setExposure(ffi.Pointer camera, double aperture, double shutterSpeed, double sensitivity); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setName(ffi.Pointer tView, ffi.Pointer name); -@ffi.Native)>(isLeaf: true) -external double Camera_getAperture(ffi.Pointer camera); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getName(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external double Camera_getShutterSpeed(ffi.Pointer camera); +@ffi.Native(isLeaf: true) +external void Gizmo_dummy(int t); -@ffi.Native)>(isLeaf: true) -external double Camera_getSensitivity(ffi.Pointer camera); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ) +>(isLeaf: true) +external ffi.Pointer Gizmo_create( + ffi.Pointer tEngine, + ffi.Pointer assetLoader, + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tView, + ffi.Pointer tMaterial, + int tGizmoType, +); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getModelMatrix(ffi.Pointer camera); +@ffi.Native, ffi.Uint32, ffi.Uint32, GizmoPickCallback)>(isLeaf: true) +external void Gizmo_pick(ffi.Pointer tGizmo, int x, int y, GizmoPickCallback callback); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getViewMatrix(ffi.Pointer camera); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void Gizmo_highlight(ffi.Pointer tGizmo, int axis); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getProjectionMatrix(ffi.Pointer camera); +@ffi.Native)>(isLeaf: true) +external void Gizmo_unhighlight(ffi.Pointer tGizmo); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getCullingProjectionMatrix(ffi.Pointer camera); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) +>(isLeaf: true) +external ffi.Pointer GltfAssetLoader_create( + ffi.Pointer tEngine, + ffi.Pointer tMaterialProvider, + ffi.Pointer tNameComponentManager, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Camera_getFrustum(ffi.Pointer camera, ffi.Pointer out); +@ffi.Native)>(isLeaf: true) +external void GltfAssetLoader_destroy(ffi.Pointer tAssetLoader); -@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setProjectionMatrix( - ffi.Pointer camera, - ffi.Pointer matrix, - double near, - double far, +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ) +>(isLeaf: true) +external ffi.Pointer GltfAssetLoader_load( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer data, + int length, + int numInstances, ); -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double, ffi.Bool)>( +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>( isLeaf: true, ) -external void Camera_setProjectionFromFov( - ffi.Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, -); - -@ffi.Native)>(isLeaf: true) -external double Camera_getFocalLength(ffi.Pointer camera); - -@ffi.Native, double3, double3, double3)>(isLeaf: true) -external void Camera_lookAt(ffi.Pointer camera, double3 eye, double3 focus, double3 up); - -@ffi.Native)>(isLeaf: true) -external double Camera_getNear(ffi.Pointer camera); - -@ffi.Native)>(isLeaf: true) -external double Camera_getCullingFar(ffi.Pointer camera); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external double Camera_getFov(ffi.Pointer camera, bool horizontal); - -@ffi.Native)>(isLeaf: true) -external double Camera_getFocusDistance(ffi.Pointer camera); - -@ffi.Native, ffi.Float)>(isLeaf: true) -external void Camera_setFocusDistance(ffi.Pointer camera, double focusDistance); - -@ffi.Native, double4x4, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setCustomProjectionWithCulling( - ffi.Pointer camera, - double4x4 projectionMatrix, - double near, - double far, +external ffi.Pointer GltfAssetLoader_getMaterialInstance( + ffi.Pointer tRenderableManager, + ffi.Pointer tAsset, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Camera_setModelMatrix(ffi.Pointer camera, ffi.Pointer tModelMatrix); - -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setLensProjection( - ffi.Pointer camera, - double near, - double far, - double aspect, - double focalLength, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer GltfAssetLoader_getMaterialProvider(ffi.Pointer tAssetLoader); -@ffi.Native)>(isLeaf: true) -external int Camera_getEntity(ffi.Pointer camera); +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getResourceUriCount(ffi.Pointer tFilamentAsset); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.UnsignedInt, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ) ->(isLeaf: true) -external void Camera_setProjection( - ffi.Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, -); +@ffi.Native> Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer> FilamentAsset_getResourceUris(ffi.Pointer tFilamentAsset); @ffi.Native)>(isLeaf: true) external void MeshData_dispose(ffi.Pointer meshData); @@ -856,3737 +799,3815 @@ external int GltfParser_parseBuffer( ffi.Pointer outMeshData, ); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint8, - ffi.Uint16, - ffi.IntPtr, - ffi.UnsignedInt, - ffi.UnsignedInt, - ) ->(isLeaf: true) -external ffi.Pointer Texture_build( - ffi.Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import$, - int sampler, - int format, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer GltfResourceLoader_create(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external void Texture_setExternalImage( +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void GltfResourceLoader_destroy( ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer externalImage, + ffi.Pointer tGltfResourceLoader, ); -@ffi.Native)>(isLeaf: true) -external int Texture_getLevels(ffi.Pointer tTexture); - -@ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Int, - ) ->(isLeaf: true) -external bool Texture_loadImage( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool GltfResourceLoader_asyncBeginLoad( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, ); +@ffi.Native)>(isLeaf: true) +external void GltfResourceLoader_asyncUpdateLoad(ffi.Pointer tGltfResourceLoader); + +@ffi.Native)>(isLeaf: true) +external double GltfResourceLoader_asyncGetLoadProgress(ffi.Pointer tGltfResourceLoader); + @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size) >(isLeaf: true) -external bool Texture_setImage( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - int level, +external void GltfResourceLoader_addResourceData( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer uri, ffi.Pointer data, - int size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, + int length, ); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getWidth(ffi.Pointer tTexture, int level); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool GltfResourceLoader_loadResources( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, +); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getHeight(ffi.Pointer tTexture, int level); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer IndexBufferBuilder_create(); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getDepth(ffi.Pointer tTexture, int level); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external void IndexBufferBuilder_indexCount(ffi.Pointer builder, int count); -@ffi.Native)>(isLeaf: true) -external int Texture_getFormat(ffi.Pointer tTexture); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void IndexBufferBuilder_bufferType(ffi.Pointer builder, int indexType); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getUsage(ffi.Pointer tTexture, int level); +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer IndexBufferBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Texture_generateMipMaps(ffi.Pointer tTexture, ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external void IndexBufferBuilder_destroy(ffi.Pointer builder); -@ffi.Native Function(ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Ktx1Bundle_create(ffi.Pointer ktxData, int length); +@ffi.Native)>(isLeaf: true) +external int IndexBuffer_getIndexCount(ffi.Pointer buffer); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Ktx1Bundle_getSphericalHarmonics(ffi.Pointer tBundle, ffi.Pointer harmonics); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size, ffi.Uint32) +>(isLeaf: true) +external void IndexBuffer_setBuffer( + ffi.Pointer engine, + ffi.Pointer buffer, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, +); -@ffi.Native)>(isLeaf: true) -external bool Ktx1Bundle_isCubemap(ffi.Pointer tBundle); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void IndexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); -@ffi.Native)>(isLeaf: true) -external void Ktx1Bundle_destroy(ffi.Pointer tBundle); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void IndirectLight_setRotation(ffi.Pointer tIndirectLight, ffi.Pointer rotation); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external ffi.Pointer Ktx1Reader_createTexture( - ffi.Pointer tEngine, - ffi.Pointer tBundle, - int requestId, - VoidCallback onTextureUploadComplete, +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ) +>(isLeaf: true) +external ffi.Pointer MaterialProvider_createMaterialInstance( + ffi.Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Ktx2Reader_createTexture( - ffi.Pointer tEngine, - ffi.Pointer data, - int size, -); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer NameComponentManager_create(); -@ffi.Native Function(ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true) -external ffi.Pointer Image_createEmpty(int width, int height, int channel); +@ffi.Native)>(isLeaf: true) +external void NameComponentManager_destroy(ffi.Pointer tNameComponentManager); -@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Pointer, ffi.Bool)>( - isLeaf: true, -) -external ffi.Pointer Image_decode( - ffi.Pointer data, - int length, - ffi.Pointer name, - bool alpha, +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer NameComponentManager_getName( + ffi.Pointer tNameComponentManager, + int entity, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Image_getBytes(ffi.Pointer tLinearImage); +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderManager_create( + ffi.Pointer tEngine, + ffi.Pointer tRenderer, +); -@ffi.Native)>(isLeaf: true) -external void Image_destroy(ffi.Pointer tLinearImage); +@ffi.Native)>(isLeaf: true) +external void RenderManager_destroy(ffi.Pointer tRenderer); -@ffi.Native)>(isLeaf: true) -external int Image_getWidth(ffi.Pointer tLinearImage); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_addAnimationManager( + ffi.Pointer tRenderer, + ffi.Pointer tAnimationManager, +); -@ffi.Native)>(isLeaf: true) -external int Image_getHeight(ffi.Pointer tLinearImage); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_removeAnimationManager( + ffi.Pointer tRenderer, + ffi.Pointer tAnimationManager, +); -@ffi.Native)>(isLeaf: true) -external int Image_getChannels(ffi.Pointer tLinearImage); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderTarget_getColorTexture(ffi.Pointer tRenderTarget); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderTarget_getDepthTexture(ffi.Pointer tRenderTarget); - -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer TextureSampler_create(); - -@ffi.Native< - ffi.Pointer Function( - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ) ->(isLeaf: true) -external ffi.Pointer TextureSampler_createWithFiltering( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, -); - -@ffi.Native Function(ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external ffi.Pointer TextureSampler_createWithComparison(int compareMode, int compareFunc); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setMinFilter(ffi.Pointer sampler, int filter); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setMagFilter(ffi.Pointer sampler, int filter); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeS(ffi.Pointer sampler, int mode); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeT(ffi.Pointer sampler, int mode); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeR(ffi.Pointer sampler, int mode); - -@ffi.Native, ffi.Double)>(isLeaf: true) -external void TextureSampler_setAnisotropy(ffi.Pointer sampler, double anisotropy); - -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setCompareMode(ffi.Pointer sampler, int mode, int func); - -@ffi.Native)>(isLeaf: true) -external void TextureSampler_destroy(ffi.Pointer sampler); +@ffi.Native, ffi.Uint64)>(isLeaf: true) +external void RenderManager_render(ffi.Pointer tRenderer, int frameTimeInNanos); @ffi.Native< - ffi.Pointer Function(ffi.UnsignedInt, ffi.Pointer, ffi.Pointer, ffi.Uint8, ffi.Bool) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer>, ffi.Uint8) >(isLeaf: true) -external ffi.Pointer Engine_create( - int backend, - ffi.Pointer platform, - ffi.Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, +external void RenderManager_setRenderable( + ffi.Pointer tRenderer, + ffi.Pointer swapChain, + ffi.Pointer> views, + int numViews, ); -@ffi.Native)>(isLeaf: true) -external int Engine_getSupportedFeatureLevel(ffi.Pointer tEngine); - -@ffi.Native)>(isLeaf: true) -external void Engine_destroy(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createRenderer(ffi.Pointer tEngine); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyRenderer(ffi.Pointer tEngine, ffi.Pointer tRenderer); - -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint64)>(isLeaf: true) -external ffi.Pointer Engine_createSwapChain( - ffi.Pointer tEngine, - ffi.Pointer window, - int flags, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_removeSwapChain(ffi.Pointer tRenderer, ffi.Pointer swapChain); -@ffi.Native Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Uint64)>(isLeaf: true) -external ffi.Pointer Engine_createHeadlessSwapChain( - ffi.Pointer tEngine, - int width, - int height, - int flags, -); +@ffi.Native)>(isLeaf: true) +external void RenderManager_requestRender(ffi.Pointer tRenderer); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroySwapChain(ffi.Pointer tEngine, ffi.Pointer tSwapChain); +@ffi.Native)>(isLeaf: true) +external void RenderManager_attachToRenderThread(ffi.Pointer tRenderer); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyView(ffi.Pointer tEngine, ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external void RenderManager_detachFromRenderThread(ffi.Pointer tRenderManager); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyScene(ffi.Pointer tEngine, ffi.Pointer tScene); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderManager_setPaused(ffi.Pointer tRenderer, bool paused); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyColorGrading(ffi.Pointer tEngine, ffi.Pointer tColorGrading); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createInstance(ffi.Pointer tMaterial); -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer Engine_createCamera(ffi.Pointer tEngine, int entityId); +@ffi.Native)>(isLeaf: true) +external int Material_getFeatureLevel(ffi.Pointer tMaterial); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyCamera(ffi.Pointer tEngine, ffi.Pointer tCamera); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createImageMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createView(ffi.Pointer tEngine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createGridMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer Engine_getCameraComponent(ffi.Pointer tEngine, int entityId); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createGizmoMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getTransformManager(ffi.Pointer engine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createSilhouetteMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getRenderableManager(ffi.Pointer engine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createEdgeOutlineMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getLightManager(ffi.Pointer engine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createWireframeMaterial(ffi.Pointer tEngine); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getEntityManager(ffi.Pointer engine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createTranslationAxisMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void Engine_setAutomaticInstancingEnabled(ffi.Pointer tEngine, bool enabled); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createBoneOverlayMaterial(ffi.Pointer tEngine); -@ffi.Native)>(isLeaf: true) -external int Engine_getMaxAutomaticInstances(ffi.Pointer tEngine); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool Material_hasParameter(ffi.Pointer tMaterial, ffi.Pointer propertyName); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyTexture(ffi.Pointer tEngine, ffi.Pointer tTexture); +@ffi.Native)>(isLeaf: true) +external bool MaterialInstance_isStencilWriteEnabled(ffi.Pointer materialInstance); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createFence(ffi.Pointer tEngine); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer MaterialInstance_getMaterial(ffi.Pointer materialInstance); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyFence(ffi.Pointer tEngine, ffi.Pointer tFence); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setStencilWrite(ffi.Pointer materialInstance, bool enabled); -@ffi.Native)>(isLeaf: true) -external void Engine_flushAndWait(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setCullingMode(ffi.Pointer materialInstance, int culling); -@ffi.Native)>(isLeaf: true) -external void Engine_execute(ffi.Pointer tEngine); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDoubleSided(ffi.Pointer materialInstance, bool doubleSided); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Engine_buildMaterial( - ffi.Pointer tEngine, - ffi.Pointer materialData, - int length, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDepthWrite(ffi.Pointer materialInstance, bool enabled); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyMaterial(ffi.Pointer tEngine, ffi.Pointer tMaterial); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDepthCulling(ffi.Pointer materialInstance, bool enabled); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyMaterialInstance( - ffi.Pointer tEngine, - ffi.Pointer tMaterialInstance, +@ffi.Native, ffi.Pointer, ffi.Double)>(isLeaf: true) +external void MaterialInstance_setParameterFloat( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double value, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createScene(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Bool, ffi.Float, ffi.Uint8)>( +@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>( isLeaf: true, ) -external ffi.Pointer Engine_buildSkybox( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - bool showSun, - double intensity, - int priority, +external void MaterialInstance_setParameterFloat2( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, ); @ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Bool, - ffi.Float, - ffi.Uint8, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Double, ffi.Double, ffi.Double) >(isLeaf: true) -external ffi.Pointer Engine_buildColoredSkybox( - ffi.Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, +external void MaterialInstance_setParameterFloat3( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, + double z, ); @ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32) >(isLeaf: true) -external ffi.Pointer Engine_buildIndirectLightFromIrradianceTexture( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer tIrradianceTexture, - double intensity, +external void MaterialInstance_setParameterFloat3Array( + ffi.Pointer tMaterialInstance, + ffi.Pointer propertyName, + ffi.Pointer raw, + int length, ); @ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ) >(isLeaf: true) -external ffi.Pointer Engine_buildIndirectLightFromIrradianceHarmonics( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer irradianceHarmonics, - double intensity, +external void MaterialInstance_setParameterFloat4( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, + double w, + double z, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroySkybox(ffi.Pointer tEngine, ffi.Pointer tSkybox); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyIndirectLight(ffi.Pointer tEngine, ffi.Pointer tIndirectLight); +@ffi.Native, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external void MaterialInstance_setParameterMat3( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer matrix, +); -@ffi.Native)>(isLeaf: true) -external int EntityManager_createEntity(ffi.Pointer tEntityManager); +@ffi.Native, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external void MaterialInstance_setParameterMat4( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer matrix, +); -@ffi.Native, EntityId)>(isLeaf: true) -external void EntityManager_destroyEntity(ffi.Pointer tEntityManager, int entityId); +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external void MaterialInstance_setParameterInt( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + int value, +); -@ffi.Native)>(isLeaf: true) -external void Fence_waitAndDestroy(ffi.Pointer tFence); +@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setParameterBool( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + bool value, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getDebugRegistry(ffi.Pointer tEngine); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ) +>(isLeaf: true) +external void MaterialInstance_setParameterTexture( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer texture, + ffi.Pointer sampler, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_hasProperty(ffi.Pointer tDebugRegistry, ffi.Pointer name); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setDepthFunc(ffi.Pointer materialInstance, int depthFunc); -@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) -external bool DebugRegistry_setProperty_bool( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - bool value, +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpStencilFail( + ffi.Pointer materialInstance, + int op, + int face, ); -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool DebugRegistry_setProperty_int( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - int value, -); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpDepthFail(ffi.Pointer materialInstance, int op, int face); -@ffi.Native, ffi.Pointer, ffi.Float)>(isLeaf: true) -external bool DebugRegistry_setProperty_float( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - double value, +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpDepthStencilPass( + ffi.Pointer materialInstance, + int op, + int face, ); -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_bool( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilCompareFunction( + ffi.Pointer materialInstance, + int func, + int face, ); -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_int( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, +@ffi.Native, ffi.Uint8, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilReferenceValue( + ffi.Pointer materialInstance, + int value, + int face, ); -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_float( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void MaterialInstance_setStencilReadMask(ffi.Pointer materialInstance, int mask); + +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void MaterialInstance_setStencilWriteMask(ffi.Pointer materialInstance, int mask); + +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setTransparencyMode( + ffi.Pointer materialInstance, + int transparencyMode, ); +@ffi.Native)>(isLeaf: true) +external int MaterialInstance_getTransparencyMode(ffi.Pointer materialInstance); + +@ffi.Native)>(isLeaf: true) +external int Material_getBlendingMode(ffi.Pointer material); + @ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, + ffi.Pointer Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, + ffi.Uint16, + ffi.IntPtr, + ffi.UnsignedInt, + ffi.UnsignedInt, ) >(isLeaf: true) -external ffi.Pointer MaterialProvider_createMaterialInstance( - ffi.Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, +external ffi.Pointer Texture_build( + ffi.Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import$, + int sampler, + int format, ); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer VertexBufferBuilder_create(); - -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void VertexBufferBuilder_bufferCount(ffi.Pointer builder, int count); +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external void Texture_setExternalImage( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer externalImage, +); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external void VertexBufferBuilder_vertexCount(ffi.Pointer builder, int count); +@ffi.Native)>(isLeaf: true) +external int Texture_getLevels(ffi.Pointer tTexture); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.UnsignedInt, - ffi.Uint8, + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, ffi.UnsignedInt, - ffi.Uint32, - ffi.Uint8, + ffi.UnsignedInt, + ffi.Int, ) >(isLeaf: true) -external void VertexBufferBuilder_attribute( - ffi.Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, -); - -@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void VertexBufferBuilder_normalized(ffi.Pointer builder, int attribute, bool normalize); - -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer VertexBufferBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, +external bool Texture_loadImage( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, ); -@ffi.Native)>(isLeaf: true) -external void VertexBufferBuilder_destroy(ffi.Pointer builder); - -@ffi.Native)>(isLeaf: true) -external int VertexBuffer_getVertexCount(ffi.Pointer buffer); - @ffi.Native< - ffi.Void Function( + ffi.Bool Function( ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer, ffi.Size, ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, ) >(isLeaf: true) -external void VertexBuffer_setBufferAt( - ffi.Pointer engine, - ffi.Pointer buffer, - int bufferIndex, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, +external bool Texture_setImage( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + int level, + ffi.Pointer data, + int size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void VertexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); - -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer IndexBufferBuilder_create(); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getWidth(ffi.Pointer tTexture, int level); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external void IndexBufferBuilder_indexCount(ffi.Pointer builder, int count); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getHeight(ffi.Pointer tTexture, int level); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void IndexBufferBuilder_bufferType(ffi.Pointer builder, int indexType); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getDepth(ffi.Pointer tTexture, int level); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer IndexBufferBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, -); +@ffi.Native)>(isLeaf: true) +external int Texture_getFormat(ffi.Pointer tTexture); -@ffi.Native)>(isLeaf: true) -external void IndexBufferBuilder_destroy(ffi.Pointer builder); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getUsage(ffi.Pointer tTexture, int level); -@ffi.Native)>(isLeaf: true) -external int IndexBuffer_getIndexCount(ffi.Pointer buffer); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Texture_generateMipMaps(ffi.Pointer tTexture, ffi.Pointer tEngine); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size, ffi.Uint32) ->(isLeaf: true) -external void IndexBuffer_setBuffer( - ffi.Pointer engine, - ffi.Pointer buffer, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, -); +@ffi.Native Function(ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Ktx1Bundle_create(ffi.Pointer ktxData, int length); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void IndexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Ktx1Bundle_getSphericalHarmonics(ffi.Pointer tBundle, ffi.Pointer harmonics); -@ffi.Native, EntityId)>(isLeaf: true) -external double4x4 TransformManager_getLocalTransform(ffi.Pointer tTransformManager, int entityId); +@ffi.Native)>(isLeaf: true) +external bool Ktx1Bundle_isCubemap(ffi.Pointer tBundle); -@ffi.Native, EntityId)>(isLeaf: true) -external double4x4 TransformManager_getWorldTransform(ffi.Pointer tTransformManager, int entityId); +@ffi.Native)>(isLeaf: true) +external void Ktx1Bundle_destroy(ffi.Pointer tBundle); -@ffi.Native, EntityId, double4x4)>(isLeaf: true) -external void TransformManager_setTransform( - ffi.Pointer tTransformManager, - int entityId, - double4x4 transform, +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external ffi.Pointer Ktx1Reader_createTexture( + ffi.Pointer tEngine, + ffi.Pointer tBundle, + int requestId, + VoidCallback onTextureUploadComplete, ); -@ffi.Native, EntityId, Aabb3)>(isLeaf: true) -external bool TransformManager_transformToUnitCube( - ffi.Pointer tTransformManager, - int entityId, - Aabb3 boundingBox, +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Ktx2Reader_createTexture( + ffi.Pointer tEngine, + ffi.Pointer data, + int size, ); -@ffi.Native, EntityId, EntityId, ffi.Bool)>(isLeaf: true) -external void TransformManager_setParent( - ffi.Pointer tTransformManager, - int child, - int parent, - bool preserveScaling, +@ffi.Native Function(ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true) +external ffi.Pointer Image_createEmpty(int width, int height, int channel); + +@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Pointer, ffi.Bool)>( + isLeaf: true, +) +external ffi.Pointer Image_decode( + ffi.Pointer data, + int length, + ffi.Pointer name, + bool alpha, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getParent(ffi.Pointer tTransformManager, int child); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Image_getBytes(ffi.Pointer tLinearImage); -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getAncestor(ffi.Pointer tTransformManager, int childEntityId); +@ffi.Native)>(isLeaf: true) +external void Image_destroy(ffi.Pointer tLinearImage); -@ffi.Native, EntityId)>(isLeaf: true) -external void TransformManager_createComponent(ffi.Pointer tTransformManager, int entity); +@ffi.Native)>(isLeaf: true) +external int Image_getWidth(ffi.Pointer tLinearImage); -@ffi.Native, EntityId)>(isLeaf: true) -external void TransformManager_removeComponent(ffi.Pointer tTransformManager, int entity); +@ffi.Native)>(isLeaf: true) +external int Image_getHeight(ffi.Pointer tLinearImage); -@ffi.Native, EntityId)>(isLeaf: true) -external bool TransformManager_hasComponent(ffi.Pointer tTransformManager, int entityId); +@ffi.Native)>(isLeaf: true) +external int Image_getChannels(ffi.Pointer tLinearImage); -@ffi.Native)>(isLeaf: true) -external bool TransformManager_empty(ffi.Pointer tTransformManager); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderTarget_getColorTexture(ffi.Pointer tRenderTarget); -@ffi.Native)>(isLeaf: true) -external int TransformManager_getComponentCount(ffi.Pointer tTransformManager); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderTarget_getDepthTexture(ffi.Pointer tRenderTarget); -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getChildCount(ffi.Pointer tTransformManager, int entityId); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer TextureSampler_create(); -@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) -external void TransformManager_getChildren( - ffi.Pointer tTransformManager, - int entityId, - ffi.Pointer children, - int count, +@ffi.Native< + ffi.Pointer Function( + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ) +>(isLeaf: true) +external ffi.Pointer TextureSampler_createWithFiltering( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, ); -@ffi.Native)>(isLeaf: true) -external void TransformManager_openLocalTransformTransaction(ffi.Pointer tTransformManager); - -@ffi.Native)>(isLeaf: true) -external void TransformManager_commitLocalTransformTransaction(ffi.Pointer tTransformManager); +@ffi.Native Function(ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external ffi.Pointer TextureSampler_createWithComparison(int compareMode, int compareFunc); -@ffi.Native, ffi.Pointer, ffi.UnsignedInt)>(isLeaf: true) -external int LightManager_createLight( - ffi.Pointer tEngine, - ffi.Pointer tLightManager, - int tLightTtype, -); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setMinFilter(ffi.Pointer sampler, int filter); -@ffi.Native, EntityId)>(isLeaf: true) -external void LightManager_destroyLight(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setMagFilter(ffi.Pointer sampler, int filter); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_hasComponent(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeS(ffi.Pointer sampler, int mode); -@ffi.Native, EntityId)>(isLeaf: true) -external int LightManager_getType(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeT(ffi.Pointer sampler, int mode); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isDirectional(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeR(ffi.Pointer sampler, int mode); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isPointLight(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Double)>(isLeaf: true) +external void TextureSampler_setAnisotropy(ffi.Pointer sampler, double anisotropy); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isSpotLight(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setCompareMode(ffi.Pointer sampler, int mode, int func); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setPosition( - ffi.Pointer tLightManager, - int light, - double x, - double y, - double z, +@ffi.Native)>(isLeaf: true) +external void TextureSampler_destroy(ffi.Pointer sampler); + +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external ffi.Pointer RenderTarget_create( + ffi.Pointer tEngine, + ffi.Pointer color, + ffi.Pointer depth, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getPosition(ffi.Pointer tLightManager, int light); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderTarget_destroy(ffi.Pointer tEngine, ffi.Pointer tRenderTarget); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setDirection( - ffi.Pointer tLightManager, - int light, - double x, - double y, - double z, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ) +>(isLeaf: true) +external void Renderer_setClearOptions( + ffi.Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getDirection(ffi.Pointer tLightManager, int light); +@ffi.Native, ffi.Pointer, ffi.Uint64)>(isLeaf: true) +external bool Renderer_beginFrame( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + int frameTimeInNanos, +); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setColor(ffi.Pointer tLightManager, int entity, double r, double g, double b); +@ffi.Native)>(isLeaf: true) +external void Renderer_endFrame(ffi.Pointer tRenderer); -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setColorTemperature( - ffi.Pointer tLightManager, - int entity, - double colorTemperature, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Renderer_render(ffi.Pointer tRenderer, ffi.Pointer tView); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getColor(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Renderer_renderStandaloneView(ffi.Pointer tRenderer, ffi.Pointer tView); -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensity(ffi.Pointer tLightManager, int entity, double intensity); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Size, + ) +>(isLeaf: true) +external void Renderer_readPixels( + ffi.Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + ffi.Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + ffi.Pointer out, + int outLength, +); -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensityCandela(ffi.Pointer tLightManager, int entity, double intensity); +@ffi.Native, ffi.Float, ffi.Float, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void Renderer_setFrameInterval( + ffi.Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, +); -@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensityWatts( - ffi.Pointer tLightManager, - int entity, - double watts, - double efficiency, +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Int, + ffi.UnsignedInt, + Aabb3, + ) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createFromBuffers( + ffi.Pointer tEngine, + ffi.Pointer tVertexBuffer, + ffi.Pointer tIndexBuffer, + ffi.Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getIntensity(ffi.Pointer tLightManager, int entity); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createFromFilamentAsset( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tFilamentAsset, + bool rebuildVertices, +); -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setFalloff(ffi.Pointer tLightManager, int entity, double falloff); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getFilamentAsset(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getFalloff(ffi.Pointer tLightManager, int entity); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getType(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setSpotLightCone( - ffi.Pointer tLightManager, - int entity, - double inner, - double outer, -); +@ffi.Native)>(isLeaf: true) +external void SceneAsset_destroy(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSpotLightOuterCone(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_addToScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSpotLightInnerCone(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_removeFromScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunAngularRadius( - ffi.Pointer tLightManager, - int entity, - double angularRadius, -); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getEntity(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunAngularRadius(ffi.Pointer tLightManager, int entity); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getChildEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunHaloSize(ffi.Pointer tLightManager, int entity, double haloSize); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_getChildEntities(ffi.Pointer tSceneAsset, ffi.Pointer out); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunHaloSize(ffi.Pointer tLightManager, int entity); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getCameraEntities(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunHaloFalloff(ffi.Pointer tLightManager, int entity, double haloFalloff); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getCameraEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunHaloFalloff(ffi.Pointer tLightManager, int entity); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getLightEntities(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void LightManager_setShadowCaster(ffi.Pointer tLightManager, int entity, bool enabled); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getLightEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isShadowCaster(ffi.Pointer tLightManager, int entity); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getInstance(ffi.Pointer tSceneAsset, int index); -@ffi.Native, EntityId, TShadowOptions)>(isLeaf: true) -external void LightManager_setShadowOptions( - ffi.Pointer tLightManager, - int entity, - TShadowOptions options, +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getInstanceCount(ffi.Pointer tSceneAsset); + +@ffi.Native< + ffi.Pointer Function(ffi.Pointer, ffi.Pointer>, ffi.Int) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createInstance( + ffi.Pointer asset, + ffi.Pointer> materialInstances, + int materialInstanceCount, ); -@ffi.Native, EntityId)>(isLeaf: true) -external TShadowOptions LightManager_getShadowOptions(ffi.Pointer tLightManager, int entity); +@ffi.Native)>(isLeaf: true) +external Aabb3 SceneAsset_getBoundingBox(ffi.Pointer asset); -@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void LightManager_setLightChannel( - ffi.Pointer tLightManager, - int entity, - int channel, - bool enable, +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getVertexBuffer( + ffi.Pointer tSceneAsset, + int primitiveIndex, ); -@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) -external bool LightManager_getLightChannel(ffi.Pointer tLightManager, int entity, int channel); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getIndexBuffer(ffi.Pointer tSceneAsset, int primitiveIndex); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void LightManager_computeUniformSplits(ffi.Pointer splitPositions, int cascades); +@ffi.Native, EntityId)>(isLeaf: true) +external int SceneAsset_getPrimitiveOffsetForEntity(ffi.Pointer tSceneAsset, int entity); -@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float)>(isLeaf: true) -external void LightManager_computeLogSplits( - ffi.Pointer splitPositions, - int cascades, - double near, - double far, +@ffi.Native)>(isLeaf: true) +external void SceneAsset_releaseSourceData(ffi.Pointer tSceneAsset); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void SceneAsset_setFlatShading(ffi.Pointer tSceneAsset, bool flatShading); + +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_getBones(ffi.Pointer tSceneAsset, int skinIndex, ffi.Pointer out); + +@ffi.Native, ffi.Size)>(isLeaf: true) +external int SceneAsset_getBoneCount(ffi.Pointer tSceneAsset, int skinIndex); + +@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Size)>(isLeaf: true) +external ffi.Pointer SceneAsset_getBoneName( + ffi.Pointer tSceneAsset, + int skinIndex, + int boneIndex, ); -@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) -external void LightManager_computePracticalSplits( - ffi.Pointer splitPositions, - int cascades, - double near, - double far, - double lambda, +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer SurfaceOrientationBuilder_create(); + +@ffi.Native, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_vertexCount(ffi.Pointer builder, int count); + +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_normals( + ffi.Pointer builder, + ffi.Pointer normals, + int stride, ); -@ffi.Native(isLeaf: true) -external double LightManager_rgbToColorTemperature(double r, double g, double b); +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_tangents( + ffi.Pointer builder, + ffi.Pointer tangents, + int stride, +); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer RenderThread_create(); +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_uvs( + ffi.Pointer builder, + ffi.Pointer uvs, + int stride, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderThread_createForCanvas(ffi.Pointer canvasSelector); +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_positions( + ffi.Pointer builder, + ffi.Pointer positions, + int stride, +); -@ffi.Native)>(isLeaf: true) -external void RenderThread_destroy(ffi.Pointer renderThread); +@ffi.Native, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangleCount(ffi.Pointer builder, int count); -@ffi.Native>)>(isLeaf: true) -external void RenderThread_addTask(ffi.Pointer> task); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangles_uint( + ffi.Pointer builder, + ffi.Pointer triangles, +); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Uint8, - ffi.Uint32, - VoidCallback, - ) ->(isLeaf: true) -external void RenderManager_setRenderableRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - ffi.Pointer> tViews, - int numViews, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangles_ushort( + ffi.Pointer builder, + ffi.Pointer triangles, ); -@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderManager_renderRenderThread( - ffi.Pointer tRenderManager, - int frameTimeInNanos, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SurfaceOrientationBuilder_build( + ffi.Pointer builder, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( +@ffi.Native)>(isLeaf: true) +external void SurfaceOrientationBuilder_destroy(ffi.Pointer builder); + +@ffi.Native)>(isLeaf: true) +external int SurfaceOrientation_getVertexCount(ffi.Pointer orientation); + +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void RenderManager_addAnimationManagerRenderThread( - ffi.Pointer tRenderManager, - ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, +external void SurfaceOrientation_getQuats_float4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void RenderManager_removeAnimationManagerRenderThread( - ffi.Pointer tRenderManager, - ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, +external void SurfaceOrientation_getQuats_short4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void RenderManager_removeSwapChainRenderThread( - ffi.Pointer tRenderManager, - ffi.Pointer tSwapChain, - int requestId, - VoidCallback onComplete, +external void SurfaceOrientation_getQuats_half4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void AnimationManager_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native)>(isLeaf: true) +external void SurfaceOrientation_destroy(ffi.Pointer orientation); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void AnimationManager_destroyRenderThread( - ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double4x4 TransformManager_getLocalTransform(ffi.Pointer tTransformManager, int entityId); -@ffi.Native< - ffi.Void Function( - ffi.UnsignedInt, - ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_createRenderThread( - int backend, - ffi.Pointer platform, - ffi.Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - ffi.Pointer)>> onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double4x4 TransformManager_getWorldTransform(ffi.Pointer tTransformManager, int entityId); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Engine_createRendererRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, double4x4)>(isLeaf: true) +external void TransformManager_setTransform( + ffi.Pointer tTransformManager, + int entityId, + double4x4 transform, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyRendererRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tRenderer, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, Aabb3)>(isLeaf: true) +external bool TransformManager_transformToUnitCube( + ffi.Pointer tTransformManager, + int entityId, + Aabb3 boundingBox, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint64, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_createSwapChainRenderThread( - ffi.Pointer tEngine, - ffi.Pointer window, - int flags, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, EntityId, ffi.Bool)>(isLeaf: true) +external void TransformManager_setParent( + ffi.Pointer tTransformManager, + int child, + int parent, + bool preserveScaling, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint64, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_createHeadlessSwapChainRenderThread( - ffi.Pointer tEngine, - int width, - int height, - int flags, - ffi.Pointer)>> onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getParent(ffi.Pointer tTransformManager, int child); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_createCameraRenderThread( - ffi.Pointer tEngine, - int entityId, - ffi.Pointer)>> onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getAncestor(ffi.Pointer tTransformManager, int childEntityId); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyCameraRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tCamera, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external void TransformManager_createComponent(ffi.Pointer tTransformManager, int entity); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Engine_createViewRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external void TransformManager_removeComponent(ffi.Pointer tTransformManager, int entity); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer materialData, - int length, - ffi.Pointer)>> onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external bool TransformManager_hasComponent(ffi.Pointer tTransformManager, int entityId); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native)>(isLeaf: true) +external bool TransformManager_empty(ffi.Pointer tTransformManager); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySwapChainRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tSwapChain, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external int TransformManager_getComponentCount(ffi.Pointer tTransformManager); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyViewRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tView, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getChildCount(ffi.Pointer tTransformManager, int entityId); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySceneRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) +external void TransformManager_getChildren( + ffi.Pointer tTransformManager, + int entityId, + ffi.Pointer children, + int count, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyColorGradingRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tColorGrading, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external void TransformManager_openLocalTransformTransaction(ffi.Pointer tTransformManager); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tMaterial, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external void TransformManager_commitLocalTransformTransaction(ffi.Pointer tTransformManager); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void Engine_destroyMaterialInstanceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tMaterialInstance, - int requestId, - VoidCallback onComplete, -); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer VertexBufferBuilder_create(); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySkyboxRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tSkybox, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void VertexBufferBuilder_bufferCount(ffi.Pointer builder, int count); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void Engine_destroyIndirectLightRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tIndirectLight, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external void VertexBufferBuilder_vertexCount(ffi.Pointer builder, int count); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint8, - ffi.Uint16, - ffi.IntPtr, + ffi.Pointer, ffi.UnsignedInt, + ffi.Uint8, ffi.UnsignedInt, - ffi.Pointer)>>, + ffi.Uint32, + ffi.Uint8, ) >(isLeaf: true) -external void Texture_buildRenderThread( - ffi.Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import$, - int sampler, - int format, - ffi.Pointer)>> onComplete, +external void VertexBufferBuilder_attribute( + ffi.Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback) ->(isLeaf: true) -external void Texture_setExternalImageRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer externalImage, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void VertexBufferBuilder_normalized(ffi.Pointer builder, int attribute, bool normalize); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Texture_generateMipMapsRenderThread( - ffi.Pointer tTexture, - ffi.Pointer tEngine, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer VertexBufferBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - VoidCallback, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Ktx1Reader_createTextureRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBundle, - int requestId, - VoidCallback onTextureUploadComplete, - ffi.Pointer)>> onComplete, -); +@ffi.Native)>(isLeaf: true) +external void VertexBufferBuilder_destroy(ffi.Pointer builder); + +@ffi.Native)>(isLeaf: true) +external int VertexBuffer_getVertexCount(ffi.Pointer buffer); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, ffi.Size, - ffi.Pointer)>>, + ffi.Uint32, ) >(isLeaf: true) -external void Ktx2Reader_createTextureRenderThread( - ffi.Pointer tEngine, - ffi.Pointer data, - int size, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyTextureRenderThread( +external void VertexBuffer_setBufferAt( ffi.Pointer engine, - ffi.Pointer tTexture, - int requestId, - VoidCallback onComplete, + ffi.Pointer buffer, + int bufferIndex, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Engine_createFenceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void VertexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Fence_waitAndDestroyRenderThread(ffi.Pointer tFence, int requestId, VoidCallback onComplete); +@ffi.Native(isLeaf: true) +external void FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyFenceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tFence, - int requestId, - VoidCallback onComplete, -); +@ffi.Native() +external void FrameScheduler_stop(); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_flushAndWaitRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native)>(isLeaf: true) +external int FrameScheduler_initDartApi(ffi.Pointer data); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_executeRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native(isLeaf: true) +external void FrameScheduler_startWithPort(int port, int targetFps); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ffi.Float, - ffi.Uint8, - ffi.Pointer)>>, +@ffi.Native(isLeaf: true) +external void FrameScheduler_setTargetFps(int fps); + +@ffi.Native(isLeaf: true) +external int FrameScheduler_steadyClockUs(); + +@ffi.Native, ffi.Pointer, ffi.UnsignedInt)>(isLeaf: true) +external int LightManager_createLight( + ffi.Pointer tEngine, + ffi.Pointer tLightManager, + int tLightTtype, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external void LightManager_destroyLight(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_hasComponent(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external int LightManager_getType(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isDirectional(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isPointLight(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isSpotLight(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setPosition( + ffi.Pointer tLightManager, + int light, + double x, + double y, + double z, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getPosition(ffi.Pointer tLightManager, int light); + +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setDirection( + ffi.Pointer tLightManager, + int light, + double x, + double y, + double z, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getDirection(ffi.Pointer tLightManager, int light); + +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setColor(ffi.Pointer tLightManager, int entity, double r, double g, double b); + +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setColorTemperature( + ffi.Pointer tLightManager, + int entity, + double colorTemperature, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getColor(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensity(ffi.Pointer tLightManager, int entity, double intensity); + +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensityCandela(ffi.Pointer tLightManager, int entity, double intensity); + +@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensityWatts( + ffi.Pointer tLightManager, + int entity, + double watts, + double efficiency, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getIntensity(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setFalloff(ffi.Pointer tLightManager, int entity, double falloff); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getFalloff(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setSpotLightCone( + ffi.Pointer tLightManager, + int entity, + double inner, + double outer, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSpotLightOuterCone(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSpotLightInnerCone(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunAngularRadius( + ffi.Pointer tLightManager, + int entity, + double angularRadius, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunAngularRadius(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunHaloSize(ffi.Pointer tLightManager, int entity, double haloSize); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunHaloSize(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunHaloFalloff(ffi.Pointer tLightManager, int entity, double haloFalloff); + +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunHaloFalloff(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void LightManager_setShadowCaster(ffi.Pointer tLightManager, int entity, bool enabled); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isShadowCaster(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, TShadowOptions)>(isLeaf: true) +external void LightManager_setShadowOptions( + ffi.Pointer tLightManager, + int entity, + TShadowOptions options, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external TShadowOptions LightManager_getShadowOptions(ffi.Pointer tLightManager, int entity); + +@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void LightManager_setLightChannel( + ffi.Pointer tLightManager, + int entity, + int channel, + bool enable, +); + +@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) +external bool LightManager_getLightChannel(ffi.Pointer tLightManager, int entity, int channel); + +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void LightManager_computeUniformSplits(ffi.Pointer splitPositions, int cascades); + +@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float)>(isLeaf: true) +external void LightManager_computeLogSplits( + ffi.Pointer splitPositions, + int cascades, + double near, + double far, +); + +@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) +external void LightManager_computePracticalSplits( + ffi.Pointer splitPositions, + int cascades, + double near, + double far, + double lambda, +); + +@ffi.Native(isLeaf: true) +external double LightManager_rgbToColorTemperature(double r, double g, double b); + +@ffi.Native, EntityId)>(isLeaf: true) +external void RenderableManager_destroyEntity(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_hasComponent(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native)>(isLeaf: true) +external bool RenderableManager_empty(ffi.Pointer tRenderableManager); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isRenderable(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native)>(isLeaf: true) +external int RenderableManager_getComponentCount(ffi.Pointer tRenderableManager); + +@ffi.Native, EntityId, ffi.Int, ffi.Pointer)>( + isLeaf: true, +) +external bool RenderableManager_setMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + ffi.Pointer tMaterialInstance, +); + +@ffi.Native Function(ffi.Pointer, EntityId, ffi.Int)>(isLeaf: true) +external ffi.Pointer RenderableManager_getMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, +); + +@ffi.Native, EntityId, ffi.Int)>(isLeaf: true) +external void RenderableManager_clearMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, +); + +@ffi.Native< + ffi.Bool Function( + ffi.Pointer, + EntityId, + ffi.Int, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, ) >(isLeaf: true) -external void Engine_buildSkyboxRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - bool showSun, - double intensity, +external bool RenderableManager_setGeometryAtNonIndexed( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int type, + ffi.Pointer vertices, + int offset, + int count, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getPrimitiveCount(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getAxisAlignedBoundingBox( + ffi.Pointer tRenderableManager, + int entityId, +); + +@ffi.Native, EntityId, Aabb3)>(isLeaf: true) +external void RenderableManager_setAxisAlignedBoundingBox( + ffi.Pointer tRenderableManager, + int entityId, + Aabb3 aabb, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getAabb(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getBoundingBox(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setLayerMask( + ffi.Pointer tRenderableManager, + int entityId, + int select, + int values, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getLayerMask(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setVisibilityLayer( + ffi.Pointer tRenderableManager, + int entityId, + int layer, +); + +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setPriority( + ffi.Pointer tRenderableManager, + int entityId, int priority, - ffi.Pointer)>> onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Bool, - ffi.Float, - ffi.Uint8, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildColoredSkyboxRenderThread( - ffi.Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getPriority(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, +); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setCulling( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_getCulling(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setFogEnabled( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Float, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildIndirectLightFromIrradianceTextureRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer tIrradianceTexture, - double intensity, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_getFogEnabled(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setLightChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, + bool enable, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Float, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer harmonics, - double intensity, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) +external bool RenderableManager_getLightChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Uint32, - VoidCallback, - ) ->(isLeaf: true) -external void Renderer_setClearOptionsRenderThread( - ffi.Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setCastShadows( + ffi.Pointer tRenderableManager, + int entityId, + bool castShadows, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint64, - ffi.Pointer>, - ) ->(isLeaf: true) -external void Renderer_beginFrameRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - int frameTimeInNanos, - ffi.Pointer> onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isShadowCaster(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setReceiveShadows( + ffi.Pointer tRenderableManager, + int entityId, + bool receiveShadows, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_endFrameRenderThread(ffi.Pointer tRenderer, int requestId, VoidCallback onComplete); +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isShadowReceiver(ffi.Pointer tRenderableManager, int entityId); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_renderRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tView, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setScreenSpaceContactShadows( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_renderStandaloneViewRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tView, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Size, ffi.Uint16)>(isLeaf: true) +external void RenderableManager_setBlendOrderAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int order, +); + +@ffi.Native, EntityId, ffi.Size, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setGlobalBlendOrderEnabledAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + bool enabled, +); + +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setMorphWeights( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer weights, + int count, + int offset, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getMorphTargetCount(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setBonesFromMat4( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer transforms, + int boneCount, + int offset, +); + +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setBonesFromBone( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer bones, + int boneCount, + int offset, +); + +@ffi.Native Function(ffi.Size)>(isLeaf: true) +external ffi.Pointer RenderableBuilder_create(int primitiveCount); + +@ffi.Native)>(isLeaf: true) +external void RenderableBuilder_destroy(ffi.Pointer builder); + +@ffi.Native, Aabb3)>(isLeaf: true) +external void RenderableBuilder_boundingBox(ffi.Pointer builder, Aabb3 aabb); + +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_material( + ffi.Pointer builder, + int primitiveIndex, + ffi.Pointer materialInstance, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint8, + ffi.Pointer, + ffi.Pointer, + ffi.Size, ffi.Size, - ffi.Uint32, - VoidCallback, ) >(isLeaf: true) -external void Renderer_readPixelsRenderThread( - ffi.Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - ffi.Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - ffi.Pointer out, - int outLength, - int requestId, - VoidCallback onComplete, +external void RenderableBuilder_geometry( + ffi.Pointer builder, + int primitiveIndex, + int type, + ffi.Pointer vertices, + ffi.Pointer indices, + int offset, + int count, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Size, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, ) >(isLeaf: true) -external void Material_createInstanceRenderThread( - ffi.Pointer tMaterial, - ffi.Pointer)>> onComplete, +external void RenderableBuilder_geometryNonIndexed( + ffi.Pointer builder, + int primitiveIndex, + int type, + ffi.Pointer vertices, + int offset, + int count, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - VoidCallback, - ) ->(isLeaf: true) -external void MaterialInstance_setParameterTextureRenderThread( - ffi.Pointer tMaterialInstance, - ffi.Pointer propertyName, - ffi.Pointer tTexture, - ffi.Pointer tSampler, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_priority(ffi.Pointer builder, int priority); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createImageMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_channel(ffi.Pointer builder, int channel); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createGizmoMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_culling(ffi.Pointer builder, bool enabled); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createBoneOverlayMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_castShadows(ffi.Pointer builder, bool enabled); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createSilhouetteMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_receiveShadows(ffi.Pointer builder, bool enabled); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createEdgeOutlineMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_fog(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_lightChannel(ffi.Pointer builder, int channel, bool enabled); + +@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_layerMask(ffi.Pointer builder, int select, int values); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_screenSpaceContactShadows(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Size, ffi.Uint16)>(isLeaf: true) +external void RenderableBuilder_blendOrder(ffi.Pointer builder, int primitiveIndex, int order); + +@ffi.Native, ffi.Size, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_globalBlendOrderEnabled( + ffi.Pointer builder, + int primitiveIndex, + bool enabled, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createWireframeMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Size)>(isLeaf: true) +external void RenderableBuilder_instances(ffi.Pointer builder, int instanceCount); + +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_skinningFromMat4( + ffi.Pointer builder, + int boneCount, + ffi.Pointer transforms, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createTranslationAxisMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_skinningFromBone( + ffi.Pointer builder, + int boneCount, + ffi.Pointer bones, ); -@ffi.Native)>>)>( +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_enableSkinningBuffers(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Size, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void ColorGradingBuilder_createRenderThread( - ffi.Pointer)>> onComplete, +external void RenderableBuilder_boneIndicesAndWeights( + ffi.Pointer builder, + int primitiveIndex, + ffi.Pointer indicesAndWeights, + int count, + int bonesPerVertex, ); +@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) +external int RenderableBuilder_build(ffi.Pointer builder, ffi.Pointer engine, int entity); + +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void Skybox_setColor(ffi.Pointer tSkybox, double r, double g, double b, double a); + +/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). +@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void Skybox_setLayerMask(ffi.Pointer tSkybox, int select, int values); + +/// Returns the visibility mask bits. +@ffi.Native)>(isLeaf: true) +external int Skybox_getLayerMask(ffi.Pointer tSkybox); + +/// Returns the skybox intensity in lux. +@ffi.Native)>(isLeaf: true) +external double Skybox_getIntensity(ffi.Pointer tSkybox); + +/// Returns the environment texture, or nullptr for a color-only skybox. +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Skybox_getTexture(ffi.Pointer tSkybox); + @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) + ffi.Pointer Function(ffi.UnsignedInt, ffi.Pointer, ffi.Pointer, ffi.Uint8, ffi.Bool) >(isLeaf: true) -external void ColorGradingBuilder_buildRenderThread( - ffi.Pointer tBuilder, +external ffi.Pointer Engine_create( + int backend, + ffi.Pointer platform, + ffi.Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, +); + +@ffi.Native)>(isLeaf: true) +external int Engine_getSupportedFeatureLevel(ffi.Pointer tEngine); + +@ffi.Native)>(isLeaf: true) +external void Engine_destroy(ffi.Pointer tEngine); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createRenderer(ffi.Pointer tEngine); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyRenderer(ffi.Pointer tEngine, ffi.Pointer tRenderer); + +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint64)>(isLeaf: true) +external ffi.Pointer Engine_createSwapChain( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + ffi.Pointer window, + int flags, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void ColorGradingBuilder_destroyRenderThread( - ffi.Pointer tBuilder, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Uint64)>(isLeaf: true) +external ffi.Pointer Engine_createHeadlessSwapChain( + ffi.Pointer tEngine, + int width, + int height, + int flags, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createLinearRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroySwapChain(ffi.Pointer tEngine, ffi.Pointer tSwapChain); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyView(ffi.Pointer tEngine, ffi.Pointer tView); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyScene(ffi.Pointer tEngine, ffi.Pointer tScene); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyColorGrading(ffi.Pointer tEngine, ffi.Pointer tColorGrading); + +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer Engine_createCamera(ffi.Pointer tEngine, int entityId); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyCamera(ffi.Pointer tEngine, ffi.Pointer tCamera); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createView(ffi.Pointer tEngine); + +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer Engine_getCameraComponent(ffi.Pointer tEngine, int entityId); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getTransformManager(ffi.Pointer engine); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getRenderableManager(ffi.Pointer engine); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getLightManager(ffi.Pointer engine); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getEntityManager(ffi.Pointer engine); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void Engine_setAutomaticInstancingEnabled(ffi.Pointer tEngine, bool enabled); + +@ffi.Native)>(isLeaf: true) +external int Engine_getMaxAutomaticInstances(ffi.Pointer tEngine); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyTexture(ffi.Pointer tEngine, ffi.Pointer tTexture); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createFence(ffi.Pointer tEngine); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyFence(ffi.Pointer tEngine, ffi.Pointer tFence); + +@ffi.Native)>(isLeaf: true) +external void Engine_flushAndWait(ffi.Pointer tEngine); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createACESRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native)>(isLeaf: true) +external void Engine_execute(ffi.Pointer tEngine); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createACESLegacyRenderThread( +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Engine_buildMaterial( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + ffi.Pointer materialData, + int length, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createFilmicRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyMaterial(ffi.Pointer tEngine, ffi.Pointer tMaterial); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createPBRNeutralRenderThread( +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyMaterialInstance( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + ffi.Pointer tMaterialInstance, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createAGXRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createScene(ffi.Pointer tEngine); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Int, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void ToneMapper_createAGXWithLookRenderThread( +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Bool, ffi.Float, ffi.Uint8)>( + isLeaf: true, +) +external ffi.Pointer Engine_buildSkybox( ffi.Pointer tEngine, - int look, - ffi.Pointer)>> onComplete, + ffi.Pointer tTexture, + bool showSun, + double intensity, + int priority, ); @ffi.Native< - ffi.Void Function( + ffi.Pointer Function( ffi.Pointer, ffi.Float, ffi.Float, ffi.Float, ffi.Float, - ffi.Pointer)>>, + ffi.Bool, + ffi.Float, + ffi.Uint8, ) >(isLeaf: true) -external void ToneMapper_createGenericRenderThread( +external ffi.Pointer Engine_buildColoredSkybox( ffi.Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, - ffi.Pointer)>> onComplete, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) >(isLeaf: true) -external void ToneMapper_createDisplayRangeRenderThread( +external ffi.Pointer Engine_buildIndirectLightFromIrradianceTexture( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void ToneMapper_destroyRenderThread( - ffi.Pointer tToneMapper, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) -external void View_pickRenderThread(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setColorGradingRenderThread( - ffi.Pointer tView, - ffi.Pointer tColorGrading, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setBloomRenderThread( - ffi.Pointer tView, - bool enabled, - double strength, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setCameraRenderThread( - ffi.Pointer tView, - ffi.Pointer tCamera, - int requestId, - VoidCallback onComplete, + ffi.Pointer tReflectionsTexture, + ffi.Pointer tIrradianceTexture, + double intensity, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) >(isLeaf: true) -external void View_getNameRenderThread( - ffi.Pointer tView, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setNameRenderThread( - ffi.Pointer tView, - ffi.Pointer name, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setViewportRenderThread( - ffi.Pointer tView, - int width, - int height, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setRenderTargetRenderThread( - ffi.Pointer tView, - ffi.Pointer tRenderTarget, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setAntiAliasingRenderThread( - ffi.Pointer tView, - bool msaa, - bool fxaa, - bool taa, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setPostProcessingRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFrustumCullingEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setStencilBufferEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setDitheringEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +external ffi.Pointer Engine_buildIndirectLightFromIrradianceHarmonics( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer irradianceHarmonics, + double intensity, ); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setRenderQualityRenderThread( - ffi.Pointer tView, - int qualityLevel, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroySkybox(ffi.Pointer tEngine, ffi.Pointer tSkybox); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setSceneRenderThread( - ffi.Pointer tView, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyIndirectLight(ffi.Pointer tEngine, ffi.Pointer tIndirectLight); -@ffi.Native, ffi.Int, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setLayerEnabledRenderThread( - ffi.Pointer tView, - int layer, - bool visible, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external int EntityManager_createEntity(ffi.Pointer tEntityManager); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setBlendModeRenderThread( - ffi.Pointer tView, - int blendMode, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external void EntityManager_destroyEntity(ffi.Pointer tEntityManager, int entityId); -@ffi.Native, TFogOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFogOptionsRenderThread( - ffi.Pointer tView, - TFogOptions tFogOptions, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external void Fence_waitAndDestroy(ffi.Pointer tFence); -@ffi.Native, TAmbientOcclusionOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setAmbientOcclusionOptionsRenderThread( - ffi.Pointer tView, - TAmbientOcclusionOptions options, - int requestId, - VoidCallback onComplete, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getDebugRegistry(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFrontFaceWindingInvertedRenderThread( - ffi.Pointer tView, - bool inverted, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_hasProperty(ffi.Pointer tDebugRegistry, ffi.Pointer name); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setShadowsEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) +external bool DebugRegistry_setProperty_bool( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + bool value, ); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setShadowTypeRenderThread( - ffi.Pointer tView, - int shadowType, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool DebugRegistry_setProperty_int( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + int value, ); -@ffi.Native, TSoftShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setSoftShadowOptionsRenderThread( - ffi.Pointer tView, - TSoftShadowOptions options, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Float)>(isLeaf: true) +external bool DebugRegistry_setProperty_float( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + double value, ); -@ffi.Native, TVsmShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setVsmShadowOptionsRenderThread( - ffi.Pointer tView, - TVsmShadowOptions options, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_bool( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setTransparentPickingEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_int( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_destroyRenderThread( - ffi.Pointer tSceneAsset, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_float( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void SceneAsset_createFromFilamentAssetRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tFilamentAsset, - bool rebuildVertices, - ffi.Pointer)>> onComplete, -); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer RenderThread_create(); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.UnsignedInt, - Aabb3, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void SceneAsset_createFromBuffersRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tVertexBuffer, - ffi.Pointer tIndexBuffer, - ffi.Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, - ffi.Pointer)>> callback, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderThread_createForCanvas(ffi.Pointer canvasSelector); + +@ffi.Native)>(isLeaf: true) +external void RenderThread_destroy(ffi.Pointer renderThread); + +@ffi.Native>)>(isLeaf: true) +external void RenderThread_addTask(ffi.Pointer> task); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Uint8, + ffi.Uint32, + VoidCallback, ) >(isLeaf: true) -external void SceneAsset_createInstanceRenderThread( - ffi.Pointer asset, - ffi.Pointer> tMaterialInstances, - int materialInstanceCount, - ffi.Pointer)>> callback, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_releaseSourceDataRenderThread( - ffi.Pointer tSceneAsset, +external void RenderManager_setRenderableRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + ffi.Pointer> tViews, + int numViews, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_setFlatShadingRenderThread( - ffi.Pointer tSceneAsset, - bool flatShading, +@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderManager_renderRenderThread( + ffi.Pointer tRenderManager, + int frameTimeInNanos, int requestId, VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void MaterialProvider_createMaterialInstanceRenderThread( - ffi.Pointer tMaterialProvider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, - ffi.Pointer)>> callback, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_addAnimationManagerRenderThread( + ffi.Pointer tRenderManager, + ffi.Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void AnimationManager_updateRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_removeAnimationManagerRenderThread( + ffi.Pointer tRenderManager, ffi.Pointer tAnimationManager, - int frameTimeInNanos, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_removeSwapChainRenderThread( + ffi.Pointer tRenderManager, + ffi.Pointer tSwapChain, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Float, - ffi.Uint32, - VoidCallback, + ffi.Pointer, + ffi.Pointer)>>, ) >(isLeaf: true) -external void AnimationManager_setGltfAnimationTimeRenderThread( +external void AnimationManager_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); + +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void AnimationManager_destroyRenderThread( ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Bool, + ffi.Pointer)>>, ) >(isLeaf: true) -external void AnimationManager_updateBoneMatricesRenderThread( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - ffi.Pointer> callback, +external void Engine_createRenderThread( + int backend, + ffi.Pointer platform, + ffi.Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + ffi.Pointer)>> onComplete, +); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Engine_createRendererRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyRendererRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tRenderer, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Int, - ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Uint64, + ffi.Pointer)>>, ) >(isLeaf: true) -external void AnimationManager_setMorphTargetWeightsRenderThread( - ffi.Pointer tAnimationManager, - int entityId, - ffi.Pointer morphData, - int numWeights, - ffi.Pointer> callback, +external void Engine_createSwapChainRenderThread( + ffi.Pointer tEngine, + ffi.Pointer window, + int flags, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( + ffi.Pointer, ffi.Uint32, ffi.Uint32, - ffi.Uint32, - ffi.Pointer)>>, + ffi.Uint64, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Image_createEmptyRenderThread( +external void Engine_createHeadlessSwapChainRenderThread( + ffi.Pointer tEngine, int width, int height, - int channel, - ffi.Pointer)>> onComplete, + int flags, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>, + ffi.Pointer, + EntityId, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Image_decodeRenderThread( - ffi.Pointer data, - int length, - ffi.Pointer name, - bool alpha, - ffi.Pointer)>> onComplete, +external void Engine_createCameraRenderThread( + ffi.Pointer tEngine, + int entityId, + ffi.Pointer)>> onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Image_getBytesRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyCameraRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tCamera, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Image_destroyRenderThread(ffi.Pointer tLinearImage, int requestId, VoidCallback onComplete); - @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void Image_getWidthRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, +external void Engine_createViewRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void Image_getHeightRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, +external void Engine_buildMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer materialData, + int length, + ffi.Pointer)>> onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void Image_getChannelsRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySwapChainRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tSwapChain, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Int, - ffi.Pointer>, - ) ->(isLeaf: true) -external void Texture_loadImageRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyViewRenderThread( ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, - ffi.Pointer> onComplete, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer>, - ) ->(isLeaf: true) -external void Texture_setImageRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySceneRenderThread( ffi.Pointer tEngine, - ffi.Pointer tTexture, - int level, - ffi.Pointer data, - int size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, - ffi.Pointer> onComplete, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void RenderTarget_getColorTextureRenderThread( - ffi.Pointer tRenderTarget, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyColorGradingRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tColorGrading, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void RenderTarget_createRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer color, - ffi.Pointer depth, - ffi.Pointer)>> onComplete, + ffi.Pointer tMaterial, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderTarget_destroyRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void Engine_destroyMaterialInstanceRenderThread( ffi.Pointer tEngine, - ffi.Pointer tRenderTarget, + ffi.Pointer tMaterialInstance, int requestId, VoidCallback onComplete, ); -@ffi.Native)>>)>( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySkyboxRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tSkybox, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( isLeaf: true, ) -external void TextureSampler_createRenderThread( - ffi.Pointer)>> onComplete, +external void Engine_destroyIndirectLightRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint8, + ffi.Uint16, + ffi.IntPtr, ffi.UnsignedInt, ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer)>>, + ffi.Pointer)>>, ) >(isLeaf: true) -external void TextureSampler_createWithFilteringRenderThread( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, - ffi.Pointer)>> onComplete, +external void Texture_buildRenderThread( + ffi.Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import$, + int sampler, + int format, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback) >(isLeaf: true) -external void TextureSampler_createWithComparisonRenderThread( - int compareMode, - int compareFunc, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setMinFilterRenderThread( - ffi.Pointer sampler, - int filter, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setMagFilterRenderThread( - ffi.Pointer sampler, - int filter, +external void Texture_setExternalImageRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer externalImage, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeSRenderThread( - ffi.Pointer sampler, - int mode, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Texture_generateMipMapsRenderThread( + ffi.Pointer tTexture, + ffi.Pointer tEngine, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeTRenderThread( - ffi.Pointer sampler, - int mode, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + VoidCallback, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Ktx1Reader_createTextureRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBundle, int requestId, - VoidCallback onComplete, + VoidCallback onTextureUploadComplete, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeRRenderThread( - ffi.Pointer sampler, - int mode, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Ktx2Reader_createTextureRenderThread( + ffi.Pointer tEngine, + ffi.Pointer data, + int size, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setAnisotropyRenderThread( - ffi.Pointer sampler, - double anisotropy, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyTextureRenderThread( + ffi.Pointer engine, + ffi.Pointer tTexture, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.UnsignedInt, ffi.UnsignedInt, ffi.Uint32, VoidCallback) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void TextureSampler_setCompareModeRenderThread( - ffi.Pointer sampler, - int mode, - int func, - int requestId, - VoidCallback onComplete, +external void Engine_createFenceRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_destroyRenderThread( - ffi.Pointer sampler, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Fence_waitAndDestroyRenderThread(ffi.Pointer tFence, int requestId, VoidCallback onComplete); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void AnimationManager_resetToRestPoseRenderThread( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyFenceRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tFence, int requestId, VoidCallback onComplete, ); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_flushAndWaitRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); + +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_executeRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); + @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Bool, + ffi.Float, + ffi.Uint8, + ffi.Pointer)>>, ) >(isLeaf: true) -external void GltfAssetLoader_createRenderThread( +external void Engine_buildSkyboxRenderThread( ffi.Pointer tEngine, - ffi.Pointer tMaterialProvider, - ffi.Pointer tNameComponentManager, - ffi.Pointer)>> callback, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void GltfAssetLoader_destroyRenderThread( - ffi.Pointer tAssetLoader, - int requestId, - VoidCallback onComplete, + ffi.Pointer tTexture, + bool showSun, + double intensity, + int priority, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer)>>, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Bool, + ffi.Float, + ffi.Uint8, + ffi.Pointer)>>, ) >(isLeaf: true) -external void GltfResourceLoader_createRenderThread( +external void Engine_buildColoredSkyboxRenderThread( ffi.Pointer tEngine, - ffi.Pointer)>> callback, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void GltfResourceLoader_destroyRenderThread( +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Float, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildIndirectLightFromIrradianceTextureRenderThread( ffi.Pointer tEngine, - ffi.Pointer tResourceLoader, - int requestId, - VoidCallback onComplete, + ffi.Pointer tReflectionsTexture, + ffi.Pointer tIrradianceTexture, + double intensity, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Float, + ffi.Pointer)>>, ) >(isLeaf: true) -external void GltfResourceLoader_loadResourcesRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, - ffi.Pointer> callback, +external void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer harmonics, + double intensity, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Uint8, + ffi.Bool, + ffi.Bool, ffi.Uint32, VoidCallback, ) >(isLeaf: true) -external void GltfResourceLoader_addResourceDataRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer uri, - ffi.Pointer data, - int length, +external void Renderer_setClearOptionsRenderThread( + ffi.Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Uint64, ffi.Pointer>, ) >(isLeaf: true) -external void GltfResourceLoader_asyncBeginLoadRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, - ffi.Pointer> callback, +external void Renderer_beginFrameRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + int frameTimeInNanos, + ffi.Pointer> onComplete, ); -@ffi.Native)>(isLeaf: true) -external void GltfResourceLoader_asyncUpdateLoadRenderThread(ffi.Pointer tGltfResourceLoader); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_endFrameRenderThread(ffi.Pointer tRenderer, int requestId, VoidCallback onComplete); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void GltfResourceLoader_asyncGetLoadProgressRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer> callback, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_renderRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_renderStandaloneViewRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, ffi.Pointer, ffi.Size, ffi.Uint32, - ffi.Pointer)>>, + VoidCallback, ) >(isLeaf: true) -external void GltfAssetLoader_loadRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer data, - int length, - int numInstances, - ffi.Pointer)>> callback, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_addFilamentAssetRenderThread( - ffi.Pointer tScene, - ffi.Pointer tAsset, +external void Renderer_readPixelsRenderThread( + ffi.Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + ffi.Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + ffi.Pointer out, + int outLength, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void FilamentAsset_getWireframeRenderThread( - ffi.Pointer tFilamentAsset, - ffi.Pointer> onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_addEntityRenderThread( - ffi.Pointer tScene, - int entityId, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_removeEntityRenderThread( - ffi.Pointer tScene, - int entityId, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_addToSceneRenderThread( - ffi.Pointer tSceneAsset, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_removeFromSceneRenderThread( - ffi.Pointer tSceneAsset, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, +external void Material_createInstanceRenderThread( + ffi.Pointer tMaterial, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_setSkyboxRenderThread( - ffi.Pointer tScene, - ffi.Pointer tSkybox, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void MaterialInstance_setParameterTextureRenderThread( + ffi.Pointer tMaterialInstance, + ffi.Pointer propertyName, + ffi.Pointer tTexture, + ffi.Pointer tSampler, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_setIndirectLightRenderThread( - ffi.Pointer tScene, - ffi.Pointer tIndirectLight, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createImageMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void Gizmo_createRenderThread( +external void Material_createGizmoMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tView, - ffi.Pointer tMaterial, - int tGizmoType, - ffi.Pointer)>> callback, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void VertexBufferBuilder_buildRenderThread( - ffi.Pointer tBuilder, +external void Material_createBoneOverlayMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void VertexBuffer_destroyRenderThread( +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createSilhouetteMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int requestId, - VoidCallback onComplete, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - VoidCallback, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void VertexBuffer_setBufferAtRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int bufferIndex, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, - int requestId, - VoidCallback onComplete, +external void Material_createEdgeOutlineMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void IndexBufferBuilder_buildRenderThread( - ffi.Pointer tBuilder, +external void Material_createWireframeMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void IndexBuffer_destroyRenderThread( +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createTranslationAxisMaterialRenderThread( ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int requestId, - VoidCallback onComplete, + ffi.Pointer)>> onComplete, +); + +@ffi.Native)>>)>( + isLeaf: true, +) +external void ColorGradingBuilder_createRenderThread( + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( + ffi.Pointer, ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - VoidCallback, + ffi.Pointer)>>, ) >(isLeaf: true) -external void IndexBuffer_setBufferRenderThread( +external void ColorGradingBuilder_buildRenderThread( + ffi.Pointer tBuilder, ffi.Pointer tEngine, - ffi.Pointer tBuffer, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, + ffi.Pointer)>> onComplete, +); + +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void ColorGradingBuilder_destroyRenderThread( + ffi.Pointer tBuilder, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - EntityId, - ffi.Pointer>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void RenderableBuilder_buildRenderThread( - ffi.Pointer tBuilder, +external void ToneMapper_createLinearRenderThread( ffi.Pointer tEngine, - int entityId, - ffi.Pointer> onComplete, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void EntityManager_createEntityRenderThread( - ffi.Pointer tEntityManager, - ffi.Pointer> onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void EntityManager_destroyEntityRenderThread( - ffi.Pointer tEntityManager, - int entityId, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, EntityId, double4x4, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void TransformManager_setTransformRenderThread( - ffi.Pointer tTransformManager, - int entityId, - double4x4 transform, - int requestId, - VoidCallback onComplete, +external void ToneMapper_createACESRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void TransformManager_setParentRenderThread( - ffi.Pointer tTransformManager, - int child, - int parent, - bool preserveScaling, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createACESLegacyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TransformManager_createComponentRenderThread( - ffi.Pointer tTransformManager, - int entityId, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createFilmicRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TransformManager_removeComponentRenderThread( - ffi.Pointer tTransformManager, - int entityId, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createPBRNeutralRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderableManager_destroyEntityRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createAGXRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Uint32, - VoidCallback, + ffi.Pointer, + ffi.Int, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableManager_setBonesFromMat4RenderThread( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer transforms, - int boneCount, - int offset, - int requestId, - VoidCallback onComplete, +external void ToneMapper_createAGXWithLookRenderThread( + ffi.Pointer tEngine, + int look, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Uint32, - VoidCallback, + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableManager_setBonesFromBoneRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer bones, - int boneCount, - int offset, - int requestId, - VoidCallback onComplete, +external void ToneMapper_createGenericRenderThread( + ffi.Pointer tEngine, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Int, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Pointer>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void RenderableManager_setGeometryAtNonIndexedRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int type, - ffi.Pointer tVertices, - int offset, - int count, - ffi.Pointer> callback, +external void ToneMapper_createDisplayRangeRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderableManager_setCastShadowsRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void ToneMapper_destroyRenderThread( + ffi.Pointer tToneMapper, int requestId, VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderableManager_setReceiveShadowsRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) +external void View_pickRenderThread(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setColorGradingRenderThread( + ffi.Pointer tView, + ffi.Pointer tColorGrading, int requestId, VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void LightManager_setShadowCasterRenderThread( - ffi.Pointer tLightManager, - int entityId, +@ffi.Native, ffi.Bool, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setBloomRenderThread( + ffi.Pointer tView, bool enabled, + double strength, int requestId, VoidCallback onComplete, ); -@ffi.Native, EntityId, TShadowOptions, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void LightManager_setShadowOptionsRenderThread( - ffi.Pointer tLightManager, - int entityId, - TShadowOptions options, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setCameraRenderThread( + ffi.Pointer tView, + ffi.Pointer tCamera, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) >(isLeaf: true) -external void Renderer_setClearOptions( - ffi.Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, +external void View_getNameRenderThread( + ffi.Pointer tView, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint64)>(isLeaf: true) -external bool Renderer_beginFrame( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - int frameTimeInNanos, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setNameRenderThread( + ffi.Pointer tView, + ffi.Pointer name, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void Renderer_endFrame(ffi.Pointer tRenderer); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Renderer_render(ffi.Pointer tRenderer, ffi.Pointer tView); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Renderer_renderStandaloneView(ffi.Pointer tRenderer, ffi.Pointer tView); - -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer, - ffi.Size, - ) ->(isLeaf: true) -external void Renderer_readPixels( - ffi.Pointer tRenderer, +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setViewportRenderThread( + ffi.Pointer tView, int width, int height, - int xOffset, - int yOffset, - ffi.Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - ffi.Pointer out, - int outLength, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Float, ffi.Float, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void Renderer_setFrameInterval( - ffi.Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setRenderTargetRenderThread( + ffi.Pointer tView, + ffi.Pointer tRenderTarget, + int requestId, + VoidCallback onComplete, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external ffi.Pointer RenderTarget_create( - ffi.Pointer tEngine, - ffi.Pointer color, - ffi.Pointer depth, +@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setAntiAliasingRenderThread( + ffi.Pointer tView, + bool msaa, + bool fxaa, + bool taa, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderTarget_destroy(ffi.Pointer tEngine, ffi.Pointer tRenderTarget); - -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void Skybox_setColor(ffi.Pointer tSkybox, double r, double g, double b, double a); - -/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). -@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void Skybox_setLayerMask(ffi.Pointer tSkybox, int select, int values); - -/// Returns the visibility mask bits. -@ffi.Native)>(isLeaf: true) -external int Skybox_getLayerMask(ffi.Pointer tSkybox); - -/// Returns the skybox intensity in lux. -@ffi.Native)>(isLeaf: true) -external double Skybox_getIntensity(ffi.Pointer tSkybox); - -/// Returns the environment texture, or nullptr for a color-only skybox. -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Skybox_getTexture(ffi.Pointer tSkybox); - -@ffi.Native, EntityId)>(isLeaf: true) -external void RenderableManager_destroyEntity(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_hasComponent(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native)>(isLeaf: true) -external bool RenderableManager_empty(ffi.Pointer tRenderableManager); - -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isRenderable(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native)>(isLeaf: true) -external int RenderableManager_getComponentCount(ffi.Pointer tRenderableManager); - -@ffi.Native, EntityId, ffi.Int, ffi.Pointer)>( - isLeaf: true, -) -external bool RenderableManager_setMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - ffi.Pointer tMaterialInstance, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setPostProcessingRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native Function(ffi.Pointer, EntityId, ffi.Int)>(isLeaf: true) -external ffi.Pointer RenderableManager_getMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFrustumCullingEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Int)>(isLeaf: true) -external void RenderableManager_clearMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setStencilBufferEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Bool Function( - ffi.Pointer, - EntityId, - ffi.Int, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, - ) ->(isLeaf: true) -external bool RenderableManager_setGeometryAtNonIndexed( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int type, - ffi.Pointer vertices, - int offset, - int count, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setDitheringEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getPrimitiveCount(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getAxisAlignedBoundingBox( - ffi.Pointer tRenderableManager, - int entityId, +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setRenderQualityRenderThread( + ffi.Pointer tView, + int qualityLevel, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, Aabb3)>(isLeaf: true) -external void RenderableManager_setAxisAlignedBoundingBox( - ffi.Pointer tRenderableManager, - int entityId, - Aabb3 aabb, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setSceneRenderThread( + ffi.Pointer tView, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getAabb(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getBoundingBox(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setLayerMask( - ffi.Pointer tRenderableManager, - int entityId, - int select, - int values, +@ffi.Native, ffi.Int, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setLayerEnabledRenderThread( + ffi.Pointer tView, + int layer, + bool visible, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getLayerMask(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setVisibilityLayer( - ffi.Pointer tRenderableManager, - int entityId, - int layer, +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setBlendModeRenderThread( + ffi.Pointer tView, + int blendMode, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setPriority( - ffi.Pointer tRenderableManager, - int entityId, - int priority, +@ffi.Native, TFogOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFogOptionsRenderThread( + ffi.Pointer tView, + TFogOptions tFogOptions, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getPriority(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, TAmbientOcclusionOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setAmbientOcclusionOptionsRenderThread( + ffi.Pointer tView, + TAmbientOcclusionOptions options, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFrontFaceWindingInvertedRenderThread( + ffi.Pointer tView, + bool inverted, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setCulling( - ffi.Pointer tRenderableManager, - int entityId, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setShadowsEnabledRenderThread( + ffi.Pointer tView, bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_getCulling(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setShadowTypeRenderThread( + ffi.Pointer tView, + int shadowType, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setFogEnabled( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native, TSoftShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setSoftShadowOptionsRenderThread( + ffi.Pointer tView, + TSoftShadowOptions options, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_getFogEnabled(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, TVsmShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setVsmShadowOptionsRenderThread( + ffi.Pointer tView, + TVsmShadowOptions options, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setLightChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, - bool enable, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setTransparentPickingEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) -external bool RenderableManager_getLightChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_destroyRenderThread( + ffi.Pointer tSceneAsset, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setCastShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool castShadows, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void SceneAsset_createFromFilamentAssetRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tFilamentAsset, + bool rebuildVertices, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isShadowCaster(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Int, + ffi.UnsignedInt, + Aabb3, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void SceneAsset_createFromBuffersRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tVertexBuffer, + ffi.Pointer tIndexBuffer, + ffi.Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, + ffi.Pointer)>> callback, +); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setReceiveShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool receiveShadows, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Int, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void SceneAsset_createInstanceRenderThread( + ffi.Pointer asset, + ffi.Pointer> tMaterialInstances, + int materialInstanceCount, + ffi.Pointer)>> callback, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isShadowReceiver(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_releaseSourceDataRenderThread( + ffi.Pointer tSceneAsset, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setScreenSpaceContactShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_setFlatShadingRenderThread( + ffi.Pointer tSceneAsset, + bool flatShading, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Size, ffi.Uint16)>(isLeaf: true) -external void RenderableManager_setBlendOrderAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int order, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void MaterialProvider_createMaterialInstanceRenderThread( + ffi.Pointer tMaterialProvider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, + ffi.Pointer)>> callback, ); -@ffi.Native, EntityId, ffi.Size, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setGlobalBlendOrderEnabledAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - bool enabled, +@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void AnimationManager_updateRenderThread( + ffi.Pointer tAnimationManager, + int frameTimeInNanos, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setMorphWeights( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer weights, - int count, - int offset, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Float, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void AnimationManager_setGltfAnimationTimeRenderThread( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getMorphTargetCount(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setBonesFromMat4( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer transforms, - int boneCount, - int offset, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ) +>(isLeaf: true) +external void AnimationManager_updateBoneMatricesRenderThread( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + ffi.Pointer> callback, ); -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setBonesFromBone( - ffi.Pointer tRenderableManager, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Int, + ffi.Pointer>, + ) +>(isLeaf: true) +external void AnimationManager_setMorphTargetWeightsRenderThread( + ffi.Pointer tAnimationManager, int entityId, - ffi.Pointer bones, - int boneCount, - int offset, + ffi.Pointer morphData, + int numWeights, + ffi.Pointer> callback, ); -@ffi.Native Function(ffi.Size)>(isLeaf: true) -external ffi.Pointer RenderableBuilder_create(int primitiveCount); - -@ffi.Native)>(isLeaf: true) -external void RenderableBuilder_destroy(ffi.Pointer builder); - -@ffi.Native, Aabb3)>(isLeaf: true) -external void RenderableBuilder_boundingBox(ffi.Pointer builder, Aabb3 aabb); - -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_material( - ffi.Pointer builder, - int primitiveIndex, - ffi.Pointer materialInstance, +@ffi.Native< + ffi.Void Function( + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Image_createEmptyRenderThread( + int width, + int height, + int channel, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Uint8, - ffi.Pointer, - ffi.Pointer, - ffi.Size, + ffi.Pointer, ffi.Size, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableBuilder_geometry( - ffi.Pointer builder, - int primitiveIndex, - int type, - ffi.Pointer vertices, - ffi.Pointer indices, - int offset, - int count, +external void Image_decodeRenderThread( + ffi.Pointer data, + int length, + ffi.Pointer name, + bool alpha, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, + ffi.Pointer, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableBuilder_geometryNonIndexed( - ffi.Pointer builder, - int primitiveIndex, - int type, - ffi.Pointer vertices, - int offset, - int count, +external void Image_getBytesRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_priority(ffi.Pointer builder, int priority); - -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_channel(ffi.Pointer builder, int channel); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_culling(ffi.Pointer builder, bool enabled); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_castShadows(ffi.Pointer builder, bool enabled); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_receiveShadows(ffi.Pointer builder, bool enabled); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_fog(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Image_destroyRenderThread(ffi.Pointer tLinearImage, int requestId, VoidCallback onComplete); -@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_lightChannel(ffi.Pointer builder, int channel, bool enabled); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getWidthRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, +); -@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_layerMask(ffi.Pointer builder, int select, int values); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getHeightRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_screenSpaceContactShadows(ffi.Pointer builder, bool enabled); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getChannelsRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, +); -@ffi.Native, ffi.Size, ffi.Uint16)>(isLeaf: true) -external void RenderableBuilder_blendOrder(ffi.Pointer builder, int primitiveIndex, int order); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Int, + ffi.Pointer>, + ) +>(isLeaf: true) +external void Texture_loadImageRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, + ffi.Pointer> onComplete, +); -@ffi.Native, ffi.Size, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_globalBlendOrderEnabled( - ffi.Pointer builder, - int primitiveIndex, - bool enabled, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer>, + ) +>(isLeaf: true) +external void Texture_setImageRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + int level, + ffi.Pointer data, + int size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, + ffi.Pointer> onComplete, ); -@ffi.Native, ffi.Size)>(isLeaf: true) -external void RenderableBuilder_instances(ffi.Pointer builder, int instanceCount); - -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_skinningFromMat4( - ffi.Pointer builder, - int boneCount, - ffi.Pointer transforms, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void RenderTarget_getColorTextureRenderThread( + ffi.Pointer tRenderTarget, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_skinningFromBone( - ffi.Pointer builder, - int boneCount, - ffi.Pointer bones, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void RenderTarget_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer color, + ffi.Pointer depth, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_enableSkinningBuffers(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderTarget_destroyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tRenderTarget, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Size, ffi.Pointer, ffi.Size, ffi.Size)>( +@ffi.Native)>>)>( isLeaf: true, ) -external void RenderableBuilder_boneIndicesAndWeights( - ffi.Pointer builder, - int primitiveIndex, - ffi.Pointer indicesAndWeights, - int count, - int bonesPerVertex, +external void TextureSampler_createRenderThread( + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) -external int RenderableBuilder_build(ffi.Pointer builder, ffi.Pointer engine, int entity); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void IndirectLight_setRotation(ffi.Pointer tIndirectLight, ffi.Pointer rotation); - -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer SurfaceOrientationBuilder_create(); - -@ffi.Native, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_vertexCount(ffi.Pointer builder, int count); - -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_normals( - ffi.Pointer builder, - ffi.Pointer normals, - int stride, +@ffi.Native< + ffi.Void Function( + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void TextureSampler_createWithFilteringRenderThread( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_tangents( - ffi.Pointer builder, - ffi.Pointer tangents, - int stride, +@ffi.Native< + ffi.Void Function( + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void TextureSampler_createWithComparisonRenderThread( + int compareMode, + int compareFunc, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_uvs( - ffi.Pointer builder, - ffi.Pointer uvs, - int stride, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setMinFilterRenderThread( + ffi.Pointer sampler, + int filter, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_positions( - ffi.Pointer builder, - ffi.Pointer positions, - int stride, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setMagFilterRenderThread( + ffi.Pointer sampler, + int filter, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangleCount(ffi.Pointer builder, int count); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangles_uint( - ffi.Pointer builder, - ffi.Pointer triangles, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeSRenderThread( + ffi.Pointer sampler, + int mode, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangles_ushort( - ffi.Pointer builder, - ffi.Pointer triangles, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeTRenderThread( + ffi.Pointer sampler, + int mode, + int requestId, + VoidCallback onComplete, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SurfaceOrientationBuilder_build( - ffi.Pointer builder, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeRRenderThread( + ffi.Pointer sampler, + int mode, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void SurfaceOrientationBuilder_destroy(ffi.Pointer builder); - -@ffi.Native)>(isLeaf: true) -external int SurfaceOrientation_getVertexCount(ffi.Pointer orientation); +@ffi.Native, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setAnisotropyRenderThread( + ffi.Pointer sampler, + double anisotropy, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void SurfaceOrientation_getQuats_float4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.UnsignedInt, ffi.UnsignedInt, ffi.Uint32, VoidCallback) +>(isLeaf: true) +external void TextureSampler_setCompareModeRenderThread( + ffi.Pointer sampler, + int mode, + int func, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void SurfaceOrientation_getQuats_short4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_destroyRenderThread( + ffi.Pointer sampler, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( isLeaf: true, ) -external void SurfaceOrientation_getQuats_half4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, -); - -@ffi.Native)>(isLeaf: true) -external void SurfaceOrientation_destroy(ffi.Pointer orientation); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer AnimationManager_create(ffi.Pointer tEngine); - -@ffi.Native)>(isLeaf: true) -external void AnimationManager_destroy(ffi.Pointer tAnimationManager); - -@ffi.Native, ffi.Uint64)>(isLeaf: true) -external void AnimationManager_update(ffi.Pointer tAnimationManager, int frameTimeInNanos); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_addGltfAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_removeGltfAnimationComponent( +external void AnimationManager_resetToRestPoseRenderThread( ffi.Pointer tAnimationManager, ffi.Pointer tSceneAsset, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external void AnimationManager_addMorphAnimationComponent( - ffi.Pointer tAnimationManager, - int entityId, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void GltfAssetLoader_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tMaterialProvider, + ffi.Pointer tNameComponentManager, + ffi.Pointer)>> callback, ); -@ffi.Native, EntityId)>(isLeaf: true) -external void AnimationManager_removeMorphAnimationComponent( - ffi.Pointer tAnimationManager, - int entityId, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void GltfAssetLoader_destroyRenderThread( + ffi.Pointer tAssetLoader, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_addBoneAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void GltfResourceLoader_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> callback, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_removeBoneAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void GltfResourceLoader_destroyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tResourceLoader, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Int, - ffi.Float, + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, ) >(isLeaf: true) -external bool AnimationManager_setMorphAnimation( - ffi.Pointer tAnimationManager, - int entityId, - ffi.Pointer morphData, - ffi.Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, +external void GltfResourceLoader_loadResourcesRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, + ffi.Pointer> callback, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool AnimationManager_clearMorphAnimation(ffi.Pointer tAnimationManager, int entityId); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void AnimationManager_resetToRestPose( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void GltfResourceLoader_addResourceDataRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer uri, + ffi.Pointer data, + int length, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Int, - ffi.Pointer, - ffi.Int, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Bool, + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, ) >(isLeaf: true) -external bool AnimationManager_addBoneAnimation( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int skinIndex, - int boneIndex, - ffi.Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, +external void GltfResourceLoader_asyncBeginLoadRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, + ffi.Pointer> callback, ); +@ffi.Native)>(isLeaf: true) +external void GltfResourceLoader_asyncUpdateLoadRenderThread(ffi.Pointer tGltfResourceLoader); + @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Pointer, ffi.Int) + ffi.Void Function(ffi.Pointer, ffi.Pointer>) >(isLeaf: true) -external void AnimationManager_getRestLocalTransforms( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int skinIndex, - ffi.Pointer out, - int numBones, +external void GltfResourceLoader_asyncGetLoadProgressRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer> callback, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Int, ffi.Pointer) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void AnimationManager_getInverseBindMatrix( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int skinIndex, - int boneIndex, - ffi.Pointer out, +external void GltfAssetLoader_loadRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer data, + int length, + int numInstances, + ffi.Pointer)>> callback, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_addFilamentAssetRenderThread( + ffi.Pointer tScene, + ffi.Pointer tAsset, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Float, - ffi.Float, - ffi.Float, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer>) >(isLeaf: true) -external bool AnimationManager_playGltfAnimation( - ffi.Pointer tAnimationManager, +external void FilamentAsset_getWireframeRenderThread( + ffi.Pointer tFilamentAsset, + ffi.Pointer> onComplete, +); + +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_addEntityRenderThread( + ffi.Pointer tScene, + int entityId, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_removeEntityRenderThread( + ffi.Pointer tScene, + int entityId, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_addToSceneRenderThread( ffi.Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool AnimationManager_stopGltfAnimation( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int index, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_removeFromSceneRenderThread( + ffi.Pointer tSceneAsset, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external double AnimationManager_getGltfAnimationDuration( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int animationIndex, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_setSkyboxRenderThread( + ffi.Pointer tScene, + ffi.Pointer tSkybox, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external int AnimationManager_getGltfAnimationCount( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_setIndirectLightRenderThread( + ffi.Pointer tScene, + ffi.Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Gizmo_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tView, + ffi.Pointer tMaterial, + int tGizmoType, + ffi.Pointer)>> callback, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Int) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void AnimationManager_getGltfAnimationName( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - ffi.Pointer outPtr, - int index, +external void VertexBufferBuilder_buildRenderThread( + ffi.Pointer tBuilder, + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) -external int AnimationManager_getMorphTargetNameCount( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int childEntity, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void VertexBuffer_destroyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, EntityId, ffi.Pointer, ffi.Int) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ffi.Uint32, + VoidCallback, + ) >(isLeaf: true) -external void AnimationManager_getMorphTargetName( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int childEntity, - ffi.Pointer outPtr, - int index, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_updateBoneMatrices( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, +external void VertexBuffer_setBufferAtRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, + int bufferIndex, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool AnimationManager_setMorphTargetWeights( - ffi.Pointer tAnimationManager, - int entityId, - ffi.Pointer morphData, - int numWeights, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void IndexBufferBuilder_buildRenderThread( + ffi.Pointer tBuilder, + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Int, ffi.Float)>( - isLeaf: true, -) -external bool AnimationManager_setGltfAnimationTime( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void IndexBuffer_destroyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Pointer Function( + ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ffi.Uint32, + VoidCallback, ) >(isLeaf: true) -external ffi.Pointer GltfAssetLoader_create( +external void IndexBuffer_setBufferRenderThread( ffi.Pointer tEngine, - ffi.Pointer tMaterialProvider, - ffi.Pointer tNameComponentManager, + ffi.Pointer tBuffer, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void GltfAssetLoader_destroy(ffi.Pointer tAssetLoader); - @ffi.Native< - ffi.Pointer Function( + ffi.Void Function( + ffi.Pointer, ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, + EntityId, + ffi.Pointer>, ) >(isLeaf: true) -external ffi.Pointer GltfAssetLoader_load( +external void RenderableBuilder_buildRenderThread( + ffi.Pointer tBuilder, ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer data, - int length, - int numInstances, + int entityId, + ffi.Pointer> onComplete, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external ffi.Pointer GltfAssetLoader_getMaterialInstance( - ffi.Pointer tRenderableManager, - ffi.Pointer tAsset, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void EntityManager_createEntityRenderThread( + ffi.Pointer tEntityManager, + ffi.Pointer> onComplete, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer GltfAssetLoader_getMaterialProvider(ffi.Pointer tAssetLoader); +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void EntityManager_destroyEntityRenderThread( + ffi.Pointer tEntityManager, + int entityId, + int requestId, + VoidCallback onComplete, +); -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getResourceUriCount(ffi.Pointer tFilamentAsset); +@ffi.Native, EntityId, double4x4, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void TransformManager_setTransformRenderThread( + ffi.Pointer tTransformManager, + int entityId, + double4x4 transform, + int requestId, + VoidCallback onComplete, +); -@ffi.Native> Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer> FilamentAsset_getResourceUris(ffi.Pointer tFilamentAsset); +@ffi.Native, EntityId, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void TransformManager_setParentRenderThread( + ffi.Pointer tTransformManager, + int child, + int parent, + bool preserveScaling, + int requestId, + VoidCallback onComplete, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer GltfResourceLoader_create(ffi.Pointer tEngine); +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TransformManager_createComponentRenderThread( + ffi.Pointer tTransformManager, + int entityId, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void GltfResourceLoader_destroy( - ffi.Pointer tEngine, - ffi.Pointer tGltfResourceLoader, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TransformManager_removeComponentRenderThread( + ffi.Pointer tTransformManager, + int entityId, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool GltfResourceLoader_asyncBeginLoad( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderableManager_destroyEntityRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void GltfResourceLoader_asyncUpdateLoad(ffi.Pointer tGltfResourceLoader); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void RenderableManager_setBonesFromMat4RenderThread( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer transforms, + int boneCount, + int offset, + int requestId, + VoidCallback onComplete, +); -@ffi.Native)>(isLeaf: true) -external double GltfResourceLoader_asyncGetLoadProgress(ffi.Pointer tGltfResourceLoader); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void RenderableManager_setBonesFromBoneRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer bones, + int boneCount, + int offset, + int requestId, + VoidCallback onComplete, +); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size) + ffi.Void Function( + ffi.Pointer, + EntityId, + ffi.Int, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Pointer>, + ) >(isLeaf: true) -external void GltfResourceLoader_addResourceData( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer uri, - ffi.Pointer data, - int length, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool GltfResourceLoader_loadResources( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, +external void RenderableManager_setGeometryAtNonIndexedRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int type, + ffi.Pointer tVertices, + int offset, + int count, + ffi.Pointer> callback, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderManager_create( - ffi.Pointer tEngine, - ffi.Pointer tRenderer, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderableManager_setCastShadowsRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void RenderManager_destroy(ffi.Pointer tRenderer); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_addAnimationManager( - ffi.Pointer tRenderer, - ffi.Pointer tAnimationManager, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderableManager_setReceiveShadowsRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_removeAnimationManager( - ffi.Pointer tRenderer, - ffi.Pointer tAnimationManager, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void LightManager_setShadowCasterRenderThread( + ffi.Pointer tLightManager, + int entityId, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Uint64)>(isLeaf: true) -external void RenderManager_render(ffi.Pointer tRenderer, int frameTimeInNanos); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer>, ffi.Uint8) ->(isLeaf: true) -external void RenderManager_setRenderable( - ffi.Pointer tRenderer, - ffi.Pointer swapChain, - ffi.Pointer> views, - int numViews, +@ffi.Native, EntityId, TShadowOptions, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void LightManager_setShadowOptionsRenderThread( + ffi.Pointer tLightManager, + int entityId, + TShadowOptions options, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_removeSwapChain(ffi.Pointer tRenderer, ffi.Pointer swapChain); - -@ffi.Native)>(isLeaf: true) -external void RenderManager_requestRender(ffi.Pointer tRenderer); - -@ffi.Native)>(isLeaf: true) -external void RenderManager_attachToRenderThread(ffi.Pointer tRenderer); - -@ffi.Native)>(isLeaf: true) -external void RenderManager_detachFromRenderThread(ffi.Pointer tRenderManager); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderManager_setPaused(ffi.Pointer tRenderer, bool paused); - -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getEntityCount(ffi.Pointer filamentAsset); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void FilamentAsset_getEntities(ffi.Pointer filamentAsset, ffi.Pointer out); - -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getWireframe(ffi.Pointer filamentAsset); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer FilamentAsset_getSourceAsset(ffi.Pointer filamentAsset); - @ffi.Native, EntityId)>(isLeaf: true) external void Scene_addEntity(ffi.Pointer tScene, int entityId); @@ -4605,23 +4626,33 @@ external void Scene_setIndirectLight(ffi.Pointer tScene, ffi.Pointer, ffi.Pointer)>(isLeaf: true) external void Scene_addFilamentAsset(ffi.Pointer tScene, ffi.Pointer asset); -@ffi.Native(isLeaf: true) -external void FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); - -@ffi.Native() -external void FrameScheduler_stop(); - -@ffi.Native)>(isLeaf: true) -external int FrameScheduler_initDartApi(ffi.Pointer data); - -@ffi.Native(isLeaf: true) -external void FrameScheduler_startWithPort(int port, int targetFps); - -@ffi.Native(isLeaf: true) -external void FrameScheduler_setTargetFps(int fps); - -@ffi.Native(isLeaf: true) -external int FrameScheduler_steadyClockUs(); +/// Walks every renderable primitive in the scene and records the ones whose +/// current MaterialInstance belongs to [tMaterial]. +/// +/// Returns the TOTAL number of matches (which may exceed [capacity]). When +/// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to +/// [capacity] matches are written to them. Call once with null buffers to +/// size the output, then again to fetch it. +@ffi.Native< + ffi.Size Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Size, + ) +>(isLeaf: true) +external int Scene_scanForMaterial( + ffi.Pointer tScene, + ffi.Pointer tRenderableManager, + ffi.Pointer tMaterial, + ffi.Pointer outEntities, + ffi.Pointer outPrimitives, + ffi.Pointer> outInstances, + int capacity, +); @ffi.Native)>(isLeaf: true) external void MovementIntentExecutor_destroy(ffi.Pointer executor); @@ -4956,6 +4987,11 @@ sealed class TIndexType { static const TINDEX_TYPE_UINT = 1; } +sealed class TProjection { + static const Perspective = 0; + static const Orthographic = 1; +} + final class TViewport extends ffi.Struct { @ffi.Int32() external int left; @@ -5246,6 +5282,35 @@ typedef GizmoPickCallbackFunction = typedef DartGizmoPickCallbackFunction = void Function(int resultType, double x, double y, double z); typedef GizmoPickCallback = ffi.Pointer>; +final class TMeshData extends ffi.Struct { + external ffi.Pointer name; + + external ffi.Pointer materialName; + + external ffi.Pointer vertices; + + @ffi.Int() + external int vertexCount; + + external ffi.Pointer normals; + + @ffi.Int() + external int normalCount; + + external ffi.Pointer uvs; + + @ffi.Int() + external int uvCount; + + external ffi.Pointer indices; + + @ffi.Int() + external int indexCount; + + @ffi.UnsignedInt() + external int primitiveType; +} + sealed class TSamplerCompareFunc { /// !< Less or equal static const LE = 0; @@ -5321,40 +5386,6 @@ sealed class TBlendingMode { static const BLENDING_MODE_CUSTOM = 7; } -sealed class TProjection { - static const Perspective = 0; - static const Orthographic = 1; -} - -final class TMeshData extends ffi.Struct { - external ffi.Pointer name; - - external ffi.Pointer materialName; - - external ffi.Pointer vertices; - - @ffi.Int() - external int vertexCount; - - external ffi.Pointer normals; - - @ffi.Int() - external int normalCount; - - external ffi.Pointer uvs; - - @ffi.Int() - external int uvCount; - - external ffi.Pointer indices; - - @ffi.Int() - external int indexCount; - - @ffi.UnsignedInt() - external int primitiveType; -} - sealed class TTextureSamplerType { static const SAMPLER_2D = 0; static const SAMPLER_2D_ARRAY = 1; @@ -5611,22 +5642,9 @@ sealed class TSamplerCompareMode { static const COMPARE_MODE_COMPARE_TO_TEXTURE = 1; } -sealed class TBackend { - /// !< Automatically selects an appropriate driver for the platform. - static const BACKEND_DEFAULT = 0; - - /// !< Selects the OpenGL/ES driver (default on Android) - static const BACKEND_OPENGL = 1; - - /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) - static const BACKEND_VULKAN = 2; - - /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). - static const BACKEND_METAL = 3; - - /// !< Selects the no-op driver for testing purposes. - static const BACKEND_NOOP = 4; -} +typedef FrameTickCallbackFunction = ffi.Void Function(ffi.Uint64 frameTimeNanos); +typedef DartFrameTickCallbackFunction = void Function(int frameTimeNanos); +typedef FrameTickCallback = ffi.Pointer>; sealed class TLightType { static const LIGHT_TYPE_SUN = 0; @@ -5716,12 +5734,26 @@ final class TShadowOptions extends ffi.Struct { external double transformW; } +sealed class TBackend { + /// !< Automatically selects an appropriate driver for the platform. + static const BACKEND_DEFAULT = 0; + + /// !< Selects the OpenGL/ES driver (default on Android) + static const BACKEND_OPENGL = 1; + + /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) + static const BACKEND_VULKAN = 2; + + /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). + static const BACKEND_METAL = 3; + + /// !< Selects the no-op driver for testing purposes. + static const BACKEND_NOOP = 4; +} + typedef FilamentRenderCallbackFunction = ffi.Void Function(ffi.Pointer owner); typedef DartFilamentRenderCallbackFunction = void Function(ffi.Pointer owner); typedef FilamentRenderCallback = ffi.Pointer>; -typedef FrameTickCallbackFunction = ffi.Void Function(ffi.Uint64 frameTimeNanos); -typedef DartFrameTickCallbackFunction = void Function(int frameTimeNanos); -typedef FrameTickCallback = ffi.Pointer>; final class TMovementIntentCalculator extends ffi.Opaque {} diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart index 64a05b7c8..80172fba6 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart @@ -27,6 +27,192 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external Pointer _TSWAP_CHAIN_CONFIG_READABLE; external Pointer _TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER; external Pointer _TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER; + external Pointer _AnimationManager_create(Pointer tEngine); + external void _AnimationManager_destroy(Pointer tAnimationManager); + external void _AnimationManager_update(Pointer tAnimationManager, JSBigInt frameTimeInNanos); + external int _AnimationManager_addGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_removeGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external void _AnimationManager_addMorphAnimationComponent( + Pointer tAnimationManager, + EntityId entityId, + ); + external void _AnimationManager_removeMorphAnimationComponent( + Pointer tAnimationManager, + EntityId entityId, + ); + external int _AnimationManager_addBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_removeBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_setMorphAnimation( + Pointer tAnimationManager, + EntityId entityId, + Pointer morphData, + Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, + ); + external int _AnimationManager_clearMorphAnimation(Pointer tAnimationManager, EntityId entityId); + external void _AnimationManager_resetToRestPose( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external int _AnimationManager_addBoneAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int skinIndex, + int boneIndex, + Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, + ); + external void _AnimationManager_getRestLocalTransforms( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + Pointer out, + int numBones, + ); + external void _AnimationManager_getInverseBindMatrix( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + int boneIndex, + Pointer out, + ); + external int _AnimationManager_playGltfAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, + ); + external int _AnimationManager_stopGltfAnimation( + Pointer tAnimationManager, + Pointer sceneAsset, + int index, + ); + external double _AnimationManager_getGltfAnimationDuration( + Pointer tAnimationManager, + Pointer sceneAsset, + int animationIndex, + ); + external int _AnimationManager_getGltfAnimationCount( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external void _AnimationManager_getGltfAnimationName( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer outPtr, + int index, + ); + external int _AnimationManager_getMorphTargetNameCount( + Pointer tAnimationManager, + Pointer sceneAsset, + EntityId childEntity, + ); + external void _AnimationManager_getMorphTargetName( + Pointer tAnimationManager, + Pointer sceneAsset, + EntityId childEntity, + Pointer outPtr, + int index, + ); + external int _AnimationManager_updateBoneMatrices( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external int _AnimationManager_setMorphTargetWeights( + Pointer tAnimationManager, + EntityId entityId, + Pointer morphData, + int numWeights, + ); + external int _AnimationManager_setGltfAnimationTime( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, + ); + external void _Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity); + external double _Camera_getAperture(Pointer camera); + external double _Camera_getShutterSpeed(Pointer camera); + external double _Camera_getSensitivity(Pointer camera); + external void _Camera_getModelMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getViewMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getProjectionMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getCullingProjectionMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getFrustum(Pointer camera, Pointer out); + external void _Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far); + external void _Camera_setProjectionFromFov( + Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, + ); + external double _Camera_getFocalLength(Pointer camera); + external void _Camera_lookAt( + Pointer camera, + Pointer eyePtr, + Pointer focusPtr, + Pointer upPtr, + ); + external double _Camera_getNear(Pointer camera); + external double _Camera_getCullingFar(Pointer camera); + external double _Camera_getFov(Pointer camera, bool horizontal); + external double _Camera_getFocusDistance(Pointer camera); + external void _Camera_setFocusDistance(Pointer camera, double focusDistance); + external void _Camera_setCustomProjectionWithCulling( + Pointer camera, + Pointer projectionMatrixPtr, + double near, + double far, + ); + external void _Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix); + external void _Camera_setLensProjection( + Pointer camera, + double near, + double far, + double aspect, + double focalLength, + ); + external EntityId _Camera_getEntity(Pointer camera); + external void _Camera_setProjection( + Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, + ); + external int _FilamentAsset_getEntityCount(Pointer filamentAsset); + external void _FilamentAsset_getEntities(Pointer filamentAsset, Pointer out); + external EntityId _FilamentAsset_getWireframe(Pointer filamentAsset); + external Pointer _FilamentAsset_getSourceAsset(Pointer filamentAsset); external void _View_getViewport(Pointer TViewport_out, Pointer view); external Pointer _ToneMapper_createLinear(Pointer tEngine); external Pointer _ToneMapper_createACES(Pointer tEngine); @@ -176,57 +362,190 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external void _Gizmo_pick(Pointer tGizmo, int x, int y, GizmoPickCallback callback); external void _Gizmo_highlight(Pointer tGizmo, int axis); external void _Gizmo_unhighlight(Pointer tGizmo); - external Pointer _Material_createInstance(Pointer tMaterial); - external int _Material_getFeatureLevel(Pointer tMaterial); - external Pointer _Material_createImageMaterial(Pointer tEngine); - external Pointer _Material_createGridMaterial(Pointer tEngine); - external Pointer _Material_createGizmoMaterial(Pointer tEngine); - external Pointer _Material_createSilhouetteMaterial(Pointer tEngine); - external Pointer _Material_createEdgeOutlineMaterial(Pointer tEngine); - external Pointer _Material_createWireframeMaterial(Pointer tEngine); - external Pointer _Material_createTranslationAxisMaterial(Pointer tEngine); - external Pointer _Material_createBoneOverlayMaterial(Pointer tEngine); - external int _Material_hasParameter(Pointer tMaterial, Pointer propertyName); - external int _MaterialInstance_isStencilWriteEnabled(Pointer materialInstance); - external void _MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setCullingMode(Pointer materialInstance, int culling); - external void _MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided); - external void _MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setParameterFloat( - Pointer materialInstance, - Pointer propertyName, - double value, - ); - external void _MaterialInstance_setParameterFloat2( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, + external Pointer _GltfAssetLoader_create( + Pointer tEngine, + Pointer tMaterialProvider, + Pointer tNameComponentManager, ); - external void _MaterialInstance_setParameterFloat3( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double z, + external void _GltfAssetLoader_destroy(Pointer tAssetLoader); + external Pointer _GltfAssetLoader_load( + Pointer tEngine, + Pointer tAssetLoader, + Pointer data, + size_t length, + int numInstances, ); - external void _MaterialInstance_setParameterFloat3Array( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer raw, - int length, + external Pointer _GltfAssetLoader_getMaterialInstance( + Pointer tRenderableManager, + Pointer tAsset, ); - external void _MaterialInstance_setParameterFloat4( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double w, - double z, + external Pointer _GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader); + external int _FilamentAsset_getResourceUriCount(Pointer tFilamentAsset); + external Pointer> _FilamentAsset_getResourceUris(Pointer tFilamentAsset); + external void _MeshData_dispose(Pointer meshData); + external int _GltfParser_parseBuffer( + Pointer data, + size_t length, + Pointer meshName, + Pointer outMeshData, ); - external void _MaterialInstance_setParameterMat3( - Pointer materialInstance, + external Pointer _GltfResourceLoader_create(Pointer tEngine); + external void _GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader); + external int _GltfResourceLoader_asyncBeginLoad( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + ); + external void _GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader); + external double _GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader); + external void _GltfResourceLoader_addResourceData( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + size_t length, + ); + external int _GltfResourceLoader_loadResources( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + ); + external Pointer _IndexBufferBuilder_create(); + external void _IndexBufferBuilder_indexCount(Pointer builder, int count); + external void _IndexBufferBuilder_bufferType(Pointer builder, int indexType); + external Pointer _IndexBufferBuilder_build( + Pointer builder, + Pointer engine, + ); + external void _IndexBufferBuilder_destroy(Pointer builder); + external size_t _IndexBuffer_getIndexCount(Pointer buffer); + external void _IndexBuffer_setBuffer( + Pointer engine, + Pointer buffer, + Pointer data, + size_t sizeInBytes, + int byteOffset, + ); + external void _IndexBuffer_destroy(Pointer engine, Pointer buffer); + external void _IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation); + external Pointer _MaterialProvider_createMaterialInstance( + Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, + ); + external Pointer _NameComponentManager_create(); + external void _NameComponentManager_destroy(Pointer tNameComponentManager); + external Pointer _NameComponentManager_getName( + Pointer tNameComponentManager, + EntityId entity, + ); + external Pointer _RenderManager_create(Pointer tEngine, Pointer tRenderer); + external void _RenderManager_destroy(Pointer tRenderer); + external void _RenderManager_addAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, + ); + external void _RenderManager_removeAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, + ); + external void _RenderManager_render(Pointer tRenderer, JSBigInt frameTimeInNanos); + external void _RenderManager_setRenderable( + Pointer tRenderer, + Pointer swapChain, + Pointer> views, + int numViews, + ); + external void _RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain); + external void _RenderManager_requestRender(Pointer tRenderer); + external void _RenderManager_attachToRenderThread(Pointer tRenderer); + external void _RenderManager_detachFromRenderThread(Pointer tRenderManager); + external void _RenderManager_setPaused(Pointer tRenderer, bool paused); + external Pointer _Material_createInstance(Pointer tMaterial); + external int _Material_getFeatureLevel(Pointer tMaterial); + external Pointer _Material_createImageMaterial(Pointer tEngine); + external Pointer _Material_createGridMaterial(Pointer tEngine); + external Pointer _Material_createGizmoMaterial(Pointer tEngine); + external Pointer _Material_createSilhouetteMaterial(Pointer tEngine); + external Pointer _Material_createEdgeOutlineMaterial(Pointer tEngine); + external Pointer _Material_createWireframeMaterial(Pointer tEngine); + external Pointer _Material_createTranslationAxisMaterial(Pointer tEngine); + external Pointer _Material_createBoneOverlayMaterial(Pointer tEngine); + external int _Material_hasParameter(Pointer tMaterial, Pointer propertyName); + external int _MaterialInstance_isStencilWriteEnabled(Pointer materialInstance); + external Pointer _MaterialInstance_getMaterial(Pointer materialInstance); + external void _MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setCullingMode(Pointer materialInstance, int culling); + external void _MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided); + external void _MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setParameterFloat( + Pointer materialInstance, + Pointer propertyName, + double value, + ); + external void _MaterialInstance_setParameterFloat2( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + ); + external void _MaterialInstance_setParameterFloat3( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double z, + ); + external void _MaterialInstance_setParameterFloat3Array( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer raw, + int length, + ); + external void _MaterialInstance_setParameterFloat4( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double w, + double z, + ); + external void _MaterialInstance_setParameterMat3( + Pointer materialInstance, Pointer propertyName, Pointer matrix, ); @@ -281,157 +600,45 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { ); external int _MaterialInstance_getTransparencyMode(Pointer materialInstance); external int _Material_getBlendingMode(Pointer material); - external Pointer _NameComponentManager_create(); - external void _NameComponentManager_destroy(Pointer tNameComponentManager); - external Pointer _NameComponentManager_getName( - Pointer tNameComponentManager, - EntityId entity, + external Pointer _Texture_build( + Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import1, + int sampler, + int format, ); - external Pointer _SceneAsset_createFromBuffers( + external void _Texture_setExternalImage( Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Pointer boundingBoxPtr, + Pointer tTexture, + Pointer externalImage, ); - external Pointer _SceneAsset_createFromFilamentAsset( + external size_t _Texture_getLevels(Pointer tTexture); + external int _Texture_loadImage( Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, - ); - external Pointer _SceneAsset_getFilamentAsset(Pointer tSceneAsset); - external int _SceneAsset_getType(Pointer tSceneAsset); - external void _SceneAsset_destroy(Pointer tSceneAsset); - external void _SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene); - external void _SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene); - external EntityId _SceneAsset_getEntity(Pointer tSceneAsset); - external int _SceneAsset_getChildEntityCount(Pointer tSceneAsset); - external void _SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out); - external Pointer _SceneAsset_getCameraEntities(Pointer tSceneAsset); - external size_t _SceneAsset_getCameraEntityCount(Pointer tSceneAsset); - external Pointer _SceneAsset_getLightEntities(Pointer tSceneAsset); - external size_t _SceneAsset_getLightEntityCount(Pointer tSceneAsset); - external Pointer _SceneAsset_getInstance(Pointer tSceneAsset, int index); - external size_t _SceneAsset_getInstanceCount(Pointer tSceneAsset); - external Pointer _SceneAsset_createInstance( - Pointer asset, - Pointer> materialInstances, - int materialInstanceCount, + Pointer tTexture, + Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, ); - external void _SceneAsset_getBoundingBox(Pointer Aabb3_out, Pointer asset); - external Pointer _SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex); - external Pointer _SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex); - external int _SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, EntityId entity); - external void _SceneAsset_releaseSourceData(Pointer tSceneAsset); - external void _SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading); - external void _SceneAsset_getBones(Pointer tSceneAsset, size_t skinIndex, Pointer out); - external size_t _SceneAsset_getBoneCount(Pointer tSceneAsset, size_t skinIndex); - external Pointer _SceneAsset_getBoneName(Pointer tSceneAsset, size_t skinIndex, size_t boneIndex); - external void _Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity); - external double _Camera_getAperture(Pointer camera); - external double _Camera_getShutterSpeed(Pointer camera); - external double _Camera_getSensitivity(Pointer camera); - external void _Camera_getModelMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getViewMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getProjectionMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getCullingProjectionMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getFrustum(Pointer camera, Pointer out); - external void _Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far); - external void _Camera_setProjectionFromFov( - Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, - ); - external double _Camera_getFocalLength(Pointer camera); - external void _Camera_lookAt( - Pointer camera, - Pointer eyePtr, - Pointer focusPtr, - Pointer upPtr, - ); - external double _Camera_getNear(Pointer camera); - external double _Camera_getCullingFar(Pointer camera); - external double _Camera_getFov(Pointer camera, bool horizontal); - external double _Camera_getFocusDistance(Pointer camera); - external void _Camera_setFocusDistance(Pointer camera, double focusDistance); - external void _Camera_setCustomProjectionWithCulling( - Pointer camera, - Pointer projectionMatrixPtr, - double near, - double far, - ); - external void _Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix); - external void _Camera_setLensProjection( - Pointer camera, - double near, - double far, - double aspect, - double focalLength, - ); - external EntityId _Camera_getEntity(Pointer camera); - external void _Camera_setProjection( - Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, - ); - external void _MeshData_dispose(Pointer meshData); - external int _GltfParser_parseBuffer( - Pointer data, - size_t length, - Pointer meshName, - Pointer outMeshData, - ); - external Pointer _Texture_build( - Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import1, - int sampler, - int format, - ); - external void _Texture_setExternalImage( - Pointer tEngine, - Pointer tTexture, - Pointer externalImage, - ); - external size_t _Texture_getLevels(Pointer tTexture); - external int _Texture_loadImage( - Pointer tEngine, - Pointer tTexture, - Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, - ); - external int _Texture_setImage( - Pointer tEngine, - Pointer tTexture, - int level, - Pointer data, - size_t size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, + external int _Texture_setImage( + Pointer tEngine, + Pointer tTexture, + int level, + Pointer data, + size_t size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, ); external int _Texture_getWidth(Pointer tTexture, int level); external int _Texture_getHeight(Pointer tTexture, int level); @@ -476,194 +683,146 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external void _TextureSampler_setAnisotropy(Pointer sampler, double anisotropy); external void _TextureSampler_setCompareMode(Pointer sampler, int mode, int func); external void _TextureSampler_destroy(Pointer sampler); - external Pointer _Engine_create( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - ); - external int _Engine_getSupportedFeatureLevel(Pointer tEngine); - external void _Engine_destroy(Pointer tEngine); - external Pointer _Engine_createRenderer(Pointer tEngine); - external void _Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer); - external Pointer _Engine_createSwapChain(Pointer tEngine, Pointer window, JSBigInt flags); - external Pointer _Engine_createHeadlessSwapChain( + external Pointer _RenderTarget_create( Pointer tEngine, + Pointer color, + Pointer depth, + ); + external void _RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget); + external void _Renderer_setClearOptions( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, + ); + external int _Renderer_beginFrame( + Pointer tRenderer, + Pointer tSwapChain, + JSBigInt frameTimeInNanos, + ); + external void _Renderer_endFrame(Pointer tRenderer); + external void _Renderer_render(Pointer tRenderer, Pointer tView); + external void _Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView); + external void _Renderer_readPixels( + Pointer tRenderer, int width, int height, - JSBigInt flags, - ); - external void _Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain); - external void _Engine_destroyView(Pointer tEngine, Pointer tView); - external void _Engine_destroyScene(Pointer tEngine, Pointer tScene); - external void _Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading); - external Pointer _Engine_createCamera(Pointer tEngine, EntityId entityId); - external void _Engine_destroyCamera(Pointer tEngine, Pointer tCamera); - external Pointer _Engine_createView(Pointer tEngine); - external Pointer _Engine_getCameraComponent(Pointer tEngine, EntityId entityId); - external Pointer _Engine_getTransformManager(Pointer engine); - external Pointer _Engine_getRenderableManager(Pointer engine); - external Pointer _Engine_getLightManager(Pointer engine); - external Pointer _Engine_getEntityManager(Pointer engine); - external void _Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled); - external size_t _Engine_getMaxAutomaticInstances(Pointer tEngine); - external void _Engine_destroyTexture(Pointer tEngine, Pointer tTexture); - external Pointer _Engine_createFence(Pointer tEngine); - external void _Engine_destroyFence(Pointer tEngine, Pointer tFence); - external void _Engine_flushAndWait(Pointer tEngine); - external void _Engine_execute(Pointer tEngine); - external Pointer _Engine_buildMaterial( - Pointer tEngine, - Pointer materialData, - size_t length, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + size_t outLength, ); - external void _Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial); - external void _Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance); - external Pointer _Engine_createScene(Pointer tEngine); - external Pointer _Engine_buildSkybox( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, + external void _Renderer_setFrameInterval( + Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, ); - external Pointer _Engine_buildColoredSkybox( + external Pointer _SceneAsset_createFromBuffers( Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Pointer boundingBoxPtr, ); - external Pointer _Engine_buildIndirectLightFromIrradianceTexture( + external Pointer _SceneAsset_createFromFilamentAsset( Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, ); - external Pointer _Engine_buildIndirectLightFromIrradianceHarmonics( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer irradianceHarmonics, - double intensity, + external Pointer _SceneAsset_getFilamentAsset(Pointer tSceneAsset); + external int _SceneAsset_getType(Pointer tSceneAsset); + external void _SceneAsset_destroy(Pointer tSceneAsset); + external void _SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene); + external void _SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene); + external EntityId _SceneAsset_getEntity(Pointer tSceneAsset); + external int _SceneAsset_getChildEntityCount(Pointer tSceneAsset); + external void _SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out); + external Pointer _SceneAsset_getCameraEntities(Pointer tSceneAsset); + external size_t _SceneAsset_getCameraEntityCount(Pointer tSceneAsset); + external Pointer _SceneAsset_getLightEntities(Pointer tSceneAsset); + external size_t _SceneAsset_getLightEntityCount(Pointer tSceneAsset); + external Pointer _SceneAsset_getInstance(Pointer tSceneAsset, int index); + external size_t _SceneAsset_getInstanceCount(Pointer tSceneAsset); + external Pointer _SceneAsset_createInstance( + Pointer asset, + Pointer> materialInstances, + int materialInstanceCount, ); - external void _Engine_destroySkybox(Pointer tEngine, Pointer tSkybox); - external void _Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight); - external EntityId _EntityManager_createEntity(Pointer tEntityManager); - external void _EntityManager_destroyEntity(Pointer tEntityManager, EntityId entityId); - external void _Fence_waitAndDestroy(Pointer tFence); - external Pointer _Engine_getDebugRegistry(Pointer tEngine); - external int _DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name); - external int _DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value); - external int _DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value); - external int _DebugRegistry_setProperty_float( - Pointer tDebugRegistry, - Pointer name, - double value, + external void _SceneAsset_getBoundingBox(Pointer Aabb3_out, Pointer asset); + external Pointer _SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex); + external Pointer _SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex); + external int _SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, EntityId entity); + external void _SceneAsset_releaseSourceData(Pointer tSceneAsset); + external void _SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading); + external void _SceneAsset_getBones(Pointer tSceneAsset, size_t skinIndex, Pointer out); + external size_t _SceneAsset_getBoneCount(Pointer tSceneAsset, size_t skinIndex); + external Pointer _SceneAsset_getBoneName(Pointer tSceneAsset, size_t skinIndex, size_t boneIndex); + external Pointer _SurfaceOrientationBuilder_create(); + external void _SurfaceOrientationBuilder_vertexCount(Pointer builder, size_t count); + external void _SurfaceOrientationBuilder_normals( + Pointer builder, + Pointer normals, + size_t stride, ); - external int _DebugRegistry_getProperty_bool( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, + external void _SurfaceOrientationBuilder_tangents( + Pointer builder, + Pointer tangents, + size_t stride, ); - external int _DebugRegistry_getProperty_int( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, + external void _SurfaceOrientationBuilder_uvs( + Pointer builder, + Pointer uvs, + size_t stride, ); - external int _DebugRegistry_getProperty_float( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, - ); - external Pointer _MaterialProvider_createMaterialInstance( - Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, + external void _SurfaceOrientationBuilder_positions( + Pointer builder, + Pointer positions, + size_t stride, ); - external Pointer _VertexBufferBuilder_create(); - external void _VertexBufferBuilder_bufferCount(Pointer builder, int count); - external void _VertexBufferBuilder_vertexCount(Pointer builder, int count); - external void _VertexBufferBuilder_attribute( - Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, + external void _SurfaceOrientationBuilder_triangleCount(Pointer builder, size_t count); + external void _SurfaceOrientationBuilder_triangles_uint( + Pointer builder, + Pointer triangles, ); - external void _VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize); - external Pointer _VertexBufferBuilder_build( - Pointer builder, - Pointer engine, + external void _SurfaceOrientationBuilder_triangles_ushort( + Pointer builder, + Pointer triangles, ); - external void _VertexBufferBuilder_destroy(Pointer builder); - external size_t _VertexBuffer_getVertexCount(Pointer buffer); - external void _VertexBuffer_setBufferAt( - Pointer engine, - Pointer buffer, - int bufferIndex, - Pointer data, - size_t sizeInBytes, - int byteOffset, + external Pointer _SurfaceOrientationBuilder_build(Pointer builder); + external void _SurfaceOrientationBuilder_destroy(Pointer builder); + external size_t _SurfaceOrientation_getVertexCount(Pointer orientation); + external void _SurfaceOrientation_getQuats_float4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, ); - external void _VertexBuffer_destroy(Pointer engine, Pointer buffer); - external Pointer _IndexBufferBuilder_create(); - external void _IndexBufferBuilder_indexCount(Pointer builder, int count); - external void _IndexBufferBuilder_bufferType(Pointer builder, int indexType); - external Pointer _IndexBufferBuilder_build( - Pointer builder, - Pointer engine, + external void _SurfaceOrientation_getQuats_short4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, ); - external void _IndexBufferBuilder_destroy(Pointer builder); - external size_t _IndexBuffer_getIndexCount(Pointer buffer); - external void _IndexBuffer_setBuffer( - Pointer engine, - Pointer buffer, - Pointer data, - size_t sizeInBytes, - int byteOffset, + external void _SurfaceOrientation_getQuats_half4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, ); - external void _IndexBuffer_destroy(Pointer engine, Pointer buffer); + external void _SurfaceOrientation_destroy(Pointer orientation); external void _TransformManager_getLocalTransform( Pointer double4x4_out, Pointer tTransformManager, @@ -706,6 +865,39 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { ); external void _TransformManager_openLocalTransformTransaction(Pointer tTransformManager); external void _TransformManager_commitLocalTransformTransaction(Pointer tTransformManager); + external Pointer _VertexBufferBuilder_create(); + external void _VertexBufferBuilder_bufferCount(Pointer builder, int count); + external void _VertexBufferBuilder_vertexCount(Pointer builder, int count); + external void _VertexBufferBuilder_attribute( + Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, + ); + external void _VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize); + external Pointer _VertexBufferBuilder_build( + Pointer builder, + Pointer engine, + ); + external void _VertexBufferBuilder_destroy(Pointer builder); + external size_t _VertexBuffer_getVertexCount(Pointer buffer); + external void _VertexBuffer_setBufferAt( + Pointer engine, + Pointer buffer, + int bufferIndex, + Pointer data, + size_t sizeInBytes, + int byteOffset, + ); + external void _VertexBuffer_destroy(Pointer engine, Pointer buffer); + external void _FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); + external void _FrameScheduler_stop(); + external int _FrameScheduler_initDartApi(Pointer data); + external void _FrameScheduler_startWithPort(JSBigInt port, int targetFps); + external void _FrameScheduler_setTargetFps(int fps); + external JSBigInt _FrameScheduler_steadyClockUs(); external int _LightManager_createLight( Pointer tEngine, Pointer tLightManager, @@ -824,351 +1016,681 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { double lambda, ); external double _LightManager_rgbToColorTemperature(double r, double g, double b); - external Pointer _RenderThread_create(); - external Pointer _RenderThread_createForCanvas(Pointer canvasSelector); - external void _RenderThread_destroy(Pointer renderThread); - external void _RenderThread_addTask(Pointer> task); - external void _RenderManager_setRenderableRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - Pointer> tViews, - int numViews, - int requestId, - VoidCallback onComplete, - ); - external void _RenderManager_renderRenderThread( - Pointer tRenderManager, - JSBigInt frameTimeInNanos, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_destroyEntity(Pointer tRenderableManager, EntityId entityId); + external int _RenderableManager_hasComponent(Pointer tRenderableManager, EntityId entityId); + external int _RenderableManager_empty(Pointer tRenderableManager); + external int _RenderableManager_isRenderable(Pointer tRenderableManager, EntityId entityId); + external size_t _RenderableManager_getComponentCount(Pointer tRenderableManager); + external int _RenderableManager_setMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, + Pointer tMaterialInstance, ); - external void _RenderManager_addAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, + external Pointer _RenderableManager_getMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, ); - external void _RenderManager_removeAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_clearMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, ); - external void _RenderManager_removeSwapChainRenderThread( - Pointer tRenderManager, - Pointer tSwapChain, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_setGeometryAtNonIndexed( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, + int type, + Pointer vertices, + size_t offset, + size_t count, ); - external void _AnimationManager_createRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external size_t _RenderableManager_getPrimitiveCount( + Pointer tRenderableManager, + EntityId entityId, ); - external void _AnimationManager_destroyRenderThread( - Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_getAxisAlignedBoundingBox( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - external void _Engine_createRenderThread( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - Pointer)>> onComplete, + external void _RenderableManager_setAxisAlignedBoundingBox( + Pointer tRenderableManager, + EntityId entityId, + Pointer aabbPtr, ); - external void _Engine_createRendererRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external void _RenderableManager_getAabb( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - external void _Engine_destroyRendererRenderThread( - Pointer tEngine, - Pointer tRenderer, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_getBoundingBox( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - external void _Engine_createSwapChainRenderThread( - Pointer tEngine, - Pointer window, - JSBigInt flags, - Pointer)>> onComplete, + external void _RenderableManager_setLayerMask( + Pointer tRenderableManager, + EntityId entityId, + int select, + int values, ); - external void _Engine_createHeadlessSwapChainRenderThread( - Pointer tEngine, - int width, - int height, - JSBigInt flags, - Pointer)>> onComplete, - ); - external void _Engine_createCameraRenderThread( - Pointer tEngine, + external int _RenderableManager_getLayerMask(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setVisibilityLayer( + Pointer tRenderableManager, EntityId entityId, - Pointer)>> onComplete, + int layer, ); - external void _Engine_destroyCameraRenderThread( - Pointer tEngine, - Pointer tCamera, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_setPriority( + Pointer tRenderableManager, + EntityId entityId, + int priority, ); - external void _Engine_createViewRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external int _RenderableManager_getPriority(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, ); - external void _Engine_buildMaterialRenderThread( - Pointer tEngine, - Pointer materialData, - size_t length, - Pointer)>> onComplete, + external void _RenderableManager_setCulling( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - external void _Engine_destroyRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_destroySwapChainRenderThread( - Pointer tEngine, - Pointer tSwapChain, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_getCulling(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setFogEnabled( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - external void _Engine_destroyViewRenderThread( - Pointer tEngine, - Pointer tView, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_getFogEnabled(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setLightChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, + bool enable, ); - external void _Engine_destroySceneRenderThread( - Pointer tEngine, - Pointer tScene, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_getLightChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, ); - external void _Engine_destroyColorGradingRenderThread( - Pointer tEngine, - Pointer tColorGrading, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_setCastShadows( + Pointer tRenderableManager, + EntityId entityId, + bool castShadows, ); - external void _Engine_destroyMaterialRenderThread( - Pointer tEngine, - Pointer tMaterial, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_isShadowCaster(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setReceiveShadows( + Pointer tRenderableManager, + EntityId entityId, + bool receiveShadows, ); - external void _Engine_destroyMaterialInstanceRenderThread( - Pointer tEngine, - Pointer tMaterialInstance, - int requestId, - VoidCallback onComplete, + external int _RenderableManager_isShadowReceiver(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setScreenSpaceContactShadows( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - external void _Engine_destroySkyboxRenderThread( - Pointer tEngine, - Pointer tSkybox, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_setBlendOrderAt( + Pointer tRenderableManager, + EntityId entityId, + size_t primitiveIndex, + int order, ); - external void _Engine_destroyIndirectLightRenderThread( - Pointer tEngine, - Pointer tIndirectLight, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_setGlobalBlendOrderEnabledAt( + Pointer tRenderableManager, + EntityId entityId, + size_t primitiveIndex, + bool enabled, ); - external void _Texture_buildRenderThread( - Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import1, - int sampler, - int format, - Pointer)>> onComplete, + external void _RenderableManager_setMorphWeights( + Pointer tRenderableManager, + EntityId entityId, + Pointer weights, + size_t count, + size_t offset, ); - external void _Texture_setExternalImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer externalImage, - int requestId, - VoidCallback onComplete, + external size_t _RenderableManager_getMorphTargetCount( + Pointer tRenderableManager, + EntityId entityId, ); - external void _Texture_generateMipMapsRenderThread( - Pointer tTexture, - Pointer tEngine, - int requestId, - VoidCallback onComplete, + external void _RenderableManager_setBonesFromMat4( + Pointer tRenderableManager, + EntityId entityId, + Pointer transforms, + size_t boneCount, + size_t offset, ); - external void _Ktx1Reader_createTextureRenderThread( - Pointer tEngine, - Pointer tBundle, - int requestId, - VoidCallback onTextureUploadComplete, - Pointer)>> onComplete, + external void _RenderableManager_setBonesFromBone( + Pointer tRenderableManager, + EntityId entityId, + Pointer bones, + size_t boneCount, + size_t offset, ); - external void _Ktx2Reader_createTextureRenderThread( - Pointer tEngine, - Pointer data, - size_t size, - Pointer)>> onComplete, + external Pointer _RenderableBuilder_create(size_t primitiveCount); + external void _RenderableBuilder_destroy(Pointer builder); + external void _RenderableBuilder_boundingBox(Pointer builder, Pointer aabbPtr); + external void _RenderableBuilder_material( + Pointer builder, + size_t primitiveIndex, + Pointer materialInstance, ); - external void _Engine_destroyTextureRenderThread( - Pointer engine, - Pointer tTexture, - int requestId, - VoidCallback onComplete, + external void _RenderableBuilder_geometry( + Pointer builder, + size_t primitiveIndex, + int type, + Pointer vertices, + Pointer indices, + size_t offset, + size_t count, ); - external void _Engine_createFenceRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external void _RenderableBuilder_geometryNonIndexed( + Pointer builder, + size_t primitiveIndex, + int type, + Pointer vertices, + size_t offset, + size_t count, ); - external void _Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, VoidCallback onComplete); - external void _Engine_destroyFenceRenderThread( - Pointer tEngine, - Pointer tFence, - int requestId, - VoidCallback onComplete, + external void _RenderableBuilder_priority(Pointer builder, int priority); + external void _RenderableBuilder_channel(Pointer builder, int channel); + external void _RenderableBuilder_culling(Pointer builder, bool enabled); + external void _RenderableBuilder_castShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_receiveShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_fog(Pointer builder, bool enabled); + external void _RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled); + external void _RenderableBuilder_layerMask(Pointer builder, int select, int values); + external void _RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_blendOrder(Pointer builder, size_t primitiveIndex, int order); + external void _RenderableBuilder_globalBlendOrderEnabled( + Pointer builder, + size_t primitiveIndex, + bool enabled, ); - external void _Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_executeRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_buildSkyboxRenderThread( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, + external void _RenderableBuilder_instances(Pointer builder, size_t instanceCount); + external void _RenderableBuilder_skinningFromMat4( + Pointer builder, + size_t boneCount, + Pointer transforms, ); - external void _Engine_buildColoredSkyboxRenderThread( - Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, + external void _RenderableBuilder_skinningFromBone( + Pointer builder, + size_t boneCount, + Pointer bones, ); - external void _Engine_buildIndirectLightFromIrradianceTextureRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, + external void _RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled); + external void _RenderableBuilder_boneIndicesAndWeights( + Pointer builder, + size_t primitiveIndex, + Pointer indicesAndWeights, + size_t count, + size_t bonesPerVertex, + ); + external int _RenderableBuilder_build(Pointer builder, Pointer engine, EntityId entity); + external void _Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a); + + /// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). + external void _Skybox_setLayerMask(Pointer tSkybox, int select, int values); + + /// Returns the visibility mask bits. + external int _Skybox_getLayerMask(Pointer tSkybox); + + /// Returns the skybox intensity in lux. + external double _Skybox_getIntensity(Pointer tSkybox); + + /// Returns the environment texture, or nullptr for a color-only skybox. + external Pointer _Skybox_getTexture(Pointer tSkybox); + external Pointer _Engine_create( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + ); + external int _Engine_getSupportedFeatureLevel(Pointer tEngine); + external void _Engine_destroy(Pointer tEngine); + external Pointer _Engine_createRenderer(Pointer tEngine); + external void _Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer); + external Pointer _Engine_createSwapChain(Pointer tEngine, Pointer window, JSBigInt flags); + external Pointer _Engine_createHeadlessSwapChain( + Pointer tEngine, + int width, + int height, + JSBigInt flags, + ); + external void _Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain); + external void _Engine_destroyView(Pointer tEngine, Pointer tView); + external void _Engine_destroyScene(Pointer tEngine, Pointer tScene); + external void _Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading); + external Pointer _Engine_createCamera(Pointer tEngine, EntityId entityId); + external void _Engine_destroyCamera(Pointer tEngine, Pointer tCamera); + external Pointer _Engine_createView(Pointer tEngine); + external Pointer _Engine_getCameraComponent(Pointer tEngine, EntityId entityId); + external Pointer _Engine_getTransformManager(Pointer engine); + external Pointer _Engine_getRenderableManager(Pointer engine); + external Pointer _Engine_getLightManager(Pointer engine); + external Pointer _Engine_getEntityManager(Pointer engine); + external void _Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled); + external size_t _Engine_getMaxAutomaticInstances(Pointer tEngine); + external void _Engine_destroyTexture(Pointer tEngine, Pointer tTexture); + external Pointer _Engine_createFence(Pointer tEngine); + external void _Engine_destroyFence(Pointer tEngine, Pointer tFence); + external void _Engine_flushAndWait(Pointer tEngine); + external void _Engine_execute(Pointer tEngine); + external Pointer _Engine_buildMaterial( + Pointer tEngine, + Pointer materialData, + size_t length, + ); + external void _Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial); + external void _Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance); + external Pointer _Engine_createScene(Pointer tEngine); + external Pointer _Engine_buildSkybox( + Pointer tEngine, + Pointer tTexture, + bool showSun, double intensity, - Pointer)>> onComplete, + int priority, ); - external void _Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + external Pointer _Engine_buildColoredSkybox( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + ); + external Pointer _Engine_buildIndirectLightFromIrradianceTexture( Pointer tEngine, Pointer tReflectionsTexture, - Pointer harmonics, + Pointer tIrradianceTexture, double intensity, - Pointer)>> onComplete, ); - external void _Renderer_setClearOptionsRenderThread( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, + external Pointer _Engine_buildIndirectLightFromIrradianceHarmonics( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer irradianceHarmonics, + double intensity, + ); + external void _Engine_destroySkybox(Pointer tEngine, Pointer tSkybox); + external void _Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight); + external EntityId _EntityManager_createEntity(Pointer tEntityManager); + external void _EntityManager_destroyEntity(Pointer tEntityManager, EntityId entityId); + external void _Fence_waitAndDestroy(Pointer tFence); + external Pointer _Engine_getDebugRegistry(Pointer tEngine); + external int _DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name); + external int _DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value); + external int _DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value); + external int _DebugRegistry_setProperty_float( + Pointer tDebugRegistry, + Pointer name, + double value, + ); + external int _DebugRegistry_getProperty_bool( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, + ); + external int _DebugRegistry_getProperty_int( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, + ); + external int _DebugRegistry_getProperty_float( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, + ); + external Pointer _RenderThread_create(); + external Pointer _RenderThread_createForCanvas(Pointer canvasSelector); + external void _RenderThread_destroy(Pointer renderThread); + external void _RenderThread_addTask(Pointer> task); + external void _RenderManager_setRenderableRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + Pointer> tViews, + int numViews, int requestId, VoidCallback onComplete, ); - external void _Renderer_beginFrameRenderThread( - Pointer tRenderer, - Pointer tSwapChain, + external void _RenderManager_renderRenderThread( + Pointer tRenderManager, JSBigInt frameTimeInNanos, - Pointer> onComplete, - ); - external void _Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, VoidCallback onComplete); - external void _Renderer_renderRenderThread( - Pointer tRenderer, - Pointer tView, int requestId, VoidCallback onComplete, ); - external void _Renderer_renderStandaloneViewRenderThread( - Pointer tRenderer, - Pointer tView, + external void _RenderManager_addAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, int requestId, VoidCallback onComplete, ); - external void _Renderer_readPixelsRenderThread( - Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - size_t outLength, + external void _RenderManager_removeAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, int requestId, VoidCallback onComplete, ); - external void _Material_createInstanceRenderThread( - Pointer tMaterial, - Pointer)>> onComplete, - ); - external void _MaterialInstance_setParameterTextureRenderThread( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer tTexture, - Pointer tSampler, + external void _RenderManager_removeSwapChainRenderThread( + Pointer tRenderManager, + Pointer tSwapChain, int requestId, VoidCallback onComplete, ); - external void _Material_createImageMaterialRenderThread( + external void _AnimationManager_createRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Material_createGizmoMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external void _AnimationManager_destroyRenderThread( + Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); - external void _Material_createBoneOverlayMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external void _Engine_createRenderThread( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + Pointer)>> onComplete, ); - external void _Material_createSilhouetteMaterialRenderThread( + external void _Engine_createRendererRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Material_createEdgeOutlineMaterialRenderThread( + external void _Engine_destroyRendererRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer tRenderer, + int requestId, + VoidCallback onComplete, ); - external void _Material_createWireframeMaterialRenderThread( + external void _Engine_createSwapChainRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer window, + JSBigInt flags, + Pointer)>> onComplete, ); - external void _Material_createTranslationAxisMaterialRenderThread( + external void _Engine_createHeadlessSwapChainRenderThread( Pointer tEngine, - Pointer)>> onComplete, - ); - external void _ColorGradingBuilder_createRenderThread( - Pointer)>> onComplete, + int width, + int height, + JSBigInt flags, + Pointer)>> onComplete, ); - external void _ColorGradingBuilder_buildRenderThread( - Pointer tBuilder, + external void _Engine_createCameraRenderThread( Pointer tEngine, - Pointer)>> onComplete, + EntityId entityId, + Pointer)>> onComplete, ); - external void _ColorGradingBuilder_destroyRenderThread( - Pointer tBuilder, + external void _Engine_destroyCameraRenderThread( + Pointer tEngine, + Pointer tCamera, int requestId, VoidCallback onComplete, ); - external void _ToneMapper_createLinearRenderThread( + external void _Engine_createViewRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _ToneMapper_createACESRenderThread( + external void _Engine_buildMaterialRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer materialData, + size_t length, + Pointer)>> onComplete, ); - external void _ToneMapper_createACESLegacyRenderThread( + external void _Engine_destroyRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_destroySwapChainRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer tSwapChain, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroyViewRenderThread( + Pointer tEngine, + Pointer tView, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroySceneRenderThread( + Pointer tEngine, + Pointer tScene, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroyColorGradingRenderThread( + Pointer tEngine, + Pointer tColorGrading, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroyMaterialRenderThread( + Pointer tEngine, + Pointer tMaterial, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroyMaterialInstanceRenderThread( + Pointer tEngine, + Pointer tMaterialInstance, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroySkyboxRenderThread( + Pointer tEngine, + Pointer tSkybox, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_destroyIndirectLightRenderThread( + Pointer tEngine, + Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, + ); + external void _Texture_buildRenderThread( + Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import1, + int sampler, + int format, + Pointer)>> onComplete, + ); + external void _Texture_setExternalImageRenderThread( + Pointer tEngine, + Pointer tTexture, + Pointer externalImage, + int requestId, + VoidCallback onComplete, + ); + external void _Texture_generateMipMapsRenderThread( + Pointer tTexture, + Pointer tEngine, + int requestId, + VoidCallback onComplete, + ); + external void _Ktx1Reader_createTextureRenderThread( + Pointer tEngine, + Pointer tBundle, + int requestId, + VoidCallback onTextureUploadComplete, + Pointer)>> onComplete, + ); + external void _Ktx2Reader_createTextureRenderThread( + Pointer tEngine, + Pointer data, + size_t size, + Pointer)>> onComplete, + ); + external void _Engine_destroyTextureRenderThread( + Pointer engine, + Pointer tTexture, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_createFenceRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, VoidCallback onComplete); + external void _Engine_destroyFenceRenderThread( + Pointer tEngine, + Pointer tFence, + int requestId, + VoidCallback onComplete, + ); + external void _Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_executeRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_buildSkyboxRenderThread( + Pointer tEngine, + Pointer tTexture, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, + ); + external void _Engine_buildColoredSkyboxRenderThread( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, + ); + external void _Engine_buildIndirectLightFromIrradianceTextureRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, + Pointer)>> onComplete, + ); + external void _Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer harmonics, + double intensity, + Pointer)>> onComplete, + ); + external void _Renderer_setClearOptionsRenderThread( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, + int requestId, + VoidCallback onComplete, + ); + external void _Renderer_beginFrameRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + JSBigInt frameTimeInNanos, + Pointer> onComplete, + ); + external void _Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, VoidCallback onComplete); + external void _Renderer_renderRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + VoidCallback onComplete, + ); + external void _Renderer_renderStandaloneViewRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + VoidCallback onComplete, + ); + external void _Renderer_readPixelsRenderThread( + Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + size_t outLength, + int requestId, + VoidCallback onComplete, + ); + external void _Material_createInstanceRenderThread( + Pointer tMaterial, + Pointer)>> onComplete, + ); + external void _MaterialInstance_setParameterTextureRenderThread( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer tTexture, + Pointer tSampler, + int requestId, + VoidCallback onComplete, + ); + external void _Material_createImageMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createGizmoMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createBoneOverlayMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createSilhouetteMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createEdgeOutlineMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createWireframeMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _Material_createTranslationAxisMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_createRenderThread( + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_destroyRenderThread( + Pointer tBuilder, + int requestId, + VoidCallback onComplete, + ); + external void _ToneMapper_createLinearRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _ToneMapper_createACESRenderThread( + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _ToneMapper_createACESLegacyRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); external void _ToneMapper_createFilmicRenderThread( Pointer tEngine, @@ -1855,612 +2377,619 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { int requestId, VoidCallback onComplete, ); - external void _Renderer_setClearOptions( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, - ); - external int _Renderer_beginFrame( - Pointer tRenderer, - Pointer tSwapChain, - JSBigInt frameTimeInNanos, - ); - external void _Renderer_endFrame(Pointer tRenderer); - external void _Renderer_render(Pointer tRenderer, Pointer tView); - external void _Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView); - external void _Renderer_readPixels( - Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - size_t outLength, + external void _Scene_addEntity(Pointer tScene, EntityId entityId); + external void _Scene_removeEntity(Pointer tScene, EntityId entityId); + external void _Scene_setSkybox(Pointer tScene, Pointer skybox); + external Pointer _Scene_getSkybox(Pointer tScene); + external void _Scene_setIndirectLight(Pointer tScene, Pointer tIndirectLight); + external void _Scene_addFilamentAsset(Pointer tScene, Pointer asset); + + /// Walks every renderable primitive in the scene and records the ones whose + /// current MaterialInstance belongs to [tMaterial]. + /// + /// Returns the TOTAL number of matches (which may exceed [capacity]). When + /// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to + /// [capacity] matches are written to them. Call once with null buffers to + /// size the output, then again to fetch it. + external size_t _Scene_scanForMaterial( + Pointer tScene, + Pointer tRenderableManager, + Pointer tMaterial, + Pointer outEntities, + Pointer outPrimitives, + Pointer> outInstances, + size_t capacity, ); - external void _Renderer_setFrameInterval( - Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, + external void _MovementIntentExecutor_destroy(Pointer executor); + external void _MovementIntentExecutor_process( + Pointer executor, + Pointer intent, + JSBigInt deltaTimeInNanos, ); - external Pointer _RenderTarget_create( - Pointer tEngine, - Pointer color, - Pointer depth, + external void _Pipeline_registerMovementIntentExecutor(Pointer executor); + external void _TransformPipeline_setEngine(Pointer enginePtr); + external void _TransformPipeline_onMouseEvent( + int eventType, + int button, + double localX, + double localY, + double deltaX, + double deltaY, ); - external void _RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget); - external void _Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a); + external void _TransformPipeline_onKeyEvent(int eventType, int logicalKey, int physicalKey, int synthesized); + external void _TransformPipeline_onScrollEvent(double localX, double localY, double delta); + external void _TransformPipeline_update(double deltaTime); + external void _TransformPipeline_registerPipelineStage(Pointer pipelineStageHandle, Pointer name); + external void _TransformPipeline_unregisterPipelineStage(Pointer pipelineStageHandle); + external void _TransformPipeline_cleanup(); + external void _TransformPipeline_addKeyBinding(int logicalKey, int intentAction, double value); + external void _TransformPipeline_removeKeyBindingsForKey(int logicalKey); + external void _TransformPipeline_removeKeyBindingsForAction(int intentAction); + external void _TransformPipeline_clearKeyBindings(); + external void _TransformPipeline_addMouseButtonBinding(int mouseButton, int intentAction, double value); + external void _TransformPipeline_removeMouseButtonBindings(int mouseButton); + external void _TransformPipeline_setMouseSensitivity(double sensitivity); + external void _TransformPipeline_setInvertMouseY(int invert); +} - /// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). - external void _Skybox_setLayerMask(Pointer tSkybox, int select, int values); +void Thermion_setCanvasElementSize(Pointer name, int width, int height) { + final result = GeneratedBindings.instance._Thermion_setCanvasElementSize(name, width, height); + return result; +} - /// Returns the visibility mask bits. - external int _Skybox_getLayerMask(Pointer tSkybox); +void Thermion_destroyCanvas(Pointer canvasSelector) { + final result = GeneratedBindings.instance._Thermion_destroyCanvas(canvasSelector); + return result; +} - /// Returns the skybox intensity in lux. - external double _Skybox_getIntensity(Pointer tSkybox); +int Thermion_createGLContext(Pointer canvasSelector) { + final result = GeneratedBindings.instance._Thermion_createGLContext(canvasSelector); + return result; +} - /// Returns the environment texture, or nullptr for a color-only skybox. - external Pointer _Skybox_getTexture(Pointer tSkybox); - external void _RenderableManager_destroyEntity(Pointer tRenderableManager, EntityId entityId); - external int _RenderableManager_hasComponent(Pointer tRenderableManager, EntityId entityId); - external int _RenderableManager_empty(Pointer tRenderableManager); - external int _RenderableManager_isRenderable(Pointer tRenderableManager, EntityId entityId); - external size_t _RenderableManager_getComponentCount(Pointer tRenderableManager); - external int _RenderableManager_setMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, - Pointer tMaterialInstance, - ); - external Pointer _RenderableManager_getMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, - ); - external void _RenderableManager_clearMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, +int Thermion_getGLContext() { + final result = GeneratedBindings.instance._Thermion_getGLContext(); + return result; +} + +BigInt get TSWAP_CHAIN_CONFIG_TRANSPARENT { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_TRANSPARENT, + "i64", ); - external int _RenderableManager_setGeometryAtNonIndexed( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, - int type, - Pointer vertices, - size_t offset, - size_t count, + return bigIntasUintN(64, value).toDart; +} + +BigInt get TSWAP_CHAIN_CONFIG_READABLE { + final value = NativeLibrary.instance.getValueBigInt(GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_READABLE, "i64"); + return bigIntasUintN(64, value).toDart; +} + +BigInt get TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER, + "i64", ); - external size_t _RenderableManager_getPrimitiveCount( - Pointer tRenderableManager, - EntityId entityId, + return bigIntasUintN(64, value).toDart; +} + +BigInt get TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER, + "i64", ); - external void _RenderableManager_getAxisAlignedBoundingBox( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + return bigIntasUintN(64, value).toDart; +} + +Pointer AnimationManager_create(Pointer tEngine) { + final result = GeneratedBindings.instance._AnimationManager_create(tEngine.cast()); + return Pointer(result); +} + +void AnimationManager_destroy(Pointer tAnimationManager) { + final result = GeneratedBindings.instance._AnimationManager_destroy(tAnimationManager.cast()); + return result; +} + +void AnimationManager_update(Pointer tAnimationManager, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._AnimationManager_update( + tAnimationManager.cast(), + frameTimeInNanos.toJSBigInt, ); - external void _RenderableManager_setAxisAlignedBoundingBox( - Pointer tRenderableManager, - EntityId entityId, - Pointer aabbPtr, + return result; +} + +bool AnimationManager_addGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_addGltfAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - external void _RenderableManager_getAabb( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + return result == 1; +} + +bool AnimationManager_removeGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_removeGltfAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - external void _RenderableManager_getBoundingBox( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + return result == 1; +} + +void AnimationManager_addMorphAnimationComponent(Pointer tAnimationManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._AnimationManager_addMorphAnimationComponent( + tAnimationManager.cast(), + entityId, ); - external void _RenderableManager_setLayerMask( - Pointer tRenderableManager, - EntityId entityId, - int select, - int values, + return result; +} + +void AnimationManager_removeMorphAnimationComponent( + Pointer tAnimationManager, + DartEntityId entityId, +) { + final result = GeneratedBindings.instance._AnimationManager_removeMorphAnimationComponent( + tAnimationManager.cast(), + entityId, ); - external int _RenderableManager_getLayerMask(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setVisibilityLayer( - Pointer tRenderableManager, - EntityId entityId, - int layer, + return result; +} + +bool AnimationManager_addBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_addBoneAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - external void _RenderableManager_setPriority( - Pointer tRenderableManager, - EntityId entityId, - int priority, + return result == 1; +} + +bool AnimationManager_removeBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_removeBoneAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - external int _RenderableManager_getPriority(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setChannel( - Pointer tRenderableManager, - EntityId entityId, - int channel, - ); - external void _RenderableManager_setCulling( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, + return result == 1; +} + +bool AnimationManager_setMorphAnimation( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, +) { + final result = GeneratedBindings.instance._AnimationManager_setMorphAnimation( + tAnimationManager.cast(), + entityId, + morphData, + morphIndices, + numMorphTargets, + numFrames, + frameLengthInMs, ); - external int _RenderableManager_getCulling(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setFogEnabled( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, + return result == 1; +} + +bool AnimationManager_clearMorphAnimation(Pointer tAnimationManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._AnimationManager_clearMorphAnimation(tAnimationManager.cast(), entityId); + return result == 1; +} + +void AnimationManager_resetToRestPose(Pointer tAnimationManager, Pointer sceneAsset) { + final result = GeneratedBindings.instance._AnimationManager_resetToRestPose( + tAnimationManager.cast(), + sceneAsset.cast(), ); - external int _RenderableManager_getFogEnabled(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setLightChannel( - Pointer tRenderableManager, - EntityId entityId, - int channel, - bool enable, + return result; +} + +bool AnimationManager_addBoneAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int skinIndex, + int boneIndex, + Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, +) { + final result = GeneratedBindings.instance._AnimationManager_addBoneAnimation( + tAnimationManager.cast(), + tSceneAsset.cast(), + skinIndex, + boneIndex, + frameData, + numFrames, + frameLengthInMs, + fadeOutInSecs, + fadeInInSecs, + maxDelta, + loop, ); - external int _RenderableManager_getLightChannel( - Pointer tRenderableManager, - EntityId entityId, - int channel, + return result == 1; +} + +void AnimationManager_getRestLocalTransforms( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + Pointer out, + int numBones, +) { + final result = GeneratedBindings.instance._AnimationManager_getRestLocalTransforms( + tAnimationManager.cast(), + sceneAsset.cast(), + skinIndex, + out, + numBones, ); - external void _RenderableManager_setCastShadows( - Pointer tRenderableManager, - EntityId entityId, - bool castShadows, + return result; +} + +void AnimationManager_getInverseBindMatrix( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + int boneIndex, + Pointer out, +) { + final result = GeneratedBindings.instance._AnimationManager_getInverseBindMatrix( + tAnimationManager.cast(), + sceneAsset.cast(), + skinIndex, + boneIndex, + out, ); - external int _RenderableManager_isShadowCaster(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setReceiveShadows( - Pointer tRenderableManager, - EntityId entityId, - bool receiveShadows, + return result; +} + +bool AnimationManager_playGltfAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, +) { + final result = GeneratedBindings.instance._AnimationManager_playGltfAnimation( + tAnimationManager.cast(), + tSceneAsset.cast(), + index, + loop, + reverse, + replaceActive, + crossfade, + startOffset, + speed, ); - external int _RenderableManager_isShadowReceiver(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setScreenSpaceContactShadows( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, + return result == 1; +} + +bool AnimationManager_stopGltfAnimation( + Pointer tAnimationManager, + Pointer sceneAsset, + int index, +) { + final result = GeneratedBindings.instance._AnimationManager_stopGltfAnimation( + tAnimationManager.cast(), + sceneAsset.cast(), + index, ); - external void _RenderableManager_setBlendOrderAt( - Pointer tRenderableManager, - EntityId entityId, - size_t primitiveIndex, - int order, + return result == 1; +} + +double AnimationManager_getGltfAnimationDuration( + Pointer tAnimationManager, + Pointer sceneAsset, + int animationIndex, +) { + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationDuration( + tAnimationManager.cast(), + sceneAsset.cast(), + animationIndex, ); - external void _RenderableManager_setGlobalBlendOrderEnabledAt( - Pointer tRenderableManager, - EntityId entityId, - size_t primitiveIndex, - bool enabled, + return result; +} + +int AnimationManager_getGltfAnimationCount( + Pointer tAnimationManager, + Pointer sceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationCount( + tAnimationManager.cast(), + sceneAsset.cast(), ); - external void _RenderableManager_setMorphWeights( - Pointer tRenderableManager, - EntityId entityId, - Pointer weights, - size_t count, - size_t offset, + return result; +} + +void AnimationManager_getGltfAnimationName( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer outPtr, + int index, +) { + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationName( + tAnimationManager.cast(), + sceneAsset.cast(), + outPtr, + index, ); - external size_t _RenderableManager_getMorphTargetCount( - Pointer tRenderableManager, - EntityId entityId, + return result; +} + +int AnimationManager_getMorphTargetNameCount( + Pointer tAnimationManager, + Pointer sceneAsset, + DartEntityId childEntity, +) { + final result = GeneratedBindings.instance._AnimationManager_getMorphTargetNameCount( + tAnimationManager.cast(), + sceneAsset.cast(), + childEntity, ); - external void _RenderableManager_setBonesFromMat4( - Pointer tRenderableManager, - EntityId entityId, - Pointer transforms, - size_t boneCount, - size_t offset, + return result; +} + +void AnimationManager_getMorphTargetName( + Pointer tAnimationManager, + Pointer sceneAsset, + DartEntityId childEntity, + Pointer outPtr, + int index, +) { + final result = GeneratedBindings.instance._AnimationManager_getMorphTargetName( + tAnimationManager.cast(), + sceneAsset.cast(), + childEntity, + outPtr, + index, ); - external void _RenderableManager_setBonesFromBone( - Pointer tRenderableManager, - EntityId entityId, - Pointer bones, - size_t boneCount, - size_t offset, - ); - external Pointer _RenderableBuilder_create(size_t primitiveCount); - external void _RenderableBuilder_destroy(Pointer builder); - external void _RenderableBuilder_boundingBox(Pointer builder, Pointer aabbPtr); - external void _RenderableBuilder_material( - Pointer builder, - size_t primitiveIndex, - Pointer materialInstance, - ); - external void _RenderableBuilder_geometry( - Pointer builder, - size_t primitiveIndex, - int type, - Pointer vertices, - Pointer indices, - size_t offset, - size_t count, - ); - external void _RenderableBuilder_geometryNonIndexed( - Pointer builder, - size_t primitiveIndex, - int type, - Pointer vertices, - size_t offset, - size_t count, - ); - external void _RenderableBuilder_priority(Pointer builder, int priority); - external void _RenderableBuilder_channel(Pointer builder, int channel); - external void _RenderableBuilder_culling(Pointer builder, bool enabled); - external void _RenderableBuilder_castShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_receiveShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_fog(Pointer builder, bool enabled); - external void _RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled); - external void _RenderableBuilder_layerMask(Pointer builder, int select, int values); - external void _RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_blendOrder(Pointer builder, size_t primitiveIndex, int order); - external void _RenderableBuilder_globalBlendOrderEnabled( - Pointer builder, - size_t primitiveIndex, - bool enabled, - ); - external void _RenderableBuilder_instances(Pointer builder, size_t instanceCount); - external void _RenderableBuilder_skinningFromMat4( - Pointer builder, - size_t boneCount, - Pointer transforms, - ); - external void _RenderableBuilder_skinningFromBone( - Pointer builder, - size_t boneCount, - Pointer bones, - ); - external void _RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled); - external void _RenderableBuilder_boneIndicesAndWeights( - Pointer builder, - size_t primitiveIndex, - Pointer indicesAndWeights, - size_t count, - size_t bonesPerVertex, - ); - external int _RenderableBuilder_build(Pointer builder, Pointer engine, EntityId entity); - external void _IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation); - external Pointer _SurfaceOrientationBuilder_create(); - external void _SurfaceOrientationBuilder_vertexCount(Pointer builder, size_t count); - external void _SurfaceOrientationBuilder_normals( - Pointer builder, - Pointer normals, - size_t stride, - ); - external void _SurfaceOrientationBuilder_tangents( - Pointer builder, - Pointer tangents, - size_t stride, - ); - external void _SurfaceOrientationBuilder_uvs( - Pointer builder, - Pointer uvs, - size_t stride, - ); - external void _SurfaceOrientationBuilder_positions( - Pointer builder, - Pointer positions, - size_t stride, - ); - external void _SurfaceOrientationBuilder_triangleCount(Pointer builder, size_t count); - external void _SurfaceOrientationBuilder_triangles_uint( - Pointer builder, - Pointer triangles, - ); - external void _SurfaceOrientationBuilder_triangles_ushort( - Pointer builder, - Pointer triangles, - ); - external Pointer _SurfaceOrientationBuilder_build(Pointer builder); - external void _SurfaceOrientationBuilder_destroy(Pointer builder); - external size_t _SurfaceOrientation_getVertexCount(Pointer orientation); - external void _SurfaceOrientation_getQuats_float4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, - ); - external void _SurfaceOrientation_getQuats_short4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, - ); - external void _SurfaceOrientation_getQuats_half4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, - ); - external void _SurfaceOrientation_destroy(Pointer orientation); - external Pointer _AnimationManager_create(Pointer tEngine); - external void _AnimationManager_destroy(Pointer tAnimationManager); - external void _AnimationManager_update(Pointer tAnimationManager, JSBigInt frameTimeInNanos); - external int _AnimationManager_addGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_removeGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external void _AnimationManager_addMorphAnimationComponent( - Pointer tAnimationManager, - EntityId entityId, - ); - external void _AnimationManager_removeMorphAnimationComponent( - Pointer tAnimationManager, - EntityId entityId, - ); - external int _AnimationManager_addBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_removeBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_setMorphAnimation( - Pointer tAnimationManager, - EntityId entityId, - Pointer morphData, - Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, - ); - external int _AnimationManager_clearMorphAnimation(Pointer tAnimationManager, EntityId entityId); - external void _AnimationManager_resetToRestPose( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external int _AnimationManager_addBoneAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int skinIndex, - int boneIndex, - Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, - ); - external void _AnimationManager_getRestLocalTransforms( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - Pointer out, - int numBones, - ); - external void _AnimationManager_getInverseBindMatrix( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - int boneIndex, - Pointer out, - ); - external int _AnimationManager_playGltfAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, - ); - external int _AnimationManager_stopGltfAnimation( - Pointer tAnimationManager, - Pointer sceneAsset, - int index, - ); - external double _AnimationManager_getGltfAnimationDuration( - Pointer tAnimationManager, - Pointer sceneAsset, - int animationIndex, - ); - external int _AnimationManager_getGltfAnimationCount( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external void _AnimationManager_getGltfAnimationName( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer outPtr, - int index, - ); - external int _AnimationManager_getMorphTargetNameCount( - Pointer tAnimationManager, - Pointer sceneAsset, - EntityId childEntity, - ); - external void _AnimationManager_getMorphTargetName( - Pointer tAnimationManager, - Pointer sceneAsset, - EntityId childEntity, - Pointer outPtr, - int index, - ); - external int _AnimationManager_updateBoneMatrices( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external int _AnimationManager_setMorphTargetWeights( - Pointer tAnimationManager, - EntityId entityId, - Pointer morphData, - int numWeights, - ); - external int _AnimationManager_setGltfAnimationTime( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, - ); - external Pointer _GltfAssetLoader_create( - Pointer tEngine, - Pointer tMaterialProvider, - Pointer tNameComponentManager, - ); - external void _GltfAssetLoader_destroy(Pointer tAssetLoader); - external Pointer _GltfAssetLoader_load( - Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - size_t length, - int numInstances, - ); - external Pointer _GltfAssetLoader_getMaterialInstance( - Pointer tRenderableManager, - Pointer tAsset, - ); - external Pointer _GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader); - external int _FilamentAsset_getResourceUriCount(Pointer tFilamentAsset); - external Pointer> _FilamentAsset_getResourceUris(Pointer tFilamentAsset); - external Pointer _GltfResourceLoader_create(Pointer tEngine); - external void _GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader); - external int _GltfResourceLoader_asyncBeginLoad( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - ); - external void _GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader); - external double _GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader); - external void _GltfResourceLoader_addResourceData( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - size_t length, - ); - external int _GltfResourceLoader_loadResources( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - ); - external Pointer _RenderManager_create(Pointer tEngine, Pointer tRenderer); - external void _RenderManager_destroy(Pointer tRenderer); - external void _RenderManager_addAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, - ); - external void _RenderManager_removeAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, - ); - external void _RenderManager_render(Pointer tRenderer, JSBigInt frameTimeInNanos); - external void _RenderManager_setRenderable( - Pointer tRenderer, - Pointer swapChain, - Pointer> views, - int numViews, + return result; +} + +bool AnimationManager_updateBoneMatrices( + Pointer tAnimationManager, + Pointer sceneAsset, +) { + final result = GeneratedBindings.instance._AnimationManager_updateBoneMatrices( + tAnimationManager.cast(), + sceneAsset.cast(), ); - external void _RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain); - external void _RenderManager_requestRender(Pointer tRenderer); - external void _RenderManager_attachToRenderThread(Pointer tRenderer); - external void _RenderManager_detachFromRenderThread(Pointer tRenderManager); - external void _RenderManager_setPaused(Pointer tRenderer, bool paused); - external int _FilamentAsset_getEntityCount(Pointer filamentAsset); - external void _FilamentAsset_getEntities(Pointer filamentAsset, Pointer out); - external EntityId _FilamentAsset_getWireframe(Pointer filamentAsset); - external Pointer _FilamentAsset_getSourceAsset(Pointer filamentAsset); - external void _Scene_addEntity(Pointer tScene, EntityId entityId); - external void _Scene_removeEntity(Pointer tScene, EntityId entityId); - external void _Scene_setSkybox(Pointer tScene, Pointer skybox); - external Pointer _Scene_getSkybox(Pointer tScene); - external void _Scene_setIndirectLight(Pointer tScene, Pointer tIndirectLight); - external void _Scene_addFilamentAsset(Pointer tScene, Pointer asset); - external void _FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); - external void _FrameScheduler_stop(); - external int _FrameScheduler_initDartApi(Pointer data); - external void _FrameScheduler_startWithPort(JSBigInt port, int targetFps); - external void _FrameScheduler_setTargetFps(int fps); - external JSBigInt _FrameScheduler_steadyClockUs(); - external void _MovementIntentExecutor_destroy(Pointer executor); - external void _MovementIntentExecutor_process( - Pointer executor, - Pointer intent, - JSBigInt deltaTimeInNanos, + return result == 1; +} + +bool AnimationManager_setMorphTargetWeights( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + int numWeights, +) { + final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeights( + tAnimationManager.cast(), + entityId, + morphData, + numWeights, ); - external void _Pipeline_registerMovementIntentExecutor(Pointer executor); - external void _TransformPipeline_setEngine(Pointer enginePtr); - external void _TransformPipeline_onMouseEvent( - int eventType, - int button, - double localX, - double localY, - double deltaX, - double deltaY, + return result == 1; +} + +bool AnimationManager_setGltfAnimationTime( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, +) { + final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTime( + tAnimationManager.cast(), + tSceneAsset.cast(), + animationIndex, + timeInSeconds, ); - external void _TransformPipeline_onKeyEvent(int eventType, int logicalKey, int physicalKey, int synthesized); - external void _TransformPipeline_onScrollEvent(double localX, double localY, double delta); - external void _TransformPipeline_update(double deltaTime); - external void _TransformPipeline_registerPipelineStage(Pointer pipelineStageHandle, Pointer name); - external void _TransformPipeline_unregisterPipelineStage(Pointer pipelineStageHandle); - external void _TransformPipeline_cleanup(); - external void _TransformPipeline_addKeyBinding(int logicalKey, int intentAction, double value); - external void _TransformPipeline_removeKeyBindingsForKey(int logicalKey); - external void _TransformPipeline_removeKeyBindingsForAction(int intentAction); - external void _TransformPipeline_clearKeyBindings(); - external void _TransformPipeline_addMouseButtonBinding(int mouseButton, int intentAction, double value); - external void _TransformPipeline_removeMouseButtonBindings(int mouseButton); - external void _TransformPipeline_setMouseSensitivity(double sensitivity); - external void _TransformPipeline_setInvertMouseY(int invert); + return result == 1; +} + +void Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity) { + final result = GeneratedBindings.instance._Camera_setExposure(camera.cast(), aperture, shutterSpeed, sensitivity); + return result; +} + +double Camera_getAperture(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getAperture(camera.cast()); + return result; +} + +double Camera_getShutterSpeed(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getShutterSpeed(camera.cast()); + return result; +} + +double Camera_getSensitivity(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getSensitivity(camera.cast()); + return result; +} + +double4x4 Camera_getModelMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getModelMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); +} + +double4x4 Camera_getViewMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getViewMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); +} + +double4x4 Camera_getProjectionMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getProjectionMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); +} + +double4x4 Camera_getCullingProjectionMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getCullingProjectionMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); +} + +void Camera_getFrustum(Pointer camera, Pointer out) { + final result = GeneratedBindings.instance._Camera_getFrustum(camera.cast(), out); + return result; +} + +void Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far) { + final result = GeneratedBindings.instance._Camera_setProjectionMatrix(camera.cast(), matrix, near, far); + return result; +} + +void Camera_setProjectionFromFov( + Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, +) { + final result = GeneratedBindings.instance._Camera_setProjectionFromFov( + camera.cast(), + fovInDegrees, + aspect, + near, + far, + horizontal, + ); + return result; } -void Thermion_setCanvasElementSize(Pointer name, int width, int height) { - final result = GeneratedBindings.instance._Thermion_setCanvasElementSize(name, width, height); +double Camera_getFocalLength(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getFocalLength(camera.cast()); return result; } -void Thermion_destroyCanvas(Pointer canvasSelector) { - final result = GeneratedBindings.instance._Thermion_destroyCanvas(canvasSelector); +void Camera_lookAt(Pointer camera, double3 eye, double3 focus, double3 up) { + final eyePtr = eye.address; + final focusPtr = focus.address; + final upPtr = up.address; + final result = GeneratedBindings.instance._Camera_lookAt(camera.cast(), eyePtr.cast(), focusPtr.cast(), upPtr.cast()); return result; } -int Thermion_createGLContext(Pointer canvasSelector) { - final result = GeneratedBindings.instance._Thermion_createGLContext(canvasSelector); +double Camera_getNear(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getNear(camera.cast()); return result; } -int Thermion_getGLContext() { - final result = GeneratedBindings.instance._Thermion_getGLContext(); +double Camera_getCullingFar(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getCullingFar(camera.cast()); return result; } -BigInt get TSWAP_CHAIN_CONFIG_TRANSPARENT { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_TRANSPARENT, - "i64", - ); - return bigIntasUintN(64, value).toDart; +double Camera_getFov(Pointer camera, bool horizontal) { + final result = GeneratedBindings.instance._Camera_getFov(camera.cast(), horizontal); + return result; } -BigInt get TSWAP_CHAIN_CONFIG_READABLE { - final value = NativeLibrary.instance.getValueBigInt(GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_READABLE, "i64"); - return bigIntasUintN(64, value).toDart; +double Camera_getFocusDistance(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getFocusDistance(camera.cast()); + return result; } -BigInt get TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER, - "i64", +void Camera_setFocusDistance(Pointer camera, double focusDistance) { + final result = GeneratedBindings.instance._Camera_setFocusDistance(camera.cast(), focusDistance); + return result; +} + +void Camera_setCustomProjectionWithCulling( + Pointer camera, + double4x4 projectionMatrix, + double near, + double far, +) { + final projectionMatrixPtr = projectionMatrix.address; + final result = GeneratedBindings.instance._Camera_setCustomProjectionWithCulling( + camera.cast(), + projectionMatrixPtr.cast(), + near, + far, ); - return bigIntasUintN(64, value).toDart; + return result; } -BigInt get TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER, - "i64", +void Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix) { + final result = GeneratedBindings.instance._Camera_setModelMatrix(camera.cast(), tModelMatrix); + return result; +} + +void Camera_setLensProjection(Pointer camera, double near, double far, double aspect, double focalLength) { + final result = GeneratedBindings.instance._Camera_setLensProjection(camera.cast(), near, far, aspect, focalLength); + return result; +} + +DartEntityId Camera_getEntity(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getEntity(camera.cast()); + return result; +} + +void Camera_setProjection( + Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, +) { + final result = GeneratedBindings.instance._Camera_setProjection( + tCamera.cast(), + projection, + left, + right, + bottom, + top, + near, + far, ); - return bigIntasUintN(64, value).toDart; + return result; +} + +int FilamentAsset_getEntityCount(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getEntityCount(filamentAsset.cast()); + return result; +} + +void FilamentAsset_getEntities(Pointer filamentAsset, Pointer out) { + final result = GeneratedBindings.instance._FilamentAsset_getEntities(filamentAsset.cast(), out); + return result; +} + +DartEntityId FilamentAsset_getWireframe(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getWireframe(filamentAsset.cast()); + return result; +} + +Pointer FilamentAsset_getSourceAsset(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getSourceAsset(filamentAsset.cast()); + return Pointer(result); } TViewport View_getViewport(Pointer view) { @@ -2897,400 +3426,370 @@ TAmbientOcclusionOptions View_getAmbientOcclusionOptions(Pointer tView) { return TAmbientOcclusionOptions_out.toDart(); } -void View_setFogOptions(Pointer tView, TFogOptions tFogOptions) { - final tFogOptionsPtr = tFogOptions.address; - final result = GeneratedBindings.instance._View_setFogOptions(tView.cast(), tFogOptionsPtr.cast()); - return result; -} - -TFogOptions View_getFogOptions(Pointer tView) { - final TFogOptions_out = TFogOptions.stackAlloc(); - final result = GeneratedBindings.instance._View_getFogOptions(TFogOptions_out.cast(), tView.cast()); - return TFogOptions_out.toDart(); -} - -void View_setTransparentPickingEnabled(Pointer tView, bool enabled) { - final result = GeneratedBindings.instance._View_setTransparentPickingEnabled(tView.cast(), enabled); - return result; -} - -bool View_isTransparentPickingEnabled(Pointer tView) { - final result = GeneratedBindings.instance._View_isTransparentPickingEnabled(tView.cast()); - return result == 1; -} - -void View_pick(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { - final result = GeneratedBindings.instance._View_pick( - tView.cast(), - requestId, - x, - y, - callback as Pointer>, - ); - return result; -} - -void View_setName(Pointer tView, Pointer name) { - final result = GeneratedBindings.instance._View_setName(tView.cast(), name); - return result; -} - -Pointer View_getName(Pointer tView) { - final result = GeneratedBindings.instance._View_getName(tView.cast()); - return Pointer(result); -} - -void Gizmo_dummy(int t) { - final result = GeneratedBindings.instance._Gizmo_dummy(t); - return result; -} - -Pointer Gizmo_create( - Pointer tEngine, - Pointer assetLoader, - Pointer tGltfResourceLoader, - Pointer tNameComponentManager, - Pointer tView, - Pointer tMaterial, - int tGizmoType, -) { - final result = GeneratedBindings.instance._Gizmo_create( - tEngine.cast(), - assetLoader.cast(), - tGltfResourceLoader.cast(), - tNameComponentManager.cast(), - tView.cast(), - tMaterial.cast(), - tGizmoType, - ); - return Pointer(result); -} - -void Gizmo_pick(Pointer tGizmo, int x, int y, DartGizmoPickCallback callback) { - final result = GeneratedBindings.instance._Gizmo_pick( - tGizmo.cast(), - x, - y, - callback as Pointer>, - ); - return result; -} - -void Gizmo_highlight(Pointer tGizmo, int axis) { - final result = GeneratedBindings.instance._Gizmo_highlight(tGizmo.cast(), axis); - return result; -} - -void Gizmo_unhighlight(Pointer tGizmo) { - final result = GeneratedBindings.instance._Gizmo_unhighlight(tGizmo.cast()); - return result; -} - -Pointer Material_createInstance(Pointer tMaterial) { - final result = GeneratedBindings.instance._Material_createInstance(tMaterial.cast()); - return Pointer(result); -} - -int Material_getFeatureLevel(Pointer tMaterial) { - final result = GeneratedBindings.instance._Material_getFeatureLevel(tMaterial.cast()); - return result; -} - -Pointer Material_createImageMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createImageMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createGridMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createGridMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createGizmoMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createGizmoMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createSilhouetteMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createSilhouetteMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createEdgeOutlineMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createWireframeMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createWireframeMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createTranslationAxisMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createTranslationAxisMaterial(tEngine.cast()); - return Pointer(result); -} - -Pointer Material_createBoneOverlayMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createBoneOverlayMaterial(tEngine.cast()); - return Pointer(result); +void View_setFogOptions(Pointer tView, TFogOptions tFogOptions) { + final tFogOptionsPtr = tFogOptions.address; + final result = GeneratedBindings.instance._View_setFogOptions(tView.cast(), tFogOptionsPtr.cast()); + return result; } -bool Material_hasParameter(Pointer tMaterial, Pointer propertyName) { - final result = GeneratedBindings.instance._Material_hasParameter(tMaterial.cast(), propertyName); - return result == 1; +TFogOptions View_getFogOptions(Pointer tView) { + final TFogOptions_out = TFogOptions.stackAlloc(); + final result = GeneratedBindings.instance._View_getFogOptions(TFogOptions_out.cast(), tView.cast()); + return TFogOptions_out.toDart(); } -bool MaterialInstance_isStencilWriteEnabled(Pointer materialInstance) { - final result = GeneratedBindings.instance._MaterialInstance_isStencilWriteEnabled(materialInstance.cast()); - return result == 1; +void View_setTransparentPickingEnabled(Pointer tView, bool enabled) { + final result = GeneratedBindings.instance._View_setTransparentPickingEnabled(tView.cast(), enabled); + return result; } -void MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilWrite(materialInstance.cast(), enabled); - return result; +bool View_isTransparentPickingEnabled(Pointer tView) { + final result = GeneratedBindings.instance._View_isTransparentPickingEnabled(tView.cast()); + return result == 1; } -void MaterialInstance_setCullingMode(Pointer materialInstance, int culling) { - final result = GeneratedBindings.instance._MaterialInstance_setCullingMode(materialInstance.cast(), culling); +void View_pick(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { + final result = GeneratedBindings.instance._View_pick( + tView.cast(), + requestId, + x, + y, + callback as Pointer>, + ); return result; } -void MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided) { - final result = GeneratedBindings.instance._MaterialInstance_setDoubleSided(materialInstance.cast(), doubleSided); +void View_setName(Pointer tView, Pointer name) { + final result = GeneratedBindings.instance._View_setName(tView.cast(), name); return result; } -void MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthWrite(materialInstance.cast(), enabled); - return result; +Pointer View_getName(Pointer tView) { + final result = GeneratedBindings.instance._View_getName(tView.cast()); + return Pointer(result); } -void MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthCulling(materialInstance.cast(), enabled); +void Gizmo_dummy(int t) { + final result = GeneratedBindings.instance._Gizmo_dummy(t); return result; } -void MaterialInstance_setParameterFloat( - Pointer materialInstance, - Pointer propertyName, - double value, +Pointer Gizmo_create( + Pointer tEngine, + Pointer assetLoader, + Pointer tGltfResourceLoader, + Pointer tNameComponentManager, + Pointer tView, + Pointer tMaterial, + int tGizmoType, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat( - materialInstance.cast(), - propertyName, - value, + final result = GeneratedBindings.instance._Gizmo_create( + tEngine.cast(), + assetLoader.cast(), + tGltfResourceLoader.cast(), + tNameComponentManager.cast(), + tView.cast(), + tMaterial.cast(), + tGizmoType, ); - return result; + return Pointer(result); } -void MaterialInstance_setParameterFloat2( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat2( - materialInstance.cast(), - propertyName, +void Gizmo_pick(Pointer tGizmo, int x, int y, DartGizmoPickCallback callback) { + final result = GeneratedBindings.instance._Gizmo_pick( + tGizmo.cast(), x, y, + callback as Pointer>, ); return result; } -void MaterialInstance_setParameterFloat3( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double z, +void Gizmo_highlight(Pointer tGizmo, int axis) { + final result = GeneratedBindings.instance._Gizmo_highlight(tGizmo.cast(), axis); + return result; +} + +void Gizmo_unhighlight(Pointer tGizmo) { + final result = GeneratedBindings.instance._Gizmo_unhighlight(tGizmo.cast()); + return result; +} + +Pointer GltfAssetLoader_create( + Pointer tEngine, + Pointer tMaterialProvider, + Pointer tNameComponentManager, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3( - materialInstance.cast(), - propertyName, - x, - y, - z, + final result = GeneratedBindings.instance._GltfAssetLoader_create( + tEngine.cast(), + tMaterialProvider.cast(), + tNameComponentManager.cast(), ); + return Pointer(result); +} + +void GltfAssetLoader_destroy(Pointer tAssetLoader) { + final result = GeneratedBindings.instance._GltfAssetLoader_destroy(tAssetLoader.cast()); return result; } -void MaterialInstance_setParameterFloat3Array( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer raw, - int length, +Pointer GltfAssetLoader_load( + Pointer tEngine, + Pointer tAssetLoader, + Pointer data, + Dartsize_t length, + int numInstances, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3Array( - tMaterialInstance.cast(), - propertyName, - raw, + final result = GeneratedBindings.instance._GltfAssetLoader_load( + tEngine.cast(), + tAssetLoader.cast(), + data, length, + numInstances, ); - return result; + return Pointer(result); } -void MaterialInstance_setParameterFloat4( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double w, - double z, +Pointer GltfAssetLoader_getMaterialInstance( + Pointer tRenderableManager, + Pointer tAsset, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat4( - materialInstance.cast(), - propertyName, - x, - y, - w, - z, + final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialInstance( + tRenderableManager.cast(), + tAsset.cast(), ); + return Pointer(result); +} + +Pointer GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader) { + final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialProvider(tAssetLoader.cast()); + return Pointer(result); +} + +int FilamentAsset_getResourceUriCount(Pointer tFilamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getResourceUriCount(tFilamentAsset.cast()); return result; } -void MaterialInstance_setParameterMat3( - Pointer materialInstance, - Pointer propertyName, - Pointer matrix, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterMat3( - materialInstance.cast(), - propertyName, - matrix, - ); +Pointer> FilamentAsset_getResourceUris(Pointer tFilamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getResourceUris(tFilamentAsset.cast()); + return Pointer>(result); +} + +void MeshData_dispose(Pointer meshData) { + final result = GeneratedBindings.instance._MeshData_dispose(meshData.cast()); return result; } -void MaterialInstance_setParameterMat4( - Pointer materialInstance, - Pointer propertyName, - Pointer matrix, +int GltfParser_parseBuffer( + Pointer data, + Dartsize_t length, + Pointer meshName, + Pointer outMeshData, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterMat4( - materialInstance.cast(), - propertyName, - matrix, - ); + final result = GeneratedBindings.instance._GltfParser_parseBuffer(data, length, meshName, outMeshData.cast()); return result; } -void MaterialInstance_setParameterInt( - Pointer materialInstance, - Pointer propertyName, - int value, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterInt( - materialInstance.cast(), - propertyName, - value, - ); +Pointer GltfResourceLoader_create(Pointer tEngine) { + final result = GeneratedBindings.instance._GltfResourceLoader_create(tEngine.cast()); + return Pointer(result); +} + +void GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_destroy(tEngine.cast(), tGltfResourceLoader.cast()); return result; } -void MaterialInstance_setParameterBool( - Pointer materialInstance, - Pointer propertyName, - bool value, +bool GltfResourceLoader_asyncBeginLoad( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterBool( - materialInstance.cast(), - propertyName, - value, + final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoad( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), ); + return result == 1; +} + +void GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoad(tGltfResourceLoader.cast()); return result; } -void MaterialInstance_setParameterTexture( - Pointer materialInstance, - Pointer propertyName, - Pointer texture, - Pointer sampler, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterTexture( - materialInstance.cast(), - propertyName, - texture.cast(), - sampler.cast(), - ); +double GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgress(tGltfResourceLoader.cast()); return result; } -void MaterialInstance_setDepthFunc(Pointer materialInstance, int depthFunc) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthFunc(materialInstance.cast(), depthFunc); +void GltfResourceLoader_addResourceData( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + Dartsize_t length, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_addResourceData( + tGltfResourceLoader.cast(), + uri, + data, + length, + ); return result; } -void MaterialInstance_setStencilOpStencilFail(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpStencilFail( - materialInstance.cast(), - op, - face, +bool GltfResourceLoader_loadResources( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_loadResources( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), ); - return result; + return result == 1; } -void MaterialInstance_setStencilOpDepthFail(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthFail(materialInstance.cast(), op, face); - return result; +Pointer IndexBufferBuilder_create() { + final result = GeneratedBindings.instance._IndexBufferBuilder_create(); + return Pointer(result); } -void MaterialInstance_setStencilOpDepthStencilPass(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthStencilPass( - materialInstance.cast(), - op, - face, - ); +void IndexBufferBuilder_indexCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._IndexBufferBuilder_indexCount(builder.cast(), count); return result; } -void MaterialInstance_setStencilCompareFunction(Pointer materialInstance, int func, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilCompareFunction( - materialInstance.cast(), - func, - face, - ); +void IndexBufferBuilder_bufferType(Pointer builder, int indexType) { + final result = GeneratedBindings.instance._IndexBufferBuilder_bufferType(builder.cast(), indexType); return result; } -void MaterialInstance_setStencilReferenceValue(Pointer materialInstance, int value, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilReferenceValue( - materialInstance.cast(), - value, - face, - ); - return result; +Pointer IndexBufferBuilder_build(Pointer builder, Pointer engine) { + final result = GeneratedBindings.instance._IndexBufferBuilder_build(builder.cast(), engine.cast()); + return Pointer(result); } -void MaterialInstance_setStencilReadMask(Pointer materialInstance, int mask) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilReadMask(materialInstance.cast(), mask); +void IndexBufferBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._IndexBufferBuilder_destroy(builder.cast()); return result; } -void MaterialInstance_setStencilWriteMask(Pointer materialInstance, int mask) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilWriteMask(materialInstance.cast(), mask); +Dartsize_t IndexBuffer_getIndexCount(Pointer buffer) { + final result = GeneratedBindings.instance._IndexBuffer_getIndexCount(buffer.cast()); return result; } -void MaterialInstance_setTransparencyMode(Pointer materialInstance, int transparencyMode) { - final result = GeneratedBindings.instance._MaterialInstance_setTransparencyMode( - materialInstance.cast(), - transparencyMode, +void IndexBuffer_setBuffer( + Pointer engine, + Pointer buffer, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, +) { + final result = GeneratedBindings.instance._IndexBuffer_setBuffer( + engine.cast(), + buffer.cast(), + data, + sizeInBytes, + byteOffset, ); return result; } -int MaterialInstance_getTransparencyMode(Pointer materialInstance) { - final result = GeneratedBindings.instance._MaterialInstance_getTransparencyMode(materialInstance.cast()); +void IndexBuffer_destroy(Pointer engine, Pointer buffer) { + final result = GeneratedBindings.instance._IndexBuffer_destroy(engine.cast(), buffer.cast()); return result; } -int Material_getBlendingMode(Pointer material) { - final result = GeneratedBindings.instance._Material_getBlendingMode(material.cast()); +void IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation) { + final result = GeneratedBindings.instance._IndirectLight_setRotation(tIndirectLight.cast(), rotation); return result; } +Pointer MaterialProvider_createMaterialInstance( + Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, +) { + final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstance( + provider.cast(), + doubleSided, + unlit, + hasVertexColors, + hasBaseColorTexture, + hasNormalTexture, + hasOcclusionTexture, + hasEmissiveTexture, + useSpecularGlossiness, + alphaMode, + enableDiagnostics, + hasMetallicRoughnessTexture, + metallicRoughnessUV, + hasSpecularGlossinessTexture, + specularGlossinessUV, + baseColorUV, + hasClearCoatTexture, + clearCoatUV, + hasClearCoatRoughnessTexture, + clearCoatRoughnessUV, + hasClearCoatNormalTexture, + clearCoatNormalUV, + hasClearCoat, + hasTransmission, + hasTextureTransforms, + emissiveUV, + aoUV, + normalUV, + hasTransmissionTexture, + transmissionUV, + hasSheenColorTexture, + sheenColorUV, + hasSheenRoughnessTexture, + sheenRoughnessUV, + hasVolumeThicknessTexture, + volumeThicknessUV, + hasSheen, + hasIOR, + hasVolume, + ); + return Pointer(result); +} + Pointer NameComponentManager_create() { final result = GeneratedBindings.instance._NameComponentManager_create(); return Pointer(result); @@ -3306,351 +3805,390 @@ Pointer NameComponentManager_getName(Pointer tNameC return Pointer(result); } -Pointer SceneAsset_createFromBuffers( - Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, +Pointer RenderManager_create(Pointer tEngine, Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_create(tEngine.cast(), tRenderer.cast()); + return Pointer(result); +} + +void RenderManager_destroy(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_destroy(tRenderer.cast()); + return result; +} + +void RenderManager_addAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, ) { - final boundingBoxPtr = boundingBox.address; - final result = GeneratedBindings.instance._SceneAsset_createFromBuffers( - tEngine.cast(), - tVertexBuffer.cast(), - tIndexBuffer.cast(), - materialInstances.cast(), - materialInstanceCount, - tPrimitiveType, - boundingBoxPtr.cast(), + final result = GeneratedBindings.instance._RenderManager_addAnimationManager( + tRenderer.cast(), + tAnimationManager.cast(), ); - return Pointer(result); + return result; } -Pointer SceneAsset_createFromFilamentAsset( - Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, +void RenderManager_removeAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, ) { - final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAsset( - tEngine.cast(), - tAssetLoader.cast(), - tNameComponentManager.cast(), - tFilamentAsset.cast(), - rebuildVertices, + final result = GeneratedBindings.instance._RenderManager_removeAnimationManager( + tRenderer.cast(), + tAnimationManager.cast(), ); - return Pointer(result); + return result; } -Pointer SceneAsset_getFilamentAsset(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getFilamentAsset(tSceneAsset.cast()); - return Pointer(result); +void RenderManager_render(Pointer tRenderer, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._RenderManager_render(tRenderer.cast(), frameTimeInNanos.toJSBigInt); + return result; +} + +void RenderManager_setRenderable( + Pointer tRenderer, + Pointer swapChain, + Pointer> views, + int numViews, +) { + final result = GeneratedBindings.instance._RenderManager_setRenderable( + tRenderer.cast(), + swapChain.cast(), + views.cast(), + numViews, + ); + return result; } -int SceneAsset_getType(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getType(tSceneAsset.cast()); +void RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain) { + final result = GeneratedBindings.instance._RenderManager_removeSwapChain(tRenderer.cast(), swapChain.cast()); return result; } -void SceneAsset_destroy(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_destroy(tSceneAsset.cast()); +void RenderManager_requestRender(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_requestRender(tRenderer.cast()); return result; } -void SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene) { - final result = GeneratedBindings.instance._SceneAsset_addToScene(tSceneAsset.cast(), tScene.cast()); +void RenderManager_attachToRenderThread(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_attachToRenderThread(tRenderer.cast()); return result; } -void SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene) { - final result = GeneratedBindings.instance._SceneAsset_removeFromScene(tSceneAsset.cast(), tScene.cast()); +void RenderManager_detachFromRenderThread(Pointer tRenderManager) { + final result = GeneratedBindings.instance._RenderManager_detachFromRenderThread(tRenderManager.cast()); return result; } -DartEntityId SceneAsset_getEntity(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getEntity(tSceneAsset.cast()); +void RenderManager_setPaused(Pointer tRenderer, bool paused) { + final result = GeneratedBindings.instance._RenderManager_setPaused(tRenderer.cast(), paused); return result; } -int SceneAsset_getChildEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getChildEntityCount(tSceneAsset.cast()); - return result; +Pointer Material_createInstance(Pointer tMaterial) { + final result = GeneratedBindings.instance._Material_createInstance(tMaterial.cast()); + return Pointer(result); } -void SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out) { - final result = GeneratedBindings.instance._SceneAsset_getChildEntities(tSceneAsset.cast(), out); +int Material_getFeatureLevel(Pointer tMaterial) { + final result = GeneratedBindings.instance._Material_getFeatureLevel(tMaterial.cast()); return result; } -Pointer SceneAsset_getCameraEntities(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getCameraEntities(tSceneAsset.cast()); - return Pointer(result); +Pointer Material_createImageMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createImageMaterial(tEngine.cast()); + return Pointer(result); } -Dartsize_t SceneAsset_getCameraEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getCameraEntityCount(tSceneAsset.cast()); - return result; +Pointer Material_createGridMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createGridMaterial(tEngine.cast()); + return Pointer(result); } -Pointer SceneAsset_getLightEntities(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getLightEntities(tSceneAsset.cast()); - return Pointer(result); +Pointer Material_createGizmoMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createGizmoMaterial(tEngine.cast()); + return Pointer(result); } -Dartsize_t SceneAsset_getLightEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getLightEntityCount(tSceneAsset.cast()); - return result; +Pointer Material_createSilhouetteMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createSilhouetteMaterial(tEngine.cast()); + return Pointer(result); } -Pointer SceneAsset_getInstance(Pointer tSceneAsset, int index) { - final result = GeneratedBindings.instance._SceneAsset_getInstance(tSceneAsset.cast(), index); - return Pointer(result); +Pointer Material_createEdgeOutlineMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterial(tEngine.cast()); + return Pointer(result); } -Dartsize_t SceneAsset_getInstanceCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getInstanceCount(tSceneAsset.cast()); - return result; +Pointer Material_createWireframeMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createWireframeMaterial(tEngine.cast()); + return Pointer(result); } -Pointer SceneAsset_createInstance( - Pointer asset, - Pointer> materialInstances, - int materialInstanceCount, -) { - final result = GeneratedBindings.instance._SceneAsset_createInstance( - asset.cast(), - materialInstances.cast(), - materialInstanceCount, - ); - return Pointer(result); +Pointer Material_createTranslationAxisMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createTranslationAxisMaterial(tEngine.cast()); + return Pointer(result); } -Aabb3 SceneAsset_getBoundingBox(Pointer asset) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._SceneAsset_getBoundingBox(Aabb3_out.cast(), asset.cast()); - return Aabb3_out.toDart(); +Pointer Material_createBoneOverlayMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createBoneOverlayMaterial(tEngine.cast()); + return Pointer(result); } -Pointer SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex) { - final result = GeneratedBindings.instance._SceneAsset_getVertexBuffer(tSceneAsset.cast(), primitiveIndex); - return Pointer(result); +bool Material_hasParameter(Pointer tMaterial, Pointer propertyName) { + final result = GeneratedBindings.instance._Material_hasParameter(tMaterial.cast(), propertyName); + return result == 1; } -Pointer SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex) { - final result = GeneratedBindings.instance._SceneAsset_getIndexBuffer(tSceneAsset.cast(), primitiveIndex); - return Pointer(result); +bool MaterialInstance_isStencilWriteEnabled(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_isStencilWriteEnabled(materialInstance.cast()); + return result == 1; } -int SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, DartEntityId entity) { - final result = GeneratedBindings.instance._SceneAsset_getPrimitiveOffsetForEntity(tSceneAsset.cast(), entity); - return result; +Pointer MaterialInstance_getMaterial(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_getMaterial(materialInstance.cast()); + return Pointer(result); } -void SceneAsset_releaseSourceData(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_releaseSourceData(tSceneAsset.cast()); +void MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilWrite(materialInstance.cast(), enabled); return result; } -void SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading) { - final result = GeneratedBindings.instance._SceneAsset_setFlatShading(tSceneAsset.cast(), flatShading); +void MaterialInstance_setCullingMode(Pointer materialInstance, int culling) { + final result = GeneratedBindings.instance._MaterialInstance_setCullingMode(materialInstance.cast(), culling); return result; } -void SceneAsset_getBones(Pointer tSceneAsset, Dartsize_t skinIndex, Pointer out) { - final result = GeneratedBindings.instance._SceneAsset_getBones(tSceneAsset.cast(), skinIndex, out); +void MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided) { + final result = GeneratedBindings.instance._MaterialInstance_setDoubleSided(materialInstance.cast(), doubleSided); return result; } -Dartsize_t SceneAsset_getBoneCount(Pointer tSceneAsset, Dartsize_t skinIndex) { - final result = GeneratedBindings.instance._SceneAsset_getBoneCount(tSceneAsset.cast(), skinIndex); +void MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthWrite(materialInstance.cast(), enabled); return result; } -Pointer SceneAsset_getBoneName(Pointer tSceneAsset, Dartsize_t skinIndex, Dartsize_t boneIndex) { - final result = GeneratedBindings.instance._SceneAsset_getBoneName(tSceneAsset.cast(), skinIndex, boneIndex); - return Pointer(result); -} - -void Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity) { - final result = GeneratedBindings.instance._Camera_setExposure(camera.cast(), aperture, shutterSpeed, sensitivity); +void MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthCulling(materialInstance.cast(), enabled); return result; } -double Camera_getAperture(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getAperture(camera.cast()); +void MaterialInstance_setParameterFloat( + Pointer materialInstance, + Pointer propertyName, + double value, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat( + materialInstance.cast(), + propertyName, + value, + ); return result; } -double Camera_getShutterSpeed(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getShutterSpeed(camera.cast()); +void MaterialInstance_setParameterFloat2( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat2( + materialInstance.cast(), + propertyName, + x, + y, + ); return result; } -double Camera_getSensitivity(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getSensitivity(camera.cast()); +void MaterialInstance_setParameterFloat3( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double z, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3( + materialInstance.cast(), + propertyName, + x, + y, + z, + ); return result; } -double4x4 Camera_getModelMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getModelMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getViewMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getViewMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getProjectionMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getProjectionMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getCullingProjectionMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getCullingProjectionMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); +void MaterialInstance_setParameterFloat3Array( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer raw, + int length, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3Array( + tMaterialInstance.cast(), + propertyName, + raw, + length, + ); + return result; } -void Camera_getFrustum(Pointer camera, Pointer out) { - final result = GeneratedBindings.instance._Camera_getFrustum(camera.cast(), out); +void MaterialInstance_setParameterFloat4( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double w, + double z, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat4( + materialInstance.cast(), + propertyName, + x, + y, + w, + z, + ); return result; } -void Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far) { - final result = GeneratedBindings.instance._Camera_setProjectionMatrix(camera.cast(), matrix, near, far); +void MaterialInstance_setParameterMat3( + Pointer materialInstance, + Pointer propertyName, + Pointer matrix, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterMat3( + materialInstance.cast(), + propertyName, + matrix, + ); return result; } -void Camera_setProjectionFromFov( - Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, +void MaterialInstance_setParameterMat4( + Pointer materialInstance, + Pointer propertyName, + Pointer matrix, ) { - final result = GeneratedBindings.instance._Camera_setProjectionFromFov( - camera.cast(), - fovInDegrees, - aspect, - near, - far, - horizontal, + final result = GeneratedBindings.instance._MaterialInstance_setParameterMat4( + materialInstance.cast(), + propertyName, + matrix, ); return result; } -double Camera_getFocalLength(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getFocalLength(camera.cast()); +void MaterialInstance_setParameterInt( + Pointer materialInstance, + Pointer propertyName, + int value, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterInt( + materialInstance.cast(), + propertyName, + value, + ); return result; } -void Camera_lookAt(Pointer camera, double3 eye, double3 focus, double3 up) { - final eyePtr = eye.address; - final focusPtr = focus.address; - final upPtr = up.address; - final result = GeneratedBindings.instance._Camera_lookAt(camera.cast(), eyePtr.cast(), focusPtr.cast(), upPtr.cast()); +void MaterialInstance_setParameterBool( + Pointer materialInstance, + Pointer propertyName, + bool value, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterBool( + materialInstance.cast(), + propertyName, + value, + ); return result; } -double Camera_getNear(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getNear(camera.cast()); +void MaterialInstance_setParameterTexture( + Pointer materialInstance, + Pointer propertyName, + Pointer texture, + Pointer sampler, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterTexture( + materialInstance.cast(), + propertyName, + texture.cast(), + sampler.cast(), + ); return result; } -double Camera_getCullingFar(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getCullingFar(camera.cast()); +void MaterialInstance_setDepthFunc(Pointer materialInstance, int depthFunc) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthFunc(materialInstance.cast(), depthFunc); return result; } -double Camera_getFov(Pointer camera, bool horizontal) { - final result = GeneratedBindings.instance._Camera_getFov(camera.cast(), horizontal); +void MaterialInstance_setStencilOpStencilFail(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpStencilFail( + materialInstance.cast(), + op, + face, + ); return result; } -double Camera_getFocusDistance(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getFocusDistance(camera.cast()); +void MaterialInstance_setStencilOpDepthFail(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthFail(materialInstance.cast(), op, face); return result; } -void Camera_setFocusDistance(Pointer camera, double focusDistance) { - final result = GeneratedBindings.instance._Camera_setFocusDistance(camera.cast(), focusDistance); +void MaterialInstance_setStencilOpDepthStencilPass(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthStencilPass( + materialInstance.cast(), + op, + face, + ); return result; } -void Camera_setCustomProjectionWithCulling( - Pointer camera, - double4x4 projectionMatrix, - double near, - double far, -) { - final projectionMatrixPtr = projectionMatrix.address; - final result = GeneratedBindings.instance._Camera_setCustomProjectionWithCulling( - camera.cast(), - projectionMatrixPtr.cast(), - near, - far, +void MaterialInstance_setStencilCompareFunction(Pointer materialInstance, int func, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilCompareFunction( + materialInstance.cast(), + func, + face, ); return result; } -void Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix) { - final result = GeneratedBindings.instance._Camera_setModelMatrix(camera.cast(), tModelMatrix); +void MaterialInstance_setStencilReferenceValue(Pointer materialInstance, int value, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilReferenceValue( + materialInstance.cast(), + value, + face, + ); return result; } -void Camera_setLensProjection(Pointer camera, double near, double far, double aspect, double focalLength) { - final result = GeneratedBindings.instance._Camera_setLensProjection(camera.cast(), near, far, aspect, focalLength); +void MaterialInstance_setStencilReadMask(Pointer materialInstance, int mask) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilReadMask(materialInstance.cast(), mask); return result; } -DartEntityId Camera_getEntity(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getEntity(camera.cast()); +void MaterialInstance_setStencilWriteMask(Pointer materialInstance, int mask) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilWriteMask(materialInstance.cast(), mask); return result; } -void Camera_setProjection( - Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, -) { - final result = GeneratedBindings.instance._Camera_setProjection( - tCamera.cast(), - projection, - left, - right, - bottom, - top, - near, - far, +void MaterialInstance_setTransparencyMode(Pointer materialInstance, int transparencyMode) { + final result = GeneratedBindings.instance._MaterialInstance_setTransparencyMode( + materialInstance.cast(), + transparencyMode, ); return result; } -void MeshData_dispose(Pointer meshData) { - final result = GeneratedBindings.instance._MeshData_dispose(meshData.cast()); +int MaterialInstance_getTransparencyMode(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_getTransparencyMode(materialInstance.cast()); return result; } -int GltfParser_parseBuffer( - Pointer data, - Dartsize_t length, - Pointer meshName, - Pointer outMeshData, -) { - final result = GeneratedBindings.instance._GltfParser_parseBuffer(data, length, meshName, outMeshData.cast()); +int Material_getBlendingMode(Pointer material) { + final result = GeneratedBindings.instance._Material_getBlendingMode(material.cast()); return result; } @@ -3923,532 +4461,401 @@ void TextureSampler_destroy(Pointer sampler) { return result; } -Pointer Engine_create( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, -) { - final result = GeneratedBindings.instance._Engine_create( - backend, - platform, - sharedContext, - stereoscopicEyeCount, - disableHandleUseAfterFreeCheck, - ); - return Pointer(result); -} - -int Engine_getSupportedFeatureLevel(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getSupportedFeatureLevel(tEngine.cast()); - return result; -} - -void Engine_destroy(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_destroy(tEngine.cast()); - return result; -} - -Pointer Engine_createRenderer(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createRenderer(tEngine.cast()); - return Pointer(result); +Pointer RenderTarget_create(Pointer tEngine, Pointer color, Pointer depth) { + final result = GeneratedBindings.instance._RenderTarget_create(tEngine.cast(), color.cast(), depth.cast()); + return Pointer(result); } -void Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer) { - final result = GeneratedBindings.instance._Engine_destroyRenderer(tEngine.cast(), tRenderer.cast()); +void RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget) { + final result = GeneratedBindings.instance._RenderTarget_destroy(tEngine.cast(), tRenderTarget.cast()); return result; } -Pointer Engine_createSwapChain(Pointer tEngine, Pointer window, BigInt flags) { - final result = GeneratedBindings.instance._Engine_createSwapChain(tEngine.cast(), window, flags.toJSBigInt); - return Pointer(result); -} - -Pointer Engine_createHeadlessSwapChain(Pointer tEngine, int width, int height, BigInt flags) { - final result = GeneratedBindings.instance._Engine_createHeadlessSwapChain( - tEngine.cast(), - width, - height, - flags.toJSBigInt, +void Renderer_setClearOptions( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, +) { + final result = GeneratedBindings.instance._Renderer_setClearOptions( + tRenderer.cast(), + clearR, + clearG, + clearB, + clearA, + clearStencil, + clear, + discard, ); - return Pointer(result); -} - -void Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain) { - final result = GeneratedBindings.instance._Engine_destroySwapChain(tEngine.cast(), tSwapChain.cast()); - return result; -} - -void Engine_destroyView(Pointer tEngine, Pointer tView) { - final result = GeneratedBindings.instance._Engine_destroyView(tEngine.cast(), tView.cast()); - return result; -} - -void Engine_destroyScene(Pointer tEngine, Pointer tScene) { - final result = GeneratedBindings.instance._Engine_destroyScene(tEngine.cast(), tScene.cast()); - return result; -} - -void Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading) { - final result = GeneratedBindings.instance._Engine_destroyColorGrading(tEngine.cast(), tColorGrading.cast()); - return result; -} - -Pointer Engine_createCamera(Pointer tEngine, DartEntityId entityId) { - final result = GeneratedBindings.instance._Engine_createCamera(tEngine.cast(), entityId); - return Pointer(result); -} - -void Engine_destroyCamera(Pointer tEngine, Pointer tCamera) { - final result = GeneratedBindings.instance._Engine_destroyCamera(tEngine.cast(), tCamera.cast()); return result; } -Pointer Engine_createView(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createView(tEngine.cast()); - return Pointer(result); -} - -Pointer Engine_getCameraComponent(Pointer tEngine, DartEntityId entityId) { - final result = GeneratedBindings.instance._Engine_getCameraComponent(tEngine.cast(), entityId); - return Pointer(result); -} - -Pointer Engine_getTransformManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getTransformManager(engine.cast()); - return Pointer(result); -} - -Pointer Engine_getRenderableManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getRenderableManager(engine.cast()); - return Pointer(result); +bool Renderer_beginFrame(Pointer tRenderer, Pointer tSwapChain, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._Renderer_beginFrame( + tRenderer.cast(), + tSwapChain.cast(), + frameTimeInNanos.toJSBigInt, + ); + return result == 1; } -Pointer Engine_getLightManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getLightManager(engine.cast()); - return Pointer(result); +void Renderer_endFrame(Pointer tRenderer) { + final result = GeneratedBindings.instance._Renderer_endFrame(tRenderer.cast()); + return result; } -Pointer Engine_getEntityManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getEntityManager(engine.cast()); - return Pointer(result); +void Renderer_render(Pointer tRenderer, Pointer tView) { + final result = GeneratedBindings.instance._Renderer_render(tRenderer.cast(), tView.cast()); + return result; } -void Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled) { - final result = GeneratedBindings.instance._Engine_setAutomaticInstancingEnabled(tEngine.cast(), enabled); +void Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView) { + final result = GeneratedBindings.instance._Renderer_renderStandaloneView(tRenderer.cast(), tView.cast()); return result; } -Dartsize_t Engine_getMaxAutomaticInstances(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getMaxAutomaticInstances(tEngine.cast()); +void Renderer_readPixels( + Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + Dartsize_t outLength, +) { + final result = GeneratedBindings.instance._Renderer_readPixels( + tRenderer.cast(), + width, + height, + xOffset, + yOffset, + tRenderTarget.cast(), + tPixelBufferFormat, + tPixelDataType, + out, + outLength, + ); return result; } -void Engine_destroyTexture(Pointer tEngine, Pointer tTexture) { - final result = GeneratedBindings.instance._Engine_destroyTexture(tEngine.cast(), tTexture.cast()); +void Renderer_setFrameInterval( + Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, +) { + final result = GeneratedBindings.instance._Renderer_setFrameInterval( + tRenderer.cast(), + headRoomRatio, + scaleRate, + history, + interval, + ); return result; } -Pointer Engine_createFence(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createFence(tEngine.cast()); - return Pointer(result); +Pointer SceneAsset_createFromBuffers( + Pointer tEngine, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, +) { + final boundingBoxPtr = boundingBox.address; + final result = GeneratedBindings.instance._SceneAsset_createFromBuffers( + tEngine.cast(), + tVertexBuffer.cast(), + tIndexBuffer.cast(), + materialInstances.cast(), + materialInstanceCount, + tPrimitiveType, + boundingBoxPtr.cast(), + ); + return Pointer(result); } -void Engine_destroyFence(Pointer tEngine, Pointer tFence) { - final result = GeneratedBindings.instance._Engine_destroyFence(tEngine.cast(), tFence.cast()); - return result; +Pointer SceneAsset_createFromFilamentAsset( + Pointer tEngine, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, +) { + final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAsset( + tEngine.cast(), + tAssetLoader.cast(), + tNameComponentManager.cast(), + tFilamentAsset.cast(), + rebuildVertices, + ); + return Pointer(result); } -void Engine_flushAndWait(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_flushAndWait(tEngine.cast()); - return result; +Pointer SceneAsset_getFilamentAsset(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getFilamentAsset(tSceneAsset.cast()); + return Pointer(result); } -void Engine_execute(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_execute(tEngine.cast()); +int SceneAsset_getType(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getType(tSceneAsset.cast()); return result; } -Pointer Engine_buildMaterial(Pointer tEngine, Pointer materialData, Dartsize_t length) { - final result = GeneratedBindings.instance._Engine_buildMaterial(tEngine.cast(), materialData, length); - return Pointer(result); +void SceneAsset_destroy(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_destroy(tSceneAsset.cast()); + return result; } -void Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial) { - final result = GeneratedBindings.instance._Engine_destroyMaterial(tEngine.cast(), tMaterial.cast()); +void SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene) { + final result = GeneratedBindings.instance._SceneAsset_addToScene(tSceneAsset.cast(), tScene.cast()); return result; } -void Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance) { - final result = GeneratedBindings.instance._Engine_destroyMaterialInstance(tEngine.cast(), tMaterialInstance.cast()); +void SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene) { + final result = GeneratedBindings.instance._SceneAsset_removeFromScene(tSceneAsset.cast(), tScene.cast()); return result; } -Pointer Engine_createScene(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createScene(tEngine.cast()); - return Pointer(result); +DartEntityId SceneAsset_getEntity(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getEntity(tSceneAsset.cast()); + return result; } -Pointer Engine_buildSkybox( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, -) { - final result = GeneratedBindings.instance._Engine_buildSkybox( - tEngine.cast(), - tTexture.cast(), - showSun, - intensity, - priority, - ); - return Pointer(result); +int SceneAsset_getChildEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getChildEntityCount(tSceneAsset.cast()); + return result; } -Pointer Engine_buildColoredSkybox( - Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, -) { - final result = GeneratedBindings.instance._Engine_buildColoredSkybox( - tEngine.cast(), - r, - g, - b, - a, - showSun, - intensity, - priority, - ); - return Pointer(result); +void SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out) { + final result = GeneratedBindings.instance._SceneAsset_getChildEntities(tSceneAsset.cast(), out); + return result; } -Pointer Engine_buildIndirectLightFromIrradianceTexture( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, -) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTexture( - tEngine.cast(), - tReflectionsTexture.cast(), - tIrradianceTexture.cast(), - intensity, - ); - return Pointer(result); +Pointer SceneAsset_getCameraEntities(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getCameraEntities(tSceneAsset.cast()); + return Pointer(result); } -Pointer Engine_buildIndirectLightFromIrradianceHarmonics( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer irradianceHarmonics, - double intensity, -) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonics( - tEngine.cast(), - tReflectionsTexture.cast(), - irradianceHarmonics, - intensity, - ); - return Pointer(result); +Dartsize_t SceneAsset_getCameraEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getCameraEntityCount(tSceneAsset.cast()); + return result; } -void Engine_destroySkybox(Pointer tEngine, Pointer tSkybox) { - final result = GeneratedBindings.instance._Engine_destroySkybox(tEngine.cast(), tSkybox.cast()); - return result; +Pointer SceneAsset_getLightEntities(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getLightEntities(tSceneAsset.cast()); + return Pointer(result); } -void Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight) { - final result = GeneratedBindings.instance._Engine_destroyIndirectLight(tEngine.cast(), tIndirectLight.cast()); +Dartsize_t SceneAsset_getLightEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getLightEntityCount(tSceneAsset.cast()); return result; } -DartEntityId EntityManager_createEntity(Pointer tEntityManager) { - final result = GeneratedBindings.instance._EntityManager_createEntity(tEntityManager.cast()); - return result; +Pointer SceneAsset_getInstance(Pointer tSceneAsset, int index) { + final result = GeneratedBindings.instance._SceneAsset_getInstance(tSceneAsset.cast(), index); + return Pointer(result); } -void EntityManager_destroyEntity(Pointer tEntityManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._EntityManager_destroyEntity(tEntityManager.cast(), entityId); +Dartsize_t SceneAsset_getInstanceCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getInstanceCount(tSceneAsset.cast()); return result; } -void Fence_waitAndDestroy(Pointer tFence) { - final result = GeneratedBindings.instance._Fence_waitAndDestroy(tFence.cast()); - return result; +Pointer SceneAsset_createInstance( + Pointer asset, + Pointer> materialInstances, + int materialInstanceCount, +) { + final result = GeneratedBindings.instance._SceneAsset_createInstance( + asset.cast(), + materialInstances.cast(), + materialInstanceCount, + ); + return Pointer(result); } -Pointer Engine_getDebugRegistry(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getDebugRegistry(tEngine.cast()); - return Pointer(result); +Aabb3 SceneAsset_getBoundingBox(Pointer asset) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._SceneAsset_getBoundingBox(Aabb3_out.cast(), asset.cast()); + return Aabb3_out.toDart(); } -bool DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name) { - final result = GeneratedBindings.instance._DebugRegistry_hasProperty(tDebugRegistry.cast(), name); - return result == 1; +Pointer SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex) { + final result = GeneratedBindings.instance._SceneAsset_getVertexBuffer(tSceneAsset.cast(), primitiveIndex); + return Pointer(result); } -bool DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_bool(tDebugRegistry.cast(), name, value); - return result == 1; +Pointer SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex) { + final result = GeneratedBindings.instance._SceneAsset_getIndexBuffer(tSceneAsset.cast(), primitiveIndex); + return Pointer(result); } -bool DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_int(tDebugRegistry.cast(), name, value); - return result == 1; +int SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, DartEntityId entity) { + final result = GeneratedBindings.instance._SceneAsset_getPrimitiveOffsetForEntity(tSceneAsset.cast(), entity); + return result; } -bool DebugRegistry_setProperty_float(Pointer tDebugRegistry, Pointer name, double value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_float(tDebugRegistry.cast(), name, value); - return result == 1; +void SceneAsset_releaseSourceData(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_releaseSourceData(tSceneAsset.cast()); + return result; } -bool DebugRegistry_getProperty_bool( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, -) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_bool(tDebugRegistry.cast(), name, outValue); - return result == 1; +void SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading) { + final result = GeneratedBindings.instance._SceneAsset_setFlatShading(tSceneAsset.cast(), flatShading); + return result; } -bool DebugRegistry_getProperty_int( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, -) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_int(tDebugRegistry.cast(), name, outValue); - return result == 1; +void SceneAsset_getBones(Pointer tSceneAsset, Dartsize_t skinIndex, Pointer out) { + final result = GeneratedBindings.instance._SceneAsset_getBones(tSceneAsset.cast(), skinIndex, out); + return result; } -bool DebugRegistry_getProperty_float( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, -) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_float(tDebugRegistry.cast(), name, outValue); - return result == 1; +Dartsize_t SceneAsset_getBoneCount(Pointer tSceneAsset, Dartsize_t skinIndex) { + final result = GeneratedBindings.instance._SceneAsset_getBoneCount(tSceneAsset.cast(), skinIndex); + return result; } -Pointer MaterialProvider_createMaterialInstance( - Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, -) { - final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstance( - provider.cast(), - doubleSided, - unlit, - hasVertexColors, - hasBaseColorTexture, - hasNormalTexture, - hasOcclusionTexture, - hasEmissiveTexture, - useSpecularGlossiness, - alphaMode, - enableDiagnostics, - hasMetallicRoughnessTexture, - metallicRoughnessUV, - hasSpecularGlossinessTexture, - specularGlossinessUV, - baseColorUV, - hasClearCoatTexture, - clearCoatUV, - hasClearCoatRoughnessTexture, - clearCoatRoughnessUV, - hasClearCoatNormalTexture, - clearCoatNormalUV, - hasClearCoat, - hasTransmission, - hasTextureTransforms, - emissiveUV, - aoUV, - normalUV, - hasTransmissionTexture, - transmissionUV, - hasSheenColorTexture, - sheenColorUV, - hasSheenRoughnessTexture, - sheenRoughnessUV, - hasVolumeThicknessTexture, - volumeThicknessUV, - hasSheen, - hasIOR, - hasVolume, - ); - return Pointer(result); +Pointer SceneAsset_getBoneName(Pointer tSceneAsset, Dartsize_t skinIndex, Dartsize_t boneIndex) { + final result = GeneratedBindings.instance._SceneAsset_getBoneName(tSceneAsset.cast(), skinIndex, boneIndex); + return Pointer(result); } -Pointer VertexBufferBuilder_create() { - final result = GeneratedBindings.instance._VertexBufferBuilder_create(); - return Pointer(result); +Pointer SurfaceOrientationBuilder_create() { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_create(); + return Pointer(result); } -void VertexBufferBuilder_bufferCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._VertexBufferBuilder_bufferCount(builder.cast(), count); +void SurfaceOrientationBuilder_vertexCount(Pointer builder, Dartsize_t count) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_vertexCount(builder.cast(), count); return result; } -void VertexBufferBuilder_vertexCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._VertexBufferBuilder_vertexCount(builder.cast(), count); +void SurfaceOrientationBuilder_normals( + Pointer builder, + Pointer normals, + Dartsize_t stride, +) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_normals(builder.cast(), normals, stride); return result; } -void VertexBufferBuilder_attribute( - Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, +void SurfaceOrientationBuilder_tangents( + Pointer builder, + Pointer tangents, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._VertexBufferBuilder_attribute( - builder.cast(), - attribute, - bufferIndex, - attributeType, - byteOffset, - byteStride, - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_tangents(builder.cast(), tangents, stride); return result; } -void VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize) { - final result = GeneratedBindings.instance._VertexBufferBuilder_normalized(builder.cast(), attribute, normalize); +void SurfaceOrientationBuilder_uvs( + Pointer builder, + Pointer uvs, + Dartsize_t stride, +) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_uvs(builder.cast(), uvs, stride); return result; } -Pointer VertexBufferBuilder_build(Pointer builder, Pointer engine) { - final result = GeneratedBindings.instance._VertexBufferBuilder_build(builder.cast(), engine.cast()); - return Pointer(result); -} - -void VertexBufferBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._VertexBufferBuilder_destroy(builder.cast()); +void SurfaceOrientationBuilder_positions( + Pointer builder, + Pointer positions, + Dartsize_t stride, +) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_positions(builder.cast(), positions, stride); return result; } -Dartsize_t VertexBuffer_getVertexCount(Pointer buffer) { - final result = GeneratedBindings.instance._VertexBuffer_getVertexCount(buffer.cast()); +void SurfaceOrientationBuilder_triangleCount(Pointer builder, Dartsize_t count) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangleCount(builder.cast(), count); return result; } -void VertexBuffer_setBufferAt( - Pointer engine, - Pointer buffer, - int bufferIndex, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, -) { - final result = GeneratedBindings.instance._VertexBuffer_setBufferAt( - engine.cast(), - buffer.cast(), - bufferIndex, - data, - sizeInBytes, - byteOffset, - ); +void SurfaceOrientationBuilder_triangles_uint(Pointer builder, Pointer triangles) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_uint(builder.cast(), triangles); return result; } -void VertexBuffer_destroy(Pointer engine, Pointer buffer) { - final result = GeneratedBindings.instance._VertexBuffer_destroy(engine.cast(), buffer.cast()); +void SurfaceOrientationBuilder_triangles_ushort( + Pointer builder, + Pointer triangles, +) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_ushort(builder.cast(), triangles); return result; } -Pointer IndexBufferBuilder_create() { - final result = GeneratedBindings.instance._IndexBufferBuilder_create(); - return Pointer(result); +Pointer SurfaceOrientationBuilder_build(Pointer builder) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_build(builder.cast()); + return Pointer(result); } -void IndexBufferBuilder_indexCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._IndexBufferBuilder_indexCount(builder.cast(), count); +void SurfaceOrientationBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_destroy(builder.cast()); return result; } -void IndexBufferBuilder_bufferType(Pointer builder, int indexType) { - final result = GeneratedBindings.instance._IndexBufferBuilder_bufferType(builder.cast(), indexType); +Dartsize_t SurfaceOrientation_getVertexCount(Pointer orientation) { + final result = GeneratedBindings.instance._SurfaceOrientation_getVertexCount(orientation.cast()); return result; } -Pointer IndexBufferBuilder_build(Pointer builder, Pointer engine) { - final result = GeneratedBindings.instance._IndexBufferBuilder_build(builder.cast(), engine.cast()); - return Pointer(result); -} - -void IndexBufferBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._IndexBufferBuilder_destroy(builder.cast()); +void SurfaceOrientation_getQuats_float4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, +) { + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_float4( + orientation.cast(), + out, + quatCount, + stride, + ); return result; } -Dartsize_t IndexBuffer_getIndexCount(Pointer buffer) { - final result = GeneratedBindings.instance._IndexBuffer_getIndexCount(buffer.cast()); +void SurfaceOrientation_getQuats_short4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, +) { + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_short4( + orientation.cast(), + out, + quatCount, + stride, + ); return result; } -void IndexBuffer_setBuffer( - Pointer engine, - Pointer buffer, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, +void SurfaceOrientation_getQuats_half4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._IndexBuffer_setBuffer( - engine.cast(), - buffer.cast(), - data, - sizeInBytes, - byteOffset, + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_half4( + orientation.cast(), + out, + quatCount, + stride, ); return result; } -void IndexBuffer_destroy(Pointer engine, Pointer buffer) { - final result = GeneratedBindings.instance._IndexBuffer_destroy(engine.cast(), buffer.cast()); +void SurfaceOrientation_destroy(Pointer orientation) { + final result = GeneratedBindings.instance._SurfaceOrientation_destroy(orientation.cast()); return result; } @@ -4580,2780 +4987,1896 @@ void TransformManager_commitLocalTransformTransaction(Pointer return result; } -int LightManager_createLight(Pointer tEngine, Pointer tLightManager, int tLightTtype) { - final result = GeneratedBindings.instance._LightManager_createLight( - tEngine.cast(), - tLightManager.cast(), - tLightTtype, - ); - return result; -} - -void LightManager_destroyLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_destroyLight(tLightManager.cast(), entity); - return result; -} - -bool LightManager_hasComponent(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_hasComponent(tLightManager.cast(), entity); - return result == 1; -} - -int LightManager_getType(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getType(tLightManager.cast(), entity); - return result; -} - -bool LightManager_isDirectional(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isDirectional(tLightManager.cast(), entity); - return result == 1; -} - -bool LightManager_isPointLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isPointLight(tLightManager.cast(), entity); - return result == 1; -} - -bool LightManager_isSpotLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isSpotLight(tLightManager.cast(), entity); - return result == 1; -} - -void LightManager_setPosition(Pointer tLightManager, DartEntityId light, double x, double y, double z) { - final result = GeneratedBindings.instance._LightManager_setPosition(tLightManager.cast(), light, x, y, z); - return result; -} - -double3 LightManager_getPosition(Pointer tLightManager, DartEntityId light) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getPosition(double3_out.cast(), tLightManager.cast(), light); - return double3_out.toDart(); +Pointer VertexBufferBuilder_create() { + final result = GeneratedBindings.instance._VertexBufferBuilder_create(); + return Pointer(result); } -void LightManager_setDirection(Pointer tLightManager, DartEntityId light, double x, double y, double z) { - final result = GeneratedBindings.instance._LightManager_setDirection(tLightManager.cast(), light, x, y, z); +void VertexBufferBuilder_bufferCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._VertexBufferBuilder_bufferCount(builder.cast(), count); return result; } -double3 LightManager_getDirection(Pointer tLightManager, DartEntityId light) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getDirection(double3_out.cast(), tLightManager.cast(), light); - return double3_out.toDart(); -} - -void LightManager_setColor(Pointer tLightManager, DartEntityId entity, double r, double g, double b) { - final result = GeneratedBindings.instance._LightManager_setColor(tLightManager.cast(), entity, r, g, b); +void VertexBufferBuilder_vertexCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._VertexBufferBuilder_vertexCount(builder.cast(), count); return result; } -void LightManager_setColorTemperature( - Pointer tLightManager, - DartEntityId entity, - double colorTemperature, +void VertexBufferBuilder_attribute( + Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, ) { - final result = GeneratedBindings.instance._LightManager_setColorTemperature( - tLightManager.cast(), - entity, - colorTemperature, + final result = GeneratedBindings.instance._VertexBufferBuilder_attribute( + builder.cast(), + attribute, + bufferIndex, + attributeType, + byteOffset, + byteStride, ); return result; } -double3 LightManager_getColor(Pointer tLightManager, DartEntityId entity) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getColor(double3_out.cast(), tLightManager.cast(), entity); - return double3_out.toDart(); -} - -void LightManager_setIntensity(Pointer tLightManager, DartEntityId entity, double intensity) { - final result = GeneratedBindings.instance._LightManager_setIntensity(tLightManager.cast(), entity, intensity); - return result; -} - -void LightManager_setIntensityCandela(Pointer tLightManager, DartEntityId entity, double intensity) { - final result = GeneratedBindings.instance._LightManager_setIntensityCandela(tLightManager.cast(), entity, intensity); - return result; -} - -void LightManager_setIntensityWatts( - Pointer tLightManager, - DartEntityId entity, - double watts, - double efficiency, -) { - final result = GeneratedBindings.instance._LightManager_setIntensityWatts( - tLightManager.cast(), - entity, - watts, - efficiency, - ); +void VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize) { + final result = GeneratedBindings.instance._VertexBufferBuilder_normalized(builder.cast(), attribute, normalize); return result; } -double LightManager_getIntensity(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getIntensity(tLightManager.cast(), entity); - return result; +Pointer VertexBufferBuilder_build(Pointer builder, Pointer engine) { + final result = GeneratedBindings.instance._VertexBufferBuilder_build(builder.cast(), engine.cast()); + return Pointer(result); } -void LightManager_setFalloff(Pointer tLightManager, DartEntityId entity, double falloff) { - final result = GeneratedBindings.instance._LightManager_setFalloff(tLightManager.cast(), entity, falloff); +void VertexBufferBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._VertexBufferBuilder_destroy(builder.cast()); return result; } -double LightManager_getFalloff(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getFalloff(tLightManager.cast(), entity); +Dartsize_t VertexBuffer_getVertexCount(Pointer buffer) { + final result = GeneratedBindings.instance._VertexBuffer_getVertexCount(buffer.cast()); return result; } -void LightManager_setSpotLightCone( - Pointer tLightManager, - DartEntityId entity, - double inner, - double outer, +void VertexBuffer_setBufferAt( + Pointer engine, + Pointer buffer, + int bufferIndex, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, ) { - final result = GeneratedBindings.instance._LightManager_setSpotLightCone(tLightManager.cast(), entity, inner, outer); - return result; -} - -double LightManager_getSpotLightOuterCone(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSpotLightOuterCone(tLightManager.cast(), entity); - return result; -} - -double LightManager_getSpotLightInnerCone(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSpotLightInnerCone(tLightManager.cast(), entity); - return result; -} - -void LightManager_setSunAngularRadius(Pointer tLightManager, DartEntityId entity, double angularRadius) { - final result = GeneratedBindings.instance._LightManager_setSunAngularRadius( - tLightManager.cast(), - entity, - angularRadius, - ); - return result; -} - -double LightManager_getSunAngularRadius(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunAngularRadius(tLightManager.cast(), entity); - return result; -} - -void LightManager_setSunHaloSize(Pointer tLightManager, DartEntityId entity, double haloSize) { - final result = GeneratedBindings.instance._LightManager_setSunHaloSize(tLightManager.cast(), entity, haloSize); - return result; -} - -double LightManager_getSunHaloSize(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunHaloSize(tLightManager.cast(), entity); - return result; -} - -void LightManager_setSunHaloFalloff(Pointer tLightManager, DartEntityId entity, double haloFalloff) { - final result = GeneratedBindings.instance._LightManager_setSunHaloFalloff(tLightManager.cast(), entity, haloFalloff); - return result; -} - -double LightManager_getSunHaloFalloff(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunHaloFalloff(tLightManager.cast(), entity); - return result; -} - -void LightManager_setShadowCaster(Pointer tLightManager, DartEntityId entity, bool enabled) { - final result = GeneratedBindings.instance._LightManager_setShadowCaster(tLightManager.cast(), entity, enabled); - return result; -} - -bool LightManager_isShadowCaster(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isShadowCaster(tLightManager.cast(), entity); - return result == 1; -} - -void LightManager_setShadowOptions(Pointer tLightManager, DartEntityId entity, TShadowOptions options) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._LightManager_setShadowOptions( - tLightManager.cast(), - entity, - optionsPtr.cast(), - ); - return result; -} - -TShadowOptions LightManager_getShadowOptions(Pointer tLightManager, DartEntityId entity) { - final TShadowOptions_out = TShadowOptions.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getShadowOptions( - TShadowOptions_out.cast(), - tLightManager.cast(), - entity, + final result = GeneratedBindings.instance._VertexBuffer_setBufferAt( + engine.cast(), + buffer.cast(), + bufferIndex, + data, + sizeInBytes, + byteOffset, ); - return TShadowOptions_out.toDart(); + return result; } -void LightManager_setLightChannel(Pointer tLightManager, DartEntityId entity, int channel, bool enable) { - final result = GeneratedBindings.instance._LightManager_setLightChannel( - tLightManager.cast(), - entity, - channel, - enable, - ); +void VertexBuffer_destroy(Pointer engine, Pointer buffer) { + final result = GeneratedBindings.instance._VertexBuffer_destroy(engine.cast(), buffer.cast()); return result; } -bool LightManager_getLightChannel(Pointer tLightManager, DartEntityId entity, int channel) { - final result = GeneratedBindings.instance._LightManager_getLightChannel(tLightManager.cast(), entity, channel); - return result == 1; +void FrameScheduler_startWithCallback(DartFrameTickCallback tickCallback, int targetFps) { + final result = GeneratedBindings.instance._FrameScheduler_startWithCallback( + tickCallback as Pointer>, + targetFps, + ); + return result; } -void LightManager_computeUniformSplits(Pointer splitPositions, int cascades) { - final result = GeneratedBindings.instance._LightManager_computeUniformSplits(splitPositions, cascades); +void FrameScheduler_stop() { + final result = GeneratedBindings.instance._FrameScheduler_stop(); return result; } -void LightManager_computeLogSplits(Pointer splitPositions, int cascades, double near, double far) { - final result = GeneratedBindings.instance._LightManager_computeLogSplits(splitPositions, cascades, near, far); +int FrameScheduler_initDartApi(Pointer data) { + final result = GeneratedBindings.instance._FrameScheduler_initDartApi(data); return result; } -void LightManager_computePracticalSplits( - Pointer splitPositions, - int cascades, - double near, - double far, - double lambda, -) { - final result = GeneratedBindings.instance._LightManager_computePracticalSplits( - splitPositions, - cascades, - near, - far, - lambda, - ); +void FrameScheduler_startWithPort(BigInt port, int targetFps) { + final result = GeneratedBindings.instance._FrameScheduler_startWithPort(port.toJSBigInt, targetFps); return result; } -double LightManager_rgbToColorTemperature(double r, double g, double b) { - final result = GeneratedBindings.instance._LightManager_rgbToColorTemperature(r, g, b); +void FrameScheduler_setTargetFps(int fps) { + final result = GeneratedBindings.instance._FrameScheduler_setTargetFps(fps); return result; } -Pointer RenderThread_create() { - final result = GeneratedBindings.instance._RenderThread_create(); - return Pointer(result); +BigInt FrameScheduler_steadyClockUs() { + final result = GeneratedBindings.instance._FrameScheduler_steadyClockUs(); + return result.toDart; } -Pointer RenderThread_createForCanvas(Pointer canvasSelector) { - final result = GeneratedBindings.instance._RenderThread_createForCanvas(canvasSelector); - return Pointer(result); +int LightManager_createLight(Pointer tEngine, Pointer tLightManager, int tLightTtype) { + final result = GeneratedBindings.instance._LightManager_createLight( + tEngine.cast(), + tLightManager.cast(), + tLightTtype, + ); + return result; } -void RenderThread_destroy(Pointer renderThread) { - final result = GeneratedBindings.instance._RenderThread_destroy(renderThread); +void LightManager_destroyLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_destroyLight(tLightManager.cast(), entity); return result; } -void RenderThread_addTask(Pointer> task) { - final result = GeneratedBindings.instance._RenderThread_addTask(task.cast()); - return result; +bool LightManager_hasComponent(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_hasComponent(tLightManager.cast(), entity); + return result == 1; } -void RenderManager_setRenderableRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - Pointer> tViews, - int numViews, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderManager_setRenderableRenderThread( - tRenderer.cast(), - tSwapChain.cast(), - tViews.cast(), - numViews, - requestId, - onComplete as Pointer>, - ); +int LightManager_getType(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getType(tLightManager.cast(), entity); return result; } -void RenderManager_renderRenderThread( - Pointer tRenderManager, - BigInt frameTimeInNanos, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderManager_renderRenderThread( - tRenderManager.cast(), - frameTimeInNanos.toJSBigInt, - requestId, - onComplete as Pointer>, - ); - return result; +bool LightManager_isDirectional(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isDirectional(tLightManager.cast(), entity); + return result == 1; } -void RenderManager_addAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderManager_addAnimationManagerRenderThread( - tRenderManager.cast(), - tAnimationManager.cast(), - requestId, - onComplete as Pointer>, - ); - return result; +bool LightManager_isPointLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isPointLight(tLightManager.cast(), entity); + return result == 1; } -void RenderManager_removeAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderManager_removeAnimationManagerRenderThread( - tRenderManager.cast(), - tAnimationManager.cast(), - requestId, - onComplete as Pointer>, - ); - return result; +bool LightManager_isSpotLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isSpotLight(tLightManager.cast(), entity); + return result == 1; } -void RenderManager_removeSwapChainRenderThread( - Pointer tRenderManager, - Pointer tSwapChain, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderManager_removeSwapChainRenderThread( - tRenderManager.cast(), - tSwapChain.cast(), - requestId, - onComplete as Pointer>, - ); +void LightManager_setPosition(Pointer tLightManager, DartEntityId light, double x, double y, double z) { + final result = GeneratedBindings.instance._LightManager_setPosition(tLightManager.cast(), light, x, y, z); return result; } -void AnimationManager_createRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._AnimationManager_createRenderThread(tEngine.cast(), onComplete.cast()); - return result; +double3 LightManager_getPosition(Pointer tLightManager, DartEntityId light) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getPosition(double3_out.cast(), tLightManager.cast(), light); + return double3_out.toDart(); } -void AnimationManager_destroyRenderThread( - Pointer tAnimationManager, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._AnimationManager_destroyRenderThread( - tAnimationManager.cast(), - requestId, - onComplete as Pointer>, - ); +void LightManager_setDirection(Pointer tLightManager, DartEntityId light, double x, double y, double z) { + final result = GeneratedBindings.instance._LightManager_setDirection(tLightManager.cast(), light, x, y, z); return result; } -void Engine_createRenderThread( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createRenderThread( - backend, - platform, - sharedContext, - stereoscopicEyeCount, - disableHandleUseAfterFreeCheck, - onComplete.cast(), - ); - return result; +double3 LightManager_getDirection(Pointer tLightManager, DartEntityId light) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getDirection(double3_out.cast(), tLightManager.cast(), light); + return double3_out.toDart(); } -void Engine_createRendererRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createRendererRenderThread(tEngine.cast(), onComplete.cast()); +void LightManager_setColor(Pointer tLightManager, DartEntityId entity, double r, double g, double b) { + final result = GeneratedBindings.instance._LightManager_setColor(tLightManager.cast(), entity, r, g, b); return result; } -void Engine_destroyRendererRenderThread( - Pointer tEngine, - Pointer tRenderer, - int requestId, - DartVoidCallback onComplete, +void LightManager_setColorTemperature( + Pointer tLightManager, + DartEntityId entity, + double colorTemperature, ) { - final result = GeneratedBindings.instance._Engine_destroyRendererRenderThread( - tEngine.cast(), - tRenderer.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._LightManager_setColorTemperature( + tLightManager.cast(), + entity, + colorTemperature, ); return result; } -void Engine_createSwapChainRenderThread( - Pointer tEngine, - Pointer window, - BigInt flags, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createSwapChainRenderThread( - tEngine.cast(), - window, - flags.toJSBigInt, - onComplete.cast(), - ); - return result; +double3 LightManager_getColor(Pointer tLightManager, DartEntityId entity) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getColor(double3_out.cast(), tLightManager.cast(), entity); + return double3_out.toDart(); } -void Engine_createHeadlessSwapChainRenderThread( - Pointer tEngine, - int width, - int height, - BigInt flags, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createHeadlessSwapChainRenderThread( - tEngine.cast(), - width, - height, - flags.toJSBigInt, - onComplete.cast(), - ); +void LightManager_setIntensity(Pointer tLightManager, DartEntityId entity, double intensity) { + final result = GeneratedBindings.instance._LightManager_setIntensity(tLightManager.cast(), entity, intensity); return result; } -void Engine_createCameraRenderThread( - Pointer tEngine, - DartEntityId entityId, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createCameraRenderThread( - tEngine.cast(), - entityId, - onComplete.cast(), - ); +void LightManager_setIntensityCandela(Pointer tLightManager, DartEntityId entity, double intensity) { + final result = GeneratedBindings.instance._LightManager_setIntensityCandela(tLightManager.cast(), entity, intensity); return result; } -void Engine_destroyCameraRenderThread( - Pointer tEngine, - Pointer tCamera, - int requestId, - DartVoidCallback onComplete, +void LightManager_setIntensityWatts( + Pointer tLightManager, + DartEntityId entity, + double watts, + double efficiency, ) { - final result = GeneratedBindings.instance._Engine_destroyCameraRenderThread( - tEngine.cast(), - tCamera.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._LightManager_setIntensityWatts( + tLightManager.cast(), + entity, + watts, + efficiency, ); return result; } -void Engine_createViewRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createViewRenderThread(tEngine.cast(), onComplete.cast()); +double LightManager_getIntensity(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getIntensity(tLightManager.cast(), entity); return result; } -void Engine_buildMaterialRenderThread( - Pointer tEngine, - Pointer materialData, - Dartsize_t length, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_buildMaterialRenderThread( - tEngine.cast(), - materialData, - length, - onComplete.cast(), - ); +void LightManager_setFalloff(Pointer tLightManager, DartEntityId entity, double falloff) { + final result = GeneratedBindings.instance._LightManager_setFalloff(tLightManager.cast(), entity, falloff); return result; } -void Engine_destroyRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_destroyRenderThread( - tEngine.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_getFalloff(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getFalloff(tLightManager.cast(), entity); return result; } -void Engine_destroySwapChainRenderThread( - Pointer tEngine, - Pointer tSwapChain, - int requestId, - DartVoidCallback onComplete, +void LightManager_setSpotLightCone( + Pointer tLightManager, + DartEntityId entity, + double inner, + double outer, ) { - final result = GeneratedBindings.instance._Engine_destroySwapChainRenderThread( - tEngine.cast(), - tSwapChain.cast(), - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._LightManager_setSpotLightCone(tLightManager.cast(), entity, inner, outer); return result; } -void Engine_destroyViewRenderThread( - Pointer tEngine, - Pointer tView, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyViewRenderThread( - tEngine.cast(), - tView.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_getSpotLightOuterCone(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSpotLightOuterCone(tLightManager.cast(), entity); return result; } -void Engine_destroySceneRenderThread( - Pointer tEngine, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroySceneRenderThread( - tEngine.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_getSpotLightInnerCone(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSpotLightInnerCone(tLightManager.cast(), entity); return result; } -void Engine_destroyColorGradingRenderThread( - Pointer tEngine, - Pointer tColorGrading, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyColorGradingRenderThread( - tEngine.cast(), - tColorGrading.cast(), - requestId, - onComplete as Pointer>, +void LightManager_setSunAngularRadius(Pointer tLightManager, DartEntityId entity, double angularRadius) { + final result = GeneratedBindings.instance._LightManager_setSunAngularRadius( + tLightManager.cast(), + entity, + angularRadius, ); return result; } -void Engine_destroyMaterialRenderThread( - Pointer tEngine, - Pointer tMaterial, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyMaterialRenderThread( - tEngine.cast(), - tMaterial.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_getSunAngularRadius(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunAngularRadius(tLightManager.cast(), entity); return result; } -void Engine_destroyMaterialInstanceRenderThread( - Pointer tEngine, - Pointer tMaterialInstance, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyMaterialInstanceRenderThread( - tEngine.cast(), - tMaterialInstance.cast(), - requestId, - onComplete as Pointer>, - ); +void LightManager_setSunHaloSize(Pointer tLightManager, DartEntityId entity, double haloSize) { + final result = GeneratedBindings.instance._LightManager_setSunHaloSize(tLightManager.cast(), entity, haloSize); return result; } -void Engine_destroySkyboxRenderThread( - Pointer tEngine, - Pointer tSkybox, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroySkyboxRenderThread( - tEngine.cast(), - tSkybox.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_getSunHaloSize(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunHaloSize(tLightManager.cast(), entity); return result; } -void Engine_destroyIndirectLightRenderThread( - Pointer tEngine, - Pointer tIndirectLight, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyIndirectLightRenderThread( - tEngine.cast(), - tIndirectLight.cast(), - requestId, - onComplete as Pointer>, - ); +void LightManager_setSunHaloFalloff(Pointer tLightManager, DartEntityId entity, double haloFalloff) { + final result = GeneratedBindings.instance._LightManager_setSunHaloFalloff(tLightManager.cast(), entity, haloFalloff); return result; } -void Texture_buildRenderThread( - Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import1, - int sampler, - int format, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Texture_buildRenderThread( - engine.cast(), - width, - height, - depth, - levels, - tUsage, - import1, - sampler, - format, - onComplete.cast(), - ); +double LightManager_getSunHaloFalloff(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunHaloFalloff(tLightManager.cast(), entity); return result; } -void Texture_setExternalImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer externalImage, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Texture_setExternalImageRenderThread( - tEngine.cast(), - tTexture.cast(), - externalImage, - requestId, - onComplete as Pointer>, - ); +void LightManager_setShadowCaster(Pointer tLightManager, DartEntityId entity, bool enabled) { + final result = GeneratedBindings.instance._LightManager_setShadowCaster(tLightManager.cast(), entity, enabled); return result; } -void Texture_generateMipMapsRenderThread( - Pointer tTexture, - Pointer tEngine, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Texture_generateMipMapsRenderThread( - tTexture.cast(), - tEngine.cast(), - requestId, - onComplete as Pointer>, - ); - return result; +bool LightManager_isShadowCaster(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isShadowCaster(tLightManager.cast(), entity); + return result == 1; } -void Ktx1Reader_createTextureRenderThread( - Pointer tEngine, - Pointer tBundle, - int requestId, - DartVoidCallback onTextureUploadComplete, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Ktx1Reader_createTextureRenderThread( - tEngine.cast(), - tBundle.cast(), - requestId, - onTextureUploadComplete as Pointer>, - onComplete.cast(), +void LightManager_setShadowOptions(Pointer tLightManager, DartEntityId entity, TShadowOptions options) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._LightManager_setShadowOptions( + tLightManager.cast(), + entity, + optionsPtr.cast(), ); return result; } -void Ktx2Reader_createTextureRenderThread( - Pointer tEngine, - Pointer data, - Dartsize_t size, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Ktx2Reader_createTextureRenderThread( - tEngine.cast(), - data, - size, - onComplete.cast(), +TShadowOptions LightManager_getShadowOptions(Pointer tLightManager, DartEntityId entity) { + final TShadowOptions_out = TShadowOptions.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getShadowOptions( + TShadowOptions_out.cast(), + tLightManager.cast(), + entity, ); - return result; + return TShadowOptions_out.toDart(); } -void Engine_destroyTextureRenderThread( - Pointer engine, - Pointer tTexture, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Engine_destroyTextureRenderThread( - engine.cast(), - tTexture.cast(), - requestId, - onComplete as Pointer>, +void LightManager_setLightChannel(Pointer tLightManager, DartEntityId entity, int channel, bool enable) { + final result = GeneratedBindings.instance._LightManager_setLightChannel( + tLightManager.cast(), + entity, + channel, + enable, ); return result; } -void Engine_createFenceRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createFenceRenderThread(tEngine.cast(), onComplete.cast()); +bool LightManager_getLightChannel(Pointer tLightManager, DartEntityId entity, int channel) { + final result = GeneratedBindings.instance._LightManager_getLightChannel(tLightManager.cast(), entity, channel); + return result == 1; +} + +void LightManager_computeUniformSplits(Pointer splitPositions, int cascades) { + final result = GeneratedBindings.instance._LightManager_computeUniformSplits(splitPositions, cascades); return result; } -void Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Fence_waitAndDestroyRenderThread( - tFence.cast(), - requestId, - onComplete as Pointer>, - ); +void LightManager_computeLogSplits(Pointer splitPositions, int cascades, double near, double far) { + final result = GeneratedBindings.instance._LightManager_computeLogSplits(splitPositions, cascades, near, far); return result; } -void Engine_destroyFenceRenderThread( - Pointer tEngine, - Pointer tFence, - int requestId, - DartVoidCallback onComplete, +void LightManager_computePracticalSplits( + Pointer splitPositions, + int cascades, + double near, + double far, + double lambda, ) { - final result = GeneratedBindings.instance._Engine_destroyFenceRenderThread( - tEngine.cast(), - tFence.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._LightManager_computePracticalSplits( + splitPositions, + cascades, + near, + far, + lambda, ); return result; } -void Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_flushAndWaitRenderThread( - tEngine.cast(), - requestId, - onComplete as Pointer>, - ); +double LightManager_rgbToColorTemperature(double r, double g, double b) { + final result = GeneratedBindings.instance._LightManager_rgbToColorTemperature(r, g, b); return result; } -void Engine_executeRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_executeRenderThread( - tEngine.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableManager_destroyEntity(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_destroyEntity(tRenderableManager.cast(), entityId); return result; } -void Engine_buildSkyboxRenderThread( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_buildSkyboxRenderThread( - tEngine.cast(), - tTexture.cast(), - showSun, - intensity, - priority, - onComplete.cast(), - ); - return result; +bool RenderableManager_hasComponent(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_hasComponent(tRenderableManager.cast(), entityId); + return result == 1; } -void Engine_buildColoredSkyboxRenderThread( - Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_buildColoredSkyboxRenderThread( - tEngine.cast(), - r, - g, - b, - a, - showSun, - intensity, - priority, - onComplete.cast(), - ); - return result; +bool RenderableManager_empty(Pointer tRenderableManager) { + final result = GeneratedBindings.instance._RenderableManager_empty(tRenderableManager.cast()); + return result == 1; } -void Engine_buildIndirectLightFromIrradianceTextureRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTextureRenderThread( - tEngine.cast(), - tReflectionsTexture.cast(), - tIrradianceTexture.cast(), - intensity, - onComplete.cast(), - ); +bool RenderableManager_isRenderable(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isRenderable(tRenderableManager.cast(), entityId); + return result == 1; +} + +Dartsize_t RenderableManager_getComponentCount(Pointer tRenderableManager) { + final result = GeneratedBindings.instance._RenderableManager_getComponentCount(tRenderableManager.cast()); return result; } -void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer harmonics, - double intensity, - Pointer)>> onComplete, +bool RenderableManager_setMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + Pointer tMaterialInstance, ) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - tEngine.cast(), - tReflectionsTexture.cast(), - harmonics, - intensity, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, + tMaterialInstance.cast(), ); - return result; + return result == 1; } -void Renderer_setClearOptionsRenderThread( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, - int requestId, - DartVoidCallback onComplete, +Pointer RenderableManager_getMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, ) { - final result = GeneratedBindings.instance._Renderer_setClearOptionsRenderThread( - tRenderer.cast(), - clearR, - clearG, - clearB, - clearA, - clearStencil, - clear, - discard, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_getMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, ); - return result; + return Pointer(result); } -void Renderer_beginFrameRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - BigInt frameTimeInNanos, - Pointer> onComplete, +void RenderableManager_clearMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, ) { - final result = GeneratedBindings.instance._Renderer_beginFrameRenderThread( - tRenderer.cast(), - tSwapChain.cast(), - frameTimeInNanos.toJSBigInt, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_clearMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, ); return result; } -void Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Renderer_endFrameRenderThread( - tRenderer.cast(), - requestId, - onComplete as Pointer>, +bool RenderableManager_setGeometryAtNonIndexed( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + int type, + Pointer vertices, + Dartsize_t offset, + Dartsize_t count, +) { + final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexed( + tRenderableManager.cast(), + entityId, + primitiveIndex, + type, + vertices.cast(), + offset, + count, ); + return result == 1; +} + +Dartsize_t RenderableManager_getPrimitiveCount(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getPrimitiveCount(tRenderableManager.cast(), entityId); return result; } -void Renderer_renderRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - DartVoidCallback onComplete, +Aabb3 RenderableManager_getAxisAlignedBoundingBox( + Pointer tRenderableManager, + DartEntityId entityId, ) { - final result = GeneratedBindings.instance._Renderer_renderRenderThread( - tRenderer.cast(), - tView.cast(), - requestId, - onComplete as Pointer>, + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getAxisAlignedBoundingBox( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, ); - return result; + return Aabb3_out.toDart(); } -void Renderer_renderStandaloneViewRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setAxisAlignedBoundingBox( + Pointer tRenderableManager, + DartEntityId entityId, + Aabb3 aabb, ) { - final result = GeneratedBindings.instance._Renderer_renderStandaloneViewRenderThread( - tRenderer.cast(), - tView.cast(), - requestId, - onComplete as Pointer>, + final aabbPtr = aabb.address; + final result = GeneratedBindings.instance._RenderableManager_setAxisAlignedBoundingBox( + tRenderableManager.cast(), + entityId, + aabbPtr.cast(), ); return result; } -void Renderer_readPixelsRenderThread( - Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - Dartsize_t outLength, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Renderer_readPixelsRenderThread( - tRenderer.cast(), - width, - height, - xOffset, - yOffset, - tRenderTarget.cast(), - tPixelBufferFormat, - tPixelDataType, - out, - outLength, - requestId, - onComplete as Pointer>, +Aabb3 RenderableManager_getAabb(Pointer tRenderableManager, DartEntityId entityId) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getAabb( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, ); - return result; + return Aabb3_out.toDart(); } -void Material_createInstanceRenderThread( - Pointer tMaterial, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createInstanceRenderThread(tMaterial.cast(), onComplete.cast()); - return result; +Aabb3 RenderableManager_getBoundingBox(Pointer tRenderableManager, DartEntityId entityId) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getBoundingBox( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, + ); + return Aabb3_out.toDart(); } -void MaterialInstance_setParameterTextureRenderThread( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer tTexture, - Pointer tSampler, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setLayerMask( + Pointer tRenderableManager, + DartEntityId entityId, + int select, + int values, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterTextureRenderThread( - tMaterialInstance.cast(), - propertyName, - tTexture.cast(), - tSampler.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setLayerMask( + tRenderableManager.cast(), + entityId, + select, + values, ); return result; } -void Material_createImageMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createImageMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); +int RenderableManager_getLayerMask(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getLayerMask(tRenderableManager.cast(), entityId); return result; } -void Material_createGizmoMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setVisibilityLayer( + Pointer tRenderableManager, + DartEntityId entityId, + int layer, ) { - final result = GeneratedBindings.instance._Material_createGizmoMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setVisibilityLayer( + tRenderableManager.cast(), + entityId, + layer, ); return result; } -void Material_createBoneOverlayMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setPriority( + Pointer tRenderableManager, + DartEntityId entityId, + int priority, ) { - final result = GeneratedBindings.instance._Material_createBoneOverlayMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setPriority( + tRenderableManager.cast(), + entityId, + priority, ); return result; } -void Material_createSilhouetteMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createSilhouetteMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); +int RenderableManager_getPriority(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getPriority(tRenderableManager.cast(), entityId); return result; } -void Material_createEdgeOutlineMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); +void RenderableManager_setChannel(Pointer tRenderableManager, DartEntityId entityId, int channel) { + final result = GeneratedBindings.instance._RenderableManager_setChannel(tRenderableManager.cast(), entityId, channel); return result; } -void Material_createWireframeMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createWireframeMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); +void RenderableManager_setCulling(Pointer tRenderableManager, DartEntityId entityId, bool enabled) { + final result = GeneratedBindings.instance._RenderableManager_setCulling(tRenderableManager.cast(), entityId, enabled); return result; } -void Material_createTranslationAxisMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +bool RenderableManager_getCulling(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getCulling(tRenderableManager.cast(), entityId); + return result == 1; +} + +void RenderableManager_setFogEnabled( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, ) { - final result = GeneratedBindings.instance._Material_createTranslationAxisMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setFogEnabled( + tRenderableManager.cast(), + entityId, + enabled, ); return result; } -void ColorGradingBuilder_createRenderThread( - Pointer)>> onComplete, +bool RenderableManager_getFogEnabled(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getFogEnabled(tRenderableManager.cast(), entityId); + return result == 1; +} + +void RenderableManager_setLightChannel( + Pointer tRenderableManager, + DartEntityId entityId, + int channel, + bool enable, ) { - final result = GeneratedBindings.instance._ColorGradingBuilder_createRenderThread(onComplete.cast()); + final result = GeneratedBindings.instance._RenderableManager_setLightChannel( + tRenderableManager.cast(), + entityId, + channel, + enable, + ); return result; } -void ColorGradingBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - Pointer)>> onComplete, +bool RenderableManager_getLightChannel( + Pointer tRenderableManager, + DartEntityId entityId, + int channel, ) { - final result = GeneratedBindings.instance._ColorGradingBuilder_buildRenderThread( - tBuilder.cast(), - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_getLightChannel( + tRenderableManager.cast(), + entityId, + channel, ); - return result; + return result == 1; } -void ColorGradingBuilder_destroyRenderThread( - Pointer tBuilder, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setCastShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool castShadows, ) { - final result = GeneratedBindings.instance._ColorGradingBuilder_destroyRenderThread( - tBuilder.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setCastShadows( + tRenderableManager.cast(), + entityId, + castShadows, ); return result; } -void ToneMapper_createLinearRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createLinearRenderThread(tEngine.cast(), onComplete.cast()); - return result; +bool RenderableManager_isShadowCaster(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isShadowCaster(tRenderableManager.cast(), entityId); + return result == 1; } -void ToneMapper_createACESRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setReceiveShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool receiveShadows, ) { - final result = GeneratedBindings.instance._ToneMapper_createACESRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableManager_setReceiveShadows( + tRenderableManager.cast(), + entityId, + receiveShadows, + ); return result; } -void ToneMapper_createACESLegacyRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createACESLegacyRenderThread(tEngine.cast(), onComplete.cast()); - return result; +bool RenderableManager_isShadowReceiver(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isShadowReceiver(tRenderableManager.cast(), entityId); + return result == 1; } -void ToneMapper_createFilmicRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setScreenSpaceContactShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, ) { - final result = GeneratedBindings.instance._ToneMapper_createFilmicRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableManager_setScreenSpaceContactShadows( + tRenderableManager.cast(), + entityId, + enabled, + ); return result; } -void ToneMapper_createPBRNeutralRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setBlendOrderAt( + Pointer tRenderableManager, + DartEntityId entityId, + Dartsize_t primitiveIndex, + int order, ) { - final result = GeneratedBindings.instance._ToneMapper_createPBRNeutralRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableManager_setBlendOrderAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, + order, + ); return result; } -void ToneMapper_createAGXRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setGlobalBlendOrderEnabledAt( + Pointer tRenderableManager, + DartEntityId entityId, + Dartsize_t primitiveIndex, + bool enabled, ) { - final result = GeneratedBindings.instance._ToneMapper_createAGXRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableManager_setGlobalBlendOrderEnabledAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, + enabled, + ); return result; } -void ToneMapper_createAGXWithLookRenderThread( - Pointer tEngine, - int look, - Pointer)>> onComplete, +void RenderableManager_setMorphWeights( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer weights, + Dartsize_t count, + Dartsize_t offset, ) { - final result = GeneratedBindings.instance._ToneMapper_createAGXWithLookRenderThread( - tEngine.cast(), - look, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setMorphWeights( + tRenderableManager.cast(), + entityId, + weights, + count, + offset, ); return result; } -void ToneMapper_createGenericRenderThread( - Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, - Pointer)>> onComplete, +Dartsize_t RenderableManager_getMorphTargetCount( + Pointer tRenderableManager, + DartEntityId entityId, ) { - final result = GeneratedBindings.instance._ToneMapper_createGenericRenderThread( - tEngine.cast(), - contrast, - midGrayIn, - midGrayOut, - hdrMax, - onComplete.cast(), - ); + final result = GeneratedBindings.instance._RenderableManager_getMorphTargetCount(tRenderableManager.cast(), entityId); return result; } -void ToneMapper_createDisplayRangeRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_setBonesFromMat4( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer transforms, + Dartsize_t boneCount, + Dartsize_t offset, ) { - final result = GeneratedBindings.instance._ToneMapper_createDisplayRangeRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4( + tRenderableManager.cast(), + entityId, + transforms, + boneCount, + offset, ); return result; } -void ToneMapper_destroyRenderThread(Pointer tToneMapper, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._ToneMapper_destroyRenderThread( - tToneMapper.cast(), - requestId, - onComplete as Pointer>, +void RenderableManager_setBonesFromBone( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer bones, + Dartsize_t boneCount, + Dartsize_t offset, +) { + final result = GeneratedBindings.instance._RenderableManager_setBonesFromBone( + tRenderableManager.cast(), + entityId, + bones, + boneCount, + offset, ); return result; } -void View_pickRenderThread(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { - final result = GeneratedBindings.instance._View_pickRenderThread( - tView.cast(), - requestId, - x, - y, - callback as Pointer>, - ); - return result; +Pointer RenderableBuilder_create(Dartsize_t primitiveCount) { + final result = GeneratedBindings.instance._RenderableBuilder_create(primitiveCount); + return Pointer(result); } -void View_setColorGradingRenderThread( - Pointer tView, - Pointer tColorGrading, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setColorGradingRenderThread( - tView.cast(), - tColorGrading.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._RenderableBuilder_destroy(builder.cast()); return result; } -void View_setBloomRenderThread( - Pointer tView, - bool enabled, - double strength, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setBloomRenderThread( - tView.cast(), - enabled, - strength, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_boundingBox(Pointer builder, Aabb3 aabb) { + final aabbPtr = aabb.address; + final result = GeneratedBindings.instance._RenderableBuilder_boundingBox(builder.cast(), aabbPtr.cast()); return result; } -void View_setCameraRenderThread( - Pointer tView, - Pointer tCamera, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_material( + Pointer builder, + Dartsize_t primitiveIndex, + Pointer materialInstance, ) { - final result = GeneratedBindings.instance._View_setCameraRenderThread( - tView.cast(), - tCamera.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableBuilder_material( + builder.cast(), + primitiveIndex, + materialInstance.cast(), ); return result; } -void View_getNameRenderThread(Pointer tView, Pointer)>> onComplete) { - final result = GeneratedBindings.instance._View_getNameRenderThread(tView.cast(), onComplete.cast()); - return result; -} - -void View_setNameRenderThread(Pointer tView, Pointer name, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setNameRenderThread( - tView.cast(), - name, - requestId, - onComplete as Pointer>, +void RenderableBuilder_geometry( + Pointer builder, + Dartsize_t primitiveIndex, + int type, + Pointer vertices, + Pointer indices, + Dartsize_t offset, + Dartsize_t count, +) { + final result = GeneratedBindings.instance._RenderableBuilder_geometry( + builder.cast(), + primitiveIndex, + type, + vertices.cast(), + indices.cast(), + offset, + count, ); return result; } -void View_setViewportRenderThread( - Pointer tView, - int width, - int height, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setViewportRenderThread( - tView.cast(), - width, - height, - requestId, - onComplete as Pointer>, +void RenderableBuilder_geometryNonIndexed( + Pointer builder, + Dartsize_t primitiveIndex, + int type, + Pointer vertices, + Dartsize_t offset, + Dartsize_t count, +) { + final result = GeneratedBindings.instance._RenderableBuilder_geometryNonIndexed( + builder.cast(), + primitiveIndex, + type, + vertices.cast(), + offset, + count, ); return result; } -void View_setRenderTargetRenderThread( - Pointer tView, - Pointer tRenderTarget, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setRenderTargetRenderThread( - tView.cast(), - tRenderTarget.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_priority(Pointer builder, int priority) { + final result = GeneratedBindings.instance._RenderableBuilder_priority(builder.cast(), priority); return result; } -void View_setAntiAliasingRenderThread( - Pointer tView, - bool msaa, - bool fxaa, - bool taa, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setAntiAliasingRenderThread( - tView.cast(), - msaa, - fxaa, - taa, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_channel(Pointer builder, int channel) { + final result = GeneratedBindings.instance._RenderableBuilder_channel(builder.cast(), channel); return result; } -void View_setPostProcessingRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setPostProcessingRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_culling(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_culling(builder.cast(), enabled); return result; } -void View_setFrustumCullingEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setFrustumCullingEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_castShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_castShadows(builder.cast(), enabled); return result; } -void View_setStencilBufferEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setStencilBufferEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_receiveShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_receiveShadows(builder.cast(), enabled); return result; } -void View_setDitheringEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setDitheringEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_fog(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_fog(builder.cast(), enabled); return result; } -void View_setRenderQualityRenderThread( - Pointer tView, - int qualityLevel, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setRenderQualityRenderThread( - tView.cast(), - qualityLevel, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_lightChannel(builder.cast(), channel, enabled); return result; } -void View_setSceneRenderThread( - Pointer tView, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setSceneRenderThread( - tView.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_layerMask(Pointer builder, int select, int values) { + final result = GeneratedBindings.instance._RenderableBuilder_layerMask(builder.cast(), select, values); return result; } -void View_setLayerEnabledRenderThread( - Pointer tView, - int layer, - bool visible, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setLayerEnabledRenderThread( - tView.cast(), - layer, - visible, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_screenSpaceContactShadows(builder.cast(), enabled); return result; } -void View_setBlendModeRenderThread(Pointer tView, int blendMode, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setBlendModeRenderThread( - tView.cast(), - blendMode, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_blendOrder(Pointer builder, Dartsize_t primitiveIndex, int order) { + final result = GeneratedBindings.instance._RenderableBuilder_blendOrder(builder.cast(), primitiveIndex, order); return result; } -void View_setFogOptionsRenderThread( - Pointer tView, - TFogOptions tFogOptions, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_globalBlendOrderEnabled( + Pointer builder, + Dartsize_t primitiveIndex, + bool enabled, ) { - final tFogOptionsPtr = tFogOptions.address; - final result = GeneratedBindings.instance._View_setFogOptionsRenderThread( - tView.cast(), - tFogOptionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableBuilder_globalBlendOrderEnabled( + builder.cast(), + primitiveIndex, + enabled, ); return result; } -void View_setAmbientOcclusionOptionsRenderThread( - Pointer tView, - TAmbientOcclusionOptions options, - int requestId, - DartVoidCallback onComplete, -) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setAmbientOcclusionOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_instances(Pointer builder, Dartsize_t instanceCount) { + final result = GeneratedBindings.instance._RenderableBuilder_instances(builder.cast(), instanceCount); return result; } -void View_setFrontFaceWindingInvertedRenderThread( - Pointer tView, - bool inverted, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_skinningFromMat4( + Pointer builder, + Dartsize_t boneCount, + Pointer transforms, ) { - final result = GeneratedBindings.instance._View_setFrontFaceWindingInvertedRenderThread( - tView.cast(), - inverted, - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._RenderableBuilder_skinningFromMat4(builder.cast(), boneCount, transforms); return result; } -void View_setShadowsEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_skinningFromBone( + Pointer builder, + Dartsize_t boneCount, + Pointer bones, ) { - final result = GeneratedBindings.instance._View_setShadowsEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._RenderableBuilder_skinningFromBone(builder.cast(), boneCount, bones); return result; } -void View_setShadowTypeRenderThread(Pointer tView, int shadowType, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setShadowTypeRenderThread( - tView.cast(), - shadowType, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_enableSkinningBuffers(builder.cast(), enabled); return result; } -void View_setSoftShadowOptionsRenderThread( - Pointer tView, - TSoftShadowOptions options, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_boneIndicesAndWeights( + Pointer builder, + Dartsize_t primitiveIndex, + Pointer indicesAndWeights, + Dartsize_t count, + Dartsize_t bonesPerVertex, ) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setSoftShadowOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableBuilder_boneIndicesAndWeights( + builder.cast(), + primitiveIndex, + indicesAndWeights, + count, + bonesPerVertex, ); return result; } -void View_setVsmShadowOptionsRenderThread( - Pointer tView, - TVsmShadowOptions options, - int requestId, - DartVoidCallback onComplete, -) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setVsmShadowOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, - ); +int RenderableBuilder_build(Pointer builder, Pointer engine, DartEntityId entity) { + final result = GeneratedBindings.instance._RenderableBuilder_build(builder.cast(), engine.cast(), entity); + return result; +} + +void Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a) { + final result = GeneratedBindings.instance._Skybox_setColor(tSkybox.cast(), r, g, b, a); return result; } -void View_setTransparentPickingEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setTransparentPickingEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). +void Skybox_setLayerMask(Pointer tSkybox, int select, int values) { + final result = GeneratedBindings.instance._Skybox_setLayerMask(tSkybox.cast(), select, values); return result; } -void SceneAsset_destroyRenderThread(Pointer tSceneAsset, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._SceneAsset_destroyRenderThread( - tSceneAsset.cast(), - requestId, - onComplete as Pointer>, - ); +/// Returns the visibility mask bits. +int Skybox_getLayerMask(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getLayerMask(tSkybox.cast()); return result; } -void SceneAsset_createFromFilamentAssetRenderThread( - Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAssetRenderThread( - tEngine.cast(), - tAssetLoader.cast(), - tNameComponentManager.cast(), - tFilamentAsset.cast(), - rebuildVertices, - onComplete.cast(), - ); +/// Returns the skybox intensity in lux. +double Skybox_getIntensity(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getIntensity(tSkybox.cast()); return result; } -void SceneAsset_createFromBuffersRenderThread( - Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, - Pointer)>> callback, +/// Returns the environment texture, or nullptr for a color-only skybox. +Pointer Skybox_getTexture(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getTexture(tSkybox.cast()); + return Pointer(result); +} + +Pointer Engine_create( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, ) { - final boundingBoxPtr = boundingBox.address; - final result = GeneratedBindings.instance._SceneAsset_createFromBuffersRenderThread( - tEngine.cast(), - tVertexBuffer.cast(), - tIndexBuffer.cast(), - materialInstances.cast(), - materialInstanceCount, - tPrimitiveType, - boundingBoxPtr.cast(), - callback.cast(), + final result = GeneratedBindings.instance._Engine_create( + backend, + platform, + sharedContext, + stereoscopicEyeCount, + disableHandleUseAfterFreeCheck, ); + return Pointer(result); +} + +int Engine_getSupportedFeatureLevel(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getSupportedFeatureLevel(tEngine.cast()); return result; } -void SceneAsset_createInstanceRenderThread( - Pointer asset, - Pointer> tMaterialInstances, - int materialInstanceCount, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._SceneAsset_createInstanceRenderThread( - asset.cast(), - tMaterialInstances.cast(), - materialInstanceCount, - callback.cast(), - ); +void Engine_destroy(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_destroy(tEngine.cast()); return result; } -void SceneAsset_releaseSourceDataRenderThread( - Pointer tSceneAsset, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._SceneAsset_releaseSourceDataRenderThread( - tSceneAsset.cast(), - requestId, - onComplete as Pointer>, - ); +Pointer Engine_createRenderer(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createRenderer(tEngine.cast()); + return Pointer(result); +} + +void Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer) { + final result = GeneratedBindings.instance._Engine_destroyRenderer(tEngine.cast(), tRenderer.cast()); return result; } -void SceneAsset_setFlatShadingRenderThread( - Pointer tSceneAsset, - bool flatShading, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._SceneAsset_setFlatShadingRenderThread( - tSceneAsset.cast(), - flatShading, - requestId, - onComplete as Pointer>, +Pointer Engine_createSwapChain(Pointer tEngine, Pointer window, BigInt flags) { + final result = GeneratedBindings.instance._Engine_createSwapChain(tEngine.cast(), window, flags.toJSBigInt); + return Pointer(result); +} + +Pointer Engine_createHeadlessSwapChain(Pointer tEngine, int width, int height, BigInt flags) { + final result = GeneratedBindings.instance._Engine_createHeadlessSwapChain( + tEngine.cast(), + width, + height, + flags.toJSBigInt, ); + return Pointer(result); +} + +void Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain) { + final result = GeneratedBindings.instance._Engine_destroySwapChain(tEngine.cast(), tSwapChain.cast()); return result; } -void MaterialProvider_createMaterialInstanceRenderThread( - Pointer tMaterialProvider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstanceRenderThread( - tMaterialProvider.cast(), - doubleSided, - unlit, - hasVertexColors, - hasBaseColorTexture, - hasNormalTexture, - hasOcclusionTexture, - hasEmissiveTexture, - useSpecularGlossiness, - alphaMode, - enableDiagnostics, - hasMetallicRoughnessTexture, - metallicRoughnessUV, - hasSpecularGlossinessTexture, - specularGlossinessUV, - baseColorUV, - hasClearCoatTexture, - clearCoatUV, - hasClearCoatRoughnessTexture, - clearCoatRoughnessUV, - hasClearCoatNormalTexture, - clearCoatNormalUV, - hasClearCoat, - hasTransmission, - hasTextureTransforms, - emissiveUV, - aoUV, - normalUV, - hasTransmissionTexture, - transmissionUV, - hasSheenColorTexture, - sheenColorUV, - hasSheenRoughnessTexture, - sheenRoughnessUV, - hasVolumeThicknessTexture, - volumeThicknessUV, - hasSheen, - hasIOR, - hasVolume, - callback.cast(), - ); +void Engine_destroyView(Pointer tEngine, Pointer tView) { + final result = GeneratedBindings.instance._Engine_destroyView(tEngine.cast(), tView.cast()); return result; } -void AnimationManager_updateRenderThread( - Pointer tAnimationManager, - BigInt frameTimeInNanos, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._AnimationManager_updateRenderThread( - tAnimationManager.cast(), - frameTimeInNanos.toJSBigInt, - requestId, - onComplete as Pointer>, - ); +void Engine_destroyScene(Pointer tEngine, Pointer tScene) { + final result = GeneratedBindings.instance._Engine_destroyScene(tEngine.cast(), tScene.cast()); return result; } -void AnimationManager_setGltfAnimationTimeRenderThread( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTimeRenderThread( - tAnimationManager.cast(), - tSceneAsset.cast(), - animationIndex, - timeInSeconds, - requestId, - onComplete as Pointer>, - ); +void Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading) { + final result = GeneratedBindings.instance._Engine_destroyColorGrading(tEngine.cast(), tColorGrading.cast()); return result; } -void AnimationManager_updateBoneMatricesRenderThread( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer> callback, -) { - final result = GeneratedBindings.instance._AnimationManager_updateBoneMatricesRenderThread( - tAnimationManager.cast(), - sceneAsset.cast(), - callback.cast(), - ); - return result; +Pointer Engine_createCamera(Pointer tEngine, DartEntityId entityId) { + final result = GeneratedBindings.instance._Engine_createCamera(tEngine.cast(), entityId); + return Pointer(result); } -void AnimationManager_setMorphTargetWeightsRenderThread( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - int numWeights, - Pointer> callback, -) { - final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeightsRenderThread( - tAnimationManager.cast(), - entityId, - morphData, - numWeights, - callback.cast(), - ); +void Engine_destroyCamera(Pointer tEngine, Pointer tCamera) { + final result = GeneratedBindings.instance._Engine_destroyCamera(tEngine.cast(), tCamera.cast()); return result; } -void Image_createEmptyRenderThread( - int width, - int height, - int channel, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_createEmptyRenderThread(width, height, channel, onComplete.cast()); +Pointer Engine_createView(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createView(tEngine.cast()); + return Pointer(result); +} + +Pointer Engine_getCameraComponent(Pointer tEngine, DartEntityId entityId) { + final result = GeneratedBindings.instance._Engine_getCameraComponent(tEngine.cast(), entityId); + return Pointer(result); +} + +Pointer Engine_getTransformManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getTransformManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getRenderableManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getRenderableManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getLightManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getLightManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getEntityManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getEntityManager(engine.cast()); + return Pointer(result); +} + +void Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled) { + final result = GeneratedBindings.instance._Engine_setAutomaticInstancingEnabled(tEngine.cast(), enabled); return result; } -void Image_decodeRenderThread( - Pointer data, - Dartsize_t length, - Pointer name, - bool alpha, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_decodeRenderThread(data, length, name, alpha, onComplete.cast()); +Dartsize_t Engine_getMaxAutomaticInstances(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getMaxAutomaticInstances(tEngine.cast()); return result; } -void Image_getBytesRenderThread( - Pointer tLinearImage, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_getBytesRenderThread(tLinearImage.cast(), onComplete.cast()); +void Engine_destroyTexture(Pointer tEngine, Pointer tTexture) { + final result = GeneratedBindings.instance._Engine_destroyTexture(tEngine.cast(), tTexture.cast()); return result; } -void Image_destroyRenderThread(Pointer tLinearImage, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Image_destroyRenderThread( - tLinearImage.cast(), - requestId, - onComplete as Pointer>, - ); +Pointer Engine_createFence(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createFence(tEngine.cast()); + return Pointer(result); +} + +void Engine_destroyFence(Pointer tEngine, Pointer tFence) { + final result = GeneratedBindings.instance._Engine_destroyFence(tEngine.cast(), tFence.cast()); return result; } -void Image_getWidthRenderThread( - Pointer tLinearImage, - Pointer> onComplete, -) { - final result = GeneratedBindings.instance._Image_getWidthRenderThread(tLinearImage.cast(), onComplete.cast()); +void Engine_flushAndWait(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_flushAndWait(tEngine.cast()); return result; } -void Image_getHeightRenderThread( - Pointer tLinearImage, - Pointer> onComplete, -) { - final result = GeneratedBindings.instance._Image_getHeightRenderThread(tLinearImage.cast(), onComplete.cast()); +void Engine_execute(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_execute(tEngine.cast()); return result; } -void Image_getChannelsRenderThread( - Pointer tLinearImage, - Pointer> onComplete, -) { - final result = GeneratedBindings.instance._Image_getChannelsRenderThread(tLinearImage.cast(), onComplete.cast()); +Pointer Engine_buildMaterial(Pointer tEngine, Pointer materialData, Dartsize_t length) { + final result = GeneratedBindings.instance._Engine_buildMaterial(tEngine.cast(), materialData, length); + return Pointer(result); +} + +void Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial) { + final result = GeneratedBindings.instance._Engine_destroyMaterial(tEngine.cast(), tMaterial.cast()); return result; } -void Texture_loadImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, - Pointer> onComplete, -) { - final result = GeneratedBindings.instance._Texture_loadImageRenderThread( - tEngine.cast(), - tTexture.cast(), - tImage.cast(), - bufferFormat, - pixelDataType, - level, - onComplete.cast(), - ); +void Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance) { + final result = GeneratedBindings.instance._Engine_destroyMaterialInstance(tEngine.cast(), tMaterialInstance.cast()); return result; } -void Texture_setImageRenderThread( +Pointer Engine_createScene(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createScene(tEngine.cast()); + return Pointer(result); +} + +Pointer Engine_buildSkybox( Pointer tEngine, Pointer tTexture, - int level, - Pointer data, - Dartsize_t size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, - Pointer> onComplete, + bool showSun, + double intensity, + int priority, ) { - final result = GeneratedBindings.instance._Texture_setImageRenderThread( + final result = GeneratedBindings.instance._Engine_buildSkybox( tEngine.cast(), tTexture.cast(), - level, - data, - size, - x_offset, - y_offset, - z_offset, - width, - height, - depth, - bufferFormat, - pixelDataType, - onComplete.cast(), + showSun, + intensity, + priority, ); - return result; + return Pointer(result); } -void RenderTarget_getColorTextureRenderThread( - Pointer tRenderTarget, - Pointer)>> onComplete, +Pointer Engine_buildColoredSkybox( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, ) { - final result = GeneratedBindings.instance._RenderTarget_getColorTextureRenderThread( - tRenderTarget.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._Engine_buildColoredSkybox( + tEngine.cast(), + r, + g, + b, + a, + showSun, + intensity, + priority, ); - return result; + return Pointer(result); } -void RenderTarget_createRenderThread( +Pointer Engine_buildIndirectLightFromIrradianceTexture( Pointer tEngine, - Pointer color, - Pointer depth, - Pointer)>> onComplete, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, ) { - final result = GeneratedBindings.instance._RenderTarget_createRenderThread( + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTexture( tEngine.cast(), - color.cast(), - depth.cast(), - onComplete.cast(), + tReflectionsTexture.cast(), + tIrradianceTexture.cast(), + intensity, ); - return result; + return Pointer(result); } -void RenderTarget_destroyRenderThread( - Pointer tEngine, - Pointer tRenderTarget, - int requestId, - DartVoidCallback onComplete, +Pointer Engine_buildIndirectLightFromIrradianceHarmonics( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer irradianceHarmonics, + double intensity, ) { - final result = GeneratedBindings.instance._RenderTarget_destroyRenderThread( + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonics( tEngine.cast(), - tRenderTarget.cast(), - requestId, - onComplete as Pointer>, + tReflectionsTexture.cast(), + irradianceHarmonics, + intensity, ); + return Pointer(result); +} + +void Engine_destroySkybox(Pointer tEngine, Pointer tSkybox) { + final result = GeneratedBindings.instance._Engine_destroySkybox(tEngine.cast(), tSkybox.cast()); return result; } -void TextureSampler_createRenderThread(Pointer)>> onComplete) { - final result = GeneratedBindings.instance._TextureSampler_createRenderThread(onComplete.cast()); +void Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight) { + final result = GeneratedBindings.instance._Engine_destroyIndirectLight(tEngine.cast(), tIndirectLight.cast()); return result; } -void TextureSampler_createWithFilteringRenderThread( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_createWithFilteringRenderThread( - minFilter, - magFilter, - wrapS, - wrapT, - wrapR, - onComplete.cast(), - ); +DartEntityId EntityManager_createEntity(Pointer tEntityManager) { + final result = GeneratedBindings.instance._EntityManager_createEntity(tEntityManager.cast()); return result; } -void TextureSampler_createWithComparisonRenderThread( - int compareMode, - int compareFunc, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_createWithComparisonRenderThread( - compareMode, - compareFunc, - onComplete.cast(), - ); +void EntityManager_destroyEntity(Pointer tEntityManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._EntityManager_destroyEntity(tEntityManager.cast(), entityId); return result; } -void TextureSampler_setMinFilterRenderThread( - Pointer sampler, - int filter, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setMinFilterRenderThread( - sampler.cast(), - filter, - requestId, - onComplete as Pointer>, - ); +void Fence_waitAndDestroy(Pointer tFence) { + final result = GeneratedBindings.instance._Fence_waitAndDestroy(tFence.cast()); return result; } -void TextureSampler_setMagFilterRenderThread( - Pointer sampler, - int filter, - int requestId, - DartVoidCallback onComplete, +Pointer Engine_getDebugRegistry(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getDebugRegistry(tEngine.cast()); + return Pointer(result); +} + +bool DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name) { + final result = GeneratedBindings.instance._DebugRegistry_hasProperty(tDebugRegistry.cast(), name); + return result == 1; +} + +bool DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_bool(tDebugRegistry.cast(), name, value); + return result == 1; +} + +bool DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_int(tDebugRegistry.cast(), name, value); + return result == 1; +} + +bool DebugRegistry_setProperty_float(Pointer tDebugRegistry, Pointer name, double value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_float(tDebugRegistry.cast(), name, value); + return result == 1; +} + +bool DebugRegistry_getProperty_bool( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ) { - final result = GeneratedBindings.instance._TextureSampler_setMagFilterRenderThread( - sampler.cast(), - filter, - requestId, - onComplete as Pointer>, - ); - return result; + final result = GeneratedBindings.instance._DebugRegistry_getProperty_bool(tDebugRegistry.cast(), name, outValue); + return result == 1; } -void TextureSampler_setWrapModeSRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, +bool DebugRegistry_getProperty_int( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeSRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, - ); - return result; + final result = GeneratedBindings.instance._DebugRegistry_getProperty_int(tDebugRegistry.cast(), name, outValue); + return result == 1; } -void TextureSampler_setWrapModeTRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, +bool DebugRegistry_getProperty_float( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeTRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._DebugRegistry_getProperty_float(tDebugRegistry.cast(), name, outValue); + return result == 1; +} + +Pointer RenderThread_create() { + final result = GeneratedBindings.instance._RenderThread_create(); + return Pointer(result); +} + +Pointer RenderThread_createForCanvas(Pointer canvasSelector) { + final result = GeneratedBindings.instance._RenderThread_createForCanvas(canvasSelector); + return Pointer(result); +} + +void RenderThread_destroy(Pointer renderThread) { + final result = GeneratedBindings.instance._RenderThread_destroy(renderThread); return result; } -void TextureSampler_setWrapModeRRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeRRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, - ); +void RenderThread_addTask(Pointer> task) { + final result = GeneratedBindings.instance._RenderThread_addTask(task.cast()); return result; } -void TextureSampler_setAnisotropyRenderThread( - Pointer sampler, - double anisotropy, +void RenderManager_setRenderableRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + Pointer> tViews, + int numViews, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._TextureSampler_setAnisotropyRenderThread( - sampler.cast(), - anisotropy, + final result = GeneratedBindings.instance._RenderManager_setRenderableRenderThread( + tRenderer.cast(), + tSwapChain.cast(), + tViews.cast(), + numViews, requestId, onComplete as Pointer>, ); return result; } -void TextureSampler_setCompareModeRenderThread( - Pointer sampler, - int mode, - int func, +void RenderManager_renderRenderThread( + Pointer tRenderManager, + BigInt frameTimeInNanos, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._TextureSampler_setCompareModeRenderThread( - sampler.cast(), - mode, - func, - requestId, - onComplete as Pointer>, - ); - return result; -} - -void TextureSampler_destroyRenderThread(Pointer sampler, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._TextureSampler_destroyRenderThread( - sampler.cast(), + final result = GeneratedBindings.instance._RenderManager_renderRenderThread( + tRenderManager.cast(), + frameTimeInNanos.toJSBigInt, requestId, onComplete as Pointer>, ); return result; } -void AnimationManager_resetToRestPoseRenderThread( +void RenderManager_addAnimationManagerRenderThread( + Pointer tRenderManager, Pointer tAnimationManager, - Pointer tSceneAsset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_resetToRestPoseRenderThread( + final result = GeneratedBindings.instance._RenderManager_addAnimationManagerRenderThread( + tRenderManager.cast(), tAnimationManager.cast(), - tSceneAsset.cast(), requestId, onComplete as Pointer>, ); return result; } -void GltfAssetLoader_createRenderThread( - Pointer tEngine, - Pointer tMaterialProvider, - Pointer tNameComponentManager, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._GltfAssetLoader_createRenderThread( - tEngine.cast(), - tMaterialProvider.cast(), - tNameComponentManager.cast(), - callback.cast(), - ); - return result; -} - -void GltfAssetLoader_destroyRenderThread( - Pointer tAssetLoader, +void RenderManager_removeAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_destroyRenderThread( - tAssetLoader.cast(), + final result = GeneratedBindings.instance._RenderManager_removeAnimationManagerRenderThread( + tRenderManager.cast(), + tAnimationManager.cast(), requestId, onComplete as Pointer>, ); return result; -} - -void GltfResourceLoader_createRenderThread( - Pointer tEngine, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._GltfResourceLoader_createRenderThread(tEngine.cast(), callback.cast()); - return result; -} - -void GltfResourceLoader_destroyRenderThread( - Pointer tEngine, - Pointer tResourceLoader, +} + +void RenderManager_removeSwapChainRenderThread( + Pointer tRenderManager, + Pointer tSwapChain, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_destroyRenderThread( - tEngine.cast(), - tResourceLoader.cast(), + final result = GeneratedBindings.instance._RenderManager_removeSwapChainRenderThread( + tRenderManager.cast(), + tSwapChain.cast(), requestId, onComplete as Pointer>, ); return result; } -void GltfResourceLoader_loadResourcesRenderThread( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - Pointer> callback, +void AnimationManager_createRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_loadResourcesRenderThread( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), - callback.cast(), - ); + final result = GeneratedBindings.instance._AnimationManager_createRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void GltfResourceLoader_addResourceDataRenderThread( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - Dartsize_t length, +void AnimationManager_destroyRenderThread( + Pointer tAnimationManager, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_addResourceDataRenderThread( - tGltfResourceLoader.cast(), - uri, - data, - length, + final result = GeneratedBindings.instance._AnimationManager_destroyRenderThread( + tAnimationManager.cast(), requestId, onComplete as Pointer>, ); return result; } -void GltfResourceLoader_asyncBeginLoadRenderThread( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - Pointer> callback, +void Engine_createRenderThread( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoadRenderThread( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), - callback.cast(), + final result = GeneratedBindings.instance._Engine_createRenderThread( + backend, + platform, + sharedContext, + stereoscopicEyeCount, + disableHandleUseAfterFreeCheck, + onComplete.cast(), ); return result; } -void GltfResourceLoader_asyncUpdateLoadRenderThread(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoadRenderThread(tGltfResourceLoader.cast()); - return result; -} - -void GltfResourceLoader_asyncGetLoadProgressRenderThread( - Pointer tGltfResourceLoader, - Pointer> callback, +void Engine_createRendererRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgressRenderThread( - tGltfResourceLoader.cast(), - callback.cast(), - ); + final result = GeneratedBindings.instance._Engine_createRendererRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void GltfAssetLoader_loadRenderThread( +void Engine_destroyRendererRenderThread( Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - Dartsize_t length, - int numInstances, - Pointer)>> callback, + Pointer tRenderer, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_loadRenderThread( + final result = GeneratedBindings.instance._Engine_destroyRendererRenderThread( tEngine.cast(), - tAssetLoader.cast(), - data, - length, - numInstances, - callback.cast(), + tRenderer.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void Scene_addFilamentAssetRenderThread( - Pointer tScene, - Pointer tAsset, - int requestId, - DartVoidCallback onComplete, +void Engine_createSwapChainRenderThread( + Pointer tEngine, + Pointer window, + BigInt flags, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Scene_addFilamentAssetRenderThread( - tScene.cast(), - tAsset.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_createSwapChainRenderThread( + tEngine.cast(), + window, + flags.toJSBigInt, + onComplete.cast(), ); return result; } -void FilamentAsset_getWireframeRenderThread( - Pointer tFilamentAsset, - Pointer> onComplete, +void Engine_createHeadlessSwapChainRenderThread( + Pointer tEngine, + int width, + int height, + BigInt flags, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._FilamentAsset_getWireframeRenderThread( - tFilamentAsset.cast(), + final result = GeneratedBindings.instance._Engine_createHeadlessSwapChainRenderThread( + tEngine.cast(), + width, + height, + flags.toJSBigInt, onComplete.cast(), ); return result; } -void Scene_addEntityRenderThread( - Pointer tScene, +void Engine_createCameraRenderThread( + Pointer tEngine, DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Scene_addEntityRenderThread( - tScene.cast(), + final result = GeneratedBindings.instance._Engine_createCameraRenderThread( + tEngine.cast(), entityId, - requestId, - onComplete as Pointer>, + onComplete.cast(), ); return result; } -void Scene_removeEntityRenderThread( - Pointer tScene, - DartEntityId entityId, +void Engine_destroyCameraRenderThread( + Pointer tEngine, + Pointer tCamera, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Scene_removeEntityRenderThread( - tScene.cast(), - entityId, + final result = GeneratedBindings.instance._Engine_destroyCameraRenderThread( + tEngine.cast(), + tCamera.cast(), requestId, onComplete as Pointer>, ); return result; } -void SceneAsset_addToSceneRenderThread( - Pointer tSceneAsset, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, +void Engine_createViewRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._SceneAsset_addToSceneRenderThread( - tSceneAsset.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._Engine_createViewRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void SceneAsset_removeFromSceneRenderThread( - Pointer tSceneAsset, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, +void Engine_buildMaterialRenderThread( + Pointer tEngine, + Pointer materialData, + Dartsize_t length, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._SceneAsset_removeFromSceneRenderThread( - tSceneAsset.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_buildMaterialRenderThread( + tEngine.cast(), + materialData, + length, + onComplete.cast(), ); return result; } -void Scene_setSkyboxRenderThread( - Pointer tScene, - Pointer tSkybox, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Scene_setSkyboxRenderThread( - tScene.cast(), - tSkybox.cast(), +void Engine_destroyRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_destroyRenderThread( + tEngine.cast(), requestId, onComplete as Pointer>, ); return result; } -void Scene_setIndirectLightRenderThread( - Pointer tScene, - Pointer tIndirectLight, +void Engine_destroySwapChainRenderThread( + Pointer tEngine, + Pointer tSwapChain, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Scene_setIndirectLightRenderThread( - tScene.cast(), - tIndirectLight.cast(), + final result = GeneratedBindings.instance._Engine_destroySwapChainRenderThread( + tEngine.cast(), + tSwapChain.cast(), requestId, onComplete as Pointer>, ); return result; } -void Gizmo_createRenderThread( +void Engine_destroyViewRenderThread( Pointer tEngine, - Pointer tAssetLoader, - Pointer tGltfResourceLoader, - Pointer tNameComponentManager, Pointer tView, - Pointer tMaterial, - int tGizmoType, - Pointer)>> callback, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Gizmo_createRenderThread( + final result = GeneratedBindings.instance._Engine_destroyViewRenderThread( tEngine.cast(), - tAssetLoader.cast(), - tGltfResourceLoader.cast(), - tNameComponentManager.cast(), tView.cast(), - tMaterial.cast(), - tGizmoType, - callback.cast(), - ); - return result; -} - -void VertexBufferBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._VertexBufferBuilder_buildRenderThread( - tBuilder.cast(), - tEngine.cast(), - onComplete.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void VertexBuffer_destroyRenderThread( +void Engine_destroySceneRenderThread( Pointer tEngine, - Pointer tBuffer, + Pointer tScene, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._VertexBuffer_destroyRenderThread( + final result = GeneratedBindings.instance._Engine_destroySceneRenderThread( tEngine.cast(), - tBuffer.cast(), + tScene.cast(), requestId, onComplete as Pointer>, ); return result; } -void VertexBuffer_setBufferAtRenderThread( +void Engine_destroyColorGradingRenderThread( Pointer tEngine, - Pointer tBuffer, - int bufferIndex, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, + Pointer tColorGrading, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._VertexBuffer_setBufferAtRenderThread( + final result = GeneratedBindings.instance._Engine_destroyColorGradingRenderThread( tEngine.cast(), - tBuffer.cast(), - bufferIndex, - data, - sizeInBytes, - byteOffset, + tColorGrading.cast(), requestId, onComplete as Pointer>, ); return result; } -void IndexBufferBuilder_buildRenderThread( - Pointer tBuilder, +void Engine_destroyMaterialRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer tMaterial, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._IndexBufferBuilder_buildRenderThread( - tBuilder.cast(), + final result = GeneratedBindings.instance._Engine_destroyMaterialRenderThread( tEngine.cast(), - onComplete.cast(), + tMaterial.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void IndexBuffer_destroyRenderThread( +void Engine_destroyMaterialInstanceRenderThread( Pointer tEngine, - Pointer tBuffer, + Pointer tMaterialInstance, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._IndexBuffer_destroyRenderThread( + final result = GeneratedBindings.instance._Engine_destroyMaterialInstanceRenderThread( tEngine.cast(), - tBuffer.cast(), + tMaterialInstance.cast(), requestId, onComplete as Pointer>, ); return result; } -void IndexBuffer_setBufferRenderThread( +void Engine_destroySkyboxRenderThread( Pointer tEngine, - Pointer tBuffer, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, + Pointer tSkybox, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._IndexBuffer_setBufferRenderThread( + final result = GeneratedBindings.instance._Engine_destroySkyboxRenderThread( tEngine.cast(), - tBuffer.cast(), - data, - sizeInBytes, - byteOffset, + tSkybox.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderableBuilder_buildRenderThread( - Pointer tBuilder, +void Engine_destroyIndirectLightRenderThread( Pointer tEngine, - DartEntityId entityId, - Pointer> onComplete, + Pointer tIndirectLight, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_buildRenderThread( - tBuilder.cast(), + final result = GeneratedBindings.instance._Engine_destroyIndirectLightRenderThread( tEngine.cast(), - entityId, - onComplete.cast(), + tIndirectLight.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void EntityManager_createEntityRenderThread( - Pointer tEntityManager, - Pointer> onComplete, +void Texture_buildRenderThread( + Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import1, + int sampler, + int format, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._EntityManager_createEntityRenderThread( - tEntityManager.cast(), + final result = GeneratedBindings.instance._Texture_buildRenderThread( + engine.cast(), + width, + height, + depth, + levels, + tUsage, + import1, + sampler, + format, onComplete.cast(), ); return result; } -void EntityManager_destroyEntityRenderThread( - Pointer tEntityManager, - DartEntityId entityId, +void Texture_setExternalImageRenderThread( + Pointer tEngine, + Pointer tTexture, + Pointer externalImage, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._EntityManager_destroyEntityRenderThread( - tEntityManager.cast(), - entityId, + final result = GeneratedBindings.instance._Texture_setExternalImageRenderThread( + tEngine.cast(), + tTexture.cast(), + externalImage, requestId, onComplete as Pointer>, ); return result; } -void TransformManager_setTransformRenderThread( - Pointer tTransformManager, - DartEntityId entityId, - double4x4 transform, +void Texture_generateMipMapsRenderThread( + Pointer tTexture, + Pointer tEngine, int requestId, DartVoidCallback onComplete, ) { - final transformPtr = transform.address; - final result = GeneratedBindings.instance._TransformManager_setTransformRenderThread( - tTransformManager.cast(), - entityId, - transformPtr.cast(), + final result = GeneratedBindings.instance._Texture_generateMipMapsRenderThread( + tTexture.cast(), + tEngine.cast(), requestId, onComplete as Pointer>, ); return result; } -void TransformManager_setParentRenderThread( - Pointer tTransformManager, - DartEntityId child, - DartEntityId parent, - bool preserveScaling, +void Ktx1Reader_createTextureRenderThread( + Pointer tEngine, + Pointer tBundle, int requestId, - DartVoidCallback onComplete, + DartVoidCallback onTextureUploadComplete, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._TransformManager_setParentRenderThread( - tTransformManager.cast(), - child, - parent, - preserveScaling, + final result = GeneratedBindings.instance._Ktx1Reader_createTextureRenderThread( + tEngine.cast(), + tBundle.cast(), requestId, - onComplete as Pointer>, + onTextureUploadComplete as Pointer>, + onComplete.cast(), ); return result; } -void TransformManager_createComponentRenderThread( - Pointer tTransformManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +void Ktx2Reader_createTextureRenderThread( + Pointer tEngine, + Pointer data, + Dartsize_t size, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._TransformManager_createComponentRenderThread( - tTransformManager.cast(), - entityId, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Ktx2Reader_createTextureRenderThread( + tEngine.cast(), + data, + size, + onComplete.cast(), ); return result; } -void TransformManager_removeComponentRenderThread( - Pointer tTransformManager, - DartEntityId entityId, +void Engine_destroyTextureRenderThread( + Pointer engine, + Pointer tTexture, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._TransformManager_removeComponentRenderThread( - tTransformManager.cast(), - entityId, + final result = GeneratedBindings.instance._Engine_destroyTextureRenderThread( + engine.cast(), + tTexture.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderableManager_destroyEntityRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +void Engine_createFenceRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_destroyEntityRenderThread( - tRenderableManager.cast(), - entityId, + final result = GeneratedBindings.instance._Engine_createFenceRenderThread(tEngine.cast(), onComplete.cast()); + return result; +} + +void Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Fence_waitAndDestroyRenderThread( + tFence.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderableManager_setBonesFromMat4RenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer transforms, - Dartsize_t boneCount, - Dartsize_t offset, +void Engine_destroyFenceRenderThread( + Pointer tEngine, + Pointer tFence, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4RenderThread( - tRenderableManager.cast(), - entityId, - transforms, - boneCount, - offset, + final result = GeneratedBindings.instance._Engine_destroyFenceRenderThread( + tEngine.cast(), + tFence.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderableManager_setBonesFromBoneRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer bones, - Dartsize_t boneCount, - Dartsize_t offset, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromBoneRenderThread( - tRenderableManager.cast(), - entityId, - bones, - boneCount, - offset, +void Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_flushAndWaitRenderThread( + tEngine.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderableManager_setGeometryAtNonIndexedRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - int type, - Pointer tVertices, - Dartsize_t offset, - Dartsize_t count, - Pointer> callback, -) { - final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexedRenderThread( - tRenderableManager.cast(), - entityId, - primitiveIndex, - type, - tVertices.cast(), - offset, - count, - callback.cast(), +void Engine_executeRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_executeRenderThread( + tEngine.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setCastShadowsRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void Engine_buildSkyboxRenderThread( + Pointer tEngine, + Pointer tTexture, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setCastShadowsRenderThread( - tRenderableManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_buildSkyboxRenderThread( + tEngine.cast(), + tTexture.cast(), + showSun, + intensity, + priority, + onComplete.cast(), ); return result; } -void RenderableManager_setReceiveShadowsRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void Engine_buildColoredSkyboxRenderThread( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setReceiveShadowsRenderThread( - tRenderableManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_buildColoredSkyboxRenderThread( + tEngine.cast(), + r, + g, + b, + a, + showSun, + intensity, + priority, + onComplete.cast(), ); return result; } -void LightManager_setShadowCasterRenderThread( - Pointer tLightManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void Engine_buildIndirectLightFromIrradianceTextureRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._LightManager_setShadowCasterRenderThread( - tLightManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTextureRenderThread( + tEngine.cast(), + tReflectionsTexture.cast(), + tIrradianceTexture.cast(), + intensity, + onComplete.cast(), ); return result; } -void LightManager_setShadowOptionsRenderThread( - Pointer tLightManager, - DartEntityId entityId, - TShadowOptions options, - int requestId, - DartVoidCallback onComplete, +void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer harmonics, + double intensity, + Pointer)>> onComplete, ) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._LightManager_setShadowOptionsRenderThread( - tLightManager.cast(), - entityId, - optionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + tEngine.cast(), + tReflectionsTexture.cast(), + harmonics, + intensity, + onComplete.cast(), ); return result; } -void Renderer_setClearOptions( +void Renderer_setClearOptionsRenderThread( Pointer tRenderer, double clearR, double clearG, @@ -7362,8 +6885,10 @@ void Renderer_setClearOptions( int clearStencil, bool clear, bool discard, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Renderer_setClearOptions( + final result = GeneratedBindings.instance._Renderer_setClearOptionsRenderThread( tRenderer.cast(), clearR, clearG, @@ -7372,35 +6897,67 @@ void Renderer_setClearOptions( clearStencil, clear, discard, + requestId, + onComplete as Pointer>, ); return result; } -bool Renderer_beginFrame(Pointer tRenderer, Pointer tSwapChain, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._Renderer_beginFrame( +void Renderer_beginFrameRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + BigInt frameTimeInNanos, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Renderer_beginFrameRenderThread( tRenderer.cast(), tSwapChain.cast(), frameTimeInNanos.toJSBigInt, + onComplete.cast(), ); - return result == 1; + return result; } -void Renderer_endFrame(Pointer tRenderer) { - final result = GeneratedBindings.instance._Renderer_endFrame(tRenderer.cast()); +void Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Renderer_endFrameRenderThread( + tRenderer.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Renderer_render(Pointer tRenderer, Pointer tView) { - final result = GeneratedBindings.instance._Renderer_render(tRenderer.cast(), tView.cast()); +void Renderer_renderRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Renderer_renderRenderThread( + tRenderer.cast(), + tView.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView) { - final result = GeneratedBindings.instance._Renderer_renderStandaloneView(tRenderer.cast(), tView.cast()); +void Renderer_renderStandaloneViewRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Renderer_renderStandaloneViewRenderThread( + tRenderer.cast(), + tView.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Renderer_readPixels( +void Renderer_readPixelsRenderThread( Pointer tRenderer, int width, int height, @@ -7411,8 +6968,10 @@ void Renderer_readPixels( int tPixelDataType, Pointer out, Dartsize_t outLength, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Renderer_readPixels( + final result = GeneratedBindings.instance._Renderer_readPixelsRenderThread( tRenderer.cast(), width, height, @@ -7423,1312 +6982,1809 @@ void Renderer_readPixels( tPixelDataType, out, outLength, + requestId, + onComplete as Pointer>, ); return result; } -void Renderer_setFrameInterval( - Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, +void Material_createInstanceRenderThread( + Pointer tMaterial, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Renderer_setFrameInterval( - tRenderer.cast(), - headRoomRatio, - scaleRate, - history, - interval, - ); - return result; -} - -Pointer RenderTarget_create(Pointer tEngine, Pointer color, Pointer depth) { - final result = GeneratedBindings.instance._RenderTarget_create(tEngine.cast(), color.cast(), depth.cast()); - return Pointer(result); -} - -void RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget) { - final result = GeneratedBindings.instance._RenderTarget_destroy(tEngine.cast(), tRenderTarget.cast()); - return result; -} - -void Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a) { - final result = GeneratedBindings.instance._Skybox_setColor(tSkybox.cast(), r, g, b, a); - return result; -} - -/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). -void Skybox_setLayerMask(Pointer tSkybox, int select, int values) { - final result = GeneratedBindings.instance._Skybox_setLayerMask(tSkybox.cast(), select, values); - return result; -} - -/// Returns the visibility mask bits. -int Skybox_getLayerMask(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getLayerMask(tSkybox.cast()); - return result; -} - -/// Returns the skybox intensity in lux. -double Skybox_getIntensity(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getIntensity(tSkybox.cast()); + final result = GeneratedBindings.instance._Material_createInstanceRenderThread(tMaterial.cast(), onComplete.cast()); return result; } -/// Returns the environment texture, or nullptr for a color-only skybox. -Pointer Skybox_getTexture(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getTexture(tSkybox.cast()); - return Pointer(result); -} - -void RenderableManager_destroyEntity(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_destroyEntity(tRenderableManager.cast(), entityId); +void MaterialInstance_setParameterTextureRenderThread( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer tTexture, + Pointer tSampler, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterTextureRenderThread( + tMaterialInstance.cast(), + propertyName, + tTexture.cast(), + tSampler.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -bool RenderableManager_hasComponent(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_hasComponent(tRenderableManager.cast(), entityId); - return result == 1; -} - -bool RenderableManager_empty(Pointer tRenderableManager) { - final result = GeneratedBindings.instance._RenderableManager_empty(tRenderableManager.cast()); - return result == 1; +void Material_createImageMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Material_createImageMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), + ); + return result; } -bool RenderableManager_isRenderable(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isRenderable(tRenderableManager.cast(), entityId); - return result == 1; +void Material_createGizmoMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Material_createGizmoMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), + ); + return result; } -Dartsize_t RenderableManager_getComponentCount(Pointer tRenderableManager) { - final result = GeneratedBindings.instance._RenderableManager_getComponentCount(tRenderableManager.cast()); +void Material_createBoneOverlayMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Material_createBoneOverlayMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), + ); return result; } -bool RenderableManager_setMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - Pointer tMaterialInstance, +void Material_createSilhouetteMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, - tMaterialInstance.cast(), + final result = GeneratedBindings.instance._Material_createSilhouetteMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); - return result == 1; + return result; } -Pointer RenderableManager_getMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, +void Material_createEdgeOutlineMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_getMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, + final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); - return Pointer(result); + return result; } -void RenderableManager_clearMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, +void Material_createWireframeMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_clearMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, + final result = GeneratedBindings.instance._Material_createWireframeMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -bool RenderableManager_setGeometryAtNonIndexed( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - int type, - Pointer vertices, - Dartsize_t offset, - Dartsize_t count, +void Material_createTranslationAxisMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexed( - tRenderableManager.cast(), - entityId, - primitiveIndex, - type, - vertices.cast(), - offset, - count, + final result = GeneratedBindings.instance._Material_createTranslationAxisMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); - return result == 1; + return result; } -Dartsize_t RenderableManager_getPrimitiveCount(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getPrimitiveCount(tRenderableManager.cast(), entityId); +void ColorGradingBuilder_createRenderThread( + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ColorGradingBuilder_createRenderThread(onComplete.cast()); return result; } -Aabb3 RenderableManager_getAxisAlignedBoundingBox( - Pointer tRenderableManager, - DartEntityId entityId, +void ColorGradingBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + Pointer)>> onComplete, ) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getAxisAlignedBoundingBox( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, + final result = GeneratedBindings.instance._ColorGradingBuilder_buildRenderThread( + tBuilder.cast(), + tEngine.cast(), + onComplete.cast(), ); - return Aabb3_out.toDart(); + return result; } -void RenderableManager_setAxisAlignedBoundingBox( - Pointer tRenderableManager, - DartEntityId entityId, - Aabb3 aabb, +void ColorGradingBuilder_destroyRenderThread( + Pointer tBuilder, + int requestId, + DartVoidCallback onComplete, ) { - final aabbPtr = aabb.address; - final result = GeneratedBindings.instance._RenderableManager_setAxisAlignedBoundingBox( - tRenderableManager.cast(), - entityId, - aabbPtr.cast(), + final result = GeneratedBindings.instance._ColorGradingBuilder_destroyRenderThread( + tBuilder.cast(), + requestId, + onComplete as Pointer>, ); return result; } -Aabb3 RenderableManager_getAabb(Pointer tRenderableManager, DartEntityId entityId) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getAabb( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, - ); - return Aabb3_out.toDart(); +void ToneMapper_createLinearRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createLinearRenderThread(tEngine.cast(), onComplete.cast()); + return result; } -Aabb3 RenderableManager_getBoundingBox(Pointer tRenderableManager, DartEntityId entityId) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getBoundingBox( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, - ); - return Aabb3_out.toDart(); +void ToneMapper_createACESRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createACESRenderThread(tEngine.cast(), onComplete.cast()); + return result; } -void RenderableManager_setLayerMask( - Pointer tRenderableManager, - DartEntityId entityId, - int select, - int values, +void ToneMapper_createACESLegacyRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setLayerMask( - tRenderableManager.cast(), - entityId, - select, - values, - ); + final result = GeneratedBindings.instance._ToneMapper_createACESLegacyRenderThread(tEngine.cast(), onComplete.cast()); return result; } -int RenderableManager_getLayerMask(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getLayerMask(tRenderableManager.cast(), entityId); +void ToneMapper_createFilmicRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createFilmicRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void RenderableManager_setVisibilityLayer( - Pointer tRenderableManager, - DartEntityId entityId, - int layer, +void ToneMapper_createPBRNeutralRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setVisibilityLayer( - tRenderableManager.cast(), - entityId, - layer, + final result = GeneratedBindings.instance._ToneMapper_createPBRNeutralRenderThread(tEngine.cast(), onComplete.cast()); + return result; +} + +void ToneMapper_createAGXRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createAGXRenderThread(tEngine.cast(), onComplete.cast()); + return result; +} + +void ToneMapper_createAGXWithLookRenderThread( + Pointer tEngine, + int look, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createAGXWithLookRenderThread( + tEngine.cast(), + look, + onComplete.cast(), ); return result; } -void RenderableManager_setPriority( - Pointer tRenderableManager, - DartEntityId entityId, - int priority, +void ToneMapper_createGenericRenderThread( + Pointer tEngine, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setPriority( - tRenderableManager.cast(), - entityId, - priority, + final result = GeneratedBindings.instance._ToneMapper_createGenericRenderThread( + tEngine.cast(), + contrast, + midGrayIn, + midGrayOut, + hdrMax, + onComplete.cast(), ); return result; } -int RenderableManager_getPriority(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getPriority(tRenderableManager.cast(), entityId); +void ToneMapper_createDisplayRangeRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createDisplayRangeRenderThread( + tEngine.cast(), + onComplete.cast(), + ); return result; } -void RenderableManager_setChannel(Pointer tRenderableManager, DartEntityId entityId, int channel) { - final result = GeneratedBindings.instance._RenderableManager_setChannel(tRenderableManager.cast(), entityId, channel); +void ToneMapper_destroyRenderThread(Pointer tToneMapper, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._ToneMapper_destroyRenderThread( + tToneMapper.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_setCulling(Pointer tRenderableManager, DartEntityId entityId, bool enabled) { - final result = GeneratedBindings.instance._RenderableManager_setCulling(tRenderableManager.cast(), entityId, enabled); +void View_pickRenderThread(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { + final result = GeneratedBindings.instance._View_pickRenderThread( + tView.cast(), + requestId, + x, + y, + callback as Pointer>, + ); return result; } -bool RenderableManager_getCulling(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getCulling(tRenderableManager.cast(), entityId); - return result == 1; +void View_setColorGradingRenderThread( + Pointer tView, + Pointer tColorGrading, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setColorGradingRenderThread( + tView.cast(), + tColorGrading.cast(), + requestId, + onComplete as Pointer>, + ); + return result; } -void RenderableManager_setFogEnabled( - Pointer tRenderableManager, - DartEntityId entityId, +void View_setBloomRenderThread( + Pointer tView, bool enabled, + double strength, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setFogEnabled( - tRenderableManager.cast(), - entityId, + final result = GeneratedBindings.instance._View_setBloomRenderThread( + tView.cast(), enabled, + strength, + requestId, + onComplete as Pointer>, ); return result; } -bool RenderableManager_getFogEnabled(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getFogEnabled(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setLightChannel( - Pointer tRenderableManager, - DartEntityId entityId, - int channel, - bool enable, +void View_setCameraRenderThread( + Pointer tView, + Pointer tCamera, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setLightChannel( - tRenderableManager.cast(), - entityId, - channel, - enable, + final result = GeneratedBindings.instance._View_setCameraRenderThread( + tView.cast(), + tCamera.cast(), + requestId, + onComplete as Pointer>, ); return result; } -bool RenderableManager_getLightChannel( - Pointer tRenderableManager, - DartEntityId entityId, - int channel, -) { - final result = GeneratedBindings.instance._RenderableManager_getLightChannel( - tRenderableManager.cast(), - entityId, - channel, - ); - return result == 1; +void View_getNameRenderThread(Pointer tView, Pointer)>> onComplete) { + final result = GeneratedBindings.instance._View_getNameRenderThread(tView.cast(), onComplete.cast()); + return result; } -void RenderableManager_setCastShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool castShadows, -) { - final result = GeneratedBindings.instance._RenderableManager_setCastShadows( - tRenderableManager.cast(), - entityId, - castShadows, +void View_setNameRenderThread(Pointer tView, Pointer name, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setNameRenderThread( + tView.cast(), + name, + requestId, + onComplete as Pointer>, ); return result; } -bool RenderableManager_isShadowCaster(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isShadowCaster(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setReceiveShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool receiveShadows, +void View_setViewportRenderThread( + Pointer tView, + int width, + int height, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setReceiveShadows( - tRenderableManager.cast(), - entityId, - receiveShadows, + final result = GeneratedBindings.instance._View_setViewportRenderThread( + tView.cast(), + width, + height, + requestId, + onComplete as Pointer>, ); return result; } -bool RenderableManager_isShadowReceiver(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isShadowReceiver(tRenderableManager.cast(), entityId); - return result == 1; +void View_setRenderTargetRenderThread( + Pointer tView, + Pointer tRenderTarget, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setRenderTargetRenderThread( + tView.cast(), + tRenderTarget.cast(), + requestId, + onComplete as Pointer>, + ); + return result; } -void RenderableManager_setScreenSpaceContactShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, +void View_setAntiAliasingRenderThread( + Pointer tView, + bool msaa, + bool fxaa, + bool taa, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setScreenSpaceContactShadows( - tRenderableManager.cast(), - entityId, - enabled, + final result = GeneratedBindings.instance._View_setAntiAliasingRenderThread( + tView.cast(), + msaa, + fxaa, + taa, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setBlendOrderAt( - Pointer tRenderableManager, - DartEntityId entityId, - Dartsize_t primitiveIndex, - int order, +void View_setPostProcessingRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBlendOrderAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, - order, + final result = GeneratedBindings.instance._View_setPostProcessingRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setGlobalBlendOrderEnabledAt( - Pointer tRenderableManager, - DartEntityId entityId, - Dartsize_t primitiveIndex, +void View_setFrustumCullingEnabledRenderThread( + Pointer tView, bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setGlobalBlendOrderEnabledAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, + final result = GeneratedBindings.instance._View_setFrustumCullingEnabledRenderThread( + tView.cast(), enabled, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setMorphWeights( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer weights, - Dartsize_t count, - Dartsize_t offset, +void View_setStencilBufferEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setMorphWeights( - tRenderableManager.cast(), - entityId, - weights, - count, - offset, + final result = GeneratedBindings.instance._View_setStencilBufferEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, ); return result; } -Dartsize_t RenderableManager_getMorphTargetCount( - Pointer tRenderableManager, - DartEntityId entityId, +void View_setDitheringEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_getMorphTargetCount(tRenderableManager.cast(), entityId); + final result = GeneratedBindings.instance._View_setDitheringEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_setBonesFromMat4( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer transforms, - Dartsize_t boneCount, - Dartsize_t offset, -) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4( - tRenderableManager.cast(), - entityId, - transforms, - boneCount, - offset, +void View_setRenderQualityRenderThread( + Pointer tView, + int qualityLevel, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setRenderQualityRenderThread( + tView.cast(), + qualityLevel, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setBonesFromBone( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer bones, - Dartsize_t boneCount, - Dartsize_t offset, +void View_setSceneRenderThread( + Pointer tView, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromBone( - tRenderableManager.cast(), - entityId, - bones, - boneCount, - offset, + final result = GeneratedBindings.instance._View_setSceneRenderThread( + tView.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, ); return result; } -Pointer RenderableBuilder_create(Dartsize_t primitiveCount) { - final result = GeneratedBindings.instance._RenderableBuilder_create(primitiveCount); - return Pointer(result); -} - -void RenderableBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._RenderableBuilder_destroy(builder.cast()); +void View_setLayerEnabledRenderThread( + Pointer tView, + int layer, + bool visible, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setLayerEnabledRenderThread( + tView.cast(), + layer, + visible, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_boundingBox(Pointer builder, Aabb3 aabb) { - final aabbPtr = aabb.address; - final result = GeneratedBindings.instance._RenderableBuilder_boundingBox(builder.cast(), aabbPtr.cast()); +void View_setBlendModeRenderThread(Pointer tView, int blendMode, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setBlendModeRenderThread( + tView.cast(), + blendMode, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_material( - Pointer builder, - Dartsize_t primitiveIndex, - Pointer materialInstance, +void View_setFogOptionsRenderThread( + Pointer tView, + TFogOptions tFogOptions, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_material( - builder.cast(), - primitiveIndex, - materialInstance.cast(), + final tFogOptionsPtr = tFogOptions.address; + final result = GeneratedBindings.instance._View_setFogOptionsRenderThread( + tView.cast(), + tFogOptionsPtr.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void RenderableBuilder_geometry( - Pointer builder, - Dartsize_t primitiveIndex, - int type, - Pointer vertices, - Pointer indices, - Dartsize_t offset, - Dartsize_t count, +void View_setAmbientOcclusionOptionsRenderThread( + Pointer tView, + TAmbientOcclusionOptions options, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_geometry( - builder.cast(), - primitiveIndex, - type, - vertices.cast(), - indices.cast(), - offset, - count, + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setAmbientOcclusionOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void RenderableBuilder_geometryNonIndexed( - Pointer builder, - Dartsize_t primitiveIndex, - int type, - Pointer vertices, - Dartsize_t offset, - Dartsize_t count, +void View_setFrontFaceWindingInvertedRenderThread( + Pointer tView, + bool inverted, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_geometryNonIndexed( - builder.cast(), - primitiveIndex, - type, - vertices.cast(), - offset, - count, + final result = GeneratedBindings.instance._View_setFrontFaceWindingInvertedRenderThread( + tView.cast(), + inverted, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableBuilder_priority(Pointer builder, int priority) { - final result = GeneratedBindings.instance._RenderableBuilder_priority(builder.cast(), priority); +void View_setShadowsEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setShadowsEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_channel(Pointer builder, int channel) { - final result = GeneratedBindings.instance._RenderableBuilder_channel(builder.cast(), channel); +void View_setShadowTypeRenderThread(Pointer tView, int shadowType, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setShadowTypeRenderThread( + tView.cast(), + shadowType, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_culling(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_culling(builder.cast(), enabled); +void View_setSoftShadowOptionsRenderThread( + Pointer tView, + TSoftShadowOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setSoftShadowOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_castShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_castShadows(builder.cast(), enabled); +void View_setVsmShadowOptionsRenderThread( + Pointer tView, + TVsmShadowOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setVsmShadowOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_receiveShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_receiveShadows(builder.cast(), enabled); +void View_setTransparentPickingEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setTransparentPickingEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_fog(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_fog(builder.cast(), enabled); +void SceneAsset_destroyRenderThread(Pointer tSceneAsset, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._SceneAsset_destroyRenderThread( + tSceneAsset.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_lightChannel(builder.cast(), channel, enabled); +void SceneAsset_createFromFilamentAssetRenderThread( + Pointer tEngine, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAssetRenderThread( + tEngine.cast(), + tAssetLoader.cast(), + tNameComponentManager.cast(), + tFilamentAsset.cast(), + rebuildVertices, + onComplete.cast(), + ); return result; } -void RenderableBuilder_layerMask(Pointer builder, int select, int values) { - final result = GeneratedBindings.instance._RenderableBuilder_layerMask(builder.cast(), select, values); +void SceneAsset_createFromBuffersRenderThread( + Pointer tEngine, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, + Pointer)>> callback, +) { + final boundingBoxPtr = boundingBox.address; + final result = GeneratedBindings.instance._SceneAsset_createFromBuffersRenderThread( + tEngine.cast(), + tVertexBuffer.cast(), + tIndexBuffer.cast(), + materialInstances.cast(), + materialInstanceCount, + tPrimitiveType, + boundingBoxPtr.cast(), + callback.cast(), + ); return result; } -void RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_screenSpaceContactShadows(builder.cast(), enabled); +void SceneAsset_createInstanceRenderThread( + Pointer asset, + Pointer> tMaterialInstances, + int materialInstanceCount, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._SceneAsset_createInstanceRenderThread( + asset.cast(), + tMaterialInstances.cast(), + materialInstanceCount, + callback.cast(), + ); return result; } -void RenderableBuilder_blendOrder(Pointer builder, Dartsize_t primitiveIndex, int order) { - final result = GeneratedBindings.instance._RenderableBuilder_blendOrder(builder.cast(), primitiveIndex, order); +void SceneAsset_releaseSourceDataRenderThread( + Pointer tSceneAsset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._SceneAsset_releaseSourceDataRenderThread( + tSceneAsset.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_globalBlendOrderEnabled( - Pointer builder, - Dartsize_t primitiveIndex, - bool enabled, +void SceneAsset_setFlatShadingRenderThread( + Pointer tSceneAsset, + bool flatShading, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_globalBlendOrderEnabled( - builder.cast(), - primitiveIndex, - enabled, + final result = GeneratedBindings.instance._SceneAsset_setFlatShadingRenderThread( + tSceneAsset.cast(), + flatShading, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableBuilder_instances(Pointer builder, Dartsize_t instanceCount) { - final result = GeneratedBindings.instance._RenderableBuilder_instances(builder.cast(), instanceCount); +void MaterialProvider_createMaterialInstanceRenderThread( + Pointer tMaterialProvider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstanceRenderThread( + tMaterialProvider.cast(), + doubleSided, + unlit, + hasVertexColors, + hasBaseColorTexture, + hasNormalTexture, + hasOcclusionTexture, + hasEmissiveTexture, + useSpecularGlossiness, + alphaMode, + enableDiagnostics, + hasMetallicRoughnessTexture, + metallicRoughnessUV, + hasSpecularGlossinessTexture, + specularGlossinessUV, + baseColorUV, + hasClearCoatTexture, + clearCoatUV, + hasClearCoatRoughnessTexture, + clearCoatRoughnessUV, + hasClearCoatNormalTexture, + clearCoatNormalUV, + hasClearCoat, + hasTransmission, + hasTextureTransforms, + emissiveUV, + aoUV, + normalUV, + hasTransmissionTexture, + transmissionUV, + hasSheenColorTexture, + sheenColorUV, + hasSheenRoughnessTexture, + sheenRoughnessUV, + hasVolumeThicknessTexture, + volumeThicknessUV, + hasSheen, + hasIOR, + hasVolume, + callback.cast(), + ); return result; } -void RenderableBuilder_skinningFromMat4( - Pointer builder, - Dartsize_t boneCount, - Pointer transforms, +void AnimationManager_updateRenderThread( + Pointer tAnimationManager, + BigInt frameTimeInNanos, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_skinningFromMat4(builder.cast(), boneCount, transforms); + final result = GeneratedBindings.instance._AnimationManager_updateRenderThread( + tAnimationManager.cast(), + frameTimeInNanos.toJSBigInt, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_skinningFromBone( - Pointer builder, - Dartsize_t boneCount, - Pointer bones, +void AnimationManager_setGltfAnimationTimeRenderThread( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_skinningFromBone(builder.cast(), boneCount, bones); + final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTimeRenderThread( + tAnimationManager.cast(), + tSceneAsset.cast(), + animationIndex, + timeInSeconds, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_enableSkinningBuffers(builder.cast(), enabled); +void AnimationManager_updateBoneMatricesRenderThread( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer> callback, +) { + final result = GeneratedBindings.instance._AnimationManager_updateBoneMatricesRenderThread( + tAnimationManager.cast(), + sceneAsset.cast(), + callback.cast(), + ); return result; } -void RenderableBuilder_boneIndicesAndWeights( - Pointer builder, - Dartsize_t primitiveIndex, - Pointer indicesAndWeights, - Dartsize_t count, - Dartsize_t bonesPerVertex, +void AnimationManager_setMorphTargetWeightsRenderThread( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + int numWeights, + Pointer> callback, ) { - final result = GeneratedBindings.instance._RenderableBuilder_boneIndicesAndWeights( - builder.cast(), - primitiveIndex, - indicesAndWeights, - count, - bonesPerVertex, + final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeightsRenderThread( + tAnimationManager.cast(), + entityId, + morphData, + numWeights, + callback.cast(), ); return result; } -int RenderableBuilder_build(Pointer builder, Pointer engine, DartEntityId entity) { - final result = GeneratedBindings.instance._RenderableBuilder_build(builder.cast(), engine.cast(), entity); +void Image_createEmptyRenderThread( + int width, + int height, + int channel, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Image_createEmptyRenderThread(width, height, channel, onComplete.cast()); return result; } -void IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation) { - final result = GeneratedBindings.instance._IndirectLight_setRotation(tIndirectLight.cast(), rotation); +void Image_decodeRenderThread( + Pointer data, + Dartsize_t length, + Pointer name, + bool alpha, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Image_decodeRenderThread(data, length, name, alpha, onComplete.cast()); return result; } -Pointer SurfaceOrientationBuilder_create() { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_create(); - return Pointer(result); +void Image_getBytesRenderThread( + Pointer tLinearImage, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Image_getBytesRenderThread(tLinearImage.cast(), onComplete.cast()); + return result; } -void SurfaceOrientationBuilder_vertexCount(Pointer builder, Dartsize_t count) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_vertexCount(builder.cast(), count); +void Image_destroyRenderThread(Pointer tLinearImage, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Image_destroyRenderThread( + tLinearImage.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void SurfaceOrientationBuilder_normals( - Pointer builder, - Pointer normals, - Dartsize_t stride, +void Image_getWidthRenderThread( + Pointer tLinearImage, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_normals(builder.cast(), normals, stride); + final result = GeneratedBindings.instance._Image_getWidthRenderThread(tLinearImage.cast(), onComplete.cast()); return result; } -void SurfaceOrientationBuilder_tangents( - Pointer builder, - Pointer tangents, - Dartsize_t stride, +void Image_getHeightRenderThread( + Pointer tLinearImage, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_tangents(builder.cast(), tangents, stride); + final result = GeneratedBindings.instance._Image_getHeightRenderThread(tLinearImage.cast(), onComplete.cast()); return result; } -void SurfaceOrientationBuilder_uvs( - Pointer builder, - Pointer uvs, - Dartsize_t stride, +void Image_getChannelsRenderThread( + Pointer tLinearImage, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_uvs(builder.cast(), uvs, stride); + final result = GeneratedBindings.instance._Image_getChannelsRenderThread(tLinearImage.cast(), onComplete.cast()); return result; } -void SurfaceOrientationBuilder_positions( - Pointer builder, - Pointer positions, - Dartsize_t stride, +void Texture_loadImageRenderThread( + Pointer tEngine, + Pointer tTexture, + Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_positions(builder.cast(), positions, stride); + final result = GeneratedBindings.instance._Texture_loadImageRenderThread( + tEngine.cast(), + tTexture.cast(), + tImage.cast(), + bufferFormat, + pixelDataType, + level, + onComplete.cast(), + ); return result; } -void SurfaceOrientationBuilder_triangleCount(Pointer builder, Dartsize_t count) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangleCount(builder.cast(), count); +void Texture_setImageRenderThread( + Pointer tEngine, + Pointer tTexture, + int level, + Pointer data, + Dartsize_t size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Texture_setImageRenderThread( + tEngine.cast(), + tTexture.cast(), + level, + data, + size, + x_offset, + y_offset, + z_offset, + width, + height, + depth, + bufferFormat, + pixelDataType, + onComplete.cast(), + ); return result; } -void SurfaceOrientationBuilder_triangles_uint(Pointer builder, Pointer triangles) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_uint(builder.cast(), triangles); +void RenderTarget_getColorTextureRenderThread( + Pointer tRenderTarget, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._RenderTarget_getColorTextureRenderThread( + tRenderTarget.cast(), + onComplete.cast(), + ); return result; } -void SurfaceOrientationBuilder_triangles_ushort( - Pointer builder, - Pointer triangles, +void RenderTarget_createRenderThread( + Pointer tEngine, + Pointer color, + Pointer depth, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_ushort(builder.cast(), triangles); + final result = GeneratedBindings.instance._RenderTarget_createRenderThread( + tEngine.cast(), + color.cast(), + depth.cast(), + onComplete.cast(), + ); return result; } -Pointer SurfaceOrientationBuilder_build(Pointer builder) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_build(builder.cast()); - return Pointer(result); -} - -void SurfaceOrientationBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_destroy(builder.cast()); +void RenderTarget_destroyRenderThread( + Pointer tEngine, + Pointer tRenderTarget, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderTarget_destroyRenderThread( + tEngine.cast(), + tRenderTarget.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -Dartsize_t SurfaceOrientation_getVertexCount(Pointer orientation) { - final result = GeneratedBindings.instance._SurfaceOrientation_getVertexCount(orientation.cast()); +void TextureSampler_createRenderThread(Pointer)>> onComplete) { + final result = GeneratedBindings.instance._TextureSampler_createRenderThread(onComplete.cast()); return result; } -void SurfaceOrientation_getQuats_float4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, +void TextureSampler_createWithFilteringRenderThread( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_float4( - orientation.cast(), - out, - quatCount, - stride, + final result = GeneratedBindings.instance._TextureSampler_createWithFilteringRenderThread( + minFilter, + magFilter, + wrapS, + wrapT, + wrapR, + onComplete.cast(), ); return result; } -void SurfaceOrientation_getQuats_short4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, +void TextureSampler_createWithComparisonRenderThread( + int compareMode, + int compareFunc, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_short4( - orientation.cast(), - out, - quatCount, - stride, + final result = GeneratedBindings.instance._TextureSampler_createWithComparisonRenderThread( + compareMode, + compareFunc, + onComplete.cast(), ); return result; } -void SurfaceOrientation_getQuats_half4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, +void TextureSampler_setMinFilterRenderThread( + Pointer sampler, + int filter, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_half4( - orientation.cast(), - out, - quatCount, - stride, + final result = GeneratedBindings.instance._TextureSampler_setMinFilterRenderThread( + sampler.cast(), + filter, + requestId, + onComplete as Pointer>, ); return result; } -void SurfaceOrientation_destroy(Pointer orientation) { - final result = GeneratedBindings.instance._SurfaceOrientation_destroy(orientation.cast()); +void TextureSampler_setMagFilterRenderThread( + Pointer sampler, + int filter, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setMagFilterRenderThread( + sampler.cast(), + filter, + requestId, + onComplete as Pointer>, + ); return result; } -Pointer AnimationManager_create(Pointer tEngine) { - final result = GeneratedBindings.instance._AnimationManager_create(tEngine.cast()); - return Pointer(result); -} - -void AnimationManager_destroy(Pointer tAnimationManager) { - final result = GeneratedBindings.instance._AnimationManager_destroy(tAnimationManager.cast()); +void TextureSampler_setWrapModeSRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setWrapModeSRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, + ); return result; } -void AnimationManager_update(Pointer tAnimationManager, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._AnimationManager_update( - tAnimationManager.cast(), - frameTimeInNanos.toJSBigInt, +void TextureSampler_setWrapModeTRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setWrapModeTRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, ); return result; } -bool AnimationManager_addGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, +void TextureSampler_setWrapModeRRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_addGltfAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + final result = GeneratedBindings.instance._TextureSampler_setWrapModeRRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -bool AnimationManager_removeGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, +void TextureSampler_setAnisotropyRenderThread( + Pointer sampler, + double anisotropy, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_removeGltfAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + final result = GeneratedBindings.instance._TextureSampler_setAnisotropyRenderThread( + sampler.cast(), + anisotropy, + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -void AnimationManager_addMorphAnimationComponent(Pointer tAnimationManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._AnimationManager_addMorphAnimationComponent( - tAnimationManager.cast(), - entityId, +void TextureSampler_setCompareModeRenderThread( + Pointer sampler, + int mode, + int func, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setCompareModeRenderThread( + sampler.cast(), + mode, + func, + requestId, + onComplete as Pointer>, ); return result; } -void AnimationManager_removeMorphAnimationComponent( - Pointer tAnimationManager, - DartEntityId entityId, -) { - final result = GeneratedBindings.instance._AnimationManager_removeMorphAnimationComponent( - tAnimationManager.cast(), - entityId, +void TextureSampler_destroyRenderThread(Pointer sampler, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._TextureSampler_destroyRenderThread( + sampler.cast(), + requestId, + onComplete as Pointer>, ); return result; } -bool AnimationManager_addBoneAnimationComponent( +void AnimationManager_resetToRestPoseRenderThread( Pointer tAnimationManager, Pointer tSceneAsset, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_addBoneAnimationComponent( + final result = GeneratedBindings.instance._AnimationManager_resetToRestPoseRenderThread( tAnimationManager.cast(), tSceneAsset.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -bool AnimationManager_removeBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, +void GltfAssetLoader_createRenderThread( + Pointer tEngine, + Pointer tMaterialProvider, + Pointer tNameComponentManager, + Pointer)>> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_removeBoneAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + final result = GeneratedBindings.instance._GltfAssetLoader_createRenderThread( + tEngine.cast(), + tMaterialProvider.cast(), + tNameComponentManager.cast(), + callback.cast(), ); - return result == 1; + return result; } -bool AnimationManager_setMorphAnimation( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, +void GltfAssetLoader_destroyRenderThread( + Pointer tAssetLoader, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_setMorphAnimation( - tAnimationManager.cast(), - entityId, - morphData, - morphIndices, - numMorphTargets, - numFrames, - frameLengthInMs, + final result = GeneratedBindings.instance._GltfAssetLoader_destroyRenderThread( + tAssetLoader.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -bool AnimationManager_clearMorphAnimation(Pointer tAnimationManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._AnimationManager_clearMorphAnimation(tAnimationManager.cast(), entityId); - return result == 1; +void GltfResourceLoader_createRenderThread( + Pointer tEngine, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_createRenderThread(tEngine.cast(), callback.cast()); + return result; } -void AnimationManager_resetToRestPose(Pointer tAnimationManager, Pointer sceneAsset) { - final result = GeneratedBindings.instance._AnimationManager_resetToRestPose( - tAnimationManager.cast(), - sceneAsset.cast(), +void GltfResourceLoader_destroyRenderThread( + Pointer tEngine, + Pointer tResourceLoader, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_destroyRenderThread( + tEngine.cast(), + tResourceLoader.cast(), + requestId, + onComplete as Pointer>, ); return result; } -bool AnimationManager_addBoneAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int skinIndex, - int boneIndex, - Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, +void GltfResourceLoader_loadResourcesRenderThread( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + Pointer> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_addBoneAnimation( - tAnimationManager.cast(), - tSceneAsset.cast(), - skinIndex, - boneIndex, - frameData, - numFrames, - frameLengthInMs, - fadeOutInSecs, - fadeInInSecs, - maxDelta, - loop, + final result = GeneratedBindings.instance._GltfResourceLoader_loadResourcesRenderThread( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), + callback.cast(), ); - return result == 1; + return result; } -void AnimationManager_getRestLocalTransforms( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - Pointer out, - int numBones, +void GltfResourceLoader_addResourceDataRenderThread( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + Dartsize_t length, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getRestLocalTransforms( - tAnimationManager.cast(), - sceneAsset.cast(), - skinIndex, - out, - numBones, + final result = GeneratedBindings.instance._GltfResourceLoader_addResourceDataRenderThread( + tGltfResourceLoader.cast(), + uri, + data, + length, + requestId, + onComplete as Pointer>, ); return result; } -void AnimationManager_getInverseBindMatrix( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - int boneIndex, - Pointer out, +void GltfResourceLoader_asyncBeginLoadRenderThread( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + Pointer> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_getInverseBindMatrix( - tAnimationManager.cast(), - sceneAsset.cast(), - skinIndex, - boneIndex, - out, + final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoadRenderThread( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), + callback.cast(), ); return result; } -bool AnimationManager_playGltfAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, +void GltfResourceLoader_asyncUpdateLoadRenderThread(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoadRenderThread(tGltfResourceLoader.cast()); + return result; +} + +void GltfResourceLoader_asyncGetLoadProgressRenderThread( + Pointer tGltfResourceLoader, + Pointer> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_playGltfAnimation( - tAnimationManager.cast(), - tSceneAsset.cast(), - index, - loop, - reverse, - replaceActive, - crossfade, - startOffset, - speed, + final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgressRenderThread( + tGltfResourceLoader.cast(), + callback.cast(), ); - return result == 1; + return result; } -bool AnimationManager_stopGltfAnimation( - Pointer tAnimationManager, - Pointer sceneAsset, - int index, +void GltfAssetLoader_loadRenderThread( + Pointer tEngine, + Pointer tAssetLoader, + Pointer data, + Dartsize_t length, + int numInstances, + Pointer)>> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_stopGltfAnimation( - tAnimationManager.cast(), - sceneAsset.cast(), - index, + final result = GeneratedBindings.instance._GltfAssetLoader_loadRenderThread( + tEngine.cast(), + tAssetLoader.cast(), + data, + length, + numInstances, + callback.cast(), ); - return result == 1; + return result; } -double AnimationManager_getGltfAnimationDuration( - Pointer tAnimationManager, - Pointer sceneAsset, - int animationIndex, +void Scene_addFilamentAssetRenderThread( + Pointer tScene, + Pointer tAsset, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationDuration( - tAnimationManager.cast(), - sceneAsset.cast(), - animationIndex, + final result = GeneratedBindings.instance._Scene_addFilamentAssetRenderThread( + tScene.cast(), + tAsset.cast(), + requestId, + onComplete as Pointer>, ); return result; } -int AnimationManager_getGltfAnimationCount( - Pointer tAnimationManager, - Pointer sceneAsset, +void FilamentAsset_getWireframeRenderThread( + Pointer tFilamentAsset, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationCount( - tAnimationManager.cast(), - sceneAsset.cast(), + final result = GeneratedBindings.instance._FilamentAsset_getWireframeRenderThread( + tFilamentAsset.cast(), + onComplete.cast(), ); return result; } -void AnimationManager_getGltfAnimationName( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer outPtr, - int index, +void Scene_addEntityRenderThread( + Pointer tScene, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationName( - tAnimationManager.cast(), - sceneAsset.cast(), - outPtr, - index, + final result = GeneratedBindings.instance._Scene_addEntityRenderThread( + tScene.cast(), + entityId, + requestId, + onComplete as Pointer>, ); return result; } -int AnimationManager_getMorphTargetNameCount( - Pointer tAnimationManager, - Pointer sceneAsset, - DartEntityId childEntity, +void Scene_removeEntityRenderThread( + Pointer tScene, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getMorphTargetNameCount( - tAnimationManager.cast(), - sceneAsset.cast(), - childEntity, + final result = GeneratedBindings.instance._Scene_removeEntityRenderThread( + tScene.cast(), + entityId, + requestId, + onComplete as Pointer>, ); return result; } -void AnimationManager_getMorphTargetName( - Pointer tAnimationManager, - Pointer sceneAsset, - DartEntityId childEntity, - Pointer outPtr, - int index, +void SceneAsset_addToSceneRenderThread( + Pointer tSceneAsset, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_getMorphTargetName( - tAnimationManager.cast(), - sceneAsset.cast(), - childEntity, - outPtr, - index, + final result = GeneratedBindings.instance._SceneAsset_addToSceneRenderThread( + tSceneAsset.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, ); return result; } -bool AnimationManager_updateBoneMatrices( - Pointer tAnimationManager, - Pointer sceneAsset, +void SceneAsset_removeFromSceneRenderThread( + Pointer tSceneAsset, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_updateBoneMatrices( - tAnimationManager.cast(), - sceneAsset.cast(), + final result = GeneratedBindings.instance._SceneAsset_removeFromSceneRenderThread( + tSceneAsset.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -bool AnimationManager_setMorphTargetWeights( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - int numWeights, +void Scene_setSkyboxRenderThread( + Pointer tScene, + Pointer tSkybox, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeights( - tAnimationManager.cast(), - entityId, - morphData, - numWeights, + final result = GeneratedBindings.instance._Scene_setSkyboxRenderThread( + tScene.cast(), + tSkybox.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -bool AnimationManager_setGltfAnimationTime( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, +void Scene_setIndirectLightRenderThread( + Pointer tScene, + Pointer tIndirectLight, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTime( - tAnimationManager.cast(), - tSceneAsset.cast(), - animationIndex, - timeInSeconds, + final result = GeneratedBindings.instance._Scene_setIndirectLightRenderThread( + tScene.cast(), + tIndirectLight.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -Pointer GltfAssetLoader_create( +void Gizmo_createRenderThread( Pointer tEngine, - Pointer tMaterialProvider, + Pointer tAssetLoader, + Pointer tGltfResourceLoader, Pointer tNameComponentManager, + Pointer tView, + Pointer tMaterial, + int tGizmoType, + Pointer)>> callback, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_create( + final result = GeneratedBindings.instance._Gizmo_createRenderThread( tEngine.cast(), - tMaterialProvider.cast(), + tAssetLoader.cast(), + tGltfResourceLoader.cast(), tNameComponentManager.cast(), + tView.cast(), + tMaterial.cast(), + tGizmoType, + callback.cast(), ); - return Pointer(result); -} - -void GltfAssetLoader_destroy(Pointer tAssetLoader) { - final result = GeneratedBindings.instance._GltfAssetLoader_destroy(tAssetLoader.cast()); return result; } -Pointer GltfAssetLoader_load( +void VertexBufferBuilder_buildRenderThread( + Pointer tBuilder, Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - Dartsize_t length, - int numInstances, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_load( + final result = GeneratedBindings.instance._VertexBufferBuilder_buildRenderThread( + tBuilder.cast(), tEngine.cast(), - tAssetLoader.cast(), - data, - length, - numInstances, + onComplete.cast(), ); - return Pointer(result); + return result; } -Pointer GltfAssetLoader_getMaterialInstance( - Pointer tRenderableManager, - Pointer tAsset, +void VertexBuffer_destroyRenderThread( + Pointer tEngine, + Pointer tBuffer, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialInstance( - tRenderableManager.cast(), - tAsset.cast(), + final result = GeneratedBindings.instance._VertexBuffer_destroyRenderThread( + tEngine.cast(), + tBuffer.cast(), + requestId, + onComplete as Pointer>, ); - return Pointer(result); -} - -Pointer GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader) { - final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialProvider(tAssetLoader.cast()); - return Pointer(result); -} - -int FilamentAsset_getResourceUriCount(Pointer tFilamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getResourceUriCount(tFilamentAsset.cast()); return result; } -Pointer> FilamentAsset_getResourceUris(Pointer tFilamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getResourceUris(tFilamentAsset.cast()); - return Pointer>(result); -} - -Pointer GltfResourceLoader_create(Pointer tEngine) { - final result = GeneratedBindings.instance._GltfResourceLoader_create(tEngine.cast()); - return Pointer(result); +void VertexBuffer_setBufferAtRenderThread( + Pointer tEngine, + Pointer tBuffer, + int bufferIndex, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._VertexBuffer_setBufferAtRenderThread( + tEngine.cast(), + tBuffer.cast(), + bufferIndex, + data, + sizeInBytes, + byteOffset, + requestId, + onComplete as Pointer>, + ); + return result; } -void GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_destroy(tEngine.cast(), tGltfResourceLoader.cast()); +void IndexBufferBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._IndexBufferBuilder_buildRenderThread( + tBuilder.cast(), + tEngine.cast(), + onComplete.cast(), + ); return result; } -bool GltfResourceLoader_asyncBeginLoad( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, +void IndexBuffer_destroyRenderThread( + Pointer tEngine, + Pointer tBuffer, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoad( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), + final result = GeneratedBindings.instance._IndexBuffer_destroyRenderThread( + tEngine.cast(), + tBuffer.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; -} - -void GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoad(tGltfResourceLoader.cast()); - return result; -} - -double GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgress(tGltfResourceLoader.cast()); return result; } -void GltfResourceLoader_addResourceData( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - Dartsize_t length, +void IndexBuffer_setBufferRenderThread( + Pointer tEngine, + Pointer tBuffer, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_addResourceData( - tGltfResourceLoader.cast(), - uri, + final result = GeneratedBindings.instance._IndexBuffer_setBufferRenderThread( + tEngine.cast(), + tBuffer.cast(), data, - length, + sizeInBytes, + byteOffset, + requestId, + onComplete as Pointer>, ); return result; } -bool GltfResourceLoader_loadResources( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, +void RenderableBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + DartEntityId entityId, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_loadResources( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), + final result = GeneratedBindings.instance._RenderableBuilder_buildRenderThread( + tBuilder.cast(), + tEngine.cast(), + entityId, + onComplete.cast(), ); - return result == 1; + return result; } -Pointer RenderManager_create(Pointer tEngine, Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_create(tEngine.cast(), tRenderer.cast()); - return Pointer(result); +void EntityManager_createEntityRenderThread( + Pointer tEntityManager, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._EntityManager_createEntityRenderThread( + tEntityManager.cast(), + onComplete.cast(), + ); + return result; } -void RenderManager_destroy(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_destroy(tRenderer.cast()); +void EntityManager_destroyEntityRenderThread( + Pointer tEntityManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._EntityManager_destroyEntityRenderThread( + tEntityManager.cast(), + entityId, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_addAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, +void TransformManager_setTransformRenderThread( + Pointer tTransformManager, + DartEntityId entityId, + double4x4 transform, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_addAnimationManager( - tRenderer.cast(), - tAnimationManager.cast(), + final transformPtr = transform.address; + final result = GeneratedBindings.instance._TransformManager_setTransformRenderThread( + tTransformManager.cast(), + entityId, + transformPtr.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void RenderManager_removeAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, +void TransformManager_setParentRenderThread( + Pointer tTransformManager, + DartEntityId child, + DartEntityId parent, + bool preserveScaling, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_removeAnimationManager( - tRenderer.cast(), - tAnimationManager.cast(), + final result = GeneratedBindings.instance._TransformManager_setParentRenderThread( + tTransformManager.cast(), + child, + parent, + preserveScaling, + requestId, + onComplete as Pointer>, ); return result; } -void RenderManager_render(Pointer tRenderer, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._RenderManager_render(tRenderer.cast(), frameTimeInNanos.toJSBigInt); +void TransformManager_createComponentRenderThread( + Pointer tTransformManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TransformManager_createComponentRenderThread( + tTransformManager.cast(), + entityId, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_setRenderable( - Pointer tRenderer, - Pointer swapChain, - Pointer> views, - int numViews, +void TransformManager_removeComponentRenderThread( + Pointer tTransformManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_setRenderable( - tRenderer.cast(), - swapChain.cast(), - views.cast(), - numViews, + final result = GeneratedBindings.instance._TransformManager_removeComponentRenderThread( + tTransformManager.cast(), + entityId, + requestId, + onComplete as Pointer>, ); return result; } -void RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain) { - final result = GeneratedBindings.instance._RenderManager_removeSwapChain(tRenderer.cast(), swapChain.cast()); +void RenderableManager_destroyEntityRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_destroyEntityRenderThread( + tRenderableManager.cast(), + entityId, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_requestRender(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_requestRender(tRenderer.cast()); +void RenderableManager_setBonesFromMat4RenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer transforms, + Dartsize_t boneCount, + Dartsize_t offset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4RenderThread( + tRenderableManager.cast(), + entityId, + transforms, + boneCount, + offset, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_attachToRenderThread(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_attachToRenderThread(tRenderer.cast()); +void RenderableManager_setBonesFromBoneRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer bones, + Dartsize_t boneCount, + Dartsize_t offset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_setBonesFromBoneRenderThread( + tRenderableManager.cast(), + entityId, + bones, + boneCount, + offset, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_detachFromRenderThread(Pointer tRenderManager) { - final result = GeneratedBindings.instance._RenderManager_detachFromRenderThread(tRenderManager.cast()); +void RenderableManager_setGeometryAtNonIndexedRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + int type, + Pointer tVertices, + Dartsize_t offset, + Dartsize_t count, + Pointer> callback, +) { + final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexedRenderThread( + tRenderableManager.cast(), + entityId, + primitiveIndex, + type, + tVertices.cast(), + offset, + count, + callback.cast(), + ); return result; } -void RenderManager_setPaused(Pointer tRenderer, bool paused) { - final result = GeneratedBindings.instance._RenderManager_setPaused(tRenderer.cast(), paused); +void RenderableManager_setCastShadowsRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_setCastShadowsRenderThread( + tRenderableManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -int FilamentAsset_getEntityCount(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getEntityCount(filamentAsset.cast()); +void RenderableManager_setReceiveShadowsRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_setReceiveShadowsRenderThread( + tRenderableManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void FilamentAsset_getEntities(Pointer filamentAsset, Pointer out) { - final result = GeneratedBindings.instance._FilamentAsset_getEntities(filamentAsset.cast(), out); +void LightManager_setShadowCasterRenderThread( + Pointer tLightManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._LightManager_setShadowCasterRenderThread( + tLightManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -DartEntityId FilamentAsset_getWireframe(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getWireframe(filamentAsset.cast()); +void LightManager_setShadowOptionsRenderThread( + Pointer tLightManager, + DartEntityId entityId, + TShadowOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._LightManager_setShadowOptionsRenderThread( + tLightManager.cast(), + entityId, + optionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -Pointer FilamentAsset_getSourceAsset(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getSourceAsset(filamentAsset.cast()); - return Pointer(result); -} - void Scene_addEntity(Pointer tScene, DartEntityId entityId) { final result = GeneratedBindings.instance._Scene_addEntity(tScene.cast(), entityId); return result; @@ -8759,39 +8815,34 @@ void Scene_addFilamentAsset(Pointer tScene, Pointer asse return result; } -void FrameScheduler_startWithCallback(DartFrameTickCallback tickCallback, int targetFps) { - final result = GeneratedBindings.instance._FrameScheduler_startWithCallback( - tickCallback as Pointer>, - targetFps, +/// Walks every renderable primitive in the scene and records the ones whose +/// current MaterialInstance belongs to [tMaterial]. +/// +/// Returns the TOTAL number of matches (which may exceed [capacity]). When +/// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to +/// [capacity] matches are written to them. Call once with null buffers to +/// size the output, then again to fetch it. +Dartsize_t Scene_scanForMaterial( + Pointer tScene, + Pointer tRenderableManager, + Pointer tMaterial, + Pointer outEntities, + Pointer outPrimitives, + Pointer> outInstances, + Dartsize_t capacity, +) { + final result = GeneratedBindings.instance._Scene_scanForMaterial( + tScene.cast(), + tRenderableManager.cast(), + tMaterial.cast(), + outEntities, + outPrimitives, + outInstances.cast(), + capacity, ); return result; } -void FrameScheduler_stop() { - final result = GeneratedBindings.instance._FrameScheduler_stop(); - return result; -} - -int FrameScheduler_initDartApi(Pointer data) { - final result = GeneratedBindings.instance._FrameScheduler_initDartApi(data); - return result; -} - -void FrameScheduler_startWithPort(BigInt port, int targetFps) { - final result = GeneratedBindings.instance._FrameScheduler_startWithPort(port.toJSBigInt, targetFps); - return result; -} - -void FrameScheduler_setTargetFps(int fps) { - final result = GeneratedBindings.instance._FrameScheduler_setTargetFps(fps); - return result; -} - -BigInt FrameScheduler_steadyClockUs() { - final result = GeneratedBindings.instance._FrameScheduler_steadyClockUs(); - return result.toDart; -} - void MovementIntentExecutor_destroy(Pointer executor) { final result = GeneratedBindings.instance._MovementIntentExecutor_destroy(executor.cast()); return result; @@ -8899,19 +8950,202 @@ void TransformPipeline_addMouseButtonBinding(int mouseButton, int intentAction, return result; } -void TransformPipeline_removeMouseButtonBindings(int mouseButton) { - final result = GeneratedBindings.instance._TransformPipeline_removeMouseButtonBindings(mouseButton); - return result; +void TransformPipeline_removeMouseButtonBindings(int mouseButton) { + final result = GeneratedBindings.instance._TransformPipeline_removeMouseButtonBindings(mouseButton); + return result; +} + +void TransformPipeline_setMouseSensitivity(double sensitivity) { + final result = GeneratedBindings.instance._TransformPipeline_setMouseSensitivity(sensitivity); + return result; +} + +void TransformPipeline_setInvertMouseY(int invert) { + final result = GeneratedBindings.instance._TransformPipeline_setInvertMouseY(invert); + return result; +} + +extension TAnimationManagerExt on Pointer { + TAnimationManager toDart() { + return TAnimationManager(this); + } +} + +final class TAnimationManager extends Struct { + Pointer get address => super.address.cast(); + TAnimationManager(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + +extension TEngineExt on Pointer { + TEngine toDart() { + return TEngine(this); + } +} + +final class TEngine extends Struct { + Pointer get address => super.address.cast(); + TEngine(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + +extension TSceneAssetExt on Pointer { + TSceneAsset toDart() { + return TSceneAsset(this); + } +} + +final class TSceneAsset extends Struct { + Pointer get address => super.address.cast(); + TSceneAsset(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + +typedef EntityId = int; +typedef DartEntityId = int; + +extension TCameraExt on Pointer { + TCamera toDart() { + return TCamera(this); + } +} + +final class TCamera extends Struct { + Pointer get address => super.address.cast(); + TCamera(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + +extension double4x4Ext on Pointer { + double4x4 toDart() { + return double4x4(this); + } +} + +final class double4x4 extends Struct { + Pointer get address => super.address.cast(); + Array get col1 { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 0))); + } + + set col1(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.internal.addr.addr.toJS, '*'); + } + + Array get col2 { + final addr = Pointer(this.address.addr + 32); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 32))); + } + + set col2(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 32), val.internal.addr.addr.toJS, '*'); + } + + Array get col3 { + final addr = Pointer(this.address.addr + 64); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 64))); + } + + set col3(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 64), val.internal.addr.addr.toJS, '*'); + } + + Array get col4 { + final addr = Pointer(this.address.addr + 96); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 96))); + } + + set col4(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 96), val.internal.addr.addr.toJS, '*'); + } + + double4x4(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(128)); + } +} + +extension double3Ext on Pointer { + double3 toDart() { + return double3(this); + } +} + +final class double3 extends Struct { + Pointer get address => super.address.cast(); + double get x { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } + + set x(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'double'); + } + + double get y { + final addr = Pointer(this.address.addr + 8); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } + + set y(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'double'); + } + + double get z { + final addr = Pointer(this.address.addr + 16); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } + + set z(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'double'); + } + + double3(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(24)); + } +} + +sealed class TProjection { + static const Perspective = 0; + static const Orthographic = 1; } -void TransformPipeline_setMouseSensitivity(double sensitivity) { - final result = GeneratedBindings.instance._TransformPipeline_setMouseSensitivity(sensitivity); - return result; +extension TFilamentAssetExt on Pointer { + TFilamentAsset toDart() { + return TFilamentAsset(this); + } } -void TransformPipeline_setInvertMouseY(int invert) { - final result = GeneratedBindings.instance._TransformPipeline_setInvertMouseY(invert); - return result; +final class TFilamentAsset extends Struct { + Pointer get address => super.address.cast(); + TFilamentAsset(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } } extension TViewportExt on Pointer { @@ -8999,21 +9233,6 @@ final class TToneMapper extends Struct { } } -extension TEngineExt on Pointer { - TEngine toDart() { - return TEngine(this); - } -} - -final class TEngine extends Struct { - Pointer get address => super.address.cast(); - TEngine(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - extension TColorGradingBuilderExt on Pointer { TColorGradingBuilder toDart() { return TColorGradingBuilder(this); @@ -9210,21 +9429,6 @@ final class TVsmShadowOptions extends Struct { } } -extension TCameraExt on Pointer { - TCamera toDart() { - return TCamera(this); - } -} - -final class TCamera extends Struct { - Pointer get address => super.address.cast(); - TCamera(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - extension TSceneExt on Pointer { TScene toDart() { return TScene(this); @@ -9847,8 +10051,6 @@ typedef PickCallbackFunction = void Function(int requestId, EntityId entityId, double depth, double fragX, double fragY, double fragZ); typedef DartPickCallbackFunction = void Function(int requestId, DartEntityId entityId, double depth, double fragX, double fragY, double fragZ); -typedef EntityId = int; -typedef DartEntityId = int; sealed class TGizmoPickResultType { static const AxisX = 0; @@ -9949,401 +10151,259 @@ sealed class TGizmoAxis { static const Z = 2; } -extension TMaterialInstanceExt on Pointer { - TMaterialInstance toDart() { - return TMaterialInstance(this); - } -} - -final class TMaterialInstance extends Struct { - Pointer get address => super.address.cast(); - TMaterialInstance(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -sealed class TFeatureLevel { - static const FEATURE_LEVEL_0 = 0; - static const FEATURE_LEVEL_1 = 1; - static const FEATURE_LEVEL_2 = 2; - static const FEATURE_LEVEL_3 = 3; -} - -sealed class TCullingMode { - static const CULLING_MODE_NONE = 0; - static const CULLING_MODE_FRONT = 1; - static const CULLING_MODE_BACK = 2; - static const CULLING_MODE_FRONT_AND_BACK = 3; -} - -extension TTextureSamplerExt on Pointer { - TTextureSampler toDart() { - return TTextureSampler(this); - } -} - -final class TTextureSampler extends Struct { - Pointer get address => super.address.cast(); - TTextureSampler(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -sealed class TSamplerCompareFunc { - /// !< Less or equal - static const LE = 0; - - /// !< Greater or equal - static const GE = 1; - - /// !< Strictly less than - static const L = 2; - - /// !< Strictly greater than - static const G = 3; - - /// !< Equal - static const E = 4; - - /// !< Not equal - static const NE = 5; - - /// !< Always. Depth / stencil testing is deactivated. - static const A = 6; - - /// !< Never. The depth / stencil test always fails. - static const N = 7; -} - -sealed class TStencilOperation { - static const KEEP = 0; - static const ZERO = 1; - static const REPLACE = 2; - static const INCR = 3; - static const INCR_WRAP = 4; - static const DECR = 5; - static const DECR_WRAP = 6; - static const INVERT = 7; -} - -sealed class TStencilFace { - static const STENCIL_FACE_FRONT = 1; - static const STENCIL_FACE_BACK = 2; - static const STENCIL_FACE_FRONT_AND_BACK = 3; -} - -sealed class TTransparencyMode { - /// ! the transparent object is drawn honoring the raster state - static const DEFAULT = 0; - - /// the transparent object is first drawn in the depth buffer, - /// then in the color buffer, honoring the culling mode, but ignoring the depth test function - static const TWO_PASSES_ONE_SIDE = 1; - - /// the transparent object is drawn twice in the color buffer, - /// first with back faces only, then with front faces; the culling - /// mode is ignored. Can be combined with two-sided lighting - static const TWO_PASSES_TWO_SIDES = 2; -} - -sealed class TBlendingMode { - static const BLENDING_MODE_OPAQUE = 0; - static const BLENDING_MODE_TRANSPARENT = 1; - static const BLENDING_MODE_ADD = 2; - static const BLENDING_MODE_MASKED = 3; - static const BLENDING_MODE_FADE = 4; - static const BLENDING_MODE_MULTIPLY = 5; - static const BLENDING_MODE_SCREEN = 6; - static const BLENDING_MODE_CUSTOM = 7; -} - -extension TSceneAssetExt on Pointer { - TSceneAsset toDart() { - return TSceneAsset(this); - } -} - -final class TSceneAsset extends Struct { - Pointer get address => super.address.cast(); - TSceneAsset(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -extension TVertexBufferExt on Pointer { - TVertexBuffer toDart() { - return TVertexBuffer(this); - } -} - -final class TVertexBuffer extends Struct { - Pointer get address => super.address.cast(); - TVertexBuffer(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -extension TIndexBufferExt on Pointer { - TIndexBuffer toDart() { - return TIndexBuffer(this); - } -} - -final class TIndexBuffer extends Struct { - Pointer get address => super.address.cast(); - TIndexBuffer(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); +extension TMaterialProviderExt on Pointer { + TMaterialProvider toDart() { + return TMaterialProvider(this); } } -sealed class TPrimitiveType { - /// !< points - static const PRIMITIVETYPE_POINTS = 0; - - /// !< lines - static const PRIMITIVETYPE_LINES = 1; - - /// !< line strip - static const PRIMITIVETYPE_LINE_STRIP = 3; - - /// !< triangles - static const PRIMITIVETYPE_TRIANGLES = 4; - - /// !< triangle strip - static const PRIMITIVETYPE_TRIANGLE_STRIP = 5; -} +final class TMaterialProvider extends Struct { + Pointer get address => super.address.cast(); + TMaterialProvider(super.address); -extension Aabb3Ext on Pointer { - Aabb3 toDart() { - return Aabb3(this); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -final class Aabb3 extends Struct { - Pointer get address => super.address.cast(); - double get centerX { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; - } - - set centerX(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'float'); - } +typedef size_t = int; +typedef Dartsize_t = int; - double get centerY { - final addr = Pointer(this.address.addr + 4); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; +extension TMaterialInstanceExt on Pointer { + TMaterialInstance toDart() { + return TMaterialInstance(this); } +} - set centerY(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 4), val.toJS, 'float'); - } +final class TMaterialInstance extends Struct { + Pointer get address => super.address.cast(); + TMaterialInstance(super.address); - double get centerZ { - final addr = Pointer(this.address.addr + 8); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - set centerZ(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'float'); +extension TRenderableManagerExt on Pointer { + TRenderableManager toDart() { + return TRenderableManager(this); } +} - double get halfExtentX { - final addr = Pointer(this.address.addr + 12); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; - } +final class TRenderableManager extends Struct { + Pointer get address => super.address.cast(); + TRenderableManager(super.address); - set halfExtentX(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 12), val.toJS, 'float'); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - double get halfExtentY { - final addr = Pointer(this.address.addr + 16); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; +extension TMeshDataExt on Pointer { + TMeshData toDart() { + return TMeshData(this); } +} - set halfExtentY(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'float'); - } +final class TMeshData extends Struct { + Pointer get address => super.address.cast(); + TMeshData(super.address); - double get halfExtentZ { - final addr = Pointer(this.address.addr + 20); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - set halfExtentZ(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 20), val.toJS, 'float'); +extension TIndexBufferBuilderExt on Pointer { + TIndexBufferBuilder toDart() { + return TIndexBufferBuilder(this); } +} - Aabb3(super.address); +final class TIndexBufferBuilder extends Struct { + Pointer get address => super.address.cast(); + TIndexBufferBuilder(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(24)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TFilamentAssetExt on Pointer { - TFilamentAsset toDart() { - return TFilamentAsset(this); +sealed class TIndexType { + static const TINDEX_TYPE_USHORT = 0; + static const TINDEX_TYPE_UINT = 1; +} + +extension TIndexBufferExt on Pointer { + TIndexBuffer toDart() { + return TIndexBuffer(this); } } -final class TFilamentAsset extends Struct { - Pointer get address => super.address.cast(); - TFilamentAsset(super.address); +final class TIndexBuffer extends Struct { + Pointer get address => super.address.cast(); + TIndexBuffer(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -sealed class TSceneAssetType { - static const SCENE_ASSET_TYPE_GLTF = 0; - static const SCENE_ASSET_TYPE_GEOMETRY = 1; - static const SCENE_ASSET_TYPE_LIGHT = 2; - static const SCENE_ASSET_TYPE_SKYBOX = 3; - static const SCENE_ASSET_TYPE_IBL = 4; - static const SCENE_ASSET_TYPE_IMAGE = 5; - static const SCENE_ASSET_TYPE_GIZMO = 6; +extension TIndirectLightExt on Pointer { + TIndirectLight toDart() { + return TIndirectLight(this); + } } -typedef size_t = int; -typedef Dartsize_t = int; +final class TIndirectLight extends Struct { + Pointer get address => super.address.cast(); + TIndirectLight(super.address); -extension double4x4Ext on Pointer { - double4x4 toDart() { - return double4x4(this); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -final class double4x4 extends Struct { - Pointer get address => super.address.cast(); - Array get col1 { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 0))); +extension TRenderManagerExt on Pointer { + TRenderManager toDart() { + return TRenderManager(this); } +} - set col1(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.internal.addr.addr.toJS, '*'); - } +final class TRenderManager extends Struct { + Pointer get address => super.address.cast(); + TRenderManager(super.address); - Array get col2 { - final addr = Pointer(this.address.addr + 32); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 32))); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - set col2(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 32), val.internal.addr.addr.toJS, '*'); +extension TRendererExt on Pointer { + TRenderer toDart() { + return TRenderer(this); } +} - Array get col3 { - final addr = Pointer(this.address.addr + 64); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 64))); - } +final class TRenderer extends Struct { + Pointer get address => super.address.cast(); + TRenderer(super.address); - set col3(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 64), val.internal.addr.addr.toJS, '*'); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - Array get col4 { - final addr = Pointer(this.address.addr + 96); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 96))); +extension TSwapChainExt on Pointer { + TSwapChain toDart() { + return TSwapChain(this); } +} - set col4(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 96), val.internal.addr.addr.toJS, '*'); +final class TSwapChain extends Struct { + Pointer get address => super.address.cast(); + TSwapChain(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - double4x4(super.address); +sealed class TFeatureLevel { + static const FEATURE_LEVEL_0 = 0; + static const FEATURE_LEVEL_1 = 1; + static const FEATURE_LEVEL_2 = 2; + static const FEATURE_LEVEL_3 = 3; +} - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(128)); - } +sealed class TCullingMode { + static const CULLING_MODE_NONE = 0; + static const CULLING_MODE_FRONT = 1; + static const CULLING_MODE_BACK = 2; + static const CULLING_MODE_FRONT_AND_BACK = 3; } -extension double3Ext on Pointer { - double3 toDart() { - return double3(this); +extension TTextureSamplerExt on Pointer { + TTextureSampler toDart() { + return TTextureSampler(this); } } -final class double3 extends Struct { - Pointer get address => super.address.cast(); - double get x { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } +final class TTextureSampler extends Struct { + Pointer get address => super.address.cast(); + TTextureSampler(super.address); - set x(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'double'); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - double get y { - final addr = Pointer(this.address.addr + 8); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } +sealed class TSamplerCompareFunc { + /// !< Less or equal + static const LE = 0; - set y(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'double'); - } + /// !< Greater or equal + static const GE = 1; - double get z { - final addr = Pointer(this.address.addr + 16); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } + /// !< Strictly less than + static const L = 2; - set z(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'double'); - } + /// !< Strictly greater than + static const G = 3; - double3(super.address); + /// !< Equal + static const E = 4; - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(24)); - } + /// !< Not equal + static const NE = 5; + + /// !< Always. Depth / stencil testing is deactivated. + static const A = 6; + + /// !< Never. The depth / stencil test always fails. + static const N = 7; +} + +sealed class TStencilOperation { + static const KEEP = 0; + static const ZERO = 1; + static const REPLACE = 2; + static const INCR = 3; + static const INCR_WRAP = 4; + static const DECR = 5; + static const DECR_WRAP = 6; + static const INVERT = 7; } -sealed class TProjection { - static const Perspective = 0; - static const Orthographic = 1; +sealed class TStencilFace { + static const STENCIL_FACE_FRONT = 1; + static const STENCIL_FACE_BACK = 2; + static const STENCIL_FACE_FRONT_AND_BACK = 3; } -extension TMeshDataExt on Pointer { - TMeshData toDart() { - return TMeshData(this); - } -} +sealed class TTransparencyMode { + /// ! the transparent object is drawn honoring the raster state + static const DEFAULT = 0; -final class TMeshData extends Struct { - Pointer get address => super.address.cast(); - TMeshData(super.address); + /// the transparent object is first drawn in the depth buffer, + /// then in the color buffer, honoring the culling mode, but ignoring the depth test function + static const TWO_PASSES_ONE_SIDE = 1; - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } + /// the transparent object is drawn twice in the color buffer, + /// first with back faces only, then with front faces; the culling + /// mode is ignored. Can be combined with two-sided lighting + static const TWO_PASSES_TWO_SIDES = 2; +} + +sealed class TBlendingMode { + static const BLENDING_MODE_OPAQUE = 0; + static const BLENDING_MODE_TRANSPARENT = 1; + static const BLENDING_MODE_ADD = 2; + static const BLENDING_MODE_MASKED = 3; + static const BLENDING_MODE_FADE = 4; + static const BLENDING_MODE_MULTIPLY = 5; + static const BLENDING_MODE_SCREEN = 6; + static const BLENDING_MODE_CUSTOM = 7; } sealed class TTextureSamplerType { @@ -10637,185 +10697,165 @@ sealed class TSamplerCompareMode { static const COMPARE_MODE_COMPARE_TO_TEXTURE = 1; } -sealed class TBackend { - /// !< Automatically selects an appropriate driver for the platform. - static const BACKEND_DEFAULT = 0; - - /// !< Selects the OpenGL/ES driver (default on Android) - static const BACKEND_OPENGL = 1; - - /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) - static const BACKEND_VULKAN = 2; - - /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). - static const BACKEND_METAL = 3; - - /// !< Selects the no-op driver for testing purposes. - static const BACKEND_NOOP = 4; -} - -extension TRendererExt on Pointer { - TRenderer toDart() { - return TRenderer(this); +extension TVertexBufferExt on Pointer { + TVertexBuffer toDart() { + return TVertexBuffer(this); } } -final class TRenderer extends Struct { - Pointer get address => super.address.cast(); - TRenderer(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} +final class TVertexBuffer extends Struct { + Pointer get address => super.address.cast(); + TVertexBuffer(super.address); -extension TSwapChainExt on Pointer { - TSwapChain toDart() { - return TSwapChain(this); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -final class TSwapChain extends Struct { - Pointer get address => super.address.cast(); - TSwapChain(super.address); +sealed class TPrimitiveType { + /// !< points + static const PRIMITIVETYPE_POINTS = 0; - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} + /// !< lines + static const PRIMITIVETYPE_LINES = 1; -extension TTransformManagerExt on Pointer { - TTransformManager toDart() { - return TTransformManager(this); - } -} + /// !< line strip + static const PRIMITIVETYPE_LINE_STRIP = 3; -final class TTransformManager extends Struct { - Pointer get address => super.address.cast(); - TTransformManager(super.address); + /// !< triangles + static const PRIMITIVETYPE_TRIANGLES = 4; - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } + /// !< triangle strip + static const PRIMITIVETYPE_TRIANGLE_STRIP = 5; } -extension TRenderableManagerExt on Pointer { - TRenderableManager toDart() { - return TRenderableManager(this); +extension Aabb3Ext on Pointer { + Aabb3 toDart() { + return Aabb3(this); } } -final class TRenderableManager extends Struct { - Pointer get address => super.address.cast(); - TRenderableManager(super.address); +final class Aabb3 extends Struct { + Pointer get address => super.address.cast(); + double get centerX { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + set centerX(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'float'); } -} -extension TLightManagerExt on Pointer { - TLightManager toDart() { - return TLightManager(this); + double get centerY { + final addr = Pointer(this.address.addr + 4); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; } -} -final class TLightManager extends Struct { - Pointer get address => super.address.cast(); - TLightManager(super.address); + set centerY(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 4), val.toJS, 'float'); + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + double get centerZ { + final addr = Pointer(this.address.addr + 8); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; } -} -extension TEntityManagerExt on Pointer { - TEntityManager toDart() { - return TEntityManager(this); + set centerZ(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'float'); } -} -final class TEntityManager extends Struct { - Pointer get address => super.address.cast(); - TEntityManager(super.address); + double get halfExtentX { + final addr = Pointer(this.address.addr + 12); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + set halfExtentX(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 12), val.toJS, 'float'); } -} -extension TFenceExt on Pointer { - TFence toDart() { - return TFence(this); + double get halfExtentY { + final addr = Pointer(this.address.addr + 16); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; } -} -final class TFence extends Struct { - Pointer get address => super.address.cast(); - TFence(super.address); + set halfExtentY(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'float'); + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + double get halfExtentZ { + final addr = Pointer(this.address.addr + 20); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; } -} -extension TSkyboxExt on Pointer { - TSkybox toDart() { - return TSkybox(this); + set halfExtentZ(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 20), val.toJS, 'float'); } -} -final class TSkybox extends Struct { - Pointer get address => super.address.cast(); - TSkybox(super.address); + Aabb3(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(24)); } } -extension TIndirectLightExt on Pointer { - TIndirectLight toDart() { - return TIndirectLight(this); +sealed class TSceneAssetType { + static const SCENE_ASSET_TYPE_GLTF = 0; + static const SCENE_ASSET_TYPE_GEOMETRY = 1; + static const SCENE_ASSET_TYPE_LIGHT = 2; + static const SCENE_ASSET_TYPE_SKYBOX = 3; + static const SCENE_ASSET_TYPE_IBL = 4; + static const SCENE_ASSET_TYPE_IMAGE = 5; + static const SCENE_ASSET_TYPE_GIZMO = 6; +} + +extension TSurfaceOrientationBuilderExt on Pointer { + TSurfaceOrientationBuilder toDart() { + return TSurfaceOrientationBuilder(this); } } -final class TIndirectLight extends Struct { - Pointer get address => super.address.cast(); - TIndirectLight(super.address); +final class TSurfaceOrientationBuilder extends Struct { + Pointer get address => super.address.cast(); + TSurfaceOrientationBuilder(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TDebugRegistryExt on Pointer { - TDebugRegistry toDart() { - return TDebugRegistry(this); +extension TSurfaceOrientationExt on Pointer { + TSurfaceOrientation toDart() { + return TSurfaceOrientation(this); } } -final class TDebugRegistry extends Struct { - Pointer get address => super.address.cast(); - TDebugRegistry(super.address); +final class TSurfaceOrientation extends Struct { + Pointer get address => super.address.cast(); + TSurfaceOrientation(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TMaterialProviderExt on Pointer { - TMaterialProvider toDart() { - return TMaterialProvider(this); +extension TTransformManagerExt on Pointer { + TTransformManager toDart() { + return TTransformManager(this); } } -final class TMaterialProvider extends Struct { - Pointer get address => super.address.cast(); - TMaterialProvider(super.address); +final class TTransformManager extends Struct { + Pointer get address => super.address.cast(); + TTransformManager(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } @@ -10881,26 +10921,26 @@ sealed class TVertexAttributeType { static const TVERTEXATTRIBUTE_TYPE_HALF4 = 25; } -extension TIndexBufferBuilderExt on Pointer { - TIndexBufferBuilder toDart() { - return TIndexBufferBuilder(this); +typedef FrameTickCallback = Pointer>; +typedef DartFrameTickCallback = Pointer>; +typedef FrameTickCallbackFunction = void Function(JSBigInt frameTimeNanos); +typedef DartFrameTickCallbackFunction = void Function(BigInt frameTimeNanos); + +extension TLightManagerExt on Pointer { + TLightManager toDart() { + return TLightManager(this); } } -final class TIndexBufferBuilder extends Struct { - Pointer get address => super.address.cast(); - TIndexBufferBuilder(super.address); +final class TLightManager extends Struct { + Pointer get address => super.address.cast(); + TLightManager(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -sealed class TIndexType { - static const TINDEX_TYPE_USHORT = 0; - static const TINDEX_TYPE_UINT = 1; -} - sealed class TLightType { static const LIGHT_TYPE_SUN = 0; static const LIGHT_TYPE_DIRECTIONAL = 1; @@ -11184,86 +11224,98 @@ final class TShadowOptions extends Struct { } } -extension TRenderManagerExt on Pointer { - TRenderManager toDart() { - return TRenderManager(this); +extension TRenderableBuilderExt on Pointer { + TRenderableBuilder toDart() { + return TRenderableBuilder(this); } } -final class TRenderManager extends Struct { - Pointer get address => super.address.cast(); - TRenderManager(super.address); +final class TRenderableBuilder extends Struct { + Pointer get address => super.address.cast(); + TRenderableBuilder(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TAnimationManagerExt on Pointer { - TAnimationManager toDart() { - return TAnimationManager(this); +extension TSkyboxExt on Pointer { + TSkybox toDart() { + return TSkybox(this); } } -final class TAnimationManager extends Struct { - Pointer get address => super.address.cast(); - TAnimationManager(super.address); +final class TSkybox extends Struct { + Pointer get address => super.address.cast(); + TSkybox(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TRenderableBuilderExt on Pointer { - TRenderableBuilder toDart() { - return TRenderableBuilder(this); +sealed class TBackend { + /// !< Automatically selects an appropriate driver for the platform. + static const BACKEND_DEFAULT = 0; + + /// !< Selects the OpenGL/ES driver (default on Android) + static const BACKEND_OPENGL = 1; + + /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) + static const BACKEND_VULKAN = 2; + + /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). + static const BACKEND_METAL = 3; + + /// !< Selects the no-op driver for testing purposes. + static const BACKEND_NOOP = 4; +} + +extension TEntityManagerExt on Pointer { + TEntityManager toDart() { + return TEntityManager(this); } } -final class TRenderableBuilder extends Struct { - Pointer get address => super.address.cast(); - TRenderableBuilder(super.address); +final class TEntityManager extends Struct { + Pointer get address => super.address.cast(); + TEntityManager(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TSurfaceOrientationBuilderExt on Pointer { - TSurfaceOrientationBuilder toDart() { - return TSurfaceOrientationBuilder(this); +extension TFenceExt on Pointer { + TFence toDart() { + return TFence(this); } } -final class TSurfaceOrientationBuilder extends Struct { - Pointer get address => super.address.cast(); - TSurfaceOrientationBuilder(super.address); +final class TFence extends Struct { + Pointer get address => super.address.cast(); + TFence(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TSurfaceOrientationExt on Pointer { - TSurfaceOrientation toDart() { - return TSurfaceOrientation(this); +extension TDebugRegistryExt on Pointer { + TDebugRegistry toDart() { + return TDebugRegistry(this); } } -final class TSurfaceOrientation extends Struct { - Pointer get address => super.address.cast(); - TSurfaceOrientation(super.address); +final class TDebugRegistry extends Struct { + Pointer get address => super.address.cast(); + TDebugRegistry(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -typedef FrameTickCallback = Pointer>; -typedef DartFrameTickCallback = Pointer>; -typedef FrameTickCallbackFunction = void Function(JSBigInt frameTimeNanos); -typedef DartFrameTickCallbackFunction = void Function(BigInt frameTimeNanos); - extension TMovementIntentExecutorExt on Pointer { TMovementIntentExecutor toDart() { return TMovementIntentExecutor(this); @@ -11309,6 +11361,27 @@ const int SPRINT_INTENT_MASK = 8; extension StructAllocator on Struct { static T create() { switch (T) { + case TAnimationManager: + final ptr = TAnimationManager.stackAlloc(); + return ptr.toDart() as T; + case TEngine: + final ptr = TEngine.stackAlloc(); + return ptr.toDart() as T; + case TSceneAsset: + final ptr = TSceneAsset.stackAlloc(); + return ptr.toDart() as T; + case TCamera: + final ptr = TCamera.stackAlloc(); + return ptr.toDart() as T; + case double4x4: + final ptr = double4x4.stackAlloc(); + return ptr.toDart() as T; + case double3: + final ptr = double3.stackAlloc(); + return ptr.toDart() as T; + case TFilamentAsset: + final ptr = TFilamentAsset.stackAlloc(); + return ptr.toDart() as T; case TViewport: final ptr = TViewport.stackAlloc(); return ptr.toDart() as T; @@ -11318,9 +11391,6 @@ extension StructAllocator on Struct { case TToneMapper: final ptr = TToneMapper.stackAlloc(); return ptr.toDart() as T; - case TEngine: - final ptr = TEngine.stackAlloc(); - return ptr.toDart() as T; case TColorGradingBuilder: final ptr = TColorGradingBuilder.stackAlloc(); return ptr.toDart() as T; @@ -11336,9 +11406,6 @@ extension StructAllocator on Struct { case TVsmShadowOptions: final ptr = TVsmShadowOptions.stackAlloc(); return ptr.toDart() as T; - case TCamera: - final ptr = TCamera.stackAlloc(); - return ptr.toDart() as T; case TScene: final ptr = TScene.stackAlloc(); return ptr.toDart() as T; @@ -11372,35 +11439,38 @@ extension StructAllocator on Struct { case TMaterial: final ptr = TMaterial.stackAlloc(); return ptr.toDart() as T; + case TMaterialProvider: + final ptr = TMaterialProvider.stackAlloc(); + return ptr.toDart() as T; case TMaterialInstance: final ptr = TMaterialInstance.stackAlloc(); return ptr.toDart() as T; - case TTextureSampler: - final ptr = TTextureSampler.stackAlloc(); + case TRenderableManager: + final ptr = TRenderableManager.stackAlloc(); return ptr.toDart() as T; - case TSceneAsset: - final ptr = TSceneAsset.stackAlloc(); + case TMeshData: + final ptr = TMeshData.stackAlloc(); return ptr.toDart() as T; - case TVertexBuffer: - final ptr = TVertexBuffer.stackAlloc(); + case TIndexBufferBuilder: + final ptr = TIndexBufferBuilder.stackAlloc(); return ptr.toDart() as T; case TIndexBuffer: final ptr = TIndexBuffer.stackAlloc(); return ptr.toDart() as T; - case Aabb3: - final ptr = Aabb3.stackAlloc(); + case TIndirectLight: + final ptr = TIndirectLight.stackAlloc(); return ptr.toDart() as T; - case TFilamentAsset: - final ptr = TFilamentAsset.stackAlloc(); + case TRenderManager: + final ptr = TRenderManager.stackAlloc(); return ptr.toDart() as T; - case double4x4: - final ptr = double4x4.stackAlloc(); + case TRenderer: + final ptr = TRenderer.stackAlloc(); return ptr.toDart() as T; - case double3: - final ptr = double3.stackAlloc(); + case TSwapChain: + final ptr = TSwapChain.stackAlloc(); return ptr.toDart() as T; - case TMeshData: - final ptr = TMeshData.stackAlloc(); + case TTextureSampler: + final ptr = TTextureSampler.stackAlloc(); return ptr.toDart() as T; case TLinearImage: final ptr = TLinearImage.stackAlloc(); @@ -11408,63 +11478,45 @@ extension StructAllocator on Struct { case TKtx1Bundle: final ptr = TKtx1Bundle.stackAlloc(); return ptr.toDart() as T; - case TRenderer: - final ptr = TRenderer.stackAlloc(); + case TVertexBuffer: + final ptr = TVertexBuffer.stackAlloc(); return ptr.toDart() as T; - case TSwapChain: - final ptr = TSwapChain.stackAlloc(); + case Aabb3: + final ptr = Aabb3.stackAlloc(); + return ptr.toDart() as T; + case TSurfaceOrientationBuilder: + final ptr = TSurfaceOrientationBuilder.stackAlloc(); + return ptr.toDart() as T; + case TSurfaceOrientation: + final ptr = TSurfaceOrientation.stackAlloc(); return ptr.toDart() as T; case TTransformManager: final ptr = TTransformManager.stackAlloc(); return ptr.toDart() as T; - case TRenderableManager: - final ptr = TRenderableManager.stackAlloc(); + case TVertexBufferBuilder: + final ptr = TVertexBufferBuilder.stackAlloc(); return ptr.toDart() as T; case TLightManager: final ptr = TLightManager.stackAlloc(); return ptr.toDart() as T; - case TEntityManager: - final ptr = TEntityManager.stackAlloc(); + case TShadowOptions: + final ptr = TShadowOptions.stackAlloc(); return ptr.toDart() as T; - case TFence: - final ptr = TFence.stackAlloc(); + case TRenderableBuilder: + final ptr = TRenderableBuilder.stackAlloc(); return ptr.toDart() as T; case TSkybox: final ptr = TSkybox.stackAlloc(); return ptr.toDart() as T; - case TIndirectLight: - final ptr = TIndirectLight.stackAlloc(); + case TEntityManager: + final ptr = TEntityManager.stackAlloc(); + return ptr.toDart() as T; + case TFence: + final ptr = TFence.stackAlloc(); return ptr.toDart() as T; case TDebugRegistry: final ptr = TDebugRegistry.stackAlloc(); return ptr.toDart() as T; - case TMaterialProvider: - final ptr = TMaterialProvider.stackAlloc(); - return ptr.toDart() as T; - case TVertexBufferBuilder: - final ptr = TVertexBufferBuilder.stackAlloc(); - return ptr.toDart() as T; - case TIndexBufferBuilder: - final ptr = TIndexBufferBuilder.stackAlloc(); - return ptr.toDart() as T; - case TShadowOptions: - final ptr = TShadowOptions.stackAlloc(); - return ptr.toDart() as T; - case TRenderManager: - final ptr = TRenderManager.stackAlloc(); - return ptr.toDart() as T; - case TAnimationManager: - final ptr = TAnimationManager.stackAlloc(); - return ptr.toDart() as T; - case TRenderableBuilder: - final ptr = TRenderableBuilder.stackAlloc(); - return ptr.toDart() as T; - case TSurfaceOrientationBuilder: - final ptr = TSurfaceOrientationBuilder.stackAlloc(); - return ptr.toDart() as T; - case TSurfaceOrientation: - final ptr = TSurfaceOrientation.stackAlloc(); - return ptr.toDart() as T; case TMovementIntentExecutor: final ptr = TMovementIntentExecutor.stackAlloc(); return ptr.toDart() as T; diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index 81ca9a762..e085cd4cb 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -265,7 +265,9 @@ class FFIFilamentApp extends FilamentApp { // Future createScene() async { - return FFIScene(Engine_createScene(engine), this); + final scene = FFIScene(Engine_createScene(engine), this); + _scenes.add(scene); + return scene; } // @@ -737,6 +739,183 @@ class FFIFilamentApp extends FilamentApp { await renderableManager.setMaterialInstanceAt(entity, index, materialInstance); } + /// Scenes created by this app, for scans that must walk scene contents + /// (see [findRenderablesUsingMaterial]). Kept in creation order; pruned in + /// [destroyScene]. + final _scenes = []; + + /// One wrapper per live native MaterialInstance pointer. + /// + /// Filament instances are write-only, so parameter/raster state is recorded + /// on the Dart wrapper (MaterialInstanceShadowState) rather than read back + /// from native. Returning the *same* wrapper for repeated lookups of one + /// native instance is what keeps that recording complete — otherwise each + /// getMaterialInstanceAt would hand out a fresh wrapper with an empty + /// recording and a later reload would silently drop earlier mutations. + final _materialInstanceWrappers = , FFIMaterialInstance>{}; + + /// Attachments made through [setMaterialInstanceAt], keyed by the attached + /// instance. The scene scan in [findRenderablesUsingMaterial] cannot see + /// renderables that are not in a scene yet; this records them so a reload + /// can still re-point them before destroying the old instances. + final _materialInstanceAttachments = , Set<(ThermionEntity, int)>>{}; + + /// Returns the wrapper for [pointer], creating (and caching) it on first + /// use. Callers that hold the returned wrapper must not use it after the + /// underlying instance has been destroyed. + FFIMaterialInstance getOrCreateMaterialInstanceWrapper(Pointer pointer) { + return _materialInstanceWrappers.putIfAbsent(pointer, () => FFIMaterialInstance(pointer, this)); + } + + /// Caches [instance] as the sole wrapper for its native pointer (used when + /// a new instance is created, where there is no pre-existing wrapper). + void adoptMaterialInstance(FFIMaterialInstance instance) { + _materialInstanceWrappers[instance.pointer] = instance; + } + + /// Drops the wrapper and attachment records for [instance]. Called when the + /// instance is destroyed. + void forgetMaterialInstance(FFIMaterialInstance instance) { + _materialInstanceWrappers.remove(instance.pointer); + _materialInstanceAttachments.remove(instance.pointer); + } + + /// Records that [instance] was attached to a renderable primitive via + /// [setMaterialInstanceAt]. + void recordMaterialInstanceAttachment(ThermionEntity entity, int primitiveIndex, FFIMaterialInstance instance) { + _materialInstanceAttachments.putIfAbsent(instance.pointer, () => {}).add((entity, primitiveIndex)); + } + + /// Drops the record for an attachment that was cleared or overwritten. + /// Overwrites record the new instance through [recordMaterialInstanceAttachment]; + /// the stale (entity, primitive) entry for [instance] is removed here. + void forgetMaterialInstanceAttachment(ThermionEntity entity, int primitiveIndex, FFIMaterialInstance instance) { + _materialInstanceAttachments[instance.pointer]?.remove((entity, primitiveIndex)); + } + + @override + Future> findRenderablesUsingMaterial(Material material) async { + final ffiMaterial = material as FFIMaterial; + final uses = []; + final reported = <(ThermionEntity, int)>{}; + + // Pass 1: native scan over every live scene. Finds every primitive + // currently drawn with an instance of [material], however the instance + // was created — including instances handed out by asset loaders, which + // have no Dart wrapper until now. + for (final scene in List.of(_scenes)) { + final scenePtr = scene.getNativeHandle(); + final renderableManagerPtr = renderableManager.renderableManager; + final count = Scene_scanForMaterial( + scenePtr, renderableManagerPtr, ffiMaterial.pointer, nullptr.cast(), nullptr.cast(), nullptr.cast(), 0); + if (count == 0) { + continue; + } + final entities = makeInt32List(count); + final primitives = makeUint32List(count); + late Pointer stackPtr; + if (FILAMENT_WASM) { + stackPtr = stackSave(); + } + try { + Scene_scanForMaterial( + scenePtr, renderableManagerPtr, ffiMaterial.pointer, entities.address, primitives.address, + nullptr.cast(), count); + for (var i = 0; i < count; i++) { + final entity = entities[i]; + final primitiveIndex = primitives[i]; + if (!reported.add((entity, primitiveIndex))) { + continue; + } + // The scan's outInstances output is left empty on purpose: reusing + // RenderableManager_getMaterialInstanceAt keeps this path on an + // existing binding and gives us the cached wrapper (with its shadow + // recording) when there is one. + final instance = await renderableManager.getMaterialInstanceAt(entity, primitiveIndex); + if (instance == null) { + // The renderable changed between the scan and this fetch. + continue; + } + uses.add(MaterialInstanceUse(entity, primitiveIndex, instance)); + } + } finally { + if (FILAMENT_WASM) { + stackRestore(stackPtr); + } + } + } + + // Pass 2: attachments recorded through this library that pass 1 cannot + // see because the renderable is not in a scene. Every record is + // re-validated against the renderable's *current* instance, so entries + // left over from earlier swaps are pruned instead of reported. + for (final entry in Map.of(_materialInstanceAttachments).entries) { + for (final attachment in Set.of(entry.value)) { + if (reported.contains(attachment)) { + continue; + } + final current = await renderableManager.getMaterialInstanceAt(attachment.$1, attachment.$2); + if (current == null || + (current as FFIMaterialInstance).pointer.address != entry.key.address || + MaterialInstance_getMaterial(current.pointer).address != ffiMaterial.pointer.address) { + entry.value.remove(attachment); + continue; + } + reported.add(attachment); + uses.add(MaterialInstanceUse(attachment.$1, attachment.$2, current)); + } + if (entry.value.isEmpty) { + _materialInstanceAttachments.remove(entry.key); + } + } + + return uses; + } + + @override + Future reloadMaterialFromBytes(Material oldMaterial, Uint8List materialBytes, {bool destroyOld = true}) async { + final oldFFIMaterial = oldMaterial as FFIMaterial; + + // Build the replacement first: if the bytes are invalid we want to fail + // before touching anything. + final newMaterial = await createMaterial(materialBytes); + + // Every distinct old instance becomes exactly one new instance, so + // renderables that shared an instance keep sharing one. + final uses = await findRenderablesUsingMaterial(oldMaterial); + final replacements = , FFIMaterialInstance>{}; + final retired = {}; + for (final use in uses) { + final oldInstance = use.materialInstance as FFIMaterialInstance; + retired.add(oldInstance); + var replacement = replacements[oldInstance.pointer]; + if (replacement == null) { + replacement = await newMaterial.createInstance() as FFIMaterialInstance; + await oldInstance.shadow.applyTo(replacement); + replacements[oldInstance.pointer] = replacement; + } + // Re-point the primitive before the old instance is destroyed. + await setMaterialInstanceAt(use.entity, use.primitiveIndex, replacement); + } + + if (destroyOld) { + // Filament requires every instance of a material to be destroyed + // before the material itself. Destroy the retired (replaced) instances + // plus any other instance created from this material, including ones + // never attached to a renderable — leaving those alive would make the + // material destroy hang. destroy() is idempotent, so overlap between + // the two sets is fine. + for (final instance in retired) { + await instance.destroy(); + } + for (final instance in List.of(oldFFIMaterial.createdInstances)) { + await instance.destroy(); + } + await oldFFIMaterial.destroy(); + } + return newMaterial; + } + final _swapChains = []; // @@ -1262,6 +1441,7 @@ class FFIFilamentApp extends FilamentApp { } Future destroyScene(covariant FFIScene scene) async { + _scenes.remove(scene); await withVoidCallback((requestId, cb) => Engine_destroySceneRenderThread(engine, scene.scene, requestId, cb)); } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart index 141205213..eff654038 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart @@ -1,12 +1,24 @@ import 'dart:async'; import 'package:thermion_dart/src/filament/src/implementation/ffi_texture.dart'; import 'package:thermion_dart/thermion_dart.dart'; +import 'ffi_filament_app.dart'; +import 'material_shadow_state.dart'; class FFIMaterial extends Material> { final Pointer pointer; final FilamentApp _app; + /// + /// Every instance created from this material via [createInstance]. + /// + /// Instances cannot be re-parented to another material in Filament, so + /// hot-reloading a material means creating replacement instances. This list + /// lets the app find (and retire) the instances of a material being swapped + /// out, including ones not currently attached to any renderable. + /// + final List createdInstances = []; + FFIMaterial(this.pointer, this._app); @override @@ -14,7 +26,13 @@ class FFIMaterial extends Material> { var ptr = await withPointerCallback((cb) { Material_createInstanceRenderThread(pointer, cb); }); - return FFIMaterialInstance(ptr, _app); + final instance = FFIMaterialInstance(ptr, _app); + // Register with the app so later lookups of this native instance return + // this wrapper (and keep its shadow recording). The registry is FFI-app + // internal state, not part of the FilamentApp interface. + (_app as FFIFilamentApp).adoptMaterialInstance(instance); + createdInstances.add(instance); + return instance; } Future destroy() async { @@ -44,6 +62,16 @@ class FFIMaterialInstance extends MaterialInstance> { final FilamentApp _app; + /// + /// Shadow copy of every parameter/raster-state mutation applied through + /// this wrapper. Filament instances are write-only, so this recording is + /// the only way to carry state across to a replacement instance when a + /// material is hot-reloaded. See [MaterialInstanceShadowState]. + /// + final MaterialInstanceShadowState shadow = MaterialInstanceShadowState(); + + bool _destroyed = false; + FFIMaterialInstance(this.pointer, this._app) { if (pointer == nullptr) { throw Exception("MaterialInstance not found"); @@ -51,36 +79,43 @@ class FFIMaterialInstance extends MaterialInstance> { } Future setDoubleSided(bool doubleSided) async { + shadow.doubleSided = doubleSided; MaterialInstance_setDoubleSided(this.pointer, doubleSided); } @override Future setDepthCullingEnabled(bool enabled) async { + shadow.depthCullingEnabled = enabled; MaterialInstance_setDepthCulling(this.pointer, enabled); } @override Future setDepthWriteEnabled(bool enabled) async { + shadow.depthWriteEnabled = enabled; MaterialInstance_setDepthWrite(this.pointer, enabled); } @override Future setParameterFloat(String name, double value) async { + shadow.parameters[name] = value; MaterialInstance_setParameterFloat(pointer, name.toNativeUtf8().cast(), value); } @override Future setParameterFloat2(String name, double x, double y) async { + shadow.parameters[name] = [x, y]; MaterialInstance_setParameterFloat2(pointer, name.toNativeUtf8().cast(), x, y); } @override Future setParameterFloat3(String name, double x, double y, double z) async { + shadow.parameters[name] = [x, y, z]; MaterialInstance_setParameterFloat3(pointer, name.toNativeUtf8().cast(), x, y, z); } @override Future setParameterFloat3Array(String name, List array) async { + shadow.parameters[name] = List.of(array); final ptr = name.toNativeUtf8().cast(); final data = Float64List(array.length * 3); int i = 0; @@ -100,51 +135,61 @@ class FFIMaterialInstance extends MaterialInstance> { @override Future setParameterFloat4(String name, double x, double y, double z, double w) async { + shadow.parameters[name] = [x, y, z, w]; MaterialInstance_setParameterFloat4(pointer, name.toNativeUtf8().cast(), x, y, z, w); } @override Future setParameterInt(String name, int value) async { + shadow.parameters[name] = value; MaterialInstance_setParameterInt(pointer, name.toNativeUtf8().cast(), value); } @override Future setDepthFunc(SamplerCompareFunction depthFunc) async { + shadow.depthFunc = depthFunc; MaterialInstance_setDepthFunc(pointer, depthFunc.index); } @override Future setStencilCompareFunction(SamplerCompareFunction func, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { + shadow.stencilCompareFunction[face] = func; MaterialInstance_setStencilCompareFunction(pointer, func.index, face.toFFI()); } @override Future setStencilOpDepthFail(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { + shadow.stencilOpDepthFail[face] = op; MaterialInstance_setStencilOpDepthFail(pointer, op.index, face.toFFI()); } @override Future setStencilOpDepthStencilPass(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { + shadow.stencilOpDepthStencilPass[face] = op; MaterialInstance_setStencilOpDepthStencilPass(pointer, op.index, face.toFFI()); } @override Future setStencilOpStencilFail(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { + shadow.stencilOpStencilFail[face] = op; MaterialInstance_setStencilOpStencilFail(pointer, op.index, face.toFFI()); } @override Future setStencilReferenceValue(int value, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { + shadow.stencilReferenceValue[face] = value; MaterialInstance_setStencilReferenceValue(pointer, value, face.toFFI()); } @override Future setStencilWriteEnabled(bool enabled) async { + shadow.stencilWriteEnabled = enabled; MaterialInstance_setStencilWrite(pointer, enabled); } @override Future setCullingMode(CullingMode cullingMode) async { + shadow.cullingMode = cullingMode; MaterialInstance_setCullingMode(pointer, cullingMode.index); ; } @@ -156,22 +201,33 @@ class FFIMaterialInstance extends MaterialInstance> { @override Future setStencilReadMask(int mask) async { + shadow.stencilReadMask = mask; MaterialInstance_setStencilReadMask(pointer, mask); } @override Future setStencilWriteMask(int mask) async { + shadow.stencilWriteMask = mask; MaterialInstance_setStencilWriteMask(pointer, mask); } + /// Destroys the native instance. Safe to call more than once; later calls + /// are no-ops (Filament objects can be released as part of destroying a + /// parent, and a repeated destroy would otherwise touch a freed pointer). Future destroy() async { + if (_destroyed) { + return; + } + _destroyed = true; await withVoidCallback((requestId, cb) { Engine_destroyMaterialInstanceRenderThread(_app.engine, this.pointer, requestId, cb); }); + (_app as FFIFilamentApp).forgetMaterialInstance(this); } @override Future setTransparencyMode(TransparencyMode mode) async { + shadow.transparencyMode = mode; MaterialInstance_setTransparencyMode(pointer, mode.index); } @@ -182,16 +238,19 @@ class FFIMaterialInstance extends MaterialInstance> { @override Future setParameterTexture(String name, covariant FFITexture texture, covariant FFITextureSampler sampler) async { + shadow.parameters[name] = MaterialInstanceTextureBinding(texture, sampler); MaterialInstance_setParameterTexture(pointer, name.toNativeUtf8().cast(), texture.pointer, sampler.pointer); } @override Future setParameterBool(String name, bool value) async { + shadow.parameters[name] = value; MaterialInstance_setParameterBool(pointer, name.toNativeUtf8().cast(), value); } @override Future setParameterMat3(String name, Matrix3 matrix) async { + shadow.parameters[name] = matrix.clone(); MaterialInstance_setParameterMat3(pointer, name.toNativeUtf8().cast(), matrix.storage.address); if (FILAMENT_WASM) { @@ -201,6 +260,7 @@ class FFIMaterialInstance extends MaterialInstance> { @override Future setParameterMat4(String name, Matrix4 matrix) async { + shadow.parameters[name] = matrix.clone(); MaterialInstance_setParameterMat4(pointer, name.toNativeUtf8().cast(), matrix.storage.address); } diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_renderable_manager.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_renderable_manager.dart index e703482a0..fa2400935 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_renderable_manager.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_renderable_manager.dart @@ -52,12 +52,17 @@ class FFIRenderableManager extends RenderableManager int primitiveIndex, MaterialInstance materialInstance, ) async { - return RenderableManager_setMaterialInstanceAt( + final ffiInstance = materialInstance as FFIMaterialInstance; + final result = RenderableManager_setMaterialInstanceAt( renderableManager, entity, primitiveIndex, - (materialInstance as FFIMaterialInstance).pointer, + ffiInstance.pointer, ); + // Record the attachment so material reloads can still find renderables + // that are not in a scene (the scene scan can't see those). + app.recordMaterialInstanceAttachment(entity, primitiveIndex, ffiInstance); + return result; } @override @@ -95,12 +100,19 @@ class FFIRenderableManager extends RenderableManager return null; } - return FFIMaterialInstance(instancePtr, app); + // Cached wrapper: repeated lookups of one native instance must return + // the same wrapper, or the shadow recording used for material reload + // would be split across wrappers and silently lose values. + return app.getOrCreateMaterialInstanceWrapper(instancePtr); } @override Future clearMaterialInstanceAt(ThermionEntity entity, int primitiveIndex) async { + final previous = await getMaterialInstanceAt(entity, primitiveIndex); RenderableManager_clearMaterialInstanceAt(renderableManager, entity, primitiveIndex); + if (previous != null) { + app.forgetMaterialInstanceAttachment(entity, primitiveIndex, previous as FFIMaterialInstance); + } } // ============================================================================ diff --git a/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart b/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart new file mode 100644 index 000000000..52b87b490 --- /dev/null +++ b/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart @@ -0,0 +1,176 @@ +import 'package:thermion_dart/thermion_dart.dart'; + +import 'ffi_material.dart'; +import 'ffi_texture.dart'; + +/// A texture bound to a material parameter, plus the sampler it was bound +/// with. Kept as a record so [MaterialInstanceShadowState] can re-bind the +/// exact pair onto a replacement instance. +class MaterialInstanceTextureBinding { + final FFITexture texture; + final FFITextureSampler sampler; + + MaterialInstanceTextureBinding(this.texture, this.sampler); +} + +/// Shadow copy of every mutation applied to a [MaterialInstance]. +/// +/// Filament's MaterialInstance API is write-only: parameter values and raster +/// state cannot be read back. So each Dart setter records the call here, and +/// [applyTo] replays the recording onto a fresh instance. This is what lets +/// reloadMaterialFromBytes rebuild instances that behave identically to the +/// ones they replace. +/// +/// Only the *latest* value of each parameter is kept (a map, not a log); the +/// raster-state fields likewise hold the last value written. Setters that are +/// queries rather than mutations (isStencilWriteEnabled, getTransparencyMode) +/// are not recorded. +class MaterialInstanceShadowState { + /// name -> value. Insertion-ordered so replay matches the order the + /// application originally applied values in. + /// + /// Value types, matching the setter that produced them: + /// - double (float), List<double> of length 2/3/4 (float2/3/4) + /// - List<Vector3> (float3 array) + /// - int, bool + /// - Matrix3, Matrix4 + /// - [MaterialInstanceTextureBinding] + final Map parameters = {}; + + bool? doubleSided; + bool? depthCullingEnabled; + bool? depthWriteEnabled; + SamplerCompareFunction? depthFunc; + bool? stencilWriteEnabled; + int? stencilReadMask; + int? stencilWriteMask; + CullingMode? cullingMode; + TransparencyMode? transparencyMode; + + /// Per-face stencil state. Keyed by face because the setters accept a face + /// argument; FRONT_AND_BACK entries are recorded under their own key. + final Map stencilCompareFunction = {}; + final Map stencilOpDepthFail = {}; + final Map stencilOpDepthStencilPass = {}; + final Map stencilOpStencilFail = {}; + final Map stencilReferenceValue = {}; + + /// Replays every recorded mutation onto [target], in the order recorded + /// (parameters first, then raster state). Recording on [target] is a side + /// effect of calling its setters, so the target ends up with its own copy of + /// this state. + Future applyTo(covariant FFIMaterialInstance target) async { + for (final entry in parameters.entries) { + final value = entry.value; + if (value is double) { + await target.setParameterFloat(entry.key, value); + } else if (value is List) { + switch (value.length) { + case 2: + await target.setParameterFloat2(entry.key, value[0], value[1]); + case 3: + await target.setParameterFloat3( + entry.key, value[0], value[1], value[2]); + case 4: + await target.setParameterFloat4( + entry.key, value[0], value[1], value[2], value[3]); + default: + throw StateError( + "Cannot replay float parameter ${entry.key} of ${value.length} components"); + } + } else if (value is List) { + await target.setParameterFloat3Array(entry.key, value); + } else if (value is int) { + await target.setParameterInt(entry.key, value); + } else if (value is bool) { + await target.setParameterBool(entry.key, value); + } else if (value is Matrix3) { + await target.setParameterMat3(entry.key, value); + } else if (value is Matrix4) { + await target.setParameterMat4(entry.key, value); + } else if (value is MaterialInstanceTextureBinding) { + await target.setParameterTexture( + entry.key, value.texture, value.sampler); + } else { + throw StateError( + "Cannot replay parameter ${entry.key} of type ${value.runtimeType}"); + } + } + + // Use ?. to skip state never set on the source instance. + final doubleSided = this.doubleSided; + if (doubleSided != null) { + await target.setDoubleSided(doubleSided); + } + final depthCullingEnabled = this.depthCullingEnabled; + if (depthCullingEnabled != null) { + await target.setDepthCullingEnabled(depthCullingEnabled); + } + final depthWriteEnabled = this.depthWriteEnabled; + if (depthWriteEnabled != null) { + await target.setDepthWriteEnabled(depthWriteEnabled); + } + final depthFunc = this.depthFunc; + if (depthFunc != null) { + await target.setDepthFunc(depthFunc); + } + final stencilWriteEnabled = this.stencilWriteEnabled; + if (stencilWriteEnabled != null) { + await target.setStencilWriteEnabled(stencilWriteEnabled); + } + final stencilReadMask = this.stencilReadMask; + if (stencilReadMask != null) { + await target.setStencilReadMask(stencilReadMask); + } + final stencilWriteMask = this.stencilWriteMask; + if (stencilWriteMask != null) { + await target.setStencilWriteMask(stencilWriteMask); + } + final cullingMode = this.cullingMode; + if (cullingMode != null) { + await target.setCullingMode(cullingMode); + } + final transparencyMode = this.transparencyMode; + if (transparencyMode != null) { + await target.setTransparencyMode(transparencyMode); + } + for (final entry in stencilCompareFunction.entries) { + await target.setStencilCompareFunction(entry.value, entry.key); + } + for (final entry in stencilOpDepthFail.entries) { + await target.setStencilOpDepthFail(entry.value, entry.key); + } + for (final entry in stencilOpDepthStencilPass.entries) { + await target.setStencilOpDepthStencilPass(entry.value, entry.key); + } + for (final entry in stencilOpStencilFail.entries) { + await target.setStencilOpStencilFail(entry.value, entry.key); + } + for (final entry in stencilReferenceValue.entries) { + await target.setStencilReferenceValue(entry.value, entry.key); + } + } + + /// Copies this state into a fresh [MaterialInstanceShadowState] without + /// touching any instance. Used when a material is reloaded and the caller + /// wants to keep a hand-made recording for the next reload. + MaterialInstanceShadowState clone() { + final copy = MaterialInstanceShadowState(); + copy.parameters.addAll(parameters); + copy.doubleSided = doubleSided; + copy.depthCullingEnabled = depthCullingEnabled; + copy.depthWriteEnabled = depthWriteEnabled; + copy.depthFunc = depthFunc; + copy.stencilWriteEnabled = stencilWriteEnabled; + copy.stencilReadMask = stencilReadMask; + copy.stencilWriteMask = stencilWriteMask; + copy.cullingMode = cullingMode; + copy.transparencyMode = transparencyMode; + copy.stencilCompareFunction.addAll(stencilCompareFunction); + copy.stencilOpDepthFail.addAll(stencilOpDepthFail); + copy.stencilOpDepthStencilPass.addAll(stencilOpDepthStencilPass); + copy.stencilOpStencilFail.addAll(stencilOpStencilFail); + copy.stencilReferenceValue.addAll(stencilReferenceValue); + return copy; + } +} diff --git a/thermion_dart/lib/src/filament/src/interface/filament_app.dart b/thermion_dart/lib/src/filament/src/interface/filament_app.dart index e1ae9066d..cd3b48bb7 100644 --- a/thermion_dart/lib/src/filament/src/interface/filament_app.dart +++ b/thermion_dart/lib/src/filament/src/interface/filament_app.dart @@ -269,6 +269,44 @@ abstract class FilamentApp { // Future setMaterialInstanceAt(ThermionEntity entity, int primitiveIndex, MaterialInstance materialInstance); + /// Replaces [oldMaterial] with a [Material] built from [materialBytes] + /// (the same container [createMaterial] accepts), keeping renderables + /// visually continuous. + /// + /// This is the reload path from the runtime-material-compile design + /// (docs/research/runtime-material-compile.md, section 4.1): Filament does + /// not allow re-parenting a MaterialInstance to another Material, so the + /// swap is: build the new material, create one replacement instance per + /// distinct instance of the old material, replay each old instance's + /// recorded state onto its replacement, point every affected renderable + /// primitive at the replacement, then destroy the old instances and the old + /// material on the render thread. + /// + /// Parameter and raster state are replayed from the shadow recording kept + /// by the MaterialInstance wrappers: every setParameter*/set* call made + /// through this library is captured. Values set only through native code + /// (none today) or parameters relying on the material's declared defaults + /// cannot be recovered; instances whose state was never touched are + /// re-created with the new material's defaults. + /// + /// Set [destroyOld] to false to keep the old material alive (e.g. to fade + /// between materials yourself); you then own it and its instances. + Future reloadMaterialFromBytes(Material oldMaterial, Uint8List materialBytes, {bool destroyOld = true}); + + /// Returns every renderable primitive, across all scenes, currently drawn + /// with an instance of [material] — including instances attached by asset + /// loaders outside this library (found by scanning the scene) and instances + /// attached via [setMaterialInstanceAt] that are not yet in a scene + /// (found from the app's own records). + /// + /// This is the entity-scan helper of the reload design (section 4.1, L2). + /// It is exposed separately from [reloadMaterialFromBytes] because callers + /// may want the list of affected entities for their own bookkeeping (for + /// example to re-run per-entity material setup after a reload). + Future> findRenderablesUsingMaterial(Material material); + + + // Returns all valid swapchains. Future> getSwapChains(); @@ -449,3 +487,21 @@ abstract class FilamentApp { // If [meshName] is specified, only extracts data for that specific mesh. Future parseGltf(Uint8List data, {String? meshName}); } + +/// One hit from [FilamentApp.findRenderablesUsingMaterial]: a renderable +/// primitive currently drawn with a material instance that belongs to a given +/// material. +class MaterialInstanceUse { + /// The renderable entity. Combine with [primitiveIndex] for + /// [FilamentApp.setMaterialInstanceAt]. + final ThermionEntity entity; + + /// Which primitive of [entity]'s renderable uses the material instance. + final int primitiveIndex; + + /// The instance in use. After a material reload this refers to a retired + /// instance; re-fetch uses from the app instead of caching them. + final MaterialInstance materialInstance; + + MaterialInstanceUse(this.entity, this.primitiveIndex, this.materialInstance); +} diff --git a/thermion_dart/native/include/c_api/TMaterialInstance.h b/thermion_dart/native/include/c_api/TMaterialInstance.h index 7be97c710..7a3c7f7b8 100644 --- a/thermion_dart/native/include/c_api/TMaterialInstance.h +++ b/thermion_dart/native/include/c_api/TMaterialInstance.h @@ -96,6 +96,7 @@ extern "C" EMSCRIPTEN_KEEPALIVE TMaterial *Material_createBoneOverlayMaterial(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE bool Material_hasParameter(TMaterial *tMaterial, const char *propertyName); EMSCRIPTEN_KEEPALIVE bool MaterialInstance_isStencilWriteEnabled(TMaterialInstance *materialInstance); + EMSCRIPTEN_KEEPALIVE TMaterial *MaterialInstance_getMaterial(TMaterialInstance *materialInstance); EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilWrite(TMaterialInstance *materialInstance, bool enabled); EMSCRIPTEN_KEEPALIVE void MaterialInstance_setCullingMode(TMaterialInstance *materialInstance, TCullingMode culling); EMSCRIPTEN_KEEPALIVE void MaterialInstance_setDoubleSided(TMaterialInstance *materialInstance, bool doubleSided); diff --git a/thermion_dart/native/include/c_api/TScene.h b/thermion_dart/native/include/c_api/TScene.h index df0182aa0..3f4981b3a 100644 --- a/thermion_dart/native/include/c_api/TScene.h +++ b/thermion_dart/native/include/c_api/TScene.h @@ -17,6 +17,16 @@ EMSCRIPTEN_KEEPALIVE TSkybox* Scene_getSkybox(TScene* tScene); EMSCRIPTEN_KEEPALIVE void Scene_setIndirectLight(TScene* tScene, TIndirectLight *tIndirectLight); EMSCRIPTEN_KEEPALIVE void Scene_addFilamentAsset(TScene* tScene, TFilamentAsset *asset); +/// Walks every renderable primitive in the scene and records the ones whose +/// current MaterialInstance belongs to [tMaterial]. +/// +/// Returns the TOTAL number of matches (which may exceed [capacity]). When +/// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to +/// [capacity] matches are written to them. Call once with null buffers to +/// size the output, then again to fetch it. +EMSCRIPTEN_KEEPALIVE size_t Scene_scanForMaterial(TScene* tScene, TRenderableManager *tRenderableManager, TMaterial *tMaterial, + EntityId *outEntities, uint32_t *outPrimitives, TMaterialInstance **outInstances, size_t capacity); + #ifdef __cplusplus } #endif diff --git a/thermion_dart/native/src/c_api/TMaterialInstance.cpp b/thermion_dart/native/src/c_api/TMaterialInstance.cpp index 20f927d36..d0e9d3904 100644 --- a/thermion_dart/native/src/c_api/TMaterialInstance.cpp +++ b/thermion_dart/native/src/c_api/TMaterialInstance.cpp @@ -29,6 +29,16 @@ namespace thermion { #endif + EMSCRIPTEN_KEEPALIVE TMaterial *MaterialInstance_getMaterial(TMaterialInstance *tMaterialInstance) + { + auto *materialInstance = reinterpret_cast(tMaterialInstance); + // getMaterial returns const Material*; callers only compare the + // pointer against other material pointers, so dropping the + // qualifier is safe here. + auto *material = const_cast(materialInstance->getMaterial()); + return reinterpret_cast(material); + } + EMSCRIPTEN_KEEPALIVE TMaterialInstance *Material_createInstance(TMaterial *tMaterial) { auto *material = reinterpret_cast(tMaterial); diff --git a/thermion_dart/native/src/c_api/TScene.cpp b/thermion_dart/native/src/c_api/TScene.cpp index abf9db334..0af534b2e 100644 --- a/thermion_dart/native/src/c_api/TScene.cpp +++ b/thermion_dart/native/src/c_api/TScene.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include #include @@ -55,12 +57,61 @@ namespace thermion scene->setIndirectLight(light); } - EMSCRIPTEN_KEEPALIVE void Scene_addFilamentAsset(TScene* tScene, TFilamentAsset *tAsset) { + EMSCRIPTEN_KEEPALIVE void Scene_addFilamentAsset(TScene* tScene, TFilamentAsset *tAsset) { auto *scene = reinterpret_cast(tScene); auto *asset = reinterpret_cast(tAsset); scene->addEntities(asset->getEntities(), asset->getEntityCount()); } + EMSCRIPTEN_KEEPALIVE size_t Scene_scanForMaterial(TScene *tScene, TRenderableManager *tRenderableManager, + TMaterial *tMaterial, EntityId *outEntities, uint32_t *outPrimitives, + TMaterialInstance **outInstances, size_t capacity) + { + auto *scene = reinterpret_cast(tScene); + auto *renderableManager = reinterpret_cast(tRenderableManager); + auto *material = reinterpret_cast(tMaterial); + + size_t count = 0; + scene->forEach( + [&](utils::Entity entity) + { + if (!renderableManager->hasComponent(entity)) + { + return; + } + auto renderable = renderableManager->getInstance(entity); + auto primitiveCount = renderableManager->getPrimitiveCount(renderable); + for (size_t primitive = 0; primitive < primitiveCount; primitive++) + { + auto *materialInstance = renderableManager->getMaterialInstanceAt(renderable, primitive); + if (materialInstance == nullptr || materialInstance->getMaterial() != material) + { + continue; + } + // Each output buffer is optional so callers can request + // a subset (e.g. entities+primitives but not + // instances); guard them individually. + if (count < capacity) + { + if (outEntities != nullptr) + { + outEntities[count] = (EntityId)entity.getId(); + } + if (outPrimitives != nullptr) + { + outPrimitives[count] = (uint32_t)primitive; + } + if (outInstances != nullptr) + { + outInstances[count] = reinterpret_cast(materialInstance); + } + } + count++; + } + }); + return count; + } + #ifdef __cplusplus } diff --git a/thermion_dart/test/material_reload_tests.dart b/thermion_dart/test/material_reload_tests.dart new file mode 100644 index 000000000..96e3deda8 --- /dev/null +++ b/thermion_dart/test/material_reload_tests.dart @@ -0,0 +1,154 @@ +import 'package:test/test.dart'; +import 'package:thermion_dart/thermion_dart.dart'; +import 'package:thermion_dart/src/filament/src/implementation/ffi_material.dart'; + +import 'helpers.dart'; + +/// Returns the RGBA float at (x, y) of a captured float pixel buffer. +List pixelAt(Float32List buffer, int width, int height, int x, int y) { + final offset = (y * width + x) * 4; + return [buffer[offset], buffer[offset + 1], buffer[offset + 2], buffer[offset + 3]]; +} + +void main() async { + final testHelper = TestHelper("material_reload"); + + await testHelper.setup(); + + final solidColorBytes = await loadResourceBytes("${testHelper.assetsDir}/solidcolor.filamat"); + + test('findRenderablesUsingMaterial returns attached primitives', () async { + await testHelper.withViewer((viewer) async { + final material = await FilamentApp.instance!.createMaterial(solidColorBytes); + final instance = await material.createInstance(); + await instance.setParameterFloat4("color", 0.0, 0.0, 1.0, 1.0); + final cube = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [instance], + ); + + final uses = await FilamentApp.instance!.findRenderablesUsingMaterial(material); + expect(uses.length, 1, reason: "exactly one primitive uses the material"); + expect(uses.single.entity, cube.entity); + expect(uses.single.primitiveIndex, 0); + expect(uses.single.materialInstance, same(instance), + reason: "looked-up instances must reuse the wrapper that recorded their state"); + + await viewer.destroyAsset(cube); + }, bg: kWhite); + }); + + test('reloadMaterialFromBytes re-points renderables and replays parameters', () async { + await testHelper.withViewer((viewer) async { + final material = await FilamentApp.instance!.createMaterial(solidColorBytes); + final instance = await material.createInstance(); + await instance.setParameterFloat4("color", 0.0, 0.0, 1.0, 1.0); + final cube = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [instance], + ); + + const width = 512; + const height = 512; + final beforePixels = + (await testHelper.capture(viewer.view, "reload_before"))[viewer.view]!; + final beforeCenter = pixelAt(beforePixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); + expect(beforeCenter[2], greaterThan(0.4), reason: "cube renders blue before reload"); + expect(beforeCenter[0], lessThan(0.1)); + + final reloaded = await FilamentApp.instance!.reloadMaterialFromBytes(material, solidColorBytes); + expect(reloaded, isNot(same(material))); + + // The renderable now uses an instance of the NEW material. + final usesAfter = await FilamentApp.instance!.findRenderablesUsingMaterial(reloaded); + expect(usesAfter.length, 1); + expect(usesAfter.single.entity, cube.entity); + final newInstance = usesAfter.single.materialInstance as FFIMaterialInstance; + expect( + MaterialInstance_getMaterial(newInstance.pointer).address, + (reloaded as FFIMaterial).pointer.address, + reason: "attached instance must belong to the replacement material", + ); + + // The recorded parameter was replayed onto the replacement instance. + expect(newInstance.shadow.parameters["color"], equals([0.0, 0.0, 1.0, 1.0])); + + // Rendering is unchanged by the swap. + final afterPixels = + (await testHelper.capture(viewer.view, "reload_after"))[viewer.view]!; + final afterCenter = pixelAt(afterPixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); + expect(afterCenter[2], greaterThan(0.4), reason: "cube still renders blue after reload"); + expect(afterCenter[0], lessThan(0.1)); + + // And the replacement instance is live: mutating it changes the image. + await newInstance.setParameterFloat4("color", 1.0, 0.0, 0.0, 1.0); + final redPixels = (await testHelper.capture(viewer.view, "reload_red"))[viewer.view]!; + final redCenter = pixelAt(redPixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); + expect(redCenter[0], greaterThan(0.4), reason: "mutating the replacement instance recolors the cube"); + expect(redCenter[2], lessThan(0.1)); + + await viewer.destroyAsset(cube); + }, bg: kWhite); + }); + + test('reloadMaterialFromBytes preserves instance sharing', () async { + await testHelper.withViewer((viewer) async { + final material = await FilamentApp.instance!.createMaterial(solidColorBytes); + final shared = await material.createInstance(); + await shared.setParameterFloat4("color", 0.0, 1.0, 0.0, 1.0); + final cubeA = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [shared], + ); + final cubeB = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [shared], + ); + await cubeA.setTransform(Matrix4.translation(Vector3(-1.6, 0.0, 0.0))); + await cubeB.setTransform(Matrix4.translation(Vector3(1.6, 0.0, 0.0))); + + final reloaded = await FilamentApp.instance!.reloadMaterialFromBytes(material, solidColorBytes); + final usesAfter = await FilamentApp.instance!.findRenderablesUsingMaterial(reloaded); + expect(usesAfter.length, 2, reason: "both cubes moved to the new material"); + expect( + usesAfter[0].materialInstance, + same(usesAfter[1].materialInstance), + reason: "renderables that shared one instance must share one replacement", + ); + expect(usesAfter.map((u) => u.entity).toSet(), {cubeA.entity, cubeB.entity}); + + await viewer.destroyAsset(cubeA); + await viewer.destroyAsset(cubeB); + }, bg: kWhite); + }); + + test('reloadMaterialFromBytes with destroyOld=false leaves the old material alive', () async { + await testHelper.withViewer((viewer) async { + final material = await FilamentApp.instance!.createMaterial(solidColorBytes); + final instance = await material.createInstance(); + await instance.setParameterFloat4("color", 0.0, 0.0, 1.0, 1.0); + final cube = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [instance], + ); + + final reloaded = + await FilamentApp.instance!.reloadMaterialFromBytes(material, solidColorBytes, destroyOld: false); + expect(await (material as FFIMaterial).hasParameter("color"), isTrue, + reason: "old material must still be alive when destroyOld is false"); + + // Caller owns both materials and every instance now. Order matters: + // instances must not be destroyed while still attached to a renderable + // (detach by destroying the asset first), and Filament requires + // instances to be destroyed before their material. + final liveUses = await FilamentApp.instance!.findRenderablesUsingMaterial(reloaded); + await viewer.destroyAsset(cube); + for (final use in liveUses) { + await use.materialInstance.destroy(); + } + await (reloaded as FFIMaterial).destroy(); + await instance.destroy(); + await material.destroy(); + }, bg: kWhite); + }); +} From fb09f4ab12c8d9c38f533d256a00226385d9d0f3 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 19 Aug 2026 21:04:24 +0000 Subject: [PATCH 3/6] feat: runtime .mat compilation API (Phase 1, desktop) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements Phase 1 of docs/research/runtime-material-compile.md: compile .mat sources to .filamat packages inside the running engine, so the Phase 0 reload path can be driven by source edits without matc. Native (desktop builds only, guarded by THERMION_RUNTIME_MATERIAL_COMPILE): - Engine_compileMaterial: matp::MaterialParser::parse feeding filamat::MaterialBuilder::build(engine->getJobSystem()). MaterialBuilder::init() runs once behind a mutex (glslang init is not thread-safe). Platform/targetApi/optimization are validated and mapped to the builder enums; targetApi can be derived from the engine backend via filamat::targetApiFromBackend; defines arrive as a flat JSON object parsed in C++. Every other platform gets a stub that fails with an explanatory message. - Engine_compileMaterialRenderThread follows the readPixels idiom: the task fills outData/outSize then notifies the Dart callback. - utils/JobSystem.h is not shipped in the artifact headers; a forward declaration replaces the include. Link config: matp added to the link libraries on linux/macOS (before utils, which it references); on Windows via #pragma comment(lib) in ThermionWin32.h, including the glslang/SPIRV/spirv-cross libs that the Windows filamat/matp do not bundle. Dart: - FilamentApp.compileMaterial(matSource, {platform, targetApi, optimization, defines, includePaths, embedSource}) plus the MaterialCompilePlatform/MaterialTargetApi/MaterialOptimization enums and MaterialCompileException. Web throws UnsupportedError. - #include directives are flattened in Dart before compiling (matp has no include callback): resolved against includePaths then the bare path via the resource loader, with circular/over-deep chain detection. - FFIMaterial.destroy now retires its created instances first — a material destroyed with live instances strands the render thread. - ffigen bindings regenerated (both flavors). Tests (material_compile_tests): golden compile of every material build.sh ships (11 workspace + 3 example .mat) accepted by Material::Builder with parameters intact; parse errors surface the compiler message; explicit target API/optimization selection; defines reach the preprocessor; nested/missing/circular include handling; and an end-to-end compile -> attach -> render -> recompile -> hot-swap loop. materials/vdtm.mat is excluded: its source is broken ('z' declared inside an if block) and it is not in the shipped set. Verified in container (linux): new suites + reload/material smoke suites pass; flutter analyze reports no new issues; libthermion_dart.so exports the compile API and links the filamat/matp/glslang stack (94 exported filamat/matp symbols, 2695 in symtab). macOS/Windows link config and the web stub are untested here — CI must confirm those platforms build. --- thermion_dart/hook/build.dart | 15 + .../src/bindings/src/thermion_dart_ffi.g.dart | 115 ++++++ .../src/thermion_dart_js_interop.g.dart | 200 +++++++++- .../src/implementation/ffi_filament_app.dart | 157 ++++++++ .../src/implementation/ffi_material.dart | 8 + .../filament/src/interface/filament_app.dart | 59 +++ thermion_dart/native/include/ThermionWin32.h | 13 + thermion_dart/native/include/c_api/TEngine.h | 97 +++++ thermion_dart/native/src/c_api/TEngine.cpp | 352 ++++++++++++++++++ .../src/c_api/ThermionDartRenderThreadApi.cpp | 43 +++ .../test/material_compile_tests.dart | 297 +++++++++++++++ 11 files changed, 1344 insertions(+), 12 deletions(-) create mode 100644 thermion_dart/test/material_compile_tests.dart diff --git a/thermion_dart/hook/build.dart b/thermion_dart/hook/build.dart index e1bb9e525..c6c3136e3 100644 --- a/thermion_dart/hook/build.dart +++ b/thermion_dart/hook/build.dart @@ -229,6 +229,13 @@ outputDirectory : ${outputDirectory.path} "backend", "filameshio", if (targetOS != OS.iOS) "filamat", + // The .mat parser backing runtime material compilation + // (Engine_compileMaterial). Only the desktop artifacts ship libmatp + // (Android/iOS have filamat only, web has neither — see + // docs/research/runtime-material-compile.md), so it is linked on + // desktop only, ahead of utils because libmatp references it. Windows + // links via #pragma comment(lib) in ThermionWin32.h instead. + if (targetOS == OS.linux || targetOS == OS.macOS) "matp", if (targetOS == OS.linux) "shaders", "utils", // Android links Filament's Perfetto tracing archive. utils is always @@ -301,6 +308,14 @@ outputDirectory : ${outputDirectory.path} defines["ENABLE_TRACING"] = "1"; } + // Runtime material compilation (Phase 1 of + // docs/research/runtime-material-compile.md): the compiler implementation + // is linked into desktop builds only (where the artifact ships + // libmatp.a); other platforms compile a stub that returns a clear error. + if (targetOS == OS.linux || targetOS == OS.macOS || targetOS == OS.windows) { + defines["THERMION_RUNTIME_MATERIAL_COMPILE"] = "1"; + } + // Check for plugin configuration final pluginConfigs = input.userDefines["plugins"] as List?; diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart index cb9489179..249aa99f6 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart @@ -2547,6 +2547,99 @@ external ffi.Pointer Engine_buildMaterial( int length, ); +/// Compiles .mat [matSource] ([length] bytes, not necessarily +/// NUL-terminated) into a filamat package, synchronously on the calling +/// thread. #include directives must already be resolved by the caller (the +/// Dart layer flattens them). +/// +/// [platform]/[targetApi]/[optimization] select the compilation targets; +/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the +/// engine's backend. +/// +/// [definesJson] is either nullptr or a flat JSON object of preprocessor +/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic +/// backslash escapes are supported. +/// +/// [embedSource] controls whether the .mat source is embedded in the +/// package (matc's no-embed-source flag). +/// +/// On success returns a malloc'd buffer of *outSize bytes that the caller +/// must release with [Engine_freeCompiledMaterial]. On failure returns +/// nullptr and writes a NUL-terminated message into [outError] (capacity +/// [outErrorCap]). +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ) +>(isLeaf: true) +external ffi.Pointer Engine_compileMaterial( + ffi.Pointer tEngine, + ffi.Pointer matSource, + int length, + int platform, + int targetApi, + int optimization, + ffi.Pointer definesJson, + int embedSource, + ffi.Pointer outError, + int outErrorCap, + ffi.Pointer outSize, +); + +/// Releases a buffer returned by [Engine_compileMaterial]. +@ffi.Native)>(isLeaf: true) +external void Engine_freeCompiledMaterial(ffi.Pointer data); + +/// As [Engine_compileMaterial], but the work runs on the engine's render +/// thread. The task writes the malloc'd package to *[outData] and its size to +/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on +/// failure with the message in [outError], then invokes [onComplete] with +/// [requestId]. +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Pointer>, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer>, + ) +>(isLeaf: true) +external void Engine_compileMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer matSource, + int length, + int platform, + int targetApi, + int optimization, + ffi.Pointer definesJson, + int embedSource, + ffi.Pointer outError, + int outErrorCap, + ffi.Pointer> outData, + ffi.Pointer outSize, + int requestId, + ffi.Pointer> onComplete, +); + @ffi.Native, ffi.Pointer)>(isLeaf: true) external void Engine_destroyMaterial(ffi.Pointer tEngine, ffi.Pointer tMaterial); @@ -5751,6 +5844,28 @@ sealed class TBackend { static const BACKEND_NOOP = 4; } +sealed class TMaterialPlatform { + static const T_MATERIAL_PLATFORM_DESKTOP = 0; + static const T_MATERIAL_PLATFORM_MOBILE = 1; + static const T_MATERIAL_PLATFORM_ALL = 2; +} + +sealed class TMaterialTargetApi { + static const T_MATERIAL_TARGET_API_OPENGL = 1; + static const T_MATERIAL_TARGET_API_VULKAN = 2; + static const T_MATERIAL_TARGET_API_METAL = 4; + static const T_MATERIAL_TARGET_API_WEBGPU = 8; + static const T_MATERIAL_TARGET_API_ALL = 15; + static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; +} + +sealed class TMaterialOptimization { + static const T_MATERIAL_OPTIMIZATION_NONE = 0; + static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; + static const T_MATERIAL_OPTIMIZATION_SIZE = 2; + static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; +} + typedef FilamentRenderCallbackFunction = ffi.Void Function(ffi.Pointer owner); typedef DartFilamentRenderCallbackFunction = void Function(ffi.Pointer owner); typedef FilamentRenderCallback = ffi.Pointer>; diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart index 80172fba6..62242b030 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart @@ -1285,6 +1285,65 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { Pointer materialData, size_t length, ); + + /// Compiles .mat [matSource] ([length] bytes, not necessarily + /// NUL-terminated) into a filamat package, synchronously on the calling + /// thread. #include directives must already be resolved by the caller (the + /// Dart layer flattens them). + /// + /// [platform]/[targetApi]/[optimization] select the compilation targets; + /// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the + /// engine's backend. + /// + /// [definesJson] is either nullptr or a flat JSON object of preprocessor + /// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic + /// backslash escapes are supported. + /// + /// [embedSource] controls whether the .mat source is embedded in the + /// package (matc's no-embed-source flag). + /// + /// On success returns a malloc'd buffer of *outSize bytes that the caller + /// must release with [Engine_freeCompiledMaterial]. On failure returns + /// nullptr and writes a NUL-terminated message into [outError] (capacity + /// [outErrorCap]). + external Pointer _Engine_compileMaterial( + Pointer tEngine, + Pointer matSource, + size_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + size_t outErrorCap, + Pointer outSize, + ); + + /// Releases a buffer returned by [Engine_compileMaterial]. + external void _Engine_freeCompiledMaterial(Pointer data); + + /// As [Engine_compileMaterial], but the work runs on the engine's render + /// thread. The task writes the malloc'd package to *[outData] and its size to + /// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on + /// failure with the message in [outError], then invokes [onComplete] with + /// [requestId]. + external void _Engine_compileMaterialRenderThread( + Pointer tEngine, + Pointer matSource, + size_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + size_t outErrorCap, + Pointer> outData, + Pointer outSize, + int requestId, + Pointer> onComplete, + ); external void _Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial); external void _Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance); external Pointer _Engine_createScene(Pointer tEngine); @@ -6106,6 +6165,101 @@ Pointer Engine_buildMaterial(Pointer tEngine, Pointer return Pointer(result); } +/// Compiles .mat [matSource] ([length] bytes, not necessarily +/// NUL-terminated) into a filamat package, synchronously on the calling +/// thread. #include directives must already be resolved by the caller (the +/// Dart layer flattens them). +/// +/// [platform]/[targetApi]/[optimization] select the compilation targets; +/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the +/// engine's backend. +/// +/// [definesJson] is either nullptr or a flat JSON object of preprocessor +/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic +/// backslash escapes are supported. +/// +/// [embedSource] controls whether the .mat source is embedded in the +/// package (matc's no-embed-source flag). +/// +/// On success returns a malloc'd buffer of *outSize bytes that the caller +/// must release with [Engine_freeCompiledMaterial]. On failure returns +/// nullptr and writes a NUL-terminated message into [outError] (capacity +/// [outErrorCap]). +Pointer Engine_compileMaterial( + Pointer tEngine, + Pointer matSource, + Dartsize_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + Dartsize_t outErrorCap, + Pointer outSize, +) { + final result = GeneratedBindings.instance._Engine_compileMaterial( + tEngine.cast(), + matSource, + length, + platform, + targetApi, + optimization, + definesJson, + embedSource, + outError, + outErrorCap, + outSize, + ); + return Pointer(result); +} + +/// Releases a buffer returned by [Engine_compileMaterial]. +void Engine_freeCompiledMaterial(Pointer data) { + final result = GeneratedBindings.instance._Engine_freeCompiledMaterial(data); + return result; +} + +/// As [Engine_compileMaterial], but the work runs on the engine's render +/// thread. The task writes the malloc'd package to *[outData] and its size to +/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on +/// failure with the message in [outError], then invokes [onComplete] with +/// [requestId]. +void Engine_compileMaterialRenderThread( + Pointer tEngine, + Pointer matSource, + Dartsize_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + Dartsize_t outErrorCap, + Pointer> outData, + Pointer outSize, + int requestId, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Engine_compileMaterialRenderThread( + tEngine.cast(), + matSource, + length, + platform, + targetApi, + optimization, + definesJson, + embedSource, + outError, + outErrorCap, + outData, + outSize, + requestId, + onComplete.cast(), + ); + return result; +} + void Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial) { final result = GeneratedBindings.instance._Engine_destroyMaterial(tEngine.cast(), tMaterial.cast()); return result; @@ -11301,6 +11455,28 @@ final class TFence extends Struct { } } +sealed class TMaterialPlatform { + static const T_MATERIAL_PLATFORM_DESKTOP = 0; + static const T_MATERIAL_PLATFORM_MOBILE = 1; + static const T_MATERIAL_PLATFORM_ALL = 2; +} + +sealed class TMaterialTargetApi { + static const T_MATERIAL_TARGET_API_OPENGL = 1; + static const T_MATERIAL_TARGET_API_VULKAN = 2; + static const T_MATERIAL_TARGET_API_METAL = 4; + static const T_MATERIAL_TARGET_API_WEBGPU = 8; + static const T_MATERIAL_TARGET_API_ALL = 15; + static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; +} + +sealed class TMaterialOptimization { + static const T_MATERIAL_OPTIMIZATION_NONE = 0; + static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; + static const T_MATERIAL_OPTIMIZATION_SIZE = 2; + static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; +} + extension TDebugRegistryExt on Pointer { TDebugRegistry toDart() { return TDebugRegistry(this); @@ -11528,7 +11704,15 @@ extension StructAllocator on Struct { } } -extension NativeFunctionPointer0 on void Function() { +extension NativeFunctionPointer0 on void Function(int requestId) { + Pointer> addFunction() { + return Pointer>( + NativeLibrary.instance.addFunction(this.toJS, 'vi'), + ).cast(); + } +} + +extension NativeFunctionPointer1 on void Function() { Pointer> addFunction() { return Pointer>( NativeLibrary.instance.addFunction(this.toJS, 'v'), @@ -11536,7 +11720,7 @@ extension NativeFunctionPointer0 on void Function() { } } -extension NativeFunctionPointer1 on void Function(Pointer) { +extension NativeFunctionPointer2 on void Function(Pointer) { Pointer)>> addFunction() { return Pointer)>>( NativeLibrary.instance.addFunction)>(this.toJS, 'vp'), @@ -11544,7 +11728,7 @@ extension NativeFunctionPointer1 on void Function(Pointer< } } -extension NativeFunctionPointer17 on void Function(bool) { +extension NativeFunctionPointer18 on void Function(bool) { Pointer> addFunction() { return Pointer>( NativeLibrary.instance.addFunction(this.toJS, 'vi'), @@ -11552,15 +11736,7 @@ extension NativeFunctionPointer17 on void Function(bool) { } } -extension NativeFunctionPointer47 on void Function(int) { - Pointer> addFunction() { - return Pointer>( - NativeLibrary.instance.addFunction(this.toJS, 'vi'), - ).cast(); - } -} - -extension NativeFunctionPointer61 on void Function(double) { +extension NativeFunctionPointer62 on void Function(double) { Pointer> addFunction() { return Pointer>( NativeLibrary.instance.addFunction(this.toJS, 'vf'), diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index e085cd4cb..b34446217 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:math' as math; import 'package:thermion_dart/src/filament/src/implementation/ffi_render_manager.dart'; @@ -916,6 +917,162 @@ class FFIFilamentApp extends FilamentApp { return newMaterial; } + static final _includeRegExp = RegExp(r'^[ \t]*#[ \t]*include[ \t]*["<]([^">]+)[">][ \t]*$'); + + /// Flattens `#include` directives in [source] using this app's resource + /// loader, so the native compiler receives a single self-contained buffer + /// (matp only sees the bytes it is handed; it has no include callback). + /// + /// Each include is resolved against [includePaths] in order, then tried as + /// a bare path through the loader. Circular and over-deep include chains + /// are rejected rather than looped. + Future _resolveIncludes(String source, List includePaths) async { + Future tryLoad(String uri) async { + try { + return utf8.decode(await _loadResource(uri)); + } catch (_) { + return null; + } + } + + Future expand(String text, String referencing, List active) async { + final lines = text.split('\n'); + final out = []; + for (final line in lines) { + final match = _includeRegExp.firstMatch(line); + if (match == null) { + out.add(line); + continue; + } + final name = match.group(1)!; + if (active.contains(name)) { + throw MaterialCompileException( + "#include \"$name\" from $referencing is circular (${active.join(" -> ")} -> $name)"); + } + if (active.length >= 64) { + throw MaterialCompileException( + "#include nesting exceeded 64 levels at \"$name\" from $referencing"); + } + String? included; + String? resolvedAs; + for (final dir in [...includePaths, ""]) { + final candidate = dir.isEmpty || dir.endsWith("/") ? "$dir$name" : "$dir/$name"; + final contents = await tryLoad(candidate); + if (contents != null) { + included = contents; + resolvedAs = candidate; + break; + } + } + if (included == null) { + throw MaterialCompileException("Could not resolve #include \"$name\" " + "from $referencing (searched: ${includePaths.isEmpty ? "" : includePaths.join(", ")})"); + } + // Splice the file in place of the directive. Nested includes in the + // included file are resolved the same way. + out.add(await expand(included, resolvedAs!, [...active, name])); + } + return out.join('\n'); + } + + return expand(source, "", []); + } + + @override + Future compileMaterial( + String matSource, { + MaterialCompilePlatform platform = MaterialCompilePlatform.all, + Set? targetApi, + MaterialOptimization optimization = MaterialOptimization.performance, + Map defines = const {}, + List includePaths = const [], + bool embedSource = true, + }) async { + if (FILAMENT_WASM) { + throw UnsupportedError( + "compileMaterial is not supported on web: the WASM engine does not link the " + "material compiler. Pre-compile .mat sources to .filamat with matc and load " + "them with createMaterial instead."); + } + + final platformFlag = switch (platform) { + MaterialCompilePlatform.desktop => TMaterialPlatform.T_MATERIAL_PLATFORM_DESKTOP, + MaterialCompilePlatform.mobile => TMaterialPlatform.T_MATERIAL_PLATFORM_MOBILE, + MaterialCompilePlatform.all => TMaterialPlatform.T_MATERIAL_PLATFORM_ALL, + }; + // Null targetApi lets native derive the target from the engine's backend, + // which is what makes the package loadable by the running engine. + var targetApiFlag = TMaterialTargetApi.T_MATERIAL_TARGET_API_FROM_ENGINE; + if (targetApi != null && targetApi.isNotEmpty) { + targetApiFlag = 0; + for (final api in targetApi) { + targetApiFlag |= switch (api) { + MaterialTargetApi.opengl => TMaterialTargetApi.T_MATERIAL_TARGET_API_OPENGL, + MaterialTargetApi.vulkan => TMaterialTargetApi.T_MATERIAL_TARGET_API_VULKAN, + MaterialTargetApi.metal => TMaterialTargetApi.T_MATERIAL_TARGET_API_METAL, + MaterialTargetApi.webgpu => TMaterialTargetApi.T_MATERIAL_TARGET_API_WEBGPU, + }; + } + } + final optimizationLevel = switch (optimization) { + MaterialOptimization.none => TMaterialOptimization.T_MATERIAL_OPTIMIZATION_NONE, + MaterialOptimization.preprocessor => TMaterialOptimization.T_MATERIAL_OPTIMIZATION_PREPROCESSOR, + MaterialOptimization.size => TMaterialOptimization.T_MATERIAL_OPTIMIZATION_SIZE, + MaterialOptimization.performance => TMaterialOptimization.T_MATERIAL_OPTIMIZATION_PERFORMANCE, + }; + + final flattened = await _resolveIncludes(matSource, includePaths); + final sourceByteLength = utf8.encode(flattened).length; + + final sourcePtr = flattened.toNativeUtf8().cast(); + final definesPtr = defines.isEmpty + ? nullptr.cast() + : jsonEncode(defines).toNativeUtf8().cast(); + final outError = allocate(1024); + outError[0] = 0; + // Written by the render-thread task before the completion callback fires. + final outData = allocate>(sizeOf>()); + final outSize = allocate(sizeOf()); + try { + await withVoidCallback((requestId, cb) { + Engine_compileMaterialRenderThread( + engine, + sourcePtr, + sourceByteLength, + platformFlag, + targetApiFlag, + optimizationLevel, + definesPtr, + embedSource ? 1 : 0, + outError, + 1024, + outData, + outSize.cast(), + requestId, + cb, + ); + }); + final data = outData.value; + if (data == nullptr) { + throw MaterialCompileException(outError.cast().toDartString()); + } + final size = outSize.value; + // Copy out of the native buffer, then hand it back. The buffer stays + // valid from the task's write until this free; nothing else touches it. + final compiled = Uint8List.fromList(data.asTypedList(size)); + Engine_freeCompiledMaterial(data); + return compiled; + } finally { + free(sourcePtr); + if (definesPtr != nullptr) { + free(definesPtr); + } + free(outError); + free(outData); + free(outSize); + } + } + final _swapChains = []; // diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart index eff654038..93c05dd59 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart @@ -36,6 +36,14 @@ class FFIMaterial extends Material> { } Future destroy() async { + // Filament requires every instance of a material to be gone before the + // material itself; destroying a material with live instances strands the + // render thread. Retire the instances this wrapper created (they must + // already be detached from live renderables — see reloadMaterialFromBytes, + // which re-points renderables before retiring old instances). + for (final instance in List.of(createdInstances)) { + await instance.destroy(); + } await withVoidCallback((requestId, cb) { Engine_destroyMaterialRenderThread(_app.engine, pointer, requestId, cb); }); diff --git a/thermion_dart/lib/src/filament/src/interface/filament_app.dart b/thermion_dart/lib/src/filament/src/interface/filament_app.dart index cd3b48bb7..6d10e6a80 100644 --- a/thermion_dart/lib/src/filament/src/interface/filament_app.dart +++ b/thermion_dart/lib/src/filament/src/interface/filament_app.dart @@ -128,6 +128,42 @@ abstract class FilamentApp { // Future createMaterial(Uint8List data); + /// Compiles .mat [matSource] into a .filamat package at runtime — the + /// same container [createMaterial] accepts — using the Filament material + /// compiler linked into the engine library (matc's pipeline: parse the + /// material definition, generate + optimize shaders for the target). + /// + /// Phase 1 of docs/research/runtime-material-compile.md. Currently + /// supported on desktop (linux/macOS/Windows); other platforms throw + /// [UnsupportedError]. + /// + /// [targetApi] selects which graphics APIs the package carries shaders + /// for; null derives it from the engine's active backend (recommended, and + /// what a reload-and-continue workflow wants). [platform] defaults to + /// generating both desktop and mobile variants. [optimization] mirrors + /// matc's -O flags (default PERFORMANCE, like release materials). + /// + /// [defines] are passed to the shader preprocessor (matc's -D). [matSource] + /// must not contain unresolved #include directives: [includePaths] lists + /// directories to resolve them from, and includes are flattened by this + /// library before compiling (circular includes are an error). + /// + /// [embedSource] controls whether the .mat source is embedded in the + /// package (matc's -e / no-embed-source); embedded source makes packages + /// self-describing for tooling at a small size cost. + /// + /// Throws [MaterialCompileException] with the compiler's message when the + /// source fails to parse or the shaders fail to build. + Future compileMaterial( + String matSource, { + MaterialCompilePlatform platform = MaterialCompilePlatform.all, + Set? targetApi, + MaterialOptimization optimization = MaterialOptimization.performance, + Map defines = const {}, + List includePaths = const [], + bool embedSource = true, + }); + // Future createUbershaderMaterialInstance({ bool doubleSided = false, @@ -505,3 +541,26 @@ class MaterialInstanceUse { MaterialInstanceUse(this.entity, this.primitiveIndex, this.materialInstance); } + +/// Which platform flavor of shaders a runtime compile generates +/// (matc's -g/-p selection). Mirrors filamat's Platform. +enum MaterialCompilePlatform { desktop, mobile, all } + +/// Which graphics API a runtime compile generates shaders for (matc's -a). +/// Pass a Set to generate several; omit [FilamentApp.compileMaterial]'s +/// targetApi to derive it from the engine's backend. +enum MaterialTargetApi { opengl, vulkan, metal, webgpu } + +/// Optimization level for a runtime compile (matc's -O). +enum MaterialOptimization { none, preprocessor, size, performance } + +/// Thrown by [FilamentApp.compileMaterial] when the .mat source fails to +/// parse or its shaders fail to build. The message comes from the compiler. +class MaterialCompileException implements Exception { + final String message; + + MaterialCompileException(this.message); + + @override + String toString() => "MaterialCompileException: $message"; +} diff --git a/thermion_dart/native/include/ThermionWin32.h b/thermion_dart/native/include/ThermionWin32.h index faa6d4e8b..726859609 100644 --- a/thermion_dart/native/include/ThermionWin32.h +++ b/thermion_dart/native/include/ThermionWin32.h @@ -12,6 +12,19 @@ #pragma comment(lib, "bluegl.lib") #pragma comment(lib, "backend.lib") #pragma comment(lib, "filamat.lib") +// The .mat parser for runtime material compilation (Engine_compileMaterial). +// matp must precede utils.lib in link order (it references utils symbols); +// unlike the Linux/macOS archives, the Windows filamat/matp do not bundle +// glslang/SPIRV, so the shader-compiler libraries they reference are linked +// here explicitly. +#pragma comment(lib, "matp.lib") +#pragma comment(lib, "glslang.lib") +#pragma comment(lib, "SPIRV.lib") +#pragma comment(lib, "SPIRV-Tools.lib") +#pragma comment(lib, "SPIRV-Tools-opt.lib") +#pragma comment(lib, "spirv-cross-core.lib") +#pragma comment(lib, "spirv-cross-glsl.lib") +#pragma comment(lib, "spirv-cross-msl.lib") #pragma comment(lib, "geometry.lib") #pragma comment(lib, "utils.lib") #pragma comment(lib, "filabridge.lib") diff --git a/thermion_dart/native/include/c_api/TEngine.h b/thermion_dart/native/include/c_api/TEngine.h index f381668c3..3ce1c8fa1 100644 --- a/thermion_dart/native/include/c_api/TEngine.h +++ b/thermion_dart/native/include/c_api/TEngine.h @@ -58,6 +58,103 @@ EMSCRIPTEN_KEEPALIVE void Engine_flushAndWait(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE void Engine_execute(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE TMaterial *Engine_buildMaterial(TEngine *tEngine, const uint8_t* materialData, size_t length); + +// --------------------------------------------------------------------------- +// Runtime material compilation (.mat source -> .filamat package). +// +// Phase 1 of docs/research/runtime-material-compile.md. The real +// implementation is only linked into desktop builds (linux/macos/windows, +// where the artifact ships libfilamat + libmatp); every other platform gets +// a stub that fails with an explanatory message. The header declares the API +// unconditionally so bindings generate everywhere. +// --------------------------------------------------------------------------- + +enum TMaterialPlatform { + // Values match filamat::MaterialBuilderBase::Platform. + T_MATERIAL_PLATFORM_DESKTOP = 0, + T_MATERIAL_PLATFORM_MOBILE = 1, + T_MATERIAL_PLATFORM_ALL = 2, +}; +typedef enum TMaterialPlatform TMaterialPlatform; + +enum TMaterialTargetApi { + // Bit values match filamat::MaterialBuilderBase::TargetApi and may be + // OR-ed together. + T_MATERIAL_TARGET_API_OPENGL = 0x01, + T_MATERIAL_TARGET_API_VULKAN = 0x02, + T_MATERIAL_TARGET_API_METAL = 0x04, + T_MATERIAL_TARGET_API_WEBGPU = 0x08, + T_MATERIAL_TARGET_API_ALL = 0x0F, + // Derive the target from the engine's active backend (recommended). + T_MATERIAL_TARGET_API_FROM_ENGINE = 0x100, +}; +typedef enum TMaterialTargetApi TMaterialTargetApi; + +enum TMaterialOptimization { + // Values match filamat::MaterialBuilderBase::Optimization. + T_MATERIAL_OPTIMIZATION_NONE = 0, + T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1, + T_MATERIAL_OPTIMIZATION_SIZE = 2, + T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3, +}; +typedef enum TMaterialOptimization TMaterialOptimization; + +/// Compiles .mat [matSource] ([length] bytes, not necessarily +/// NUL-terminated) into a filamat package, synchronously on the calling +/// thread. #include directives must already be resolved by the caller (the +/// Dart layer flattens them). +/// +/// [platform]/[targetApi]/[optimization] select the compilation targets; +/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the +/// engine's backend. +/// +/// [definesJson] is either nullptr or a flat JSON object of preprocessor +/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic +/// backslash escapes are supported. +/// +/// [embedSource] controls whether the .mat source is embedded in the +/// package (matc's no-embed-source flag). +/// +/// On success returns a malloc'd buffer of *outSize bytes that the caller +/// must release with [Engine_freeCompiledMaterial]. On failure returns +/// nullptr and writes a NUL-terminated message into [outError] (capacity +/// [outErrorCap]). +EMSCRIPTEN_KEEPALIVE const uint8_t *Engine_compileMaterial( + TEngine *tEngine, + const char *matSource, + size_t length, + TMaterialPlatform platform, + TMaterialTargetApi targetApi, + TMaterialOptimization optimization, + const char *definesJson, + uint8_t embedSource, + char *outError, + size_t outErrorCap, + size_t *outSize); + +/// Releases a buffer returned by [Engine_compileMaterial]. +EMSCRIPTEN_KEEPALIVE void Engine_freeCompiledMaterial(const uint8_t *data); + +/// As [Engine_compileMaterial], but the work runs on the engine's render +/// thread. The task writes the malloc'd package to *[outData] and its size to +/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on +/// failure with the message in [outError], then invokes [onComplete] with +/// [requestId]. +EMSCRIPTEN_KEEPALIVE void Engine_compileMaterialRenderThread( + TEngine *tEngine, + const char *matSource, + size_t length, + TMaterialPlatform platform, + TMaterialTargetApi targetApi, + TMaterialOptimization optimization, + const char *definesJson, + uint8_t embedSource, + char *outError, + size_t outErrorCap, + const uint8_t **outData, + size_t *outSize, + uint32_t requestId, + void (*onComplete)(int32_t requestId)); EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial); EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterialInstance(TEngine *tEngine, TMaterialInstance *tMaterialInstance); EMSCRIPTEN_KEEPALIVE TScene *Engine_createScene(TEngine *tEngine); diff --git a/thermion_dart/native/src/c_api/TEngine.cpp b/thermion_dart/native/src/c_api/TEngine.cpp index 7643845d6..2d91d05a7 100644 --- a/thermion_dart/native/src/c_api/TEngine.cpp +++ b/thermion_dart/native/src/c_api/TEngine.cpp @@ -35,9 +35,196 @@ #include #include +#ifdef THERMION_RUNTIME_MATERIAL_COMPILE +#include +#include +#include +#include +#include + +// The prebuilt artifact's include tree does not ship utils/JobSystem.h; a +// forward declaration is all Engine_compileMaterial needs (it only passes +// engine->getJobSystem() by reference). +namespace utils +{ + class JobSystem; +} + +#include +#include +#include +#include +#include +#include +#endif + #include "Log.hpp" #include "MathUtils.hpp" +namespace thermion +{ + + void writeError(char *outError, size_t outErrorCap, const char *message) + { + if (outError == nullptr || outErrorCap == 0) + { + return; + } + snprintf(outError, outErrorCap, "%s", message); + } +#ifdef THERMION_RUNTIME_MATERIAL_COMPILE + // ===================================================================== + // Runtime material compilation (Phase 1 of + // docs/research/runtime-material-compile.md). + // + // The proven sequence, mirroring matc: MaterialBuilder::init() once, + // matp::MaterialParser::parse() of the (already include-resolved) + // source into a MaterialBuilder, then MaterialBuilder::build() on the + // engine's JobSystem. + // ===================================================================== + + /// Minimal matp::Config for runtime compilation. matc fills this from + /// command-line flags; we only need the platform/target/optimization + /// selection — output/input sinks and the string forms are unused by + /// MaterialParser::parse. + class RuntimeMaterialConfig : public matp::Config + { + public: + RuntimeMaterialConfig( + Platform platform, + TargetApi targetApi, + Optimization optimization, + bool includeSourceMaterial) + { + mPlatform = platform; + mTargetApi = targetApi; + mOptimizationLevel = optimization; + mIncludeSourceMaterial = includeSourceMaterial; + // Engine_create pins the engine to FEATURE_LEVEL_1; generate + // for the same level so packages always load. + mFeatureLevel = filament::backend::FeatureLevel::FEATURE_LEVEL_1; + } + + Output *getOutput() const noexcept override { return nullptr; } + Input *getInput() const noexcept override { return nullptr; } + std::string toString() const noexcept override { return "thermion_runtime_compile"; } + std::string toPIISafeString() const noexcept override { return "thermion_runtime_compile"; } + }; + + /// Serializes every compile. MaterialBuilder::init()/shutdown() are + /// refcounted but glslang's global initialization is not thread-safe, + /// so the first init and all builds share one mutex. We never call + /// shutdown — the builder state lives for the process lifetime, which + /// also removes any racing with a concurrent engine teardown. + std::mutex &materialCompileMutex() + { + static std::mutex mutex; + return mutex; + } + + /// Parses a flat JSON object of string -> string, e.g. + /// {"OCCLUSION": "1", "TINT": "0.5"}. Accepts whitespace between + /// tokens and the backslash escapes \" \\ \/ \n \t \r. Returns false + /// on malformed input (the whole compile then fails with an error + /// pointing at the defines). + bool parseDefinesJson(const char *json, std::vector> &out) + { + const char *p = json; + auto skipWhitespace = [&p]() + { + while (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r') + { + p++; + } + }; + auto parseString = [&](std::string &result) -> bool + { + if (*p != '"') + { + return false; + } + p++; + result.clear(); + while (*p != '"') + { + if (*p == '\0') + { + return false; + } + if (*p == '\\') + { + p++; + switch (*p) + { + case '"': result += '"'; break; + case '\\': result += '\\'; break; + case '/': result += '/'; break; + case 'n': result += '\n'; break; + case 't': result += '\t'; break; + case 'r': result += '\r'; break; + default: return false; + } + } + else + { + result += *p; + } + p++; + } + p++; // closing quote + return true; + }; + + skipWhitespace(); + if (*p != '{') + { + return false; + } + p++; + skipWhitespace(); + if (*p == '}') + { + return true; + } + while (true) + { + skipWhitespace(); + std::string key; + if (!parseString(key)) + { + return false; + } + skipWhitespace(); + if (*p != ':') + { + return false; + } + p++; + skipWhitespace(); + std::string value; + if (!parseString(value)) + { + return false; + } + out.emplace_back(std::move(key), std::move(value)); + skipWhitespace(); + if (*p == ',') + { + p++; + continue; + } + if (*p == '}') + { + return true; + } + return false; + } + } + +#endif + +} + #ifdef __cplusplus namespace thermion { @@ -52,6 +239,7 @@ namespace thermion const char *RenderThread_getActiveCanvasSelector(); #endif + EMSCRIPTEN_KEEPALIVE uint64_t TSWAP_CHAIN_CONFIG_TRANSPARENT = filament::backend::SWAP_CHAIN_CONFIG_TRANSPARENT; EMSCRIPTEN_KEEPALIVE uint64_t TSWAP_CHAIN_CONFIG_READABLE = filament::backend::SWAP_CHAIN_CONFIG_READABLE; EMSCRIPTEN_KEEPALIVE uint64_t TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER = filament::backend::SWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER; @@ -303,6 +491,170 @@ namespace thermion engine->destroy(mi); } +#ifdef THERMION_RUNTIME_MATERIAL_COMPILE + EMSCRIPTEN_KEEPALIVE const uint8_t *Engine_compileMaterial( + TEngine *tEngine, + const char *matSource, + size_t length, + TMaterialPlatform platform, + TMaterialTargetApi targetApi, + TMaterialOptimization optimization, + const char *definesJson, + uint8_t embedSource, + char *outError, + size_t outErrorCap, + size_t *outSize) + { + if (outSize != nullptr) + { + *outSize = 0; + } + auto *engine = reinterpret_cast(tEngine); + + using BuilderPlatform = filamat::MaterialBuilder::Platform; + using BuilderTargetApi = filamat::MaterialBuilder::TargetApi; + using BuilderOptimization = filamat::MaterialBuilder::Optimization; + + if (platform > T_MATERIAL_PLATFORM_ALL) + { + writeError(outError, outErrorCap, "invalid platform"); + return nullptr; + } + if (optimization > T_MATERIAL_OPTIMIZATION_PERFORMANCE) + { + writeError(outError, outErrorCap, "invalid optimization level"); + return nullptr; + } + + BuilderTargetApi builderTargetApi; + uint32_t resolved = targetApi; + if (targetApi == T_MATERIAL_TARGET_API_FROM_ENGINE) + { + builderTargetApi = filamat::targetApiFromBackend(engine->getBackend()); + } + else + { + if ((targetApi & ~T_MATERIAL_TARGET_API_ALL) != 0) + { + writeError(outError, outErrorCap, "invalid target API flags"); + return nullptr; + } + builderTargetApi = (BuilderTargetApi)(resolved); + } + + // Everything below shares one mutex: MaterialBuilder::init()'s + // glslang setup is not thread-safe, and builds on one engine's + // JobSystem should not race each other. + std::lock_guard lock(materialCompileMutex()); + static bool materialBuilderInitialized = false; + if (!materialBuilderInitialized) + { + filamat::MaterialBuilder::init(); + materialBuilderInitialized = true; + } + + std::vector> defines; + if (definesJson != nullptr && definesJson[0] != '\0') + { + if (!parseDefinesJson(definesJson, defines)) + { + writeError(outError, outErrorCap, + "definesJson must be a flat JSON object of strings, e.g. {\"KEY\": \"value\"}"); + return nullptr; + } + } + + // parse() takes a non-const buffer (it rewrites the source in + // place when applying substitutions). + std::unique_ptr buffer(new char[length + 1]); + memcpy((void *)buffer.get(), matSource, length); + ((char *)buffer.get())[length] = '\0'; + ssize_t size = (ssize_t)length; + + RuntimeMaterialConfig config( + (BuilderPlatform)platform, builderTargetApi, (BuilderOptimization)optimization, + embedSource != 0); + + filamat::MaterialBuilder builder; + builder.platform(config.getPlatform()) + .targetApi(config.getTargetApi()) + .optimization(config.getOptimizationLevel()) + .featureLevel(config.getFeatureLevel()) + .materialSource(std::string_view(buffer.get(), length)); + for (const auto &define : defines) + { + builder.shaderDefine(define.first.c_str(), define.second.c_str()); + } + + matp::MaterialParser parser; + utils::Status status = parser.parse(builder, config, size, buffer); + if (status.getCode() != utils::StatusCode::OK) + { + auto message = status.getMessage(); + char formatted[512]; + snprintf(formatted, sizeof(formatted), "material parse failed: %.*s", + (int)message.size(), message.data()); + writeError(outError, outErrorCap, formatted); + return nullptr; + } + + filamat::Package package = builder.build(engine->getJobSystem()); + if (!package.isValid()) + { + // Shader compilation diagnostics are emitted to the log by + // glslang; there is no in-band channel for them. + writeError(outError, outErrorCap, + "material build failed (see engine log for shader diagnostics)"); + return nullptr; + } + + uint8_t *result = (uint8_t *)malloc(package.getSize()); + if (result == nullptr) + { + writeError(outError, outErrorCap, "out of memory copying package"); + return nullptr; + } + memcpy(result, package.getData(), package.getSize()); + if (outSize != nullptr) + { + *outSize = package.getSize(); + } + return result; + } + + EMSCRIPTEN_KEEPALIVE void Engine_freeCompiledMaterial(const uint8_t *data) + { + free((void *)data); + } +#else + EMSCRIPTEN_KEEPALIVE const uint8_t *Engine_compileMaterial( + TEngine *tEngine, + const char *matSource, + size_t length, + TMaterialPlatform platform, + TMaterialTargetApi targetApi, + TMaterialOptimization optimization, + const char *definesJson, + uint8_t embedSource, + char *outError, + size_t outErrorCap, + size_t *outSize) + { + // filamat/matp are not linked into this build (see + // docs/research/runtime-material-compile.md section 5: Phase 1 + // covers desktop; mobile/web artifacts do not ship libmatp). + writeError(outError, outErrorCap, + "runtime material compilation is not supported on this platform"); + if (outSize != nullptr) + { + *outSize = 0; + } + return nullptr; + } + + EMSCRIPTEN_KEEPALIVE void Engine_freeCompiledMaterial(const uint8_t *data) {} +#endif + EMSCRIPTEN_KEEPALIVE void Engine_destroyTexture(TEngine *tEngine, TTexture *tTexture) { auto *engine = reinterpret_cast(tEngine); diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index 804327f72..72034de3f 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -626,6 +626,49 @@ extern "C" auto fut = rt->addTask(lambda); } + // Runs the .mat -> .filamat compile on the engine's render thread (the + // build uses the engine's JobSystem, so it is serialized with other engine + // work). Follows the readPixels pattern: the task fills [outData]/[outSize] + // (the buffer stays allocated until the caller releases it with + // Engine_freeCompiledMaterial) and then notifies [onComplete] with + // [requestId]. On failure *outData is set to nullptr and the message is in + // [outError]. + EMSCRIPTEN_KEEPALIVE void Engine_compileMaterialRenderThread( + TEngine *tEngine, + const char *matSource, + size_t length, + TMaterialPlatform platform, + TMaterialTargetApi targetApi, + TMaterialOptimization optimization, + const char *definesJson, + uint8_t embedSource, + char *outError, + size_t outErrorCap, + const uint8_t **outData, + size_t *outSize, + uint32_t requestId, + VoidCallback onComplete) + { + auto *rt = RT(tEngine); + std::packaged_task lambda( + [=]() mutable + { + size_t size = 0; + const uint8_t *data = Engine_compileMaterial( + tEngine, matSource, length, platform, targetApi, optimization, definesJson, embedSource, outError, outErrorCap, &size); + if (outData != nullptr) + { + *outData = data; + } + if (outSize != nullptr) + { + *outSize = size; + } + PROXY(onComplete(requestId)); + }); + auto fut = rt->addTask(lambda); + } + EMSCRIPTEN_KEEPALIVE void Engine_createFenceRenderThread(TEngine *tEngine, void (*onComplete)(TFence *)) { auto *rt = RT(tEngine); diff --git a/thermion_dart/test/material_compile_tests.dart b/thermion_dart/test/material_compile_tests.dart new file mode 100644 index 000000000..14516177c --- /dev/null +++ b/thermion_dart/test/material_compile_tests.dart @@ -0,0 +1,297 @@ +import 'dart:io'; + +import 'package:path/path.dart' as p; +import 'package:test/test.dart'; +import 'package:thermion_dart/thermion_dart.dart'; + +import 'helpers.dart'; + +/// Returns the RGBA float at (x, y) of a captured float pixel buffer. +List pixelAt(Float32List buffer, int width, int height, int x, int y) { + final offset = (y * width + x) * 4; + return [buffer[offset], buffer[offset + 1], buffer[offset + 2], buffer[offset + 3]]; +} + +/// Pulls the parameter names out of a .mat source's `parameters` block, so a +/// golden compile can be checked for more than "it didn't throw". +Set parameterNames(String source) { + final blockStart = source.indexOf("parameters"); + if (blockStart < 0) { + return {}; + } + final blockEnd = source.indexOf("]", blockStart); + final block = + source.substring(blockStart, blockEnd < 0 ? source.length : blockEnd); + return RegExp(r"name\s*:\s*([A-Za-z_][A-Za-z0-9_]*)") + .allMatches(block) + .map((m) => m.group(1)!) + .toSet(); +} + +/// A minimal parameterised unlit material, with [fragmentExtra] spliced into +/// the fragment shader so tests can vary the compiled output. +String colorMaterial(String fragmentExtra) => """ +material { + name : RuntimeCompileColor, + requires : [ position ], + parameters : [ + { + type : float4, + name : color + } + ], + shadingModel : unlit, + blending : opaque, + culling : none, +} +fragment { + void material(inout MaterialInputs material) { + prepareMaterial(material); + material.baseColor = materialParams.color; + $fragmentExtra + } +} +"""; + +void main() async { + final testHelper = TestHelper("material_compile"); + await testHelper.setup(); + + final app = FilamentApp.instance!; + + // The shipped .mat sources — exactly what materials/build.sh compiles. + // (materials/ also holds unlit/depth_sampler/vdtm sources that the build + // does not ship; vdtm.mat is outright broken — `z` declared inside an if + // block and used outside — and would fail under matc too.) + final workspaceMaterials = + p.normalize(p.join(testHelper.assetsDir, "..", "..", "materials")); + final shippedNames = [ + "bone_overlay", + "capture_uv", + "edge_outline", + "gizmo", + "grid", + "image", + "linear_depth", + "silhouette", + "translation_axis", + "unlit_fixed_size", + "wireframe", + ]; + final exampleMaterials = [ + "customattributes.mat", + "solidcolor.mat", + "viewspace.mat", + ].map((name) => p.join(testHelper.assetsDir, name)).toList(); + final allShipped = [ + ...shippedNames.map((name) => p.join(workspaceMaterials, "$name.mat")), + ...exampleMaterials, + ]; + + test("golden: runtime compile accepts every shipped .mat", () async { + await testHelper.withViewer((viewer) async { + final failures = []; + for (final path in allShipped) { + final source = File(path).readAsStringSync(); + try { + final compiled = await app.compileMaterial( + source, + includePaths: [workspaceMaterials], + ); + if (compiled.isEmpty) { + failures.add("$path compiled to an empty package"); + continue; + } + final material = await app.createMaterial(compiled); + for (final param in parameterNames(source)) { + if (!await material.hasParameter(param)) { + failures.add("$path lost parameter $param in the runtime compile"); + } + } + await material.destroy(); + } catch (e) { + failures.add("$path: $e"); + } + } + // Report every failing file at once: a single thrown exception would + // hide the state of the files after it. + expect(failures, isEmpty, reason: failures.join("\n")); + }); + }); + + test("parse errors surface the compiler's message", () async { + await testHelper.withViewer((viewer) async { + await expectLater( + app.compileMaterial("material { this is not a valid material }"), + throwsA(isA().having( + (e) => e.message, + "message", + isNotEmpty, + )), + ); + }); + }); + + test("explicit target APIs produce loadable packages", () async { + await testHelper.withViewer((viewer) async { + // Compile for a single backend rather than deriving from the engine — + // the output must still be a valid package for Material::Builder. + final compiled = await app.compileMaterial( + colorMaterial(""), + targetApi: {MaterialTargetApi.opengl}, + platform: MaterialCompilePlatform.desktop, + optimization: MaterialOptimization.size, + ); + final material = await app.createMaterial(compiled); + expect(await material.hasParameter("color"), isTrue); + await material.destroy(); + }); + }); + + test("defines reach the shader preprocessor", () async { + await testHelper.withViewer((viewer) async { + final source = """ +material { + name : DefinesMaterial, + requires : [ position ], + parameters : [ + { + type : float, + name : factor + } + ], + shadingModel : unlit, + blending : opaque, + culling : none, +} +fragment { + void material(inout MaterialInputs material) { + prepareMaterial(material); +#ifdef TINT_RED + material.baseColor = float4(1.0, 0.0, 0.0, 1.0); +#else + material.baseColor = float4(0.0, 0.0, 1.0, 1.0); +#endif + } +} +"""; + final withoutDefine = await app.compileMaterial(source); + final withDefine = + await app.compileMaterial(source, defines: {"TINT_RED": "1"}); + expect(withoutDefine, isNotEmpty); + expect(withDefine, isNotEmpty); + // Both variants load; they are different packages (different shaders). + expect(withDefine, isNot(equals(withoutDefine))); + + final material = await app.createMaterial(withDefine); + expect(await material.hasParameter("factor"), isTrue); + await material.destroy(); + }); + }); + + group("include resolution", () { + late Directory tmp; + + setUp(() { + tmp = Directory.systemTemp.createTempSync("thermion_includes"); + }); + + tearDown(() { + tmp.deleteSync(recursive: true); + }); + + test("nested includes are flattened", () async { + await testHelper.withViewer((viewer) async { + // Includes live inside shader blocks (matp's grammar only accepts + // the material document at the top level — same restriction matc's + // own include preprocessing has). + File(p.join(tmp.path, "outer.h")).writeAsStringSync( + "#include \"inner.h\"\nfloat tweak(float v) { return v * HALF; }\n"); + File(p.join(tmp.path, "inner.h")).writeAsStringSync( + "#define HALF (0.5)\n#define DOUBLE_IT(v) ((v) * 2.0)\n"); + final source = """ +material { + name : IncludeMaterial, + requires : [ position ], + shadingModel : unlit, + blending : opaque, + culling : none, +} +fragment { +#include "outer.h" + void material(inout MaterialInputs material) { + prepareMaterial(material); + material.baseColor = float4(tweak(DOUBLE_IT(0.25))); + } +} +"""; + final compiled = + await app.compileMaterial(source, includePaths: [tmp.path]); + expect(compiled, isNotEmpty); + final material = await app.createMaterial(compiled); + await material.destroy(); + }); + }); + + test("missing includes throw with the offending name", () async { + await testHelper.withViewer((viewer) async { + await expectLater( + app.compileMaterial( + '#include "does_not_exist.h"\nmaterial { }', includePaths: [tmp.path]), + throwsA(isA().having( + (e) => e.message, "message", contains("does_not_exist.h"))), + ); + }); + }); + + test("circular includes are detected", () async { + await testHelper.withViewer((viewer) async { + File(p.join(tmp.path, "loop.h")).writeAsStringSync('#include "loop.h"\n'); + await expectLater( + app.compileMaterial('#include "loop.h"\nmaterial { }', + includePaths: [tmp.path]), + throwsA(isA().having( + (e) => e.message, "message", contains("circular"))), + ); + }); + }); + }); + + test("compiled materials drive geometry and hot-reload end to end", () async { + await testHelper.withViewer((viewer) async { + const width = 512; + const height = 512; + + final material = + await app.createMaterial(await app.compileMaterial(colorMaterial(""))); + final instance = await material.createInstance(); + await instance.setParameterFloat4("color", 0.0, 0.0, 1.0, 1.0); + final cube = await viewer.createGeometry( + GeometryUtils.cube(normals: false, uvs: false), + materialInstances: [instance], + ); + + Future> center() async { + final pixels = (await testHelper.capture(viewer.view, "compile_e2e"))[viewer.view]!; + return pixelAt( + pixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); + } + + final before = await center(); + expect(before[2], greaterThan(0.4), reason: "runtime-compiled material renders blue"); + expect(before[0], lessThan(0.1)); + + // Recompile with the fragment forcing red, then hot-swap the package. + final recompiled = await app.compileMaterial( + colorMaterial("material.baseColor = float4(1.0, 0.0, 0.0, 1.0);")); + final reloaded = await app.reloadMaterialFromBytes(material, recompiled); + + final after = await center(); + expect(after[0], greaterThan(0.4), reason: "recompiled material renders red"); + expect(after[2], lessThan(0.1)); + + await viewer.destroyAsset(cube); + await reloaded.destroy(); + }); + }); +} From a7214e47db3b14b8fe6d5c99be189accc94fc3d7 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sun, 23 Aug 2026 08:53:16 +0000 Subject: [PATCH 4/6] chore: drop research doc from the branch The research plan served its purpose as the implementation blueprint; keeping it out of the tree keeps the PR scoped to the runtime material compile feature itself. (Local copy retained outside git.) --- docs/research/runtime-material-compile.md | 246 ---------------------- 1 file changed, 246 deletions(-) delete mode 100644 docs/research/runtime-material-compile.md diff --git a/docs/research/runtime-material-compile.md b/docs/research/runtime-material-compile.md deleted file mode 100644 index 5c33bb252..000000000 --- a/docs/research/runtime-material-compile.md +++ /dev/null @@ -1,246 +0,0 @@ -# Runtime material compilation / hot-reload — research & implementation plan - -Status: research/plan (no code changes). Date: 2026-08-19. Branch: `asb/runtime-material-compile`. -Scope: how thermion could (1) compile `.mat` / material source to a runnable material **at runtime**, and (2) **hot-reload** materials in a running app. - -Everything marked **[verified]** below was checked directly in this repo or reproduced in a container against the exact libraries thermion ships (R2 artifact `filament-v1.75.0-*-release.zip`). - ---- - -## 1. Current material path, end to end - -### 1.1 Build time (today, the only compilation path) - -``` -materials/*.mat - └─ matc -a … -o X.filamat X.mat (materials/build.sh:66-67) - └─ resgen -c -p -x X.filamat (materials/build.sh:68) - └─ _.c/.h (uint8_t arrays, embedded in native lib) - └─ hook/build.dart picks ONE variant per platform (build.dart:200-214) - └─ compiled into libthermion_dart.so / wasm -``` - -- `make materials` (Makefile:45-51) requires `FILAMENT_PATH` and runs `materials/build.sh`. -- `scripts/regenerate-materials.sh` downloads a **custom, WebGPU-enabled** `matc`/`resgen` pair from thermion's R2 bucket (`filament-v1.75.0-linux-release-webgpu.zip`, tools-only: `bin/matc` 17.8 MB + `bin/resgen`; no libs/headers inside) — [verified]. -- 8 variants per material (`apple|android|desktop|opengl|vulkan|webgpu|web_webgl|web_combined`, materials/build.sh:147-154); the `.filamat` intermediates are **deleted** after `resgen` (materials/build.sh:94). -- Web: `native/web/CMakeLists.txt:102-117` picks one variant (default `web_webgl`) and links it into the wasm executable. -- Exception: 3 example materials are kept as real `.filamat` files in `examples/assets/` (compiled with all 4 target APIs, materials/build.sh:229-233). - -### 1.2 Runtime (loading a compiled material) - -- Dart: `FilamentApp.createMaterial(Uint8List)` → `Engine_buildMaterialRenderThread(engine, data.address, data.length, cb)` — `lib/src/filament/src/implementation/ffi_filament_app.dart:603-611`. -- Native: `Engine_buildMaterial` (`native/src/c_api/TEngine.cpp:287-294`) = `Material::Builder().package(data, len).build(*engine)`. Destruction: `Engine_destroyMaterial` (TEngine.cpp:296-301). -- Built-in materials (grid/gizmo/image/…) are compiled into the library and built from embedded arrays in `native/src/c_api/TMaterialInstance.cpp` (e.g. lines 56-66) via `MaterialProvider` / `MaterialProvider_createMaterialInstanceRenderThread`. -- Applying to geometry: `RenderableManager_setMaterialInstanceAt` / `getMaterialInstanceAt` (`native/src/c_api/TRenderableManager.cpp:26-46`); Dart wrappers in `lib/src/filament/src/implementation/ffi_asset.dart:232-269`. -- There is **no** `TMaterial.cpp`; Material-related exports live in `TEngine.cpp`/`TMaterialInstance.cpp`. No code anywhere in thermion calls `filamat::*`, `matp::*` or compiles shaders at runtime — [verified by repo-wide grep]. - -So: **the runtime load path already accepts arbitrary filamat bytes**; everything missing is on the *produce* side (mat → filamat at runtime) and the *swap* side (live replacement bookkeeping). - ---- - -## 2. What Filament v1.75.0 offers at runtime — verified - -The full matc pipeline exists as linkable libraries; matc is just a CLI wrapper around them: - -| Piece | API | Notes | -|---|---|---| -| `.mat` parser | `matp::MaterialParser` (`filament-matp/MaterialParser.h`) | `parse(builder, config&, size&, buffer&)` fills a `MaterialBuilder`; `resolveIncludes()` handles `#include` (needed by `grid.mat` → `shared.h`). Library `libmatp.a`, ~600 KB, deps: filamat/filabridge/utils. matc uses exactly this (`tools/matc/src/matc/MaterialCompiler.cpp:92-105`). | -| Material compiler | `filamat::MaterialBuilder` (`filamat/MaterialBuilder.h`) | `init()` once → set `.platform()/.targetApi()/.optimization()/.materialSource(src)` → `build(engine.getJobSystem())` → `Package` (`getData()/getSize()/isValid()`). `materialSource(std::string_view)` takes the raw `.mat` text; it is also embedded into the filamat (MaterialBuilder.cpp:1770) which is what matdbg-style tools consume. | -| Material creation | `Material::Builder().package(data, size).build(engine)` | Already used by thermion today (TEngine.cpp:290). | -| Live swap | `RenderableManager::setMaterialInstanceAt(inst, prim, mi)` | RenderableManager.h:880 — supported on live renderables. | -| Material→instances | `Material::createInstance()`, `getDefaultInstance()` | A `MaterialInstance` **cannot change its parent Material** (no API) — reload = new Material + new instances + re-apply. `MaterialInstance::getMaterial()` exists (MaterialInstance.h:118). | -| Parameter reflection | `Material::getParameterCount()/getParameters()/hasParameter()` | Material.h:368+. Values are **write-only** on MaterialInstance (no getters) — reload must re-apply values from a client-side shadow copy. | -| Shader hot-swap in a package | `matdbg::ShaderReplacer` (`matdbg/ShaderReplacer.h`) | Edits shader source inside an existing filamat → new package. Dev-tooling angle only. | - -`matp::Config` is abstract (matc implements it via its CLI config); a runtime implementation is ~15 lines setting `mPlatform`/`mTargetApi`/`mOptimization` — prototyped below. - -### 2.1 End-to-end proof (run in this research, Linux, thermion's own artifact) - -Linked **only** against libs extracted from `filament-v1.75.0-linux-release.zip` (the artifact `hook/build.dart` already downloads), built a normal executable and a **shared library**: - -```cpp -RuntimeConfig cfg(Platform::DESKTOP, TargetApi::OPENGL); // matp::Config subclass -filamat::MaterialBuilder::init(); -filamat::MaterialBuilder b; -b.platform(...).targetApi(...).optimization(...).materialSource(matText); -matp::MaterialParser p; p.parse(b, cfg, size, buffer); // status OK -filamat::Package pkg = b.build(engine.getJobSystem()); // valid, 105 KB -// pkg.getData()/getSize() == a normal .filamat (magic "MATVERS") -``` - -Results — [verified]: -- Parse + build of a real `.mat` (lit, float3 param) → **valid 105 KB filamat**, ~1.7 s cold for DESKTOP+OPENGL with `Optimization::PERFORMANCE` (all variants). Faster with `Optimization::NONE` / single shader model — measure per case. -- Shared-lib link (`-shared -fPIC`) works: the whole stack (incl. glslang/SPIRV) is **PIC**. Stripped `.so` carrying the full compiler = **11.2 MB** (x86-64) — the realistic per-platform size cost. -- Link order note: `libmatp.a` must precede `libutils.a` (it references `utils::Path`). -- `utils/JobSystem.h` is *not* in the artifact's headers (private) but is unneeded: `MaterialBuilder.h` forward-declares it and `Engine::getJobSystem()` (Engine.h:1276) supplies the reference. - -### 2.2 What thermion's artifacts and link config already contain — [verified by inspecting R2 zips + build.dart] - -| Platform | `libfilamat.a` in artifact | `libmatp.a` | glslang/SPIRV | Linked into thermion today | -|---|---|---|---|---| -| Linux | 34.9 MB (combined: filamat+glslang+SPIRV-Tools+spirv-cross+zstd) | 592 KB | bundled inside filamat | **Yes — inside `--whole-archive`** (build.dart:231, 493-497) → the compiler is *already shipped* in the Linux .so | -| Windows | 9.3 MB + separate `glslang.lib`, `SPIRV*.lib`, `spirv-cross-*.lib` | 3.7 MB | separate libs, present | Yes (pragma, `native/include/ThermionWin32.h:19`) | -| macOS | 45 MB combined | 756 KB | bundled | Yes (build.dart:231) | -| Android (4 ABIs) | 25–30 MB per ABI, combined | **missing** | bundled | Yes (build.dart:231; the ZSTD link fix at build.dart:260-268 proves filamat objects are pulled into Android binaries) | -| iOS | 39 MB combined | **missing** | bundled | **No** — explicitly excluded (build.dart:231) | -| Web/wasm | **missing** | **missing** | — | No (declared as imported target `native/web/CMakeLists.txt:213-216` but never linked, lines 334-359) | - -Also: `scripts/build_linux.sh` already patches `libs/filamat/CMakeLists.txt` with `CMAKE_POSITION_INDEPENDENT_CODE ON` ("Patch libs/filamat/CMakeLists.txt for position independent code") — someone already prepared filamat for shared-lib linking. - -**Conclusion of feasibility: in-process runtime compilation (`Option A`) requires no new Filament upstream work.** On desktop it is (almost) *just writing the call*; on Android it needs `matp` added to the artifact; iOS additionally needs a link-list change; web needs real build work (§6). - ---- - -## 3. Design options — runtime compilation - -### A. In-process compile with `matp` + `filamat::MaterialBuilder` — **recommended** -Compile `.mat` text → `Package` → `Material` inside libthermion_dart, same process as the engine. - -- Pros: no external tools; works offline; single source of truth (same libs as matc → identical output); `#include` support via `resolveIncludes`; already 90% built on desktop (§2.2). -- Cons: +~11 MB stripped binary per platform when the compiler code is pulled in (Linux already pays this today via whole-archive); compile latency ~0.1–1.7 s per material; glslang is a large attack surface for untrusted input (fuzzing story: Filament fuzzes matc paths upstream). -- Effort: see phased plan (§5). 1–2 weeks to a cross-platform API, most of it in CI/artifacts and tests, not the code. - -### B. Bundle `matc` and shell out at runtime -Ship the 17.8 MB matc binary next to the app; run it as a subprocess on a temp dir. - -- Pros: zero new link/ABI risk; identical to the build-time path. -- Cons: **not viable on iOS** (no subprocess/App Store rules), awkward on Android (`exec` restrictions on API 29+), useless on web; two copies of the compiler if A is also shipped; temp-file plumbing. -- Effort: deceptively large (per-platform bundling, signing, paths). **Not recommended** except as a dev-only desktop tool. - -### C. Remote compile service -App uploads `.mat`, server runs matc, returns filamat bytes (thermion already has `createMaterial(bytes)` to consume them). - -- Pros: keeps clients thin; works on web/iOS; central version control. -- Cons: network dependency, latency, hosting cost; must match the app's Filament version exactly (filamat chunk versions are version-locked); security surface. -- Effort: ~1 week for a minimal HTTP service (matc in a container) + client. Worth having as the **web fallback**, not as the primary. - -### D. No runtime compile — reload only -Keep build-time matc; hot-reload by re-reading a rebuilt `.filamat` (§4). This is the cheapest useful increment and is a strict subset of A. - -### E. Adjacent Filament tooling worth knowing -- `matdbg` (in artifacts, 10 MB) — embedded debug server + `ShaderReplacer` for live shader edits; dev-only, requires `FILAMENT_ENABLE_MATDBG` builds (thermion debug zips already link it on mac/linux/android — build.dart:280). -- `filamat_lite` — interchangeable, no-glslang variant (OpenGL target only, `Optimization::NONE`, no validation, no SPIR-V). **Not built in any thermion artifact today** — a candidate if Android/iOS size matters more than optimization quality. -- `matedit` — matc-adjacent tool for re-packaging materials with externally compiled shaders (e.g. iOS precompiled Metal); not a live editor. - ---- - -## 4. Design options — reload (live replacement) - -Facts that constrain the design: -1. `MaterialInstance` cannot be re-parented to a new `Material` — [verified: no such API in MaterialInstance.h]. -2. `RenderableManager::setMaterialInstanceAt` swaps instances on live renderables — already exported (TRenderableManager.cpp:26). -3. MaterialInstance parameter values cannot be read back — reload must re-apply values the app (or thermion's Dart layer) remembers. -4. Filament's `Engine` caches compiled programs per Material; destroying the old Material after swap frees them (destroy must happen on the engine thread, after no renderable references remain). - -### 4.1 Reload shape (works with D today, with A later) - -``` -newMat = createMaterial(filamatBytes) // exists: ffi_filament_app.dart:603 -for each (entity, prim) using oldMat: - mi = newMat.createInstance() // exists - mi.copyParamsFrom(shadowParams) // NEW: Dart-side shadow map of set values - setMaterialInstanceAt(entity, prim, mi) // exists: ffi_asset.dart:261 -engine.destroyMaterial(oldMat) (after swap) // exists: Engine_destroyMaterial -``` - -Two levels: -- **L1 — instance swap (recommended MVP):** new Material + fresh instances, params re-applied from a Dart-side shadow map recorded by thermion's existing `MaterialInstance.set*` wrappers. Deterministic, no reflection gaps. Cost: values set behind thermion's back (native/gltf defaults) fall back to the new material's defaults. -- **L2 — default-instance takeover:** additionally re-point every renderable that referenced the *default instance*; needs an entity→(material, prim) index. Thermion does not keep one today; build it lazily by walking `RenderableManager` at reload time, or maintain it on `setMaterialInstanceAt`. - -Note on glTF materials: gltfio materials come from the uberarchive; the same swap API applies per-prim, but a full glTF "re-material" should go through `GltfSceneAsset`'s instance lists (`native/src/scene/GltfSceneAsset.cpp:162` already loops `setMaterialInstanceAt`). - ---- - -## 5. Recommended phased plan - -Effort assumes one engineer comfortable with the repo; "d" = working days. - -### Phase 0 — Reload-only MVP (no compiler) — **~2-3 d** -1. Dart: `MaterialInstance` wrappers record `(name → value/texture)` on every `set*` (shadow map). -2. Dart: `Future reloadMaterialFromBytes(Material old, Uint8List filamat)` implementing §4.1 L1 (+ entity scan helper for L2). -3. Example/test: loop that re-reads `examples/assets/*.filamat` and hot-swaps (pattern already half-present in `test/depth_tests.dart:104-106`). -No native, no build changes. Ships everywhere immediately (incl. web). - -### Phase 1 — Runtime compile API, desktop first (linux/macOS/Windows) — **~4-6 d** -1. Native (`TEngine.cpp` or new `TMaterialCompiler.cpp`): - ```cpp - // called on the engine/render thread like Engine_buildMaterialRenderThread - TMaterial* Engine_compileMaterialRenderThread( - TEngine*, const char* matSource, size_t length, - uint32_t platformFlags, uint32_t targetApiFlags, uint32_t optimization, - const char* definesJson, // {"NAME":"value",...} - char* outError, size_t outErrorCap); // parse/build failure text - ``` - Implementation = the proven §2.1 sequence: `matp::MaterialParser::parse` (after `resolveIncludes` when include paths are given) → `MaterialBuilder::build(engine->getJobSystem())` → `Material::Builder().package()`. `MaterialBuilder::init()` once (refcounted; serialize against `shutdown`). -2. Link config: `matp` is already in linux/macos/windows artifacts — add `"matp"` to the libs list (build.dart:227-281) and a `#pragma comment(lib, "matp.lib")` (ThermionWin32.h). On Linux matp lands inside whole-archive (fine). -3. Defaults: infer `Platform`/`TargetApi` from `engine->getBackend()` via `targetApiFromBackend()` (MaterialBuilder.h) so users don't specify anything. -4. Dart API: - ```dart - Future compileMaterial(String matSource, { - MaterialTargetApi? targetApi, // default: engine backend - MaterialOptimization optimization = performance, - Map defines = const {}, - List includePaths = const [], // for #include - bool embedSource = true, // MaterialSource chunk, aids debugging - }); - ``` - + ffigen regen (`make bindings`), web stub throwing `UnsupportedError` initially. -5. Tests: golden — runtime-compiled filamat for each shipped `.mat` in `materials/` must equal (or be accepted by `Material::Builder` identically to) the matc output for the same flags; parse-error path returns message. - -### Phase 2 — Android — **~3-5 d (mostly CI)** -1. `scripts/build_android.sh` / `zip_android.sh`: build+package `libmatp.a` per ABI (matp is host-agnostic C++; filament's android build currently doesn't install it — add `ninja matp` + copy step). -2. Add `"matp"` to android libs; measure `.so` delta per ABI (expect ≈ +8-12 MB uncompressed; document; consider R8/strip + `Optimization` guidance for dev vs release). -3. Same C API as Phase 1; no new Dart surface. - -### Phase 3 — iOS — **~3-5 d** -1. Re-enable `"filamat"` for iOS (build.dart:231) + ship `libmatp.a` in the iOS artifact (same CI change as Phase 2). -2. Verify the iOS `libfilamat.a` (41 MB, combined) links into a dylib (PIC is the default for iOS archives — still verify; desktop was verified here). -3. Decide policy: full filamat vs `filamat_lite` (needs a filament build flag; OpenGL-only target is irrelevant on Metal — so realistically *full* filamat; budget ~+10-15 MB to the app). -4. App Store review risk for a shader compiler embedded: low (it's Filament's supported path, used by filamat-android consumers), but note it. - -### Phase 4 — Web — **defer or use option C — 1-2 weeks if attempted** -The web artifact contains no filamat/matp and the wasm module doesn't link them (native/web/CMakeLists.txt:334-359). Emscripten *can* build glslang (pure C++), thermion web already enables pthreads (8 workers), so `build_web.sh` + CMake changes are the work — but expect +15-25 MB wasm and slower compiles. Recommendation: keep web on build-time matc (Phase 0 reload still works: bytes in, `createMaterial` works on web today) and, if runtime compile on web is truly needed, use the Phase-C remote service. - -### Optional Phase 5 — Dev-experience polish — **~3-5 d** -- File watcher (`watch` package) + `hotReloadMaterial(path)` in the example app: on change → compile (Phase 1) or read `.filamat` (Phase 0) → §4.1 swap. This is the "hot-reload a material in a running app" demo. -- Embed `materialSource` in runtime-built packages (default true) so a future matdbg-style inspector works on runtime materials too. -- Expose `Optimization::NONE` as an "iteration mode" (faster compiles, larger shaders). - ---- - -## 6. Cross-platform summary - -| | A: in-process | B: bundle matc | C: remote | D: reload-only | -|---|---|---|---|---| -| Linux/Win/macOS | ✅ (near-free) | ✅ | ✅ | ✅ | -| Android | ✅ (CI work) | ⚠️ exec restrictions | ✅ | ✅ | -| iOS | ✅ (link+CI work) | ❌ | ✅ | ✅ | -| Web | ⚠️ heavy wasm | ❌ | ✅ | ✅ | -| AOT/size cost | +~11 MB stripped/platform | +18 MB host tool | 0 | 0 | - -No platform needs a *platform shader compiler* at runtime: MaterialBuilder emits GLSL/SPIR-V/MSL/WGSL itself via glslang+spirv-cross (all CPU-side, in-process, no driver/JIT involvement). iOS/Android AOT is not a factor. - ---- - -## 7. Risks & unknowns (with verification steps) - -1. **Current Linux .so already contains the compiler (whole-archive)** — verify: build current main, `nm -D libthermion_dart.so | grep MaterialBuilder`. If yes, Phase 1 on Linux adds ~0 bytes and we could even exclude filamat from whole-archive later if we want to slim release builds (feature-flag via separate build define). -2. **Android/iOS `libmatp.a` absence** — CI change; confirm filament's android/ios cmake graphs build matp unmodified (pure C++; expected yes). -3. **iOS PIC + codesign of embedded compiler** — link test in CI before promising. -4. **Binary-size regressions on Android** — measure per-ABI delta; mitigation: link matp+filamat only when a `THERMION_RUNTIME_MATERIALS` define is set (opt-in build), or evaluate filamat_lite. -5. **Compile latency** — measured 1.7 s cold/1 target/PERFORMANCE. For editor-like iteration use `Optimization::NONE` + single `TargetApi`; run on a worker and marshal to the engine thread only for `Material::Builder().build()`. -6. **Error surfacing** — `matp` parse errors come back as `utils::Status` (message string — good). Shader *compile* errors go through filament's `LOG(ERROR)`/stderr; there is no first-class callback. Verify whether `utils::Log` can be redirected in-process (utils/Log.h) — else capture stderr in dev builds. **Needs verification.** -7. **Thread-safety** — `MaterialBuilder::init()` is refcounted (atomic) but glslang initialization is not; serialize init/first-build with a mutex. Builds themselves use the provided JobSystem (use `engine->getJobSystem()`; don't `adopt()` a private one inside the engine process). -8. **Version lock** — runtime-built packages must be consumed by the same Filament version (thermion ships both from one artifact — fine today; document that a `compileMaterial` result is not portable across engine versions). -9. **`#include` resolution** — `matp::MaterialParser::resolveIncludes(buffer, size, materialFilePath, ...)` needs real paths; on Flutter assets aren't files. Plan: Dart resolves includes itself (it already has asset loading) and passes a flattened source, or pass virtual include-dir callbacks. **Design detail for Phase 1.** -10. **glTF/uberarchive materials** — out of scope for reload MVP; swapping those needs `GltfSceneAsset` awareness (§4.1 note). - ---- - -## 8. TL;DR - -- The runtime compiler Filament offers (`matp` + `filamat::MaterialBuilder`) is complete, PIC, and **already sitting in thermion's own build artifacts**; on Linux it is *already linked whole-archive into the shipped .so*. Feasibility is proven end to end in this research: `.mat` text → valid filamat in ~1.7 s using only artifact libs. -- Do **Phase 0 (reload MVP, 2-3 d)** now — pure Dart, all platforms. -- Do **Phase 1 (desktop runtime compile, 4-6 d)** next — small native function + link-list entry + ffigen. -- **Phase 2/3 (Android/iOS)** are CI/artifact work (3-5 d each). **Web** stays build-time/remote. -- Biggest real risks: Android/iOS size delta, error-message plumbing, and include-resolution ergonomics — all tractable, none architectural. From 663ad59b0e73c8af7705abdd5fff0a254b51371f Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sun, 23 Aug 2026 09:06:37 +0000 Subject: [PATCH 5/6] feat: add material_editor flutter example (live runtime compile + hot-reload) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit examples/flutter/material_editor: a reference app for the Phase 0/1 APIs. A sphere renders in a ViewerWidget; below it, a TextField holds Filament .mat source. Debounced edits (or the Apply button) run FilamentApp.compileMaterial in the running engine and hot-swap the package onto the sphere via reloadMaterialFromBytes, which replays instance parameters (baseTint/roughness/metallic survive every swap). MaterialCompileException messages are shown inline under the editor. Ships materials/starter.mat (lit, three parameters) so the app opens with an editable material that renders immediately; the starter and the README's suggested edits were verified to compile through the runtime API. Non-desktop platforms keep running with the default material and an explanatory status, matching where the compiler is linked. flutter analyze: clean. flutter build linux --debug: builds; the container has no GPU (/dev/dri absent) so the render context cannot start there — verified on-screen behavior needs a real machine. Co-Authored-By: Claude --- examples/flutter/material_editor/.gitignore | 45 ++ examples/flutter/material_editor/.metadata | 36 + examples/flutter/material_editor/README.md | 62 ++ .../material_editor/analysis_options.yaml | 28 + .../flutter/material_editor/lib/main.dart | 522 +++++++++++++ .../flutter/material_editor/linux/.gitignore | 1 + .../material_editor/linux/CMakeLists.txt | 128 ++++ .../linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 15 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 24 + .../linux/runner/CMakeLists.txt | 26 + .../material_editor/linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 148 ++++ .../linux/runner/my_application.h | 21 + .../flutter/material_editor/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 12 + .../macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../material_editor/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + .../material_editor/materials/starter.mat | 37 + examples/flutter/material_editor/pubspec.yaml | 31 + .../material_editor/windows/.gitignore | 17 + .../material_editor/windows/CMakeLists.txt | 108 +++ .../windows/flutter/CMakeLists.txt | 109 +++ .../flutter/generated_plugin_registrant.cc | 14 + .../flutter/generated_plugin_registrant.h | 15 + .../windows/flutter/generated_plugins.cmake | 24 + .../windows/runner/CMakeLists.txt | 40 + .../material_editor/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + .../material_editor/windows/runner/main.cpp | 43 ++ .../material_editor/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + .../material_editor/windows/runner/utils.cpp | 65 ++ .../material_editor/windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 +++++++ .../windows/runner/win32_window.h | 102 +++ 63 files changed, 3714 insertions(+) create mode 100644 examples/flutter/material_editor/.gitignore create mode 100644 examples/flutter/material_editor/.metadata create mode 100644 examples/flutter/material_editor/README.md create mode 100644 examples/flutter/material_editor/analysis_options.yaml create mode 100644 examples/flutter/material_editor/lib/main.dart create mode 100644 examples/flutter/material_editor/linux/.gitignore create mode 100644 examples/flutter/material_editor/linux/CMakeLists.txt create mode 100644 examples/flutter/material_editor/linux/flutter/CMakeLists.txt create mode 100644 examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.cc create mode 100644 examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.h create mode 100644 examples/flutter/material_editor/linux/flutter/generated_plugins.cmake create mode 100644 examples/flutter/material_editor/linux/runner/CMakeLists.txt create mode 100644 examples/flutter/material_editor/linux/runner/main.cc create mode 100644 examples/flutter/material_editor/linux/runner/my_application.cc create mode 100644 examples/flutter/material_editor/linux/runner/my_application.h create mode 100644 examples/flutter/material_editor/macos/.gitignore create mode 100644 examples/flutter/material_editor/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 examples/flutter/material_editor/macos/Flutter/Flutter-Release.xcconfig create mode 100644 examples/flutter/material_editor/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 examples/flutter/material_editor/macos/Runner.xcodeproj/project.pbxproj create mode 100644 examples/flutter/material_editor/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/flutter/material_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 examples/flutter/material_editor/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 examples/flutter/material_editor/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 examples/flutter/material_editor/macos/Runner/AppDelegate.swift create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 examples/flutter/material_editor/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 examples/flutter/material_editor/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 examples/flutter/material_editor/macos/Runner/Configs/Debug.xcconfig create mode 100644 examples/flutter/material_editor/macos/Runner/Configs/Release.xcconfig create mode 100644 examples/flutter/material_editor/macos/Runner/Configs/Warnings.xcconfig create mode 100644 examples/flutter/material_editor/macos/Runner/DebugProfile.entitlements create mode 100644 examples/flutter/material_editor/macos/Runner/Info.plist create mode 100644 examples/flutter/material_editor/macos/Runner/MainFlutterWindow.swift create mode 100644 examples/flutter/material_editor/macos/Runner/Release.entitlements create mode 100644 examples/flutter/material_editor/macos/RunnerTests/RunnerTests.swift create mode 100644 examples/flutter/material_editor/materials/starter.mat create mode 100644 examples/flutter/material_editor/pubspec.yaml create mode 100644 examples/flutter/material_editor/windows/.gitignore create mode 100644 examples/flutter/material_editor/windows/CMakeLists.txt create mode 100644 examples/flutter/material_editor/windows/flutter/CMakeLists.txt create mode 100644 examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.cc create mode 100644 examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.h create mode 100644 examples/flutter/material_editor/windows/flutter/generated_plugins.cmake create mode 100644 examples/flutter/material_editor/windows/runner/CMakeLists.txt create mode 100644 examples/flutter/material_editor/windows/runner/Runner.rc create mode 100644 examples/flutter/material_editor/windows/runner/flutter_window.cpp create mode 100644 examples/flutter/material_editor/windows/runner/flutter_window.h create mode 100644 examples/flutter/material_editor/windows/runner/main.cpp create mode 100644 examples/flutter/material_editor/windows/runner/resource.h create mode 100644 examples/flutter/material_editor/windows/runner/resources/app_icon.ico create mode 100644 examples/flutter/material_editor/windows/runner/runner.exe.manifest create mode 100644 examples/flutter/material_editor/windows/runner/utils.cpp create mode 100644 examples/flutter/material_editor/windows/runner/utils.h create mode 100644 examples/flutter/material_editor/windows/runner/win32_window.cpp create mode 100644 examples/flutter/material_editor/windows/runner/win32_window.h diff --git a/examples/flutter/material_editor/.gitignore b/examples/flutter/material_editor/.gitignore new file mode 100644 index 000000000..79c113f9b --- /dev/null +++ b/examples/flutter/material_editor/.gitignore @@ -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 diff --git a/examples/flutter/material_editor/.metadata b/examples/flutter/material_editor/.metadata new file mode 100644 index 000000000..e9e04af56 --- /dev/null +++ b/examples/flutter/material_editor/.metadata @@ -0,0 +1,36 @@ +# 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: "44a626f4f0027bc38a46dc68aed5964b05a83c18" + channel: "[user-branch]" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + base_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + - platform: linux + create_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + base_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + - platform: macos + create_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + base_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + - platform: windows + create_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + base_revision: 44a626f4f0027bc38a46dc68aed5964b05a83c18 + + # 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' diff --git a/examples/flutter/material_editor/README.md b/examples/flutter/material_editor/README.md new file mode 100644 index 000000000..aa2f6bc22 --- /dev/null +++ b/examples/flutter/material_editor/README.md @@ -0,0 +1,62 @@ +# material_editor + +A Flutter project demonstrating **runtime material compilation and +hot-reload** in Thermion: edit Filament `.mat` source in a text field and see +the change on a live-rendered sphere, without restarting the app. + +The top half of the window is a `ViewerWidget` rendering a sphere; the bottom +half is a plain `TextField` holding `.mat` source. Every edit (debounced, or +via the **Apply** button) is compiled to a `.filamat` package *inside the +running engine* and hot-swapped onto the sphere. + +## How it works + +Two APIs from `thermion_dart` drive the whole loop: + +1. **`FilamentApp.compileMaterial(source)`** (runtime compile) — parses and + compiles `.mat` source through the same `matp` + `filamat` pipeline the + offline `matc` tool uses, returning the compiled `.filamat` bytes. On + failure it throws `MaterialCompileException` with the compiler's message, + which the editor shows inline under the text field. + +2. **`FilamentApp.reloadMaterialFromBytes(material, bytes)`** (hot-reload) — + builds a new `Material` from the compiled bytes, creates a replacement + `MaterialInstance`, re-points every renderable that used the old instance, + replays recorded instance state (parameters like `baseTint` below) onto the + replacement, and destroys the old material. The sphere never leaves the + scene; only the material under it changes. + +Startup (`_onViewerAvailable`) compiles `materials/starter.mat` — a lit +material with `baseTint` / `roughness` / `metallic` parameters — creates an +instance, sets those parameters, and creates the sphere geometry with that +instance. Subsequent compiles go through `reloadMaterialFromBytes`, so the +parameter values set at startup survive every edit: change `shadingModel` to +`unlit`, delete `prepareMaterial`, or introduce a syntax error — the sphere +keeps rendering the last good material while the error is shown inline. + +The starter source is a good place to experiment: + +- change `material.baseColor = materialParams.baseTint;` to a constant + `float4(1.0, 0.3, 0.1, 1.0)`; +- add `material.clearCoat = 1.0;` after `prepareMaterial(material);`; +- set `shadingModel : unlit` (and drop the roughness/metallic lines) to see + flat unshaded color; +- delete a `}` to see the inline error report. + +## Platform support + +Runtime compilation is linked into **desktop** engine builds only (Linux, +macOS, Windows). On web `compileMaterial` throws `UnsupportedError`, and on +Android/iOS the native engine reports "not supported" via +`MaterialCompileException`. The example handles both: the sphere still +renders with the default material and the status bar explains why. + +## Running + +```sh +flutter pub get +flutter run -d linux # or -d macos / -d windows +``` + +The example targets desktop platforms only (runtime compilation is not +available elsewhere). diff --git a/examples/flutter/material_editor/analysis_options.yaml b/examples/flutter/material_editor/analysis_options.yaml new file mode 100644 index 000000000..0d2902135 --- /dev/null +++ b/examples/flutter/material_editor/analysis_options.yaml @@ -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 diff --git a/examples/flutter/material_editor/lib/main.dart b/examples/flutter/material_editor/lib/main.dart new file mode 100644 index 000000000..124d15765 --- /dev/null +++ b/examples/flutter/material_editor/lib/main.dart @@ -0,0 +1,522 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:logging/logging.dart'; +// thermion_dart exports classes whose names collide with Flutter widgets +// (Material, Transform, Texture...) as well as vector_math (Vector3, Matrix4). +// The unprefixed import wins for viewer plumbing; the `t` prefix is used for +// the colliding names. +import 'package:thermion_flutter/thermion_flutter.dart'; +import 'package:thermion_flutter/thermion_flutter.dart' as t; + +/// A live material editor for Thermion + Filament. +/// +/// The top half renders a sphere. The bottom half is a text editor holding +/// Filament `.mat` source. On every edit (debounced) the source is compiled +/// to a `.filamat` package *inside the running engine* +/// (`FilamentApp.compileMaterial`), and the new package is hot-swapped onto +/// the sphere (`FilamentApp.reloadMaterialFromBytes`), which preserves the +/// material instance's parameter values. Compile errors are shown inline so +/// you can iterate without restarting the app. +/// +/// Runtime compilation is linked into desktop engine builds only (linux, +/// macOS, Windows). On other platforms this example still runs, but the +/// sphere keeps the default material and the status bar explains why. +void main() { + Logger.root.onRecord.listen((record) { + debugPrint(record.toString()); + }); + runApp(const MaterialEditorApp()); +} + +class MaterialEditorApp extends StatelessWidget { + const MaterialEditorApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Thermion material editor', + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF6EA8FF)), + useMaterial3: true, + ), + home: const EditorPage(), + ); + } +} + +/// Values applied to the starter material's parameters. They survive every +/// hot-swap: [FilamentApp.reloadMaterialFromBytes] replays recorded instance +/// state onto the replacement instance. +const _starterTint = [0.62, 0.55, 0.92, 1.0]; +const _starterRoughness = 0.35; +const _starterMetallic = 0.15; + +/// Debounce window between the last keystroke and a recompile. +const _autoApplyDelay = Duration(milliseconds: 600); + +class EditorPage extends StatefulWidget { + const EditorPage({super.key}); + + @override + State createState() => _EditorPageState(); +} + +class _EditorPageState extends State { + final TextEditingController _controller = TextEditingController(); + final ScrollController _editorScroll = ScrollController(); + + ThermionViewer? _viewer; + ThermionAsset? _asset; + + /// Completes when the starter source has been seeded into the editor. + /// [_onViewerAvailable] waits on it so the first compile always sees the + /// real starter source, not a still-empty text field. + Future? _starterLoaded; + + /// The material currently on the sphere; null until the first successful + /// compile. Subsequent successful compiles replace it via + /// [FilamentApp.reloadMaterialFromBytes]. + t.Material? _material; + + Timer? _debounce; + Timer? _spin; + bool _busy = false; + bool _autoApply = true; + String _status = 'loading…'; + String? _error; + bool _ok = false; + + @override + void initState() { + super.initState(); + _starterLoaded = _loadStarterSource(); + } + + Future _loadStarterSource() async { + // Seed the editor from the shipped starter .mat so it opens with + // something that renders immediately (and is easy to break on purpose). + try { + _controller.text = await rootBundle.loadString('materials/starter.mat'); + } catch (_) { + _controller.text = _fallbackStarter; + } + } + + /// Called by [ViewerWidget] once the viewer exists. Creates the sphere with + /// the starter material applied, or — where runtime compilation is not + /// linked — with the default material plus an explanatory status. + Future _onViewerAvailable(ThermionViewer viewer) async { + _viewer = viewer; + await _starterLoaded; + // Runtime compilation is only linked into desktop engine builds. Check + // up front so the message is accurate; the exception handlers below + // still cover the case where the platform stub throws instead. + final desktop = switch (defaultTargetPlatform) { + TargetPlatform.linux || + TargetPlatform.macOS || + TargetPlatform.windows => + true, + _ => false, + }; + if (!desktop) { + await _createGeometryWithDefaultMaterial(); + if (mounted) { + setState(() { + _error = 'runtime material compilation requires a desktop build ' + '(linux, macOS or Windows)'; + _status = 'runtime compilation unavailable'; + }); + } + return; + } + try { + final app = FilamentApp.instance!; + final bytes = await app.compileMaterial(_controller.text); + final material = await app.createMaterial(bytes); + final instance = await material.createInstance(); + await _applyStarterParams(instance); + _material = material; + _asset = await viewer.createGeometry( + GeometryUtils.sphere(), + materialInstances: [instance], + ); + _startSpin(); + if (mounted) { + setState(() { + _ok = true; + _status = 'compiled starter material (${bytes.length} bytes)'; + }); + } + } on UnsupportedError catch (error) { + // Web: the WASM engine does not link the material compiler. + await _createGeometryWithDefaultMaterial(); + if (mounted) { + setState(() { + _error = error.message; + _status = 'runtime compilation unavailable'; + }); + } + } on MaterialCompileException catch (error) { + // Android/iOS: the stub implementation reports through this exception. + await _createGeometryWithDefaultMaterial(); + if (mounted) { + setState(() { + _error = error.message; + _status = 'runtime compilation unavailable'; + }); + } + } catch (error, stackTrace) { + debugPrint('viewer setup failed: $error\n$stackTrace'); + if (mounted) { + setState(() => _status = 'viewer setup failed'); + } + } + } + + Future _createGeometryWithDefaultMaterial() async { + // No material instance to pass: the geometry falls back to the default + // ubershader so there is still something to look at. + _asset = await _viewer!.createGeometry(GeometryUtils.sphere()); + _startSpin(); + } + + Future _applyStarterParams(MaterialInstance instance) async { + await instance.setParameterFloat4( + 'baseTint', _starterTint[0], _starterTint[1], _starterTint[2], _starterTint[3]); + await instance.setParameterFloat('roughness', _starterRoughness); + await instance.setParameterFloat('metallic', _starterMetallic); + } + + void _startSpin() { + _spin?.cancel(); + final started = DateTime.now(); + _spin = Timer.periodic(const Duration(milliseconds: 16), (timer) async { + final asset = _asset; + if (!mounted || asset == null) { + timer.cancel(); + return; + } + final elapsed = + DateTime.now().difference(started).inMilliseconds / 1000.0; + await asset.setTransform(Matrix4.rotationY(elapsed * 0.5)); + }); + } + + void _onSourceChanged() { + if (!_autoApply) return; + _debounce?.cancel(); + _debounce = Timer(_autoApplyDelay, _compileAndApply); + } + + /// The heart of the example: compile the edited source and hot-swap it. + Future _compileAndApply() async { + final app = FilamentApp.instance; + final material = _material; + if (app == null || _busy) return; + + setState(() { + _busy = true; + _status = 'compiling…'; + _error = null; + }); + try { + final bytes = await app.compileMaterial(_controller.text); + if (material == null) { + // Reachable only if the initial compile failed (e.g. the shipped + // starter was somehow invalid) and a manual edit fixed it: build the + // material fresh and put it on the geometry. + final created = await app.createMaterial(bytes); + final instance = await created.createInstance(); + await _applyStarterParams(instance); + final asset = _asset; + if (asset == null) { + _asset = await _viewer!.createGeometry( + GeometryUtils.sphere(), + materialInstances: [instance], + ); + } else { + await app.setMaterialInstanceAt(asset.entity, 0, instance); + } + _material = created; + } else { + // Swap the new package in. Instance parameters are replayed from the + // recorded shadow state, so tint/roughness/metallic survive. + _material = await app.reloadMaterialFromBytes(material, bytes); + } + if (mounted) { + setState(() { + _ok = true; + _status = 'applied (${bytes.length} bytes)'; + }); + } + } on MaterialCompileException catch (error) { + // Parse/shader errors land here with the compiler's message. + if (mounted) { + setState(() { + _ok = false; + _status = 'compile failed'; + _error = error.message; + }); + } + } on UnsupportedError catch (error) { + if (mounted) { + setState(() { + _ok = false; + _status = 'runtime compilation unavailable'; + _error = error.message; + }); + } + } catch (error, stackTrace) { + debugPrint('compile failed: $error\n$stackTrace'); + if (mounted) { + setState(() { + _ok = false; + _status = 'apply failed'; + _error = error.toString(); + }); + } + } finally { + if (mounted) { + setState(() => _busy = false); + } + } + } + + Future _resetToStarter() async { + // Programmatic text changes do not fire onChanged, so apply explicitly — + // after the (async) reload of the starter source completes. + await _loadStarterSource(); + if (mounted) setState(() => _error = null); + await _compileAndApply(); + } + + @override + void dispose() { + _debounce?.cancel(); + _spin?.cancel(); + _controller.dispose(); + _editorScroll.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final scheme = Theme.of(context).colorScheme; + return Scaffold( + body: SafeArea( + child: LayoutBuilder( + builder: (context, constraints) { + final wide = constraints.maxWidth > constraints.maxHeight; + final editor = _buildEditorPane(scheme); + final viewport = _buildViewport(scheme); + return wide + ? Row(children: [ + Expanded(flex: 5, child: viewport), + Expanded(flex: 4, child: editor), + ]) + : Column(children: [ + Expanded(flex: 5, child: viewport), + Expanded(flex: 4, child: editor), + ]); + }, + ), + ), + ); + } + + Widget _buildViewport(ColorScheme scheme) { + return Card( + margin: const EdgeInsets.all(8), + clipBehavior: Clip.antiAlias, + child: Stack( + children: [ + Positioned.fill( + child: ViewerWidget( + background: scheme.surfaceContainerLowest, + directLight: + DirectLight.sun(direction: Vector3(0.6, -1.0, -0.7).normalized()), + initialCameraPosition: Vector3(0, 0, 3.2), + manipulatorType: ManipulatorType.ORBIT, + onViewerAvailable: _onViewerAvailable, + initial: const Center(child: CircularProgressIndicator()), + ), + ), + const Positioned( + left: 12, + bottom: 12, + child: _HintChip('drag to orbit · scroll to zoom'), + ), + ], + ), + ); + } + + Widget _buildEditorPane(ColorScheme scheme) { + return Card( + margin: const EdgeInsets.all(8), + clipBehavior: Clip.antiAlias, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _buildToolbar(scheme), + const Divider(height: 1), + Expanded( + child: TextField( + controller: _controller, + scrollController: _editorScroll, + onChanged: (_) => _onSourceChanged(), + maxLines: null, + expands: true, + textAlignVertical: TextAlignVertical.top, + style: const TextStyle(fontFamily: 'monospace', fontSize: 13), + decoration: const InputDecoration( + isDense: true, + border: InputBorder.none, + contentPadding: EdgeInsets.all(12), + hintText: 'material { … }', + ), + ), + ), + if (_error != null) ...[ + const Divider(height: 1), + _ErrorPane(_error!), + ], + ], + ), + ); + } + + Widget _buildToolbar(ColorScheme scheme) { + return Padding( + padding: const EdgeInsets.fromLTRB(12, 8, 8, 8), + child: Row( + children: [ + Icon( + _busy + ? Icons.hourglass_top + : _ok + ? Icons.check_circle + : Icons.error_outline, + size: 16, + color: _busy + ? scheme.tertiary + : _ok + ? Colors.green + : scheme.error, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + _status, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + IconButton( + tooltip: 'Auto-apply while typing', + isSelected: _autoApply, + onPressed: () => setState(() => _autoApply = !_autoApply), + icon: const Icon(Icons.autorenew), + selectedIcon: const Icon(Icons.autorenew), + ), + IconButton( + tooltip: 'Reset to starter material', + onPressed: _resetToStarter, + icon: const Icon(Icons.restart_alt), + ), + const SizedBox(width: 4), + FilledButton.tonalIcon( + onPressed: _busy ? null : _compileAndApply, + icon: const Icon(Icons.play_arrow, size: 18), + label: const Text('Apply'), + ), + const SizedBox(width: 4), + ], + ), + ); + } +} + +class _ErrorPane extends StatelessWidget { + const _ErrorPane(this.message); + + final String message; + + @override + Widget build(BuildContext context) { + final scheme = Theme.of(context).colorScheme; + return Container( + constraints: const BoxConstraints(maxHeight: 120), + color: scheme.errorContainer.withValues(alpha: 0.35), + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(12), + child: Text( + message, + style: TextStyle( + fontFamily: 'monospace', + fontSize: 12, + color: scheme.onErrorContainer, + ), + ), + ), + ), + ); + } +} + +class _HintChip extends StatelessWidget { + const _HintChip(this.label); + + final String label; + + @override + Widget build(BuildContext context) { + final scheme = Theme.of(context).colorScheme; + return DecoratedBox( + decoration: BoxDecoration( + color: scheme.surface.withValues(alpha: 0.7), + borderRadius: BorderRadius.circular(999), + ), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4), + child: Text( + label, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: scheme.onSurface.withValues(alpha: 0.7), + ), + ), + ), + ); + } +} + +/// Used only if the starter asset cannot be loaded; mirrors +/// materials/starter.mat. +const _fallbackStarter = ''' +material { + name : "Editor Starter", + requires : [ position, uv0 ], + parameters : [ + { type : float4, name : baseTint }, + { type : float, name : roughness }, + { type : float, name : metallic } + ], + shadingModel : lit, + blending : opaque, + culling : back, +} +fragment { + void material(inout MaterialInputs material) { + prepareMaterial(material); + material.baseColor = materialParams.baseTint; + material.roughness = materialParams.roughness; + material.metallic = materialParams.metallic; + } +} +'''; diff --git a/examples/flutter/material_editor/linux/.gitignore b/examples/flutter/material_editor/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/examples/flutter/material_editor/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/examples/flutter/material_editor/linux/CMakeLists.txt b/examples/flutter/material_editor/linux/CMakeLists.txt new file mode 100644 index 000000000..16a7279c8 --- /dev/null +++ b/examples/flutter/material_editor/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "material_editor") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.avinium.material_editor") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/examples/flutter/material_editor/linux/flutter/CMakeLists.txt b/examples/flutter/material_editor/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/examples/flutter/material_editor/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.cc b/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..01193c105 --- /dev/null +++ b/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) thermion_flutter_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "ThermionFlutterPlugin"); + thermion_flutter_plugin_register_with_registrar(thermion_flutter_registrar); +} diff --git a/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.h b/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/examples/flutter/material_editor/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/flutter/material_editor/linux/flutter/generated_plugins.cmake b/examples/flutter/material_editor/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..274b5f605 --- /dev/null +++ b/examples/flutter/material_editor/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + thermion_flutter +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/examples/flutter/material_editor/linux/runner/CMakeLists.txt b/examples/flutter/material_editor/linux/runner/CMakeLists.txt new file mode 100644 index 000000000..e97dabc70 --- /dev/null +++ b/examples/flutter/material_editor/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/examples/flutter/material_editor/linux/runner/main.cc b/examples/flutter/material_editor/linux/runner/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/examples/flutter/material_editor/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/examples/flutter/material_editor/linux/runner/my_application.cc b/examples/flutter/material_editor/linux/runner/my_application.cc new file mode 100644 index 000000000..bd5811ef3 --- /dev/null +++ b/examples/flutter/material_editor/linux/runner/my_application.cc @@ -0,0 +1,148 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Called when first Flutter frame received. +static void first_frame_cb(MyApplication* self, FlView* view) { + gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view))); +} + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "material_editor"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "material_editor"); + } + + gtk_window_set_default_size(window, 1280, 720); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments( + project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + GdkRGBA background_color; + // Background defaults to black, override it here if necessary, e.g. #00000000 + // for transparent. + gdk_rgba_parse(&background_color, "#000000"); + fl_view_set_background_color(view, &background_color); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + // Show the window when Flutter renders. + // Requires the view to be realized so we can start rendering. + g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), + self); + gtk_widget_realize(GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, + gchar*** arguments, + int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + // MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = + my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, "flags", + G_APPLICATION_NON_UNIQUE, nullptr)); +} diff --git a/examples/flutter/material_editor/linux/runner/my_application.h b/examples/flutter/material_editor/linux/runner/my_application.h new file mode 100644 index 000000000..db16367a7 --- /dev/null +++ b/examples/flutter/material_editor/linux/runner/my_application.h @@ -0,0 +1,21 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, + my_application, + MY, + APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/examples/flutter/material_editor/macos/.gitignore b/examples/flutter/material_editor/macos/.gitignore new file mode 100644 index 000000000..746adbb6b --- /dev/null +++ b/examples/flutter/material_editor/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/examples/flutter/material_editor/macos/Flutter/Flutter-Debug.xcconfig b/examples/flutter/material_editor/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/examples/flutter/material_editor/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/flutter/material_editor/macos/Flutter/Flutter-Release.xcconfig b/examples/flutter/material_editor/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/examples/flutter/material_editor/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/examples/flutter/material_editor/macos/Flutter/GeneratedPluginRegistrant.swift b/examples/flutter/material_editor/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 000000000..b6c27f96f --- /dev/null +++ b/examples/flutter/material_editor/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import thermion_flutter + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + SwiftThermionFlutterPlugin.register(with: registry.registrar(forPlugin: "SwiftThermionFlutterPlugin")) +} diff --git a/examples/flutter/material_editor/macos/Runner.xcodeproj/project.pbxproj b/examples/flutter/material_editor/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..d1893b00f --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* material_editor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "material_editor.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* material_editor.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* material_editor.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.avinium.materialEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_editor"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.avinium.materialEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_editor"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.avinium.materialEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_editor"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/examples/flutter/material_editor/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/flutter/material_editor/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/flutter/material_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/examples/flutter/material_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..c8f3d471a --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/flutter/material_editor/macos/Runner.xcworkspace/contents.xcworkspacedata b/examples/flutter/material_editor/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/flutter/material_editor/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/flutter/material_editor/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/flutter/material_editor/macos/Runner/AppDelegate.swift b/examples/flutter/material_editor/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000..b3c176141 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a2ec33f19 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 zcmaiYXH?Tqu=Xz`p-L#B_gI#0we$cm_HcmYFP$?wjD#BaCN4mzC5#`>w9y6=ThxrYZc0WPXprg zYjB`UsV}0=eUtY$(P6YW}npdd;%9pi?zS3k-nqCob zSX_AQEf|=wYT3r?f!*Yt)ar^;l3Sro{z(7deUBPd2~(SzZ-s@0r&~Km2S?8r##9-< z)2UOSVaHqq6}%sA9Ww;V2LG=PnNAh6mA2iWOuV7T_lRDR z&N8-eN=U)-T|;wo^Wv=34wtV0g}sAAe}`Ph@~!|<;z7*K8(qkX0}o=!(+N*UWrkEja*$_H6mhK1u{P!AC39} z|3+Z(mAOq#XRYS)TLoHv<)d%$$I@+x+2)V{@o~~J-!YUI-Q9%!Ldi4Op&Lw&B>jj* zwAgC#Y>gbIqv!d|J5f!$dbCXoq(l3GR(S>(rtZ~Z*agXMMKN!@mWT_vmCbSd3dUUm z4M&+gz?@^#RRGal%G3dDvj7C5QTb@9+!MG+>0dcjtZEB45c+qx*c?)d<%htn1o!#1 zpIGonh>P1LHu3s)fGFF-qS}AXjW|M*2Xjkh7(~r(lN=o#mBD9?jt74=Rz85I4Nfx_ z7Z)q?!};>IUjMNM6ee2Thq7))a>My?iWFxQ&}WvsFP5LP+iGz+QiYek+K1`bZiTV- zHHYng?ct@Uw5!gquJ(tEv1wTrRR7cemI>aSzLI^$PxW`wL_zt@RSfZ1M3c2sbebM* ze0=;sy^!90gL~YKISz*x;*^~hcCoO&CRD)zjT(A2b_uRue=QXFe5|!cf0z1m!iwv5GUnLw9Dr*Ux z)3Lc!J@Ei;&&yxGpf2kn@2wJ2?t6~obUg;?tBiD#uo$SkFIasu+^~h33W~`r82rSa ztyE;ehFjC2hjpJ-e__EH&z?!~>UBb=&%DS>NT)1O3Isn-!SElBV2!~m6v0$vx^a<@ISutdTk1@?;i z<8w#b-%|a#?e5(n@7>M|v<<0Kpg?BiHYMRe!3Z{wYc2hN{2`6(;q`9BtXIhVq6t~KMH~J0~XtUuT06hL8c1BYZWhN zk4F2I;|za*R{ToHH2L?MfRAm5(i1Ijw;f+0&J}pZ=A0;A4M`|10ZskA!a4VibFKn^ zdVH4OlsFV{R}vFlD~aA4xxSCTTMW@Gws4bFWI@xume%smAnuJ0b91QIF?ZV!%VSRJ zO7FmG!swKO{xuH{DYZ^##gGrXsUwYfD0dxXX3>QmD&`mSi;k)YvEQX?UyfIjQeIm! z0ME3gmQ`qRZ;{qYOWt}$-mW*>D~SPZKOgP)T-Sg%d;cw^#$>3A9I(%#vsTRQe%moT zU`geRJ16l>FV^HKX1GG7fR9AT((jaVb~E|0(c-WYQscVl(z?W!rJp`etF$dBXP|EG z=WXbcZ8mI)WBN>3<@%4eD597FD5nlZajwh8(c$lum>yP)F}=(D5g1-WVZRc)(!E3} z-6jy(x$OZOwE=~{EQS(Tp`yV2&t;KBpG*XWX!yG+>tc4aoxbXi7u@O*8WWFOxUjcq z^uV_|*818$+@_{|d~VOP{NcNi+FpJ9)aA2So<7sB%j`$Prje&auIiTBb{oD7q~3g0 z>QNIwcz(V-y{Ona?L&=JaV5`o71nIsWUMA~HOdCs10H+Irew#Kr(2cn>orG2J!jvP zqcVX0OiF}c<)+5&p}a>_Uuv)L_j}nqnJ5a?RPBNi8k$R~zpZ33AA4=xJ@Z($s3pG9 zkURJY5ZI=cZGRt_;`hs$kE@B0FrRx(6K{`i1^*TY;Vn?|IAv9|NrN*KnJqO|8$e1& zb?OgMV&q5|w7PNlHLHF) zB+AK#?EtCgCvwvZ6*u|TDhJcCO+%I^@Td8CR}+nz;OZ*4Dn?mSi97m*CXXc=};!P`B?}X`F-B5v-%ACa8fo0W++j&ztmqK z;&A)cT4ob9&MxpQU41agyMU8jFq~RzXOAsy>}hBQdFVL%aTn~M>5t9go2j$i9=(rZ zADmVj;Qntcr3NIPPTggpUxL_z#5~C!Gk2Rk^3jSiDqsbpOXf^f&|h^jT4|l2ehPat zb$<*B+x^qO8Po2+DAmrQ$Zqc`1%?gp*mDk>ERf6I|42^tjR6>}4`F_Mo^N(~Spjcg z_uY$}zui*PuDJjrpP0Pd+x^5ds3TG#f?57dFL{auS_W8|G*o}gcnsKYjS6*t8VI<) zcjqTzW(Hk*t-Qhq`Xe+x%}sxXRerScbPGv8hlJ;CnU-!Nl=# zR=iTFf9`EItr9iAlAGi}i&~nJ-&+)Y| zMZigh{LXe)uR+4D_Yb+1?I93mHQ5{pId2Fq%DBr7`?ipi;CT!Q&|EO3gH~7g?8>~l zT@%*5BbetH)~%TrAF1!-!=)`FIS{^EVA4WlXYtEy^|@y@yr!C~gX+cp2;|O4x1_Ol z4fPOE^nj(}KPQasY#U{m)}TZt1C5O}vz`A|1J!-D)bR%^+=J-yJsQXDzFiqb+PT0! zIaDWWU(AfOKlSBMS};3xBN*1F2j1-_=%o($ETm8@oR_NvtMDVIv_k zlnNBiHU&h8425{MCa=`vb2YP5KM7**!{1O>5Khzu+5OVGY;V=Vl+24fOE;tMfujoF z0M``}MNnTg3f%Uy6hZi$#g%PUA_-W>uVCYpE*1j>U8cYP6m(>KAVCmbsDf39Lqv0^ zt}V6FWjOU@AbruB7MH2XqtnwiXS2scgjVMH&aF~AIduh#^aT1>*V>-st8%=Kk*{bL zzbQcK(l2~)*A8gvfX=RPsNnjfkRZ@3DZ*ff5rmx{@iYJV+a@&++}ZW+za2fU>&(4y`6wgMpQGG5Ah(9oGcJ^P(H< zvYn5JE$2B`Z7F6ihy>_49!6}(-)oZ(zryIXt=*a$bpIw^k?>RJ2 zQYr>-D#T`2ZWDU$pM89Cl+C<;J!EzHwn(NNnWpYFqDDZ_*FZ{9KQRcSrl5T>dj+eA zi|okW;6)6LR5zebZJtZ%6Gx8^=2d9>_670!8Qm$wd+?zc4RAfV!ZZ$jV0qrv(D`db zm_T*KGCh3CJGb(*X6nXzh!h9@BZ-NO8py|wG8Qv^N*g?kouH4%QkPU~Vizh-D3<@% zGomx%q42B7B}?MVdv1DFb!axQ73AUxqr!yTyFlp%Z1IAgG49usqaEbI_RnbweR;Xs zpJq7GKL_iqi8Md?f>cR?^0CA+Uk(#mTlGdZbuC*$PrdB$+EGiW**=$A3X&^lM^K2s zzwc3LtEs5|ho z2>U(-GL`}eNgL-nv3h7E<*<>C%O^=mmmX0`jQb6$mP7jUKaY4je&dCG{x$`0=_s$+ zSpgn!8f~ya&U@c%{HyrmiW2&Wzc#Sw@+14sCpTWReYpF9EQ|7vF*g|sqG3hx67g}9 zwUj5QP2Q-(KxovRtL|-62_QsHLD4Mu&qS|iDp%!rs(~ah8FcrGb?Uv^Qub5ZT_kn%I^U2rxo1DDpmN@8uejxik`DK2~IDi1d?%~pR7i#KTS zA78XRx<(RYO0_uKnw~vBKi9zX8VnjZEi?vD?YAw}y+)wIjIVg&5(=%rjx3xQ_vGCy z*&$A+bT#9%ZjI;0w(k$|*x{I1c!ECMus|TEA#QE%#&LxfGvijl7Ih!B2 z6((F_gwkV;+oSKrtr&pX&fKo3s3`TG@ye+k3Ov)<#J|p8?vKh@<$YE@YIU1~@7{f+ zydTna#zv?)6&s=1gqH<-piG>E6XW8ZI7&b@-+Yk0Oan_CW!~Q2R{QvMm8_W1IV8<+ zQTyy=(Wf*qcQubRK)$B;QF}Y>V6d_NM#=-ydM?%EPo$Q+jkf}*UrzR?Nsf?~pzIj$ z<$wN;7c!WDZ(G_7N@YgZ``l;_eAd3+;omNjlpfn;0(B7L)^;;1SsI6Le+c^ULe;O@ zl+Z@OOAr4$a;=I~R0w4jO`*PKBp?3K+uJ+Tu8^%i<_~bU!p%so z^sjol^slR`W@jiqn!M~eClIIl+`A5%lGT{z^mRbpv}~AyO%R*jmG_Wrng{B9TwIuS z0!@fsM~!57K1l0%{yy(#no}roy#r!?0wm~HT!vLDfEBs9x#`9yCKgufm0MjVRfZ=f z4*ZRc2Lgr(P+j2zQE_JzYmP0*;trl7{*N341Cq}%^M^VC3gKG-hY zmPT>ECyrhIoFhnMB^qpdbiuI}pk{qPbK^}0?Rf7^{98+95zNq6!RuV_zAe&nDk0;f zez~oXlE5%ve^TmBEt*x_X#fs(-En$jXr-R4sb$b~`nS=iOy|OVrph(U&cVS!IhmZ~ zKIRA9X%Wp1J=vTvHZ~SDe_JXOe9*fa zgEPf;gD^|qE=dl>Qkx3(80#SE7oxXQ(n4qQ#by{uppSKoDbaq`U+fRqk0BwI>IXV3 zD#K%ASkzd7u>@|pA=)Z>rQr@dLH}*r7r0ng zxa^eME+l*s7{5TNu!+bD{Pp@2)v%g6^>yj{XP&mShhg9GszNu4ITW=XCIUp2Xro&1 zg_D=J3r)6hp$8+94?D$Yn2@Kp-3LDsci)<-H!wCeQt$e9Jk)K86hvV^*Nj-Ea*o;G zsuhRw$H{$o>8qByz1V!(yV{p_0X?Kmy%g#1oSmlHsw;FQ%j9S#}ha zm0Nx09@jmOtP8Q+onN^BAgd8QI^(y!n;-APUpo5WVdmp8!`yKTlF>cqn>ag`4;o>i zl!M0G-(S*fm6VjYy}J}0nX7nJ$h`|b&KuW4d&W5IhbR;-)*9Y0(Jj|@j`$xoPQ=Cl literal 0 HcmV?d00001 diff --git a/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/examples/flutter/material_editor/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/flutter/material_editor/macos/Runner/Configs/AppInfo.xcconfig b/examples/flutter/material_editor/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000..2b74521a6 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = material_editor + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.avinium.materialEditor + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2026 com.avinium. All rights reserved. diff --git a/examples/flutter/material_editor/macos/Runner/Configs/Debug.xcconfig b/examples/flutter/material_editor/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000..36b0fd946 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/flutter/material_editor/macos/Runner/Configs/Release.xcconfig b/examples/flutter/material_editor/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000..dff4f4956 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/examples/flutter/material_editor/macos/Runner/Configs/Warnings.xcconfig b/examples/flutter/material_editor/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000..42bcbf478 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/examples/flutter/material_editor/macos/Runner/DebugProfile.entitlements b/examples/flutter/material_editor/macos/Runner/DebugProfile.entitlements new file mode 100644 index 000000000..dddb8a30c --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/examples/flutter/material_editor/macos/Runner/Info.plist b/examples/flutter/material_editor/macos/Runner/Info.plist new file mode 100644 index 000000000..4789daa6a --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/examples/flutter/material_editor/macos/Runner/MainFlutterWindow.swift b/examples/flutter/material_editor/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000..3cc05eb23 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/examples/flutter/material_editor/macos/Runner/Release.entitlements b/examples/flutter/material_editor/macos/Runner/Release.entitlements new file mode 100644 index 000000000..852fa1a47 --- /dev/null +++ b/examples/flutter/material_editor/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/examples/flutter/material_editor/macos/RunnerTests/RunnerTests.swift b/examples/flutter/material_editor/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..61f3bd1fc --- /dev/null +++ b/examples/flutter/material_editor/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/examples/flutter/material_editor/materials/starter.mat b/examples/flutter/material_editor/materials/starter.mat new file mode 100644 index 000000000..07cb8d066 --- /dev/null +++ b/examples/flutter/material_editor/materials/starter.mat @@ -0,0 +1,37 @@ +material { + name : "Editor Starter", + requires : [ position, uv0 ], + parameters : [ + { + type : float4, + name : baseTint + }, + { + type : float, + name : roughness + }, + { + type : float, + name : metallic + } + ], + shadingModel : lit, + blending : opaque, + culling : back, + depthWrite : true, + depthCulling : true +} + +// The fragment shader runs for every pixel of the sphere. Everything set on +// `material` here becomes the surface's appearance: baseColor, roughness and +// metallic drive the standard lit model (see Filament's Materials doc for the +// full set of inputs). `materialParams` exposes the parameters declared above; +// the app sets their values on the material instance. +fragment { + void material(inout MaterialInputs material) { + prepareMaterial(material); + material.baseColor = materialParams.baseTint; + material.roughness = materialParams.roughness; + material.metallic = materialParams.metallic; + } +} diff --git a/examples/flutter/material_editor/pubspec.yaml b/examples/flutter/material_editor/pubspec.yaml new file mode 100644 index 000000000..a14cb8e15 --- /dev/null +++ b/examples/flutter/material_editor/pubspec.yaml @@ -0,0 +1,31 @@ +name: material_editor +description: "Live Filament material editor: edit .mat source and hot-swap it onto a renderable at runtime." +publish_to: 'none' + +version: 1.0.0+1 + +environment: + sdk: '>=3.3.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + logging: ^1.2.0 + vector_math: ^2.1.4 + thermion_flutter: ^0.2.1-dev.7 + +dependency_overrides: + thermion_dart: + path: ../../../thermion_dart + thermion_flutter: + path: ../../../thermion_flutter/thermion_flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + +flutter: + uses-material-design: true + assets: + - materials/ diff --git a/examples/flutter/material_editor/windows/.gitignore b/examples/flutter/material_editor/windows/.gitignore new file mode 100644 index 000000000..d492d0d98 --- /dev/null +++ b/examples/flutter/material_editor/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/examples/flutter/material_editor/windows/CMakeLists.txt b/examples/flutter/material_editor/windows/CMakeLists.txt new file mode 100644 index 000000000..a2cd18039 --- /dev/null +++ b/examples/flutter/material_editor/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(material_editor LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "material_editor") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/examples/flutter/material_editor/windows/flutter/CMakeLists.txt b/examples/flutter/material_editor/windows/flutter/CMakeLists.txt new file mode 100644 index 000000000..903f4899d --- /dev/null +++ b/examples/flutter/material_editor/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.cc b/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..64919ad28 --- /dev/null +++ b/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + ThermionFlutterPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ThermionFlutterPluginCApi")); +} diff --git a/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.h b/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..dc139d85a --- /dev/null +++ b/examples/flutter/material_editor/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/examples/flutter/material_editor/windows/flutter/generated_plugins.cmake b/examples/flutter/material_editor/windows/flutter/generated_plugins.cmake new file mode 100644 index 000000000..55f1a93df --- /dev/null +++ b/examples/flutter/material_editor/windows/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + thermion_flutter +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/examples/flutter/material_editor/windows/runner/CMakeLists.txt b/examples/flutter/material_editor/windows/runner/CMakeLists.txt new file mode 100644 index 000000000..394917c05 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/examples/flutter/material_editor/windows/runner/Runner.rc b/examples/flutter/material_editor/windows/runner/Runner.rc new file mode 100644 index 000000000..3ad70f860 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.avinium" "\0" + VALUE "FileDescription", "material_editor" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "material_editor" "\0" + VALUE "LegalCopyright", "Copyright (C) 2026 com.avinium. All rights reserved." "\0" + VALUE "OriginalFilename", "material_editor.exe" "\0" + VALUE "ProductName", "material_editor" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/examples/flutter/material_editor/windows/runner/flutter_window.cpp b/examples/flutter/material_editor/windows/runner/flutter_window.cpp new file mode 100644 index 000000000..955ee3038 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/examples/flutter/material_editor/windows/runner/flutter_window.h b/examples/flutter/material_editor/windows/runner/flutter_window.h new file mode 100644 index 000000000..6da0652f0 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/examples/flutter/material_editor/windows/runner/main.cpp b/examples/flutter/material_editor/windows/runner/main.cpp new file mode 100644 index 000000000..2db93d0a6 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"material_editor", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/examples/flutter/material_editor/windows/runner/resource.h b/examples/flutter/material_editor/windows/runner/resource.h new file mode 100644 index 000000000..66a65d1e4 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/examples/flutter/material_editor/windows/runner/resources/app_icon.ico b/examples/flutter/material_editor/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/examples/flutter/material_editor/windows/runner/runner.exe.manifest b/examples/flutter/material_editor/windows/runner/runner.exe.manifest new file mode 100644 index 000000000..153653e8d --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/examples/flutter/material_editor/windows/runner/utils.cpp b/examples/flutter/material_editor/windows/runner/utils.cpp new file mode 100644 index 000000000..3a0b46511 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/examples/flutter/material_editor/windows/runner/utils.h b/examples/flutter/material_editor/windows/runner/utils.h new file mode 100644 index 000000000..3879d5475 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/examples/flutter/material_editor/windows/runner/win32_window.cpp b/examples/flutter/material_editor/windows/runner/win32_window.cpp new file mode 100644 index 000000000..60608d0fe --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/examples/flutter/material_editor/windows/runner/win32_window.h b/examples/flutter/material_editor/windows/runner/win32_window.h new file mode 100644 index 000000000..e901dde68 --- /dev/null +++ b/examples/flutter/material_editor/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 4645e8e89c633cb824156324c3866e68c1753834 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sun, 23 Aug 2026 09:09:21 +0000 Subject: [PATCH 6/6] chore: adopt CI dart-format pass and regenerated bindings The PR's auto-merge branch carries a CI commit that ran dart format over the new material files and regenerated the ffigen bindings (same symbol set, different declaration order). Take those exact versions so the pushed head matches what CI already produced and the next CI run has nothing to reformat. Verified after adopting: flutter analyze at the 48-issue baseline, material_compile_tests + material_reload_tests 12/12. Co-Authored-By: Claude --- .../src/bindings/src/thermion_dart_ffi.g.dart | 7351 +++++----- .../src/thermion_dart_js_interop.g.dart | 11493 ++++++++-------- .../src/implementation/ffi_filament_app.dart | 48 +- .../implementation/material_shadow_state.dart | 15 +- .../filament/src/interface/filament_app.dart | 2 - .../test/material_compile_tests.dart | 65 +- thermion_dart/test/material_reload_tests.dart | 27 +- 7 files changed, 9497 insertions(+), 9504 deletions(-) diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart index 249aa99f6..767a4e988 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart @@ -19,772 +19,832 @@ external int TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER; @ffi.Native() external int TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER; -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer AnimationManager_create(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external TViewport View_getViewport(ffi.Pointer view); -@ffi.Native)>(isLeaf: true) -external void AnimationManager_destroy(ffi.Pointer tAnimationManager); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createLinear(ffi.Pointer tEngine); -@ffi.Native, ffi.Uint64)>(isLeaf: true) -external void AnimationManager_update(ffi.Pointer tAnimationManager, int frameTimeInNanos); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createACES(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_addGltfAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createACESLegacy(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_removeGltfAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createFilmic(ffi.Pointer tEngine); -@ffi.Native, EntityId)>(isLeaf: true) -external void AnimationManager_addMorphAnimationComponent( - ffi.Pointer tAnimationManager, - int entityId, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createPBRNeutral(ffi.Pointer tEngine); -@ffi.Native, EntityId)>(isLeaf: true) -external void AnimationManager_removeMorphAnimationComponent( - ffi.Pointer tAnimationManager, - int entityId, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createAGX(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_addBoneAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer ToneMapper_createAGXWithLook(ffi.Pointer tEngine, int look); + +@ffi.Native Function(ffi.Pointer, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>( + isLeaf: true, +) +external ffi.Pointer ToneMapper_createGeneric( + ffi.Pointer tEngine, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_removeBoneAnimationComponent( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ToneMapper_createDisplayRange(ffi.Pointer tEngine); + +@ffi.Native)>(isLeaf: true) +external void ToneMapper_destroy(ffi.Pointer toneMapper); + +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer ColorGradingBuilder_create(); + +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer ColorGradingBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, ); -@ffi.Native< - ffi.Bool Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Int, - ffi.Float, - ) ->(isLeaf: true) -external bool AnimationManager_setMorphAnimation( - ffi.Pointer tAnimationManager, - int entityId, - ffi.Pointer morphData, - ffi.Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, +@ffi.Native)>(isLeaf: true) +external void ColorGradingBuilder_destroy(ffi.Pointer builder); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void ColorGrading_destroy(ffi.Pointer engine, ffi.Pointer colorGrading); + +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void ColorGradingBuilder_quality(ffi.Pointer builder, int level); + +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void ColorGradingBuilder_format(ffi.Pointer builder, int format); + +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void ColorGradingBuilder_dimensions(ffi.Pointer builder, int dim); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void ColorGradingBuilder_toneMapper( + ffi.Pointer builder, + ffi.Pointer toneMapper, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool AnimationManager_clearMorphAnimation(ffi.Pointer tAnimationManager, int entityId); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_exposure(ffi.Pointer builder, double exposure); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void AnimationManager_resetToRestPose( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_nightAdaptation(ffi.Pointer builder, double adaptation); + +@ffi.Native, ffi.Float, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_whiteBalance( + ffi.Pointer builder, + double temperature, + double tint, ); +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_contrast(ffi.Pointer builder, double contrast); + +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_vibrance(ffi.Pointer builder, double vibrance); + +@ffi.Native, ffi.Float)>(isLeaf: true) +external void ColorGradingBuilder_saturation(ffi.Pointer builder, double saturation); + @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Int, - ffi.Pointer, - ffi.Int, + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, ffi.Float, ffi.Float, ffi.Float, ffi.Float, - ffi.Bool, ) >(isLeaf: true) -external bool AnimationManager_addBoneAnimation( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int skinIndex, - int boneIndex, - ffi.Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Pointer, ffi.Int) ->(isLeaf: true) -external void AnimationManager_getRestLocalTransforms( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int skinIndex, - ffi.Pointer out, - int numBones, +external void ColorGradingBuilder_channelMixer( + ffi.Pointer builder, + double outRedR, + double outRedG, + double outRedB, + double outGreenR, + double outGreenG, + double outGreenB, + double outBlueR, + double outBlueG, + double outBlueB, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Int, ffi.Pointer) + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ) >(isLeaf: true) -external void AnimationManager_getInverseBindMatrix( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int skinIndex, - int boneIndex, - ffi.Pointer out, +external void ColorGradingBuilder_shadowsMidtonesHighlights( + ffi.Pointer builder, + double shadowsR, + double shadowsG, + double shadowsB, + double shadowsW, + double midtonesR, + double midtonesG, + double midtonesB, + double midtonesW, + double highlightsR, + double highlightsG, + double highlightsB, + double highlightsW, + double rangesX, + double rangesY, + double rangesZ, + double rangesW, ); @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Bool, + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, ffi.Float, ffi.Float, ffi.Float, ) >(isLeaf: true) -external bool AnimationManager_playGltfAnimation( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, -); - -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool AnimationManager_stopGltfAnimation( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int index, -); - -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external double AnimationManager_getGltfAnimationDuration( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int animationIndex, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external int AnimationManager_getGltfAnimationCount( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, +external void ColorGradingBuilder_slopeOffsetPower( + ffi.Pointer builder, + double slopeR, + double slopeG, + double slopeB, + double offsetR, + double offsetG, + double offsetB, + double powerR, + double powerG, + double powerB, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Int) + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ) >(isLeaf: true) -external void AnimationManager_getGltfAnimationName( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - ffi.Pointer outPtr, - int index, +external void ColorGradingBuilder_curves( + ffi.Pointer builder, + double shadowGammaR, + double shadowGammaG, + double shadowGammaB, + double midPointR, + double midPointG, + double midPointB, + double highlightScaleR, + double highlightScaleG, + double highlightScaleB, ); -@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) -external int AnimationManager_getMorphTargetNameCount( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int childEntity, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void ColorGradingBuilder_luminanceScaling(ffi.Pointer builder, bool enabled); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, EntityId, ffi.Pointer, ffi.Int) ->(isLeaf: true) -external void AnimationManager_getMorphTargetName( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - int childEntity, - ffi.Pointer outPtr, - int index, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void ColorGradingBuilder_gamutMapping(ffi.Pointer builder, bool enabled); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool AnimationManager_updateBoneMatrices( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setColorGrading(ffi.Pointer tView, ffi.Pointer tColorGrading); -@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool AnimationManager_setMorphTargetWeights( - ffi.Pointer tAnimationManager, - int entityId, - ffi.Pointer morphData, - int numWeights, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getColorGrading(ffi.Pointer tView); -@ffi.Native, ffi.Pointer, ffi.Int, ffi.Float)>( - isLeaf: true, -) -external bool AnimationManager_setGltfAnimationTime( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, -); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void View_setBlendMode(ffi.Pointer view, int blendMode); -@ffi.Native, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) -external void Camera_setExposure(ffi.Pointer camera, double aperture, double shutterSpeed, double sensitivity); +@ffi.Native, ffi.Uint32, ffi.Uint32)>(isLeaf: true) +external void View_setViewport(ffi.Pointer view, int width, int height); -@ffi.Native)>(isLeaf: true) -external double Camera_getAperture(ffi.Pointer camera); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setRenderTarget(ffi.Pointer view, ffi.Pointer renderTarget); -@ffi.Native)>(isLeaf: true) -external double Camera_getShutterSpeed(ffi.Pointer camera); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setFrustumCullingEnabled(ffi.Pointer view, bool enabled); -@ffi.Native)>(isLeaf: true) -external double Camera_getSensitivity(ffi.Pointer camera); +@ffi.Native)>(isLeaf: true) +external int View_getVisibleRenderableCount(ffi.Pointer view); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getModelMatrix(ffi.Pointer camera); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getRenderTarget(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getViewMatrix(ffi.Pointer camera); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setPostProcessing(ffi.Pointer tView, bool enabled); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getProjectionMatrix(ffi.Pointer camera); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setShadowsEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native)>(isLeaf: true) -external double4x4 Camera_getCullingProjectionMatrix(ffi.Pointer camera); +@ffi.Native, ffi.Int)>(isLeaf: true) +external void View_setShadowType(ffi.Pointer tView, int shadowType); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Camera_getFrustum(ffi.Pointer camera, ffi.Pointer out); +@ffi.Native)>(isLeaf: true) +external int View_getShadowType(ffi.Pointer tView); -@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setProjectionMatrix( - ffi.Pointer camera, - ffi.Pointer matrix, - double near, - double far, -); +@ffi.Native, TSoftShadowOptions)>(isLeaf: true) +external void View_setSoftShadowOptions(ffi.Pointer tView, TSoftShadowOptions options); -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double, ffi.Bool)>( - isLeaf: true, -) -external void Camera_setProjectionFromFov( - ffi.Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, -); +@ffi.Native)>(isLeaf: true) +external TSoftShadowOptions View_getSoftShadowOptions(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external double Camera_getFocalLength(ffi.Pointer camera); +@ffi.Native, TVsmShadowOptions)>(isLeaf: true) +external void View_setVsmShadowOptions(ffi.Pointer tView, TVsmShadowOptions options); -@ffi.Native, double3, double3, double3)>(isLeaf: true) -external void Camera_lookAt(ffi.Pointer camera, double3 eye, double3 focus, double3 up); +@ffi.Native)>(isLeaf: true) +external TVsmShadowOptions View_getVsmShadowOptions(ffi.Pointer tView); -@ffi.Native)>(isLeaf: true) -external double Camera_getNear(ffi.Pointer camera); +@ffi.Native, ffi.Bool, ffi.Float)>(isLeaf: true) +external void View_setBloom(ffi.Pointer tView, bool enabled, double strength); -@ffi.Native)>(isLeaf: true) -external double Camera_getCullingFar(ffi.Pointer camera); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void View_setRenderQuality(ffi.Pointer tView, int qualityLevel); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external double Camera_getFov(ffi.Pointer camera, bool horizontal); +@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool)>(isLeaf: true) +external void View_setAntiAliasing(ffi.Pointer tView, bool msaa, bool fxaa, bool taa); -@ffi.Native)>(isLeaf: true) -external double Camera_getFocusDistance(ffi.Pointer camera); +@ffi.Native, ffi.Int, ffi.Bool)>(isLeaf: true) +external void View_setLayerEnabled(ffi.Pointer tView, int layer, bool visible); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void Camera_setFocusDistance(ffi.Pointer camera, double focusDistance); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setCamera(ffi.Pointer tView, ffi.Pointer tCamera); -@ffi.Native, double4x4, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setCustomProjectionWithCulling( - ffi.Pointer camera, - double4x4 projectionMatrix, - double near, - double far, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getScene(ffi.Pointer tView); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Camera_setModelMatrix(ffi.Pointer camera, ffi.Pointer tModelMatrix); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getCamera(ffi.Pointer tView); -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void Camera_setLensProjection( - ffi.Pointer camera, - double near, - double far, - double aspect, - double focalLength, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setStencilBufferEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native)>(isLeaf: true) -external int Camera_getEntity(ffi.Pointer camera); +@ffi.Native)>(isLeaf: true) +external bool View_isStencilBufferEnabled(ffi.Pointer tView); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.UnsignedInt, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ) ->(isLeaf: true) -external void Camera_setProjection( - ffi.Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setDitheringEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getEntityCount(ffi.Pointer filamentAsset); +@ffi.Native)>(isLeaf: true) +external bool View_isDitheringEnabled(ffi.Pointer tView); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void FilamentAsset_getEntities(ffi.Pointer filamentAsset, ffi.Pointer out); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setScene(ffi.Pointer tView, ffi.Pointer tScene); -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getWireframe(ffi.Pointer filamentAsset); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setFrontFaceWindingInverted(ffi.Pointer tView, bool inverted); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer FilamentAsset_getSourceAsset(ffi.Pointer filamentAsset); +@ffi.Native, TAmbientOcclusionOptions)>(isLeaf: true) +external void View_setAmbientOcclusionOptions(ffi.Pointer tView, TAmbientOcclusionOptions options); -@ffi.Native)>(isLeaf: true) -external TViewport View_getViewport(ffi.Pointer view); +@ffi.Native)>(isLeaf: true) +external TAmbientOcclusionOptions View_getAmbientOcclusionOptions(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createLinear(ffi.Pointer tEngine); +@ffi.Native, TFogOptions)>(isLeaf: true) +external void View_setFogOptions(ffi.Pointer tView, TFogOptions tFogOptions); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createACES(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external TFogOptions View_getFogOptions(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createACESLegacy(ffi.Pointer tEngine); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setTransparentPickingEnabled(ffi.Pointer tView, bool enabled); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createFilmic(ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external bool View_isTransparentPickingEnabled(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createPBRNeutral(ffi.Pointer tEngine); +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) +external void View_pick(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createAGX(ffi.Pointer tEngine); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void View_setName(ffi.Pointer tView, ffi.Pointer name); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer ToneMapper_createAGXWithLook(ffi.Pointer tEngine, int look); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer View_getName(ffi.Pointer tView); -@ffi.Native Function(ffi.Pointer, ffi.Float, ffi.Float, ffi.Float, ffi.Float)>( - isLeaf: true, -) -external ffi.Pointer ToneMapper_createGeneric( +@ffi.Native(isLeaf: true) +external void Gizmo_dummy(int t); + +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ) +>(isLeaf: true) +external ffi.Pointer Gizmo_create( ffi.Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, + ffi.Pointer assetLoader, + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tView, + ffi.Pointer tMaterial, + int tGizmoType, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ToneMapper_createDisplayRange(ffi.Pointer tEngine); +@ffi.Native, ffi.Uint32, ffi.Uint32, GizmoPickCallback)>(isLeaf: true) +external void Gizmo_pick(ffi.Pointer tGizmo, int x, int y, GizmoPickCallback callback); -@ffi.Native)>(isLeaf: true) -external void ToneMapper_destroy(ffi.Pointer toneMapper); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void Gizmo_highlight(ffi.Pointer tGizmo, int axis); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer ColorGradingBuilder_create(); +@ffi.Native)>(isLeaf: true) +external void Gizmo_unhighlight(ffi.Pointer tGizmo); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer ColorGradingBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createInstance(ffi.Pointer tMaterial); -@ffi.Native)>(isLeaf: true) -external void ColorGradingBuilder_destroy(ffi.Pointer builder); +@ffi.Native)>(isLeaf: true) +external int Material_getFeatureLevel(ffi.Pointer tMaterial); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void ColorGrading_destroy(ffi.Pointer engine, ffi.Pointer colorGrading); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createImageMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void ColorGradingBuilder_quality(ffi.Pointer builder, int level); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createGridMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void ColorGradingBuilder_format(ffi.Pointer builder, int format); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createGizmoMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void ColorGradingBuilder_dimensions(ffi.Pointer builder, int dim); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createSilhouetteMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void ColorGradingBuilder_toneMapper( - ffi.Pointer builder, - ffi.Pointer toneMapper, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createEdgeOutlineMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_exposure(ffi.Pointer builder, double exposure); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createWireframeMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_nightAdaptation(ffi.Pointer builder, double adaptation); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createTranslationAxisMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Float, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_whiteBalance( - ffi.Pointer builder, - double temperature, - double tint, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Material_createBoneOverlayMaterial(ffi.Pointer tEngine); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_contrast(ffi.Pointer builder, double contrast); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool Material_hasParameter(ffi.Pointer tMaterial, ffi.Pointer propertyName); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_vibrance(ffi.Pointer builder, double vibrance); +@ffi.Native)>(isLeaf: true) +external bool MaterialInstance_isStencilWriteEnabled(ffi.Pointer materialInstance); -@ffi.Native, ffi.Float)>(isLeaf: true) -external void ColorGradingBuilder_saturation(ffi.Pointer builder, double saturation); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer MaterialInstance_getMaterial(ffi.Pointer materialInstance); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setStencilWrite(ffi.Pointer materialInstance, bool enabled); + +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setCullingMode(ffi.Pointer materialInstance, int culling); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDoubleSided(ffi.Pointer materialInstance, bool doubleSided); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDepthWrite(ffi.Pointer materialInstance, bool enabled); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setDepthCulling(ffi.Pointer materialInstance, bool enabled); + +@ffi.Native, ffi.Pointer, ffi.Double)>(isLeaf: true) +external void MaterialInstance_setParameterFloat( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double value, +); + +@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>( + isLeaf: true, +) +external void MaterialInstance_setParameterFloat2( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, +); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Double, ffi.Double, ffi.Double) >(isLeaf: true) -external void ColorGradingBuilder_channelMixer( - ffi.Pointer builder, - double outRedR, - double outRedG, - double outRedB, - double outGreenR, - double outGreenG, - double outGreenB, - double outBlueR, - double outBlueG, - double outBlueB, +external void MaterialInstance_setParameterFloat3( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, + double z, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32) >(isLeaf: true) -external void ColorGradingBuilder_shadowsMidtonesHighlights( - ffi.Pointer builder, - double shadowsR, - double shadowsG, - double shadowsB, - double shadowsW, - double midtonesR, - double midtonesG, - double midtonesB, - double midtonesW, - double highlightsR, - double highlightsG, - double highlightsB, - double highlightsW, - double rangesX, - double rangesY, - double rangesZ, - double rangesW, +external void MaterialInstance_setParameterFloat3Array( + ffi.Pointer tMaterialInstance, + ffi.Pointer propertyName, + ffi.Pointer raw, + int length, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ) ->(isLeaf: true) -external void ColorGradingBuilder_slopeOffsetPower( - ffi.Pointer builder, - double slopeR, - double slopeG, - double slopeB, - double offsetR, - double offsetG, - double offsetB, - double powerR, - double powerG, - double powerB, + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ) +>(isLeaf: true) +external void MaterialInstance_setParameterFloat4( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + double x, + double y, + double w, + double z, +); + +@ffi.Native, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external void MaterialInstance_setParameterMat3( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer matrix, +); + +@ffi.Native, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external void MaterialInstance_setParameterMat4( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer matrix, +); + +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external void MaterialInstance_setParameterInt( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + int value, +); + +@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) +external void MaterialInstance_setParameterBool( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + bool value, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, ) >(isLeaf: true) -external void ColorGradingBuilder_curves( - ffi.Pointer builder, - double shadowGammaR, - double shadowGammaG, - double shadowGammaB, - double midPointR, - double midPointG, - double midPointB, - double highlightScaleR, - double highlightScaleG, - double highlightScaleB, +external void MaterialInstance_setParameterTexture( + ffi.Pointer materialInstance, + ffi.Pointer propertyName, + ffi.Pointer texture, + ffi.Pointer sampler, ); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void ColorGradingBuilder_luminanceScaling(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setDepthFunc(ffi.Pointer materialInstance, int depthFunc); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void ColorGradingBuilder_gamutMapping(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpStencilFail( + ffi.Pointer materialInstance, + int op, + int face, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setColorGrading(ffi.Pointer tView, ffi.Pointer tColorGrading); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpDepthFail(ffi.Pointer materialInstance, int op, int face); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getColorGrading(ffi.Pointer tView); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilOpDepthStencilPass( + ffi.Pointer materialInstance, + int op, + int face, +); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void View_setBlendMode(ffi.Pointer view, int blendMode); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilCompareFunction( + ffi.Pointer materialInstance, + int func, + int face, +); -@ffi.Native, ffi.Uint32, ffi.Uint32)>(isLeaf: true) -external void View_setViewport(ffi.Pointer view, int width, int height); +@ffi.Native, ffi.Uint8, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setStencilReferenceValue( + ffi.Pointer materialInstance, + int value, + int face, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setRenderTarget(ffi.Pointer view, ffi.Pointer renderTarget); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void MaterialInstance_setStencilReadMask(ffi.Pointer materialInstance, int mask); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setFrustumCullingEnabled(ffi.Pointer view, bool enabled); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void MaterialInstance_setStencilWriteMask(ffi.Pointer materialInstance, int mask); -@ffi.Native)>(isLeaf: true) -external int View_getVisibleRenderableCount(ffi.Pointer view); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void MaterialInstance_setTransparencyMode( + ffi.Pointer materialInstance, + int transparencyMode, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getRenderTarget(ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external int MaterialInstance_getTransparencyMode(ffi.Pointer materialInstance); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setPostProcessing(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external int Material_getBlendingMode(ffi.Pointer material); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setShadowsEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer NameComponentManager_create(); -@ffi.Native, ffi.Int)>(isLeaf: true) -external void View_setShadowType(ffi.Pointer tView, int shadowType); +@ffi.Native)>(isLeaf: true) +external void NameComponentManager_destroy(ffi.Pointer tNameComponentManager); -@ffi.Native)>(isLeaf: true) -external int View_getShadowType(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer NameComponentManager_getName( + ffi.Pointer tNameComponentManager, + int entity, +); -@ffi.Native, TSoftShadowOptions)>(isLeaf: true) -external void View_setSoftShadowOptions(ffi.Pointer tView, TSoftShadowOptions options); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Int, + ffi.UnsignedInt, + Aabb3, + ) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createFromBuffers( + ffi.Pointer tEngine, + ffi.Pointer tVertexBuffer, + ffi.Pointer tIndexBuffer, + ffi.Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, +); -@ffi.Native)>(isLeaf: true) -external TSoftShadowOptions View_getSoftShadowOptions(ffi.Pointer tView); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createFromFilamentAsset( + ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tFilamentAsset, + bool rebuildVertices, +); -@ffi.Native, TVsmShadowOptions)>(isLeaf: true) -external void View_setVsmShadowOptions(ffi.Pointer tView, TVsmShadowOptions options); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getFilamentAsset(ffi.Pointer tSceneAsset); -@ffi.Native)>(isLeaf: true) -external TVsmShadowOptions View_getVsmShadowOptions(ffi.Pointer tView); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getType(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.Bool, ffi.Float)>(isLeaf: true) -external void View_setBloom(ffi.Pointer tView, bool enabled, double strength); +@ffi.Native)>(isLeaf: true) +external void SceneAsset_destroy(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void View_setRenderQuality(ffi.Pointer tView, int qualityLevel); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_addToScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); -@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool)>(isLeaf: true) -external void View_setAntiAliasing(ffi.Pointer tView, bool msaa, bool fxaa, bool taa); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_removeFromScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); -@ffi.Native, ffi.Int, ffi.Bool)>(isLeaf: true) -external void View_setLayerEnabled(ffi.Pointer tView, int layer, bool visible); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getEntity(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setCamera(ffi.Pointer tView, ffi.Pointer tCamera); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getChildEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getScene(ffi.Pointer tView); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_getChildEntities(ffi.Pointer tSceneAsset, ffi.Pointer out); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getCamera(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getCameraEntities(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setStencilBufferEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getCameraEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native)>(isLeaf: true) -external bool View_isStencilBufferEnabled(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SceneAsset_getLightEntities(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setDitheringEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getLightEntityCount(ffi.Pointer tSceneAsset); -@ffi.Native)>(isLeaf: true) -external bool View_isDitheringEnabled(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getInstance(ffi.Pointer tSceneAsset, int index); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setScene(ffi.Pointer tView, ffi.Pointer tScene); +@ffi.Native)>(isLeaf: true) +external int SceneAsset_getInstanceCount(ffi.Pointer tSceneAsset); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setFrontFaceWindingInverted(ffi.Pointer tView, bool inverted); +@ffi.Native< + ffi.Pointer Function(ffi.Pointer, ffi.Pointer>, ffi.Int) +>(isLeaf: true) +external ffi.Pointer SceneAsset_createInstance( + ffi.Pointer asset, + ffi.Pointer> materialInstances, + int materialInstanceCount, +); -@ffi.Native, TAmbientOcclusionOptions)>(isLeaf: true) -external void View_setAmbientOcclusionOptions(ffi.Pointer tView, TAmbientOcclusionOptions options); +@ffi.Native)>(isLeaf: true) +external Aabb3 SceneAsset_getBoundingBox(ffi.Pointer asset); -@ffi.Native)>(isLeaf: true) -external TAmbientOcclusionOptions View_getAmbientOcclusionOptions(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getVertexBuffer( + ffi.Pointer tSceneAsset, + int primitiveIndex, +); -@ffi.Native, TFogOptions)>(isLeaf: true) -external void View_setFogOptions(ffi.Pointer tView, TFogOptions tFogOptions); +@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) +external ffi.Pointer SceneAsset_getIndexBuffer(ffi.Pointer tSceneAsset, int primitiveIndex); -@ffi.Native)>(isLeaf: true) -external TFogOptions View_getFogOptions(ffi.Pointer tView); +@ffi.Native, EntityId)>(isLeaf: true) +external int SceneAsset_getPrimitiveOffsetForEntity(ffi.Pointer tSceneAsset, int entity); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void View_setTransparentPickingEnabled(ffi.Pointer tView, bool enabled); +@ffi.Native)>(isLeaf: true) +external void SceneAsset_releaseSourceData(ffi.Pointer tSceneAsset); -@ffi.Native)>(isLeaf: true) -external bool View_isTransparentPickingEnabled(ffi.Pointer tView); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void SceneAsset_setFlatShading(ffi.Pointer tSceneAsset, bool flatShading); -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) -external void View_pick(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void SceneAsset_getBones(ffi.Pointer tSceneAsset, int skinIndex, ffi.Pointer out); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void View_setName(ffi.Pointer tView, ffi.Pointer name); +@ffi.Native, ffi.Size)>(isLeaf: true) +external int SceneAsset_getBoneCount(ffi.Pointer tSceneAsset, int skinIndex); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer View_getName(ffi.Pointer tView); +@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Size)>(isLeaf: true) +external ffi.Pointer SceneAsset_getBoneName( + ffi.Pointer tSceneAsset, + int skinIndex, + int boneIndex, +); -@ffi.Native(isLeaf: true) -external void Gizmo_dummy(int t); +@ffi.Native, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) +external void Camera_setExposure(ffi.Pointer camera, double aperture, double shutterSpeed, double sensitivity); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ) ->(isLeaf: true) -external ffi.Pointer Gizmo_create( - ffi.Pointer tEngine, - ffi.Pointer assetLoader, - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tView, - ffi.Pointer tMaterial, - int tGizmoType, -); +@ffi.Native)>(isLeaf: true) +external double Camera_getAperture(ffi.Pointer camera); -@ffi.Native, ffi.Uint32, ffi.Uint32, GizmoPickCallback)>(isLeaf: true) -external void Gizmo_pick(ffi.Pointer tGizmo, int x, int y, GizmoPickCallback callback); +@ffi.Native)>(isLeaf: true) +external double Camera_getShutterSpeed(ffi.Pointer camera); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void Gizmo_highlight(ffi.Pointer tGizmo, int axis); +@ffi.Native)>(isLeaf: true) +external double Camera_getSensitivity(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external void Gizmo_unhighlight(ffi.Pointer tGizmo); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getModelMatrix(ffi.Pointer camera); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ) ->(isLeaf: true) -external ffi.Pointer GltfAssetLoader_create( - ffi.Pointer tEngine, - ffi.Pointer tMaterialProvider, - ffi.Pointer tNameComponentManager, -); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getViewMatrix(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external void GltfAssetLoader_destroy(ffi.Pointer tAssetLoader); +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getProjectionMatrix(ffi.Pointer camera); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ) ->(isLeaf: true) -external ffi.Pointer GltfAssetLoader_load( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer data, - int length, - int numInstances, +@ffi.Native)>(isLeaf: true) +external double4x4 Camera_getCullingProjectionMatrix(ffi.Pointer camera); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Camera_getFrustum(ffi.Pointer camera, ffi.Pointer out); + +@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setProjectionMatrix( + ffi.Pointer camera, + ffi.Pointer matrix, + double near, + double far, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>( +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double, ffi.Bool)>( isLeaf: true, ) -external ffi.Pointer GltfAssetLoader_getMaterialInstance( - ffi.Pointer tRenderableManager, - ffi.Pointer tAsset, +external void Camera_setProjectionFromFov( + ffi.Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer GltfAssetLoader_getMaterialProvider(ffi.Pointer tAssetLoader); +@ffi.Native)>(isLeaf: true) +external double Camera_getFocalLength(ffi.Pointer camera); -@ffi.Native)>(isLeaf: true) -external int FilamentAsset_getResourceUriCount(ffi.Pointer tFilamentAsset); +@ffi.Native, double3, double3, double3)>(isLeaf: true) +external void Camera_lookAt(ffi.Pointer camera, double3 eye, double3 focus, double3 up); -@ffi.Native> Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer> FilamentAsset_getResourceUris(ffi.Pointer tFilamentAsset); +@ffi.Native)>(isLeaf: true) +external double Camera_getNear(ffi.Pointer camera); + +@ffi.Native)>(isLeaf: true) +external double Camera_getCullingFar(ffi.Pointer camera); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external double Camera_getFov(ffi.Pointer camera, bool horizontal); + +@ffi.Native)>(isLeaf: true) +external double Camera_getFocusDistance(ffi.Pointer camera); + +@ffi.Native, ffi.Float)>(isLeaf: true) +external void Camera_setFocusDistance(ffi.Pointer camera, double focusDistance); + +@ffi.Native, double4x4, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setCustomProjectionWithCulling( + ffi.Pointer camera, + double4x4 projectionMatrix, + double near, + double far, +); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Camera_setModelMatrix(ffi.Pointer camera, ffi.Pointer tModelMatrix); + +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void Camera_setLensProjection( + ffi.Pointer camera, + double near, + double far, + double aspect, + double focalLength, +); + +@ffi.Native)>(isLeaf: true) +external int Camera_getEntity(ffi.Pointer camera); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.UnsignedInt, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ) +>(isLeaf: true) +external void Camera_setProjection( + ffi.Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, +); @ffi.Native)>(isLeaf: true) external void MeshData_dispose(ffi.Pointer meshData); @@ -799,2241 +859,2419 @@ external int GltfParser_parseBuffer( ffi.Pointer outMeshData, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer GltfResourceLoader_create(ffi.Pointer tEngine); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint8, + ffi.Uint16, + ffi.IntPtr, + ffi.UnsignedInt, + ffi.UnsignedInt, + ) +>(isLeaf: true) +external ffi.Pointer Texture_build( + ffi.Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import$, + int sampler, + int format, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void GltfResourceLoader_destroy( +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external void Texture_setExternalImage( ffi.Pointer tEngine, - ffi.Pointer tGltfResourceLoader, + ffi.Pointer tTexture, + ffi.Pointer externalImage, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool GltfResourceLoader_asyncBeginLoad( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, -); - -@ffi.Native)>(isLeaf: true) -external void GltfResourceLoader_asyncUpdateLoad(ffi.Pointer tGltfResourceLoader); - -@ffi.Native)>(isLeaf: true) -external double GltfResourceLoader_asyncGetLoadProgress(ffi.Pointer tGltfResourceLoader); +@ffi.Native)>(isLeaf: true) +external int Texture_getLevels(ffi.Pointer tTexture); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size) + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Int, + ) >(isLeaf: true) -external void GltfResourceLoader_addResourceData( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer uri, - ffi.Pointer data, - int length, +external bool Texture_loadImage( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool GltfResourceLoader_loadResources( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, +@ffi.Native< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ) +>(isLeaf: true) +external bool Texture_setImage( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + int level, + ffi.Pointer data, + int size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, ); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer IndexBufferBuilder_create(); - -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external void IndexBufferBuilder_indexCount(ffi.Pointer builder, int count); - -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void IndexBufferBuilder_bufferType(ffi.Pointer builder, int indexType); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getWidth(ffi.Pointer tTexture, int level); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer IndexBufferBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, -); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getHeight(ffi.Pointer tTexture, int level); -@ffi.Native)>(isLeaf: true) -external void IndexBufferBuilder_destroy(ffi.Pointer builder); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getDepth(ffi.Pointer tTexture, int level); -@ffi.Native)>(isLeaf: true) -external int IndexBuffer_getIndexCount(ffi.Pointer buffer); +@ffi.Native)>(isLeaf: true) +external int Texture_getFormat(ffi.Pointer tTexture); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size, ffi.Uint32) ->(isLeaf: true) -external void IndexBuffer_setBuffer( - ffi.Pointer engine, - ffi.Pointer buffer, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, -); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external int Texture_getUsage(ffi.Pointer tTexture, int level); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void IndexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Texture_generateMipMaps(ffi.Pointer tTexture, ffi.Pointer tEngine); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void IndirectLight_setRotation(ffi.Pointer tIndirectLight, ffi.Pointer rotation); +@ffi.Native Function(ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Ktx1Bundle_create(ffi.Pointer ktxData, int length); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ) ->(isLeaf: true) -external ffi.Pointer MaterialProvider_createMaterialInstance( - ffi.Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Ktx1Bundle_getSphericalHarmonics(ffi.Pointer tBundle, ffi.Pointer harmonics); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer NameComponentManager_create(); +@ffi.Native)>(isLeaf: true) +external bool Ktx1Bundle_isCubemap(ffi.Pointer tBundle); -@ffi.Native)>(isLeaf: true) -external void NameComponentManager_destroy(ffi.Pointer tNameComponentManager); +@ffi.Native)>(isLeaf: true) +external void Ktx1Bundle_destroy(ffi.Pointer tBundle); -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer NameComponentManager_getName( - ffi.Pointer tNameComponentManager, - int entity, +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external ffi.Pointer Ktx1Reader_createTexture( + ffi.Pointer tEngine, + ffi.Pointer tBundle, + int requestId, + VoidCallback onTextureUploadComplete, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderManager_create( +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Ktx2Reader_createTexture( ffi.Pointer tEngine, - ffi.Pointer tRenderer, + ffi.Pointer data, + int size, ); -@ffi.Native)>(isLeaf: true) -external void RenderManager_destroy(ffi.Pointer tRenderer); +@ffi.Native Function(ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true) +external ffi.Pointer Image_createEmpty(int width, int height, int channel); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_addAnimationManager( - ffi.Pointer tRenderer, - ffi.Pointer tAnimationManager, +@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Pointer, ffi.Bool)>( + isLeaf: true, +) +external ffi.Pointer Image_decode( + ffi.Pointer data, + int length, + ffi.Pointer name, + bool alpha, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_removeAnimationManager( - ffi.Pointer tRenderer, - ffi.Pointer tAnimationManager, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Image_getBytes(ffi.Pointer tLinearImage); -@ffi.Native, ffi.Uint64)>(isLeaf: true) -external void RenderManager_render(ffi.Pointer tRenderer, int frameTimeInNanos); +@ffi.Native)>(isLeaf: true) +external void Image_destroy(ffi.Pointer tLinearImage); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer>, ffi.Uint8) ->(isLeaf: true) -external void RenderManager_setRenderable( - ffi.Pointer tRenderer, - ffi.Pointer swapChain, - ffi.Pointer> views, - int numViews, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderManager_removeSwapChain(ffi.Pointer tRenderer, ffi.Pointer swapChain); - -@ffi.Native)>(isLeaf: true) -external void RenderManager_requestRender(ffi.Pointer tRenderer); - -@ffi.Native)>(isLeaf: true) -external void RenderManager_attachToRenderThread(ffi.Pointer tRenderer); +@ffi.Native)>(isLeaf: true) +external int Image_getWidth(ffi.Pointer tLinearImage); -@ffi.Native)>(isLeaf: true) -external void RenderManager_detachFromRenderThread(ffi.Pointer tRenderManager); +@ffi.Native)>(isLeaf: true) +external int Image_getHeight(ffi.Pointer tLinearImage); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderManager_setPaused(ffi.Pointer tRenderer, bool paused); +@ffi.Native)>(isLeaf: true) +external int Image_getChannels(ffi.Pointer tLinearImage); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createInstance(ffi.Pointer tMaterial); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderTarget_getColorTexture(ffi.Pointer tRenderTarget); -@ffi.Native)>(isLeaf: true) -external int Material_getFeatureLevel(ffi.Pointer tMaterial); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderTarget_getDepthTexture(ffi.Pointer tRenderTarget); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createImageMaterial(ffi.Pointer tEngine); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer TextureSampler_create(); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createGridMaterial(ffi.Pointer tEngine); +@ffi.Native< + ffi.Pointer Function( + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ) +>(isLeaf: true) +external ffi.Pointer TextureSampler_createWithFiltering( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createGizmoMaterial(ffi.Pointer tEngine); +@ffi.Native Function(ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external ffi.Pointer TextureSampler_createWithComparison(int compareMode, int compareFunc); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createSilhouetteMaterial(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setMinFilter(ffi.Pointer sampler, int filter); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createEdgeOutlineMaterial(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setMagFilter(ffi.Pointer sampler, int filter); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createWireframeMaterial(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeS(ffi.Pointer sampler, int mode); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createTranslationAxisMaterial(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeT(ffi.Pointer sampler, int mode); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Material_createBoneOverlayMaterial(ffi.Pointer tEngine); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setWrapModeR(ffi.Pointer sampler, int mode); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool Material_hasParameter(ffi.Pointer tMaterial, ffi.Pointer propertyName); +@ffi.Native, ffi.Double)>(isLeaf: true) +external void TextureSampler_setAnisotropy(ffi.Pointer sampler, double anisotropy); -@ffi.Native)>(isLeaf: true) -external bool MaterialInstance_isStencilWriteEnabled(ffi.Pointer materialInstance); +@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) +external void TextureSampler_setCompareMode(ffi.Pointer sampler, int mode, int func); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer MaterialInstance_getMaterial(ffi.Pointer materialInstance); +@ffi.Native)>(isLeaf: true) +external void TextureSampler_destroy(ffi.Pointer sampler); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setStencilWrite(ffi.Pointer materialInstance, bool enabled); +@ffi.Native< + ffi.Pointer Function(ffi.UnsignedInt, ffi.Pointer, ffi.Pointer, ffi.Uint8, ffi.Bool) +>(isLeaf: true) +external ffi.Pointer Engine_create( + int backend, + ffi.Pointer platform, + ffi.Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, +); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setCullingMode(ffi.Pointer materialInstance, int culling); +@ffi.Native)>(isLeaf: true) +external int Engine_getSupportedFeatureLevel(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDoubleSided(ffi.Pointer materialInstance, bool doubleSided); +@ffi.Native)>(isLeaf: true) +external void Engine_destroy(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDepthWrite(ffi.Pointer materialInstance, bool enabled); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createRenderer(ffi.Pointer tEngine); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setDepthCulling(ffi.Pointer materialInstance, bool enabled); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyRenderer(ffi.Pointer tEngine, ffi.Pointer tRenderer); -@ffi.Native, ffi.Pointer, ffi.Double)>(isLeaf: true) -external void MaterialInstance_setParameterFloat( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double value, +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint64)>(isLeaf: true) +external ffi.Pointer Engine_createSwapChain( + ffi.Pointer tEngine, + ffi.Pointer window, + int flags, ); -@ffi.Native, ffi.Pointer, ffi.Double, ffi.Double)>( - isLeaf: true, -) -external void MaterialInstance_setParameterFloat2( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, +@ffi.Native Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Uint64)>(isLeaf: true) +external ffi.Pointer Engine_createHeadlessSwapChain( + ffi.Pointer tEngine, + int width, + int height, + int flags, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Double, ffi.Double, ffi.Double) ->(isLeaf: true) -external void MaterialInstance_setParameterFloat3( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, - double z, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroySwapChain(ffi.Pointer tEngine, ffi.Pointer tSwapChain); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32) ->(isLeaf: true) -external void MaterialInstance_setParameterFloat3Array( - ffi.Pointer tMaterialInstance, - ffi.Pointer propertyName, - ffi.Pointer raw, - int length, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyView(ffi.Pointer tEngine, ffi.Pointer tView); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ) ->(isLeaf: true) -external void MaterialInstance_setParameterFloat4( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - double x, - double y, - double w, - double z, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyScene(ffi.Pointer tEngine, ffi.Pointer tScene); -@ffi.Native, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external void MaterialInstance_setParameterMat3( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer matrix, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyColorGrading(ffi.Pointer tEngine, ffi.Pointer tColorGrading); -@ffi.Native, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external void MaterialInstance_setParameterMat4( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer matrix, -); +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer Engine_createCamera(ffi.Pointer tEngine, int entityId); -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external void MaterialInstance_setParameterInt( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - int value, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyCamera(ffi.Pointer tEngine, ffi.Pointer tCamera); -@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) -external void MaterialInstance_setParameterBool( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - bool value, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createView(ffi.Pointer tEngine); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ) ->(isLeaf: true) -external void MaterialInstance_setParameterTexture( - ffi.Pointer materialInstance, - ffi.Pointer propertyName, - ffi.Pointer texture, - ffi.Pointer sampler, -); +@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) +external ffi.Pointer Engine_getCameraComponent(ffi.Pointer tEngine, int entityId); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setDepthFunc(ffi.Pointer materialInstance, int depthFunc); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getTransformManager(ffi.Pointer engine); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpStencilFail( - ffi.Pointer materialInstance, - int op, - int face, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getRenderableManager(ffi.Pointer engine); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpDepthFail(ffi.Pointer materialInstance, int op, int face); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getLightManager(ffi.Pointer engine); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilOpDepthStencilPass( - ffi.Pointer materialInstance, - int op, - int face, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getEntityManager(ffi.Pointer engine); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilCompareFunction( - ffi.Pointer materialInstance, - int func, - int face, -); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void Engine_setAutomaticInstancingEnabled(ffi.Pointer tEngine, bool enabled); -@ffi.Native, ffi.Uint8, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setStencilReferenceValue( - ffi.Pointer materialInstance, - int value, - int face, -); +@ffi.Native)>(isLeaf: true) +external int Engine_getMaxAutomaticInstances(ffi.Pointer tEngine); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void MaterialInstance_setStencilReadMask(ffi.Pointer materialInstance, int mask); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyTexture(ffi.Pointer tEngine, ffi.Pointer tTexture); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void MaterialInstance_setStencilWriteMask(ffi.Pointer materialInstance, int mask); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createFence(ffi.Pointer tEngine); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void MaterialInstance_setTransparencyMode( - ffi.Pointer materialInstance, - int transparencyMode, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyFence(ffi.Pointer tEngine, ffi.Pointer tFence); -@ffi.Native)>(isLeaf: true) -external int MaterialInstance_getTransparencyMode(ffi.Pointer materialInstance); +@ffi.Native)>(isLeaf: true) +external void Engine_flushAndWait(ffi.Pointer tEngine); -@ffi.Native)>(isLeaf: true) -external int Material_getBlendingMode(ffi.Pointer material); +@ffi.Native)>(isLeaf: true) +external void Engine_execute(ffi.Pointer tEngine); + +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) +external ffi.Pointer Engine_buildMaterial( + ffi.Pointer tEngine, + ffi.Pointer materialData, + int length, +); +/// Compiles .mat [matSource] ([length] bytes, not necessarily +/// NUL-terminated) into a filamat package, synchronously on the calling +/// thread. #include directives must already be resolved by the caller (the +/// Dart layer flattens them). +/// +/// [platform]/[targetApi]/[optimization] select the compilation targets; +/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the +/// engine's backend. +/// +/// [definesJson] is either nullptr or a flat JSON object of preprocessor +/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic +/// backslash escapes are supported. +/// +/// [embedSource] controls whether the .mat source is embedded in the +/// package (matc's no-embed-source flag). +/// +/// On success returns a malloc'd buffer of *outSize bytes that the caller +/// must release with [Engine_freeCompiledMaterial]. On failure returns +/// nullptr and writes a NUL-terminated message into [outError] (capacity +/// [outErrorCap]). @ffi.Native< - ffi.Pointer Function( + ffi.Pointer Function( ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint8, - ffi.Uint16, - ffi.IntPtr, + ffi.Pointer, + ffi.Size, ffi.UnsignedInt, ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Pointer, ) >(isLeaf: true) -external ffi.Pointer Texture_build( - ffi.Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import$, - int sampler, - int format, -); - -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external void Texture_setExternalImage( +external ffi.Pointer Engine_compileMaterial( ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer externalImage, + ffi.Pointer matSource, + int length, + int platform, + int targetApi, + int optimization, + ffi.Pointer definesJson, + int embedSource, + ffi.Pointer outError, + int outErrorCap, + ffi.Pointer outSize, ); -@ffi.Native)>(isLeaf: true) -external int Texture_getLevels(ffi.Pointer tTexture); +/// Releases a buffer returned by [Engine_compileMaterial]. +@ffi.Native)>(isLeaf: true) +external void Engine_freeCompiledMaterial(ffi.Pointer data); +/// As [Engine_compileMaterial], but the work runs on the engine's render +/// thread. The task writes the malloc'd package to *[outData] and its size to +/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on +/// failure with the message in [outError], then invokes [onComplete] with +/// [requestId]. @ffi.Native< - ffi.Bool Function( + ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Size, ffi.UnsignedInt, ffi.UnsignedInt, - ffi.Int, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Pointer>, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer>, ) >(isLeaf: true) -external bool Texture_loadImage( +external void Engine_compileMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer matSource, + int length, + int platform, + int targetApi, + int optimization, + ffi.Pointer definesJson, + int embedSource, + ffi.Pointer outError, + int outErrorCap, + ffi.Pointer> outData, + ffi.Pointer outSize, + int requestId, + ffi.Pointer> onComplete, +); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyMaterial(ffi.Pointer tEngine, ffi.Pointer tMaterial); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyMaterialInstance( + ffi.Pointer tEngine, + ffi.Pointer tMaterialInstance, +); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_createScene(ffi.Pointer tEngine); + +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Bool, ffi.Float, ffi.Uint8)>( + isLeaf: true, +) +external ffi.Pointer Engine_buildSkybox( ffi.Pointer tEngine, ffi.Pointer tTexture, - ffi.Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, + bool showSun, + double intensity, + int priority, ); @ffi.Native< - ffi.Bool Function( + ffi.Pointer Function( ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Bool, + ffi.Float, + ffi.Uint8, ) >(isLeaf: true) -external bool Texture_setImage( +external ffi.Pointer Engine_buildColoredSkybox( ffi.Pointer tEngine, - ffi.Pointer tTexture, - int level, - ffi.Pointer data, - int size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, ); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getWidth(ffi.Pointer tTexture, int level); +@ffi.Native< + ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) +>(isLeaf: true) +external ffi.Pointer Engine_buildIndirectLightFromIrradianceTexture( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer tIrradianceTexture, + double intensity, +); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getHeight(ffi.Pointer tTexture, int level); +@ffi.Native< + ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) +>(isLeaf: true) +external ffi.Pointer Engine_buildIndirectLightFromIrradianceHarmonics( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer irradianceHarmonics, + double intensity, +); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getDepth(ffi.Pointer tTexture, int level); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroySkybox(ffi.Pointer tEngine, ffi.Pointer tSkybox); -@ffi.Native)>(isLeaf: true) -external int Texture_getFormat(ffi.Pointer tTexture); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Engine_destroyIndirectLight(ffi.Pointer tEngine, ffi.Pointer tIndirectLight); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external int Texture_getUsage(ffi.Pointer tTexture, int level); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Texture_generateMipMaps(ffi.Pointer tTexture, ffi.Pointer tEngine); +@ffi.Native)>(isLeaf: true) +external int EntityManager_createEntity(ffi.Pointer tEntityManager); -@ffi.Native Function(ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Ktx1Bundle_create(ffi.Pointer ktxData, int length); +@ffi.Native, EntityId)>(isLeaf: true) +external void EntityManager_destroyEntity(ffi.Pointer tEntityManager, int entityId); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Ktx1Bundle_getSphericalHarmonics(ffi.Pointer tBundle, ffi.Pointer harmonics); +@ffi.Native)>(isLeaf: true) +external void Fence_waitAndDestroy(ffi.Pointer tFence); -@ffi.Native)>(isLeaf: true) -external bool Ktx1Bundle_isCubemap(ffi.Pointer tBundle); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Engine_getDebugRegistry(ffi.Pointer tEngine); -@ffi.Native)>(isLeaf: true) -external void Ktx1Bundle_destroy(ffi.Pointer tBundle); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_hasProperty(ffi.Pointer tDebugRegistry, ffi.Pointer name); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external ffi.Pointer Ktx1Reader_createTexture( - ffi.Pointer tEngine, - ffi.Pointer tBundle, - int requestId, - VoidCallback onTextureUploadComplete, +@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) +external bool DebugRegistry_setProperty_bool( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + bool value, ); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Ktx2Reader_createTexture( - ffi.Pointer tEngine, - ffi.Pointer data, - int size, +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool DebugRegistry_setProperty_int( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + int value, ); -@ffi.Native Function(ffi.Uint32, ffi.Uint32, ffi.Uint32)>(isLeaf: true) -external ffi.Pointer Image_createEmpty(int width, int height, int channel); - -@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Pointer, ffi.Bool)>( - isLeaf: true, -) -external ffi.Pointer Image_decode( - ffi.Pointer data, - int length, +@ffi.Native, ffi.Pointer, ffi.Float)>(isLeaf: true) +external bool DebugRegistry_setProperty_float( + ffi.Pointer tDebugRegistry, ffi.Pointer name, - bool alpha, + double value, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Image_getBytes(ffi.Pointer tLinearImage); - -@ffi.Native)>(isLeaf: true) -external void Image_destroy(ffi.Pointer tLinearImage); +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_bool( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, +); -@ffi.Native)>(isLeaf: true) -external int Image_getWidth(ffi.Pointer tLinearImage); +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_int( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, +); -@ffi.Native)>(isLeaf: true) -external int Image_getHeight(ffi.Pointer tLinearImage); +@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external bool DebugRegistry_getProperty_float( + ffi.Pointer tDebugRegistry, + ffi.Pointer name, + ffi.Pointer outValue, +); -@ffi.Native)>(isLeaf: true) -external int Image_getChannels(ffi.Pointer tLinearImage); +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ) +>(isLeaf: true) +external ffi.Pointer MaterialProvider_createMaterialInstance( + ffi.Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderTarget_getColorTexture(ffi.Pointer tRenderTarget); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer VertexBufferBuilder_create(); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderTarget_getDepthTexture(ffi.Pointer tRenderTarget); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void VertexBufferBuilder_bufferCount(ffi.Pointer builder, int count); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer TextureSampler_create(); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external void VertexBufferBuilder_vertexCount(ffi.Pointer builder, int count); @ffi.Native< - ffi.Pointer Function( - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, + ffi.Void Function( + ffi.Pointer, ffi.UnsignedInt, + ffi.Uint8, ffi.UnsignedInt, + ffi.Uint32, + ffi.Uint8, ) >(isLeaf: true) -external ffi.Pointer TextureSampler_createWithFiltering( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, +external void VertexBufferBuilder_attribute( + ffi.Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, ); -@ffi.Native Function(ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external ffi.Pointer TextureSampler_createWithComparison(int compareMode, int compareFunc); +@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void VertexBufferBuilder_normalized(ffi.Pointer builder, int attribute, bool normalize); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setMinFilter(ffi.Pointer sampler, int filter); +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer VertexBufferBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, +); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setMagFilter(ffi.Pointer sampler, int filter); +@ffi.Native)>(isLeaf: true) +external void VertexBufferBuilder_destroy(ffi.Pointer builder); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeS(ffi.Pointer sampler, int mode); +@ffi.Native)>(isLeaf: true) +external int VertexBuffer_getVertexCount(ffi.Pointer buffer); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeT(ffi.Pointer sampler, int mode); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + ) +>(isLeaf: true) +external void VertexBuffer_setBufferAt( + ffi.Pointer engine, + ffi.Pointer buffer, + int bufferIndex, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, +); -@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setWrapModeR(ffi.Pointer sampler, int mode); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void VertexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); -@ffi.Native, ffi.Double)>(isLeaf: true) -external void TextureSampler_setAnisotropy(ffi.Pointer sampler, double anisotropy); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer IndexBufferBuilder_create(); -@ffi.Native, ffi.UnsignedInt, ffi.UnsignedInt)>(isLeaf: true) -external void TextureSampler_setCompareMode(ffi.Pointer sampler, int mode, int func); +@ffi.Native, ffi.Uint32)>(isLeaf: true) +external void IndexBufferBuilder_indexCount(ffi.Pointer builder, int count); -@ffi.Native)>(isLeaf: true) -external void TextureSampler_destroy(ffi.Pointer sampler); +@ffi.Native, ffi.UnsignedInt)>(isLeaf: true) +external void IndexBufferBuilder_bufferType(ffi.Pointer builder, int indexType); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>( - isLeaf: true, -) -external ffi.Pointer RenderTarget_create( - ffi.Pointer tEngine, - ffi.Pointer color, - ffi.Pointer depth, +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer IndexBufferBuilder_build( + ffi.Pointer builder, + ffi.Pointer engine, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void RenderTarget_destroy(ffi.Pointer tEngine, ffi.Pointer tRenderTarget); +@ffi.Native)>(isLeaf: true) +external void IndexBufferBuilder_destroy(ffi.Pointer builder); + +@ffi.Native)>(isLeaf: true) +external int IndexBuffer_getIndexCount(ffi.Pointer buffer); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size, ffi.Uint32) >(isLeaf: true) -external void Renderer_setClearOptions( - ffi.Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, -); - -@ffi.Native, ffi.Pointer, ffi.Uint64)>(isLeaf: true) -external bool Renderer_beginFrame( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - int frameTimeInNanos, +external void IndexBuffer_setBuffer( + ffi.Pointer engine, + ffi.Pointer buffer, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, ); -@ffi.Native)>(isLeaf: true) -external void Renderer_endFrame(ffi.Pointer tRenderer); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Renderer_render(ffi.Pointer tRenderer, ffi.Pointer tView); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void IndexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Renderer_renderStandaloneView(ffi.Pointer tRenderer, ffi.Pointer tView); +@ffi.Native, EntityId)>(isLeaf: true) +external double4x4 TransformManager_getLocalTransform(ffi.Pointer tTransformManager, int entityId); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer, - ffi.Size, - ) ->(isLeaf: true) -external void Renderer_readPixels( - ffi.Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - ffi.Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - ffi.Pointer out, - int outLength, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double4x4 TransformManager_getWorldTransform(ffi.Pointer tTransformManager, int entityId); -@ffi.Native, ffi.Float, ffi.Float, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void Renderer_setFrameInterval( - ffi.Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, +@ffi.Native, EntityId, double4x4)>(isLeaf: true) +external void TransformManager_setTransform( + ffi.Pointer tTransformManager, + int entityId, + double4x4 transform, ); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.UnsignedInt, - Aabb3, - ) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createFromBuffers( - ffi.Pointer tEngine, - ffi.Pointer tVertexBuffer, - ffi.Pointer tIndexBuffer, - ffi.Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, +@ffi.Native, EntityId, Aabb3)>(isLeaf: true) +external bool TransformManager_transformToUnitCube( + ffi.Pointer tTransformManager, + int entityId, Aabb3 boundingBox, ); -@ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createFromFilamentAsset( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tFilamentAsset, - bool rebuildVertices, +@ffi.Native, EntityId, EntityId, ffi.Bool)>(isLeaf: true) +external void TransformManager_setParent( + ffi.Pointer tTransformManager, + int child, + int parent, + bool preserveScaling, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getFilamentAsset(ffi.Pointer tSceneAsset); - -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getType(ffi.Pointer tSceneAsset); - -@ffi.Native)>(isLeaf: true) -external void SceneAsset_destroy(ffi.Pointer tSceneAsset); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_addToScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getParent(ffi.Pointer tTransformManager, int child); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_removeFromScene(ffi.Pointer tSceneAsset, ffi.Pointer tScene); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getAncestor(ffi.Pointer tTransformManager, int childEntityId); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getEntity(ffi.Pointer tSceneAsset); +@ffi.Native, EntityId)>(isLeaf: true) +external void TransformManager_createComponent(ffi.Pointer tTransformManager, int entity); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getChildEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native, EntityId)>(isLeaf: true) +external void TransformManager_removeComponent(ffi.Pointer tTransformManager, int entity); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_getChildEntities(ffi.Pointer tSceneAsset, ffi.Pointer out); +@ffi.Native, EntityId)>(isLeaf: true) +external bool TransformManager_hasComponent(ffi.Pointer tTransformManager, int entityId); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getCameraEntities(ffi.Pointer tSceneAsset); +@ffi.Native)>(isLeaf: true) +external bool TransformManager_empty(ffi.Pointer tTransformManager); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getCameraEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native)>(isLeaf: true) +external int TransformManager_getComponentCount(ffi.Pointer tTransformManager); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SceneAsset_getLightEntities(ffi.Pointer tSceneAsset); +@ffi.Native, EntityId)>(isLeaf: true) +external int TransformManager_getChildCount(ffi.Pointer tTransformManager, int entityId); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getLightEntityCount(ffi.Pointer tSceneAsset); +@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) +external void TransformManager_getChildren( + ffi.Pointer tTransformManager, + int entityId, + ffi.Pointer children, + int count, +); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getInstance(ffi.Pointer tSceneAsset, int index); +@ffi.Native)>(isLeaf: true) +external void TransformManager_openLocalTransformTransaction(ffi.Pointer tTransformManager); -@ffi.Native)>(isLeaf: true) -external int SceneAsset_getInstanceCount(ffi.Pointer tSceneAsset); +@ffi.Native)>(isLeaf: true) +external void TransformManager_commitLocalTransformTransaction(ffi.Pointer tTransformManager); -@ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer>, ffi.Int) ->(isLeaf: true) -external ffi.Pointer SceneAsset_createInstance( - ffi.Pointer asset, - ffi.Pointer> materialInstances, - int materialInstanceCount, +@ffi.Native, ffi.Pointer, ffi.UnsignedInt)>(isLeaf: true) +external int LightManager_createLight( + ffi.Pointer tEngine, + ffi.Pointer tLightManager, + int tLightTtype, ); -@ffi.Native)>(isLeaf: true) -external Aabb3 SceneAsset_getBoundingBox(ffi.Pointer asset); +@ffi.Native, EntityId)>(isLeaf: true) +external void LightManager_destroyLight(ffi.Pointer tLightManager, int entity); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getVertexBuffer( - ffi.Pointer tSceneAsset, - int primitiveIndex, -); +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_hasComponent(ffi.Pointer tLightManager, int entity); -@ffi.Native Function(ffi.Pointer, ffi.Int)>(isLeaf: true) -external ffi.Pointer SceneAsset_getIndexBuffer(ffi.Pointer tSceneAsset, int primitiveIndex); +@ffi.Native, EntityId)>(isLeaf: true) +external int LightManager_getType(ffi.Pointer tLightManager, int entity); -@ffi.Native, EntityId)>(isLeaf: true) -external int SceneAsset_getPrimitiveOffsetForEntity(ffi.Pointer tSceneAsset, int entity); +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isDirectional(ffi.Pointer tLightManager, int entity); -@ffi.Native)>(isLeaf: true) -external void SceneAsset_releaseSourceData(ffi.Pointer tSceneAsset); +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isPointLight(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void SceneAsset_setFlatShading(ffi.Pointer tSceneAsset, bool flatShading); +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isSpotLight(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void SceneAsset_getBones(ffi.Pointer tSceneAsset, int skinIndex, ffi.Pointer out); +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setPosition( + ffi.Pointer tLightManager, + int light, + double x, + double y, + double z, +); -@ffi.Native, ffi.Size)>(isLeaf: true) -external int SceneAsset_getBoneCount(ffi.Pointer tSceneAsset, int skinIndex); +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getPosition(ffi.Pointer tLightManager, int light); -@ffi.Native Function(ffi.Pointer, ffi.Size, ffi.Size)>(isLeaf: true) -external ffi.Pointer SceneAsset_getBoneName( - ffi.Pointer tSceneAsset, - int skinIndex, - int boneIndex, +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setDirection( + ffi.Pointer tLightManager, + int light, + double x, + double y, + double z, ); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer SurfaceOrientationBuilder_create(); +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getDirection(ffi.Pointer tLightManager, int light); -@ffi.Native, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_vertexCount(ffi.Pointer builder, int count); +@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setColor(ffi.Pointer tLightManager, int entity, double r, double g, double b); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_normals( - ffi.Pointer builder, - ffi.Pointer normals, - int stride, +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setColorTemperature( + ffi.Pointer tLightManager, + int entity, + double colorTemperature, ); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_tangents( - ffi.Pointer builder, - ffi.Pointer tangents, - int stride, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double3 LightManager_getColor(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_uvs( - ffi.Pointer builder, - ffi.Pointer uvs, - int stride, -); +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensity(ffi.Pointer tLightManager, int entity, double intensity); -@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_positions( - ffi.Pointer builder, - ffi.Pointer positions, - int stride, +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensityCandela(ffi.Pointer tLightManager, int entity, double intensity); + +@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setIntensityWatts( + ffi.Pointer tLightManager, + int entity, + double watts, + double efficiency, ); -@ffi.Native, ffi.Size)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangleCount(ffi.Pointer builder, int count); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getIntensity(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangles_uint( - ffi.Pointer builder, - ffi.Pointer triangles, -); +@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) +external void LightManager_setFalloff(ffi.Pointer tLightManager, int entity, double falloff); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void SurfaceOrientationBuilder_triangles_ushort( - ffi.Pointer builder, - ffi.Pointer triangles, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getFalloff(ffi.Pointer tLightManager, int entity); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer SurfaceOrientationBuilder_build( - ffi.Pointer builder, +@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) +external void LightManager_setSpotLightCone( + ffi.Pointer tLightManager, + int entity, + double inner, + double outer, ); -@ffi.Native)>(isLeaf: true) -external void SurfaceOrientationBuilder_destroy(ffi.Pointer builder); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSpotLightOuterCone(ffi.Pointer tLightManager, int entity); -@ffi.Native)>(isLeaf: true) -external int SurfaceOrientation_getVertexCount(ffi.Pointer orientation); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSpotLightInnerCone(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void SurfaceOrientation_getQuats_float4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunAngularRadius( + ffi.Pointer tLightManager, + int entity, + double angularRadius, ); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void SurfaceOrientation_getQuats_short4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, -); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunAngularRadius(ffi.Pointer tLightManager, int entity); -@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void SurfaceOrientation_getQuats_half4( - ffi.Pointer orientation, - ffi.Pointer out, - int quatCount, - int stride, -); +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunHaloSize(ffi.Pointer tLightManager, int entity, double haloSize); -@ffi.Native)>(isLeaf: true) -external void SurfaceOrientation_destroy(ffi.Pointer orientation); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunHaloSize(ffi.Pointer tLightManager, int entity); -@ffi.Native, EntityId)>(isLeaf: true) -external double4x4 TransformManager_getLocalTransform(ffi.Pointer tTransformManager, int entityId); +@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) +external void LightManager_setSunHaloFalloff(ffi.Pointer tLightManager, int entity, double haloFalloff); -@ffi.Native, EntityId)>(isLeaf: true) -external double4x4 TransformManager_getWorldTransform(ffi.Pointer tTransformManager, int entityId); +@ffi.Native, EntityId)>(isLeaf: true) +external double LightManager_getSunHaloFalloff(ffi.Pointer tLightManager, int entity); -@ffi.Native, EntityId, double4x4)>(isLeaf: true) -external void TransformManager_setTransform( - ffi.Pointer tTransformManager, - int entityId, - double4x4 transform, -); +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void LightManager_setShadowCaster(ffi.Pointer tLightManager, int entity, bool enabled); -@ffi.Native, EntityId, Aabb3)>(isLeaf: true) -external bool TransformManager_transformToUnitCube( - ffi.Pointer tTransformManager, - int entityId, - Aabb3 boundingBox, -); +@ffi.Native, EntityId)>(isLeaf: true) +external bool LightManager_isShadowCaster(ffi.Pointer tLightManager, int entity); -@ffi.Native, EntityId, EntityId, ffi.Bool)>(isLeaf: true) -external void TransformManager_setParent( - ffi.Pointer tTransformManager, - int child, - int parent, - bool preserveScaling, +@ffi.Native, EntityId, TShadowOptions)>(isLeaf: true) +external void LightManager_setShadowOptions( + ffi.Pointer tLightManager, + int entity, + TShadowOptions options, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getParent(ffi.Pointer tTransformManager, int child); - -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getAncestor(ffi.Pointer tTransformManager, int childEntityId); - -@ffi.Native, EntityId)>(isLeaf: true) -external void TransformManager_createComponent(ffi.Pointer tTransformManager, int entity); - -@ffi.Native, EntityId)>(isLeaf: true) -external void TransformManager_removeComponent(ffi.Pointer tTransformManager, int entity); +@ffi.Native, EntityId)>(isLeaf: true) +external TShadowOptions LightManager_getShadowOptions(ffi.Pointer tLightManager, int entity); -@ffi.Native, EntityId)>(isLeaf: true) -external bool TransformManager_hasComponent(ffi.Pointer tTransformManager, int entityId); +@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void LightManager_setLightChannel( + ffi.Pointer tLightManager, + int entity, + int channel, + bool enable, +); -@ffi.Native)>(isLeaf: true) -external bool TransformManager_empty(ffi.Pointer tTransformManager); +@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) +external bool LightManager_getLightChannel(ffi.Pointer tLightManager, int entity, int channel); -@ffi.Native)>(isLeaf: true) -external int TransformManager_getComponentCount(ffi.Pointer tTransformManager); +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void LightManager_computeUniformSplits(ffi.Pointer splitPositions, int cascades); -@ffi.Native, EntityId)>(isLeaf: true) -external int TransformManager_getChildCount(ffi.Pointer tTransformManager, int entityId); +@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float)>(isLeaf: true) +external void LightManager_computeLogSplits( + ffi.Pointer splitPositions, + int cascades, + double near, + double far, +); -@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) -external void TransformManager_getChildren( - ffi.Pointer tTransformManager, - int entityId, - ffi.Pointer children, - int count, +@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) +external void LightManager_computePracticalSplits( + ffi.Pointer splitPositions, + int cascades, + double near, + double far, + double lambda, ); -@ffi.Native)>(isLeaf: true) -external void TransformManager_openLocalTransformTransaction(ffi.Pointer tTransformManager); +@ffi.Native(isLeaf: true) +external double LightManager_rgbToColorTemperature(double r, double g, double b); -@ffi.Native)>(isLeaf: true) -external void TransformManager_commitLocalTransformTransaction(ffi.Pointer tTransformManager); +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer RenderThread_create(); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer VertexBufferBuilder_create(); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderThread_createForCanvas(ffi.Pointer canvasSelector); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void VertexBufferBuilder_bufferCount(ffi.Pointer builder, int count); +@ffi.Native)>(isLeaf: true) +external void RenderThread_destroy(ffi.Pointer renderThread); -@ffi.Native, ffi.Uint32)>(isLeaf: true) -external void VertexBufferBuilder_vertexCount(ffi.Pointer builder, int count); +@ffi.Native>)>(isLeaf: true) +external void RenderThread_addTask(ffi.Pointer> task); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.UnsignedInt, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, ffi.Uint8, - ffi.UnsignedInt, ffi.Uint32, - ffi.Uint8, + VoidCallback, ) >(isLeaf: true) -external void VertexBufferBuilder_attribute( - ffi.Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, +external void RenderManager_setRenderableRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + ffi.Pointer> tViews, + int numViews, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void VertexBufferBuilder_normalized(ffi.Pointer builder, int attribute, bool normalize); +@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderManager_renderRenderThread( + ffi.Pointer tRenderManager, + int frameTimeInNanos, + int requestId, + VoidCallback onComplete, +); -@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external ffi.Pointer VertexBufferBuilder_build( - ffi.Pointer builder, - ffi.Pointer engine, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_addAnimationManagerRenderThread( + ffi.Pointer tRenderManager, + ffi.Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external void VertexBufferBuilder_destroy(ffi.Pointer builder); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_removeAnimationManagerRenderThread( + ffi.Pointer tRenderManager, + ffi.Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, +); -@ffi.Native)>(isLeaf: true) -external int VertexBuffer_getVertexCount(ffi.Pointer buffer); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderManager_removeSwapChainRenderThread( + ffi.Pointer tRenderManager, + ffi.Pointer tSwapChain, + int requestId, + VoidCallback onComplete, +); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Uint32, + ffi.Pointer)>>, ) >(isLeaf: true) -external void VertexBuffer_setBufferAt( - ffi.Pointer engine, - ffi.Pointer buffer, - int bufferIndex, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, +external void AnimationManager_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void VertexBuffer_destroy(ffi.Pointer engine, ffi.Pointer buffer); - -@ffi.Native(isLeaf: true) -external void FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); - -@ffi.Native() -external void FrameScheduler_stop(); - -@ffi.Native)>(isLeaf: true) -external int FrameScheduler_initDartApi(ffi.Pointer data); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void AnimationManager_destroyRenderThread( + ffi.Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, +); -@ffi.Native(isLeaf: true) -external void FrameScheduler_startWithPort(int port, int targetFps); +@ffi.Native< + ffi.Void Function( + ffi.UnsignedInt, + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Bool, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_createRenderThread( + int backend, + ffi.Pointer platform, + ffi.Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + ffi.Pointer)>> onComplete, +); -@ffi.Native(isLeaf: true) -external void FrameScheduler_setTargetFps(int fps); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Engine_createRendererRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native(isLeaf: true) -external int FrameScheduler_steadyClockUs(); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyRendererRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tRenderer, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer, ffi.UnsignedInt)>(isLeaf: true) -external int LightManager_createLight( +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint64, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_createSwapChainRenderThread( ffi.Pointer tEngine, - ffi.Pointer tLightManager, - int tLightTtype, + ffi.Pointer window, + int flags, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external void LightManager_destroyLight(ffi.Pointer tLightManager, int entity); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint64, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_createHeadlessSwapChainRenderThread( + ffi.Pointer tEngine, + int width, + int height, + int flags, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_hasComponent(ffi.Pointer tLightManager, int entity); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + EntityId, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_createCameraRenderThread( + ffi.Pointer tEngine, + int entityId, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external int LightManager_getType(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyCameraRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tCamera, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isDirectional(ffi.Pointer tLightManager, int entity); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Engine_createViewRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isPointLight(ffi.Pointer tLightManager, int entity); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer materialData, + int length, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isSpotLight(ffi.Pointer tLightManager, int entity); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setPosition( - ffi.Pointer tLightManager, - int light, - double x, - double y, - double z, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySwapChainRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tSwapChain, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getPosition(ffi.Pointer tLightManager, int light); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyViewRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setDirection( - ffi.Pointer tLightManager, - int light, - double x, - double y, - double z, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySceneRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getDirection(ffi.Pointer tLightManager, int light); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyColorGradingRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tColorGrading, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setColor(ffi.Pointer tLightManager, int entity, double r, double g, double b); - -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setColorTemperature( - ffi.Pointer tLightManager, - int entity, - double colorTemperature, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tMaterial, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double3 LightManager_getColor(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensity(ffi.Pointer tLightManager, int entity, double intensity); - -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensityCandela(ffi.Pointer tLightManager, int entity, double intensity); - -@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setIntensityWatts( - ffi.Pointer tLightManager, - int entity, - double watts, - double efficiency, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void Engine_destroyMaterialInstanceRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tMaterialInstance, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getIntensity(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Double)>(isLeaf: true) -external void LightManager_setFalloff(ffi.Pointer tLightManager, int entity, double falloff); - -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getFalloff(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Double, ffi.Double)>(isLeaf: true) -external void LightManager_setSpotLightCone( - ffi.Pointer tLightManager, - int entity, - double inner, - double outer, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroySkyboxRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tSkybox, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSpotLightOuterCone(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSpotLightInnerCone(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunAngularRadius( - ffi.Pointer tLightManager, - int entity, - double angularRadius, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void Engine_destroyIndirectLightRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunAngularRadius(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunHaloSize(ffi.Pointer tLightManager, int entity, double haloSize); - -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunHaloSize(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Float)>(isLeaf: true) -external void LightManager_setSunHaloFalloff(ffi.Pointer tLightManager, int entity, double haloFalloff); - -@ffi.Native, EntityId)>(isLeaf: true) -external double LightManager_getSunHaloFalloff(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void LightManager_setShadowCaster(ffi.Pointer tLightManager, int entity, bool enabled); - -@ffi.Native, EntityId)>(isLeaf: true) -external bool LightManager_isShadowCaster(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, TShadowOptions)>(isLeaf: true) -external void LightManager_setShadowOptions( - ffi.Pointer tLightManager, - int entity, - TShadowOptions options, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint8, + ffi.Uint16, + ffi.IntPtr, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Texture_buildRenderThread( + ffi.Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import$, + int sampler, + int format, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external TShadowOptions LightManager_getShadowOptions(ffi.Pointer tLightManager, int entity); - -@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void LightManager_setLightChannel( - ffi.Pointer tLightManager, - int entity, - int channel, - bool enable, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback) +>(isLeaf: true) +external void Texture_setExternalImageRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + ffi.Pointer externalImage, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) -external bool LightManager_getLightChannel(ffi.Pointer tLightManager, int entity, int channel); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Texture_generateMipMapsRenderThread( + ffi.Pointer tTexture, + ffi.Pointer tEngine, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void LightManager_computeUniformSplits(ffi.Pointer splitPositions, int cascades); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + VoidCallback, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Ktx1Reader_createTextureRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBundle, + int requestId, + VoidCallback onTextureUploadComplete, + ffi.Pointer)>> onComplete, +); -@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float)>(isLeaf: true) -external void LightManager_computeLogSplits( - ffi.Pointer splitPositions, - int cascades, - double near, - double far, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Ktx2Reader_createTextureRenderThread( + ffi.Pointer tEngine, + ffi.Pointer data, + int size, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Uint8, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) -external void LightManager_computePracticalSplits( - ffi.Pointer splitPositions, - int cascades, - double near, - double far, - double lambda, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyTextureRenderThread( + ffi.Pointer engine, + ffi.Pointer tTexture, + int requestId, + VoidCallback onComplete, ); -@ffi.Native(isLeaf: true) -external double LightManager_rgbToColorTemperature(double r, double g, double b); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Engine_createFenceRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId)>(isLeaf: true) -external void RenderableManager_destroyEntity(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Fence_waitAndDestroyRenderThread(ffi.Pointer tFence, int requestId, VoidCallback onComplete); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_hasComponent(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_destroyFenceRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tFence, + int requestId, + VoidCallback onComplete, +); -@ffi.Native)>(isLeaf: true) -external bool RenderableManager_empty(ffi.Pointer tRenderableManager); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_flushAndWaitRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isRenderable(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Engine_executeRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); -@ffi.Native)>(isLeaf: true) -external int RenderableManager_getComponentCount(ffi.Pointer tRenderableManager); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Float, + ffi.Uint8, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildSkyboxRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tTexture, + bool showSun, + double intensity, + int priority, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId, ffi.Int, ffi.Pointer)>( - isLeaf: true, -) -external bool RenderableManager_setMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - ffi.Pointer tMaterialInstance, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Bool, + ffi.Float, + ffi.Uint8, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildColoredSkyboxRenderThread( + ffi.Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + ffi.Pointer)>> onComplete, ); -@ffi.Native Function(ffi.Pointer, EntityId, ffi.Int)>(isLeaf: true) -external ffi.Pointer RenderableManager_getMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Float, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildIndirectLightFromIrradianceTextureRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer tIrradianceTexture, + double intensity, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Int)>(isLeaf: true) -external void RenderableManager_clearMaterialInstanceAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Float, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tReflectionsTexture, + ffi.Pointer harmonics, + double intensity, + ffi.Pointer)>> onComplete, ); @ffi.Native< - ffi.Bool Function( - ffi.Pointer, - EntityId, - ffi.Int, + ffi.Void Function( + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, + ffi.Bool, + ffi.Bool, + ffi.Uint32, + VoidCallback, ) >(isLeaf: true) -external bool RenderableManager_setGeometryAtNonIndexed( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int type, - ffi.Pointer vertices, - int offset, - int count, -); - -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getPrimitiveCount(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getAxisAlignedBoundingBox( - ffi.Pointer tRenderableManager, - int entityId, +external void Renderer_setClearOptionsRenderThread( + ffi.Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, Aabb3)>(isLeaf: true) -external void RenderableManager_setAxisAlignedBoundingBox( - ffi.Pointer tRenderableManager, - int entityId, - Aabb3 aabb, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint64, + ffi.Pointer>, + ) +>(isLeaf: true) +external void Renderer_beginFrameRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + int frameTimeInNanos, + ffi.Pointer> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getAabb(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_endFrameRenderThread(ffi.Pointer tRenderer, int requestId, VoidCallback onComplete); -@ffi.Native, EntityId)>(isLeaf: true) -external Aabb3 RenderableManager_getBoundingBox(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_renderRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setLayerMask( - ffi.Pointer tRenderableManager, - int entityId, - int select, - int values, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Renderer_renderStandaloneViewRenderThread( + ffi.Pointer tRenderer, + ffi.Pointer tView, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getLayerMask(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Size, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void Renderer_readPixelsRenderThread( + ffi.Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + ffi.Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + ffi.Pointer out, + int outLength, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setVisibilityLayer( - ffi.Pointer tRenderableManager, - int entityId, - int layer, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Material_createInstanceRenderThread( + ffi.Pointer tMaterial, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setPriority( - ffi.Pointer tRenderableManager, - int entityId, - int priority, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + VoidCallback, + ) +>(isLeaf: true) +external void MaterialInstance_setParameterTextureRenderThread( + ffi.Pointer tMaterialInstance, + ffi.Pointer propertyName, + ffi.Pointer tTexture, + ffi.Pointer tSampler, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getPriority(ffi.Pointer tRenderableManager, int entityId); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createImageMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) -external void RenderableManager_setChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createGizmoMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setCulling( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createBoneOverlayMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_getCulling(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setFogEnabled( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createSilhouetteMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_getFogEnabled(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setLightChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, - bool enable, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createEdgeOutlineMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) -external bool RenderableManager_getLightChannel( - ffi.Pointer tRenderableManager, - int entityId, - int channel, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createWireframeMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setCastShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool castShadows, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void Material_createTranslationAxisMaterialRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isShadowCaster(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setReceiveShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool receiveShadows, +@ffi.Native)>>)>( + isLeaf: true, +) +external void ColorGradingBuilder_createRenderThread( + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external bool RenderableManager_isShadowReceiver(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setScreenSpaceContactShadows( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void ColorGradingBuilder_buildRenderThread( + ffi.Pointer tBuilder, + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Size, ffi.Uint16)>(isLeaf: true) -external void RenderableManager_setBlendOrderAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int order, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void ColorGradingBuilder_destroyRenderThread( + ffi.Pointer tBuilder, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, EntityId, ffi.Size, ffi.Bool)>(isLeaf: true) -external void RenderableManager_setGlobalBlendOrderEnabledAt( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - bool enabled, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createLinearRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setMorphWeights( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer weights, - int count, - int offset, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createACESRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId)>(isLeaf: true) -external int RenderableManager_getMorphTargetCount(ffi.Pointer tRenderableManager, int entityId); - -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setBonesFromMat4( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer transforms, - int boneCount, - int offset, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createACESLegacyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableManager_setBonesFromBone( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer bones, - int boneCount, - int offset, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createFilmicRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native Function(ffi.Size)>(isLeaf: true) -external ffi.Pointer RenderableBuilder_create(int primitiveCount); - -@ffi.Native)>(isLeaf: true) -external void RenderableBuilder_destroy(ffi.Pointer builder); - -@ffi.Native, Aabb3)>(isLeaf: true) -external void RenderableBuilder_boundingBox(ffi.Pointer builder, Aabb3 aabb); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createPBRNeutralRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_material( - ffi.Pointer builder, - int primitiveIndex, - ffi.Pointer materialInstance, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createAGXRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Uint8, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Size, + ffi.Pointer, + ffi.Int, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableBuilder_geometry( - ffi.Pointer builder, - int primitiveIndex, - int type, - ffi.Pointer vertices, - ffi.Pointer indices, - int offset, - int count, +external void ToneMapper_createAGXWithLookRenderThread( + ffi.Pointer tEngine, + int look, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, + ffi.Pointer, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Pointer)>>, ) >(isLeaf: true) -external void RenderableBuilder_geometryNonIndexed( - ffi.Pointer builder, - int primitiveIndex, - int type, - ffi.Pointer vertices, - int offset, - int count, +external void ToneMapper_createGenericRenderThread( + ffi.Pointer tEngine, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_priority(ffi.Pointer builder, int priority); - -@ffi.Native, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_channel(ffi.Pointer builder, int channel); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_culling(ffi.Pointer builder, bool enabled); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void ToneMapper_createDisplayRangeRenderThread( + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_castShadows(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void ToneMapper_destroyRenderThread( + ffi.Pointer tToneMapper, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_receiveShadows(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) +external void View_pickRenderThread(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_fog(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setColorGradingRenderThread( + ffi.Pointer tView, + ffi.Pointer tColorGrading, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_lightChannel(ffi.Pointer builder, int channel, bool enabled); +@ffi.Native, ffi.Bool, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setBloomRenderThread( + ffi.Pointer tView, + bool enabled, + double strength, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void RenderableBuilder_layerMask(ffi.Pointer builder, int select, int values); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setCameraRenderThread( + ffi.Pointer tView, + ffi.Pointer tCamera, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_screenSpaceContactShadows(ffi.Pointer builder, bool enabled); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) +>(isLeaf: true) +external void View_getNameRenderThread( + ffi.Pointer tView, + ffi.Pointer)>> onComplete, +); -@ffi.Native, ffi.Size, ffi.Uint16)>(isLeaf: true) -external void RenderableBuilder_blendOrder(ffi.Pointer builder, int primitiveIndex, int order); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setNameRenderThread( + ffi.Pointer tView, + ffi.Pointer name, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Size, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_globalBlendOrderEnabled( - ffi.Pointer builder, - int primitiveIndex, - bool enabled, +@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setViewportRenderThread( + ffi.Pointer tView, + int width, + int height, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Size)>(isLeaf: true) -external void RenderableBuilder_instances(ffi.Pointer builder, int instanceCount); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setRenderTargetRenderThread( + ffi.Pointer tView, + ffi.Pointer tRenderTarget, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_skinningFromMat4( - ffi.Pointer builder, - int boneCount, - ffi.Pointer transforms, +@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setAntiAliasingRenderThread( + ffi.Pointer tView, + bool msaa, + bool fxaa, + bool taa, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) -external void RenderableBuilder_skinningFromBone( - ffi.Pointer builder, - int boneCount, - ffi.Pointer bones, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setPostProcessingRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void RenderableBuilder_enableSkinningBuffers(ffi.Pointer builder, bool enabled); +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFrustumCullingEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Size, ffi.Pointer, ffi.Size, ffi.Size)>( - isLeaf: true, -) -external void RenderableBuilder_boneIndicesAndWeights( - ffi.Pointer builder, - int primitiveIndex, - ffi.Pointer indicesAndWeights, - int count, - int bonesPerVertex, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setStencilBufferEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) -external int RenderableBuilder_build(ffi.Pointer builder, ffi.Pointer engine, int entity); +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setDitheringEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) -external void Skybox_setColor(ffi.Pointer tSkybox, double r, double g, double b, double a); +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setRenderQualityRenderThread( + ffi.Pointer tView, + int qualityLevel, + int requestId, + VoidCallback onComplete, +); -/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). -@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) -external void Skybox_setLayerMask(ffi.Pointer tSkybox, int select, int values); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setSceneRenderThread( + ffi.Pointer tView, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, +); -/// Returns the visibility mask bits. -@ffi.Native)>(isLeaf: true) -external int Skybox_getLayerMask(ffi.Pointer tSkybox); +@ffi.Native, ffi.Int, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setLayerEnabledRenderThread( + ffi.Pointer tView, + int layer, + bool visible, + int requestId, + VoidCallback onComplete, +); -/// Returns the skybox intensity in lux. -@ffi.Native)>(isLeaf: true) -external double Skybox_getIntensity(ffi.Pointer tSkybox); +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setBlendModeRenderThread( + ffi.Pointer tView, + int blendMode, + int requestId, + VoidCallback onComplete, +); -/// Returns the environment texture, or nullptr for a color-only skybox. -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Skybox_getTexture(ffi.Pointer tSkybox); +@ffi.Native, TFogOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFogOptionsRenderThread( + ffi.Pointer tView, + TFogOptions tFogOptions, + int requestId, + VoidCallback onComplete, +); -@ffi.Native< - ffi.Pointer Function(ffi.UnsignedInt, ffi.Pointer, ffi.Pointer, ffi.Uint8, ffi.Bool) ->(isLeaf: true) -external ffi.Pointer Engine_create( - int backend, - ffi.Pointer platform, - ffi.Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, +@ffi.Native, TAmbientOcclusionOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setAmbientOcclusionOptionsRenderThread( + ffi.Pointer tView, + TAmbientOcclusionOptions options, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>(isLeaf: true) -external int Engine_getSupportedFeatureLevel(ffi.Pointer tEngine); +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setFrontFaceWindingInvertedRenderThread( + ffi.Pointer tView, + bool inverted, + int requestId, + VoidCallback onComplete, +); -@ffi.Native)>(isLeaf: true) -external void Engine_destroy(ffi.Pointer tEngine); +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setShadowsEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, +); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createRenderer(ffi.Pointer tEngine); +@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setShadowTypeRenderThread( + ffi.Pointer tView, + int shadowType, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyRenderer(ffi.Pointer tEngine, ffi.Pointer tRenderer); +@ffi.Native, TSoftShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setSoftShadowOptionsRenderThread( + ffi.Pointer tView, + TSoftShadowOptions options, + int requestId, + VoidCallback onComplete, +); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Uint64)>(isLeaf: true) -external ffi.Pointer Engine_createSwapChain( - ffi.Pointer tEngine, - ffi.Pointer window, - int flags, +@ffi.Native, TVsmShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setVsmShadowOptionsRenderThread( + ffi.Pointer tView, + TVsmShadowOptions options, + int requestId, + VoidCallback onComplete, ); -@ffi.Native Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Uint64)>(isLeaf: true) -external ffi.Pointer Engine_createHeadlessSwapChain( - ffi.Pointer tEngine, - int width, - int height, - int flags, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void View_setTransparentPickingEnabledRenderThread( + ffi.Pointer tView, + bool enabled, + int requestId, + VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroySwapChain(ffi.Pointer tEngine, ffi.Pointer tSwapChain); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_destroyRenderThread( + ffi.Pointer tSceneAsset, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyView(ffi.Pointer tEngine, ffi.Pointer tView); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyScene(ffi.Pointer tEngine, ffi.Pointer tScene); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyColorGrading(ffi.Pointer tEngine, ffi.Pointer tColorGrading); - -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer Engine_createCamera(ffi.Pointer tEngine, int entityId); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyCamera(ffi.Pointer tEngine, ffi.Pointer tCamera); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createView(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer, EntityId)>(isLeaf: true) -external ffi.Pointer Engine_getCameraComponent(ffi.Pointer tEngine, int entityId); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getTransformManager(ffi.Pointer engine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getRenderableManager(ffi.Pointer engine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getLightManager(ffi.Pointer engine); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getEntityManager(ffi.Pointer engine); - -@ffi.Native, ffi.Bool)>(isLeaf: true) -external void Engine_setAutomaticInstancingEnabled(ffi.Pointer tEngine, bool enabled); - -@ffi.Native)>(isLeaf: true) -external int Engine_getMaxAutomaticInstances(ffi.Pointer tEngine); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyTexture(ffi.Pointer tEngine, ffi.Pointer tTexture); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createFence(ffi.Pointer tEngine); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyFence(ffi.Pointer tEngine, ffi.Pointer tFence); - -@ffi.Native)>(isLeaf: true) -external void Engine_flushAndWait(ffi.Pointer tEngine); - -@ffi.Native)>(isLeaf: true) -external void Engine_execute(ffi.Pointer tEngine); - -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Size)>(isLeaf: true) -external ffi.Pointer Engine_buildMaterial( - ffi.Pointer tEngine, - ffi.Pointer materialData, - int length, -); - -/// Compiles .mat [matSource] ([length] bytes, not necessarily -/// NUL-terminated) into a filamat package, synchronously on the calling -/// thread. #include directives must already be resolved by the caller (the -/// Dart layer flattens them). -/// -/// [platform]/[targetApi]/[optimization] select the compilation targets; -/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the -/// engine's backend. -/// -/// [definesJson] is either nullptr or a flat JSON object of preprocessor -/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic -/// backslash escapes are supported. -/// -/// [embedSource] controls whether the .mat source is embedded in the -/// package (matc's no-embed-source flag). -/// -/// On success returns a malloc'd buffer of *outSize bytes that the caller -/// must release with [Engine_freeCompiledMaterial]. On failure returns -/// nullptr and writes a NUL-terminated message into [outError] (capacity -/// [outErrorCap]). @ffi.Native< - ffi.Pointer Function( + ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>, ) >(isLeaf: true) -external ffi.Pointer Engine_compileMaterial( +external void SceneAsset_createFromFilamentAssetRenderThread( ffi.Pointer tEngine, - ffi.Pointer matSource, - int length, - int platform, - int targetApi, - int optimization, - ffi.Pointer definesJson, - int embedSource, - ffi.Pointer outError, - int outErrorCap, - ffi.Pointer outSize, + ffi.Pointer tAssetLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tFilamentAsset, + bool rebuildVertices, + ffi.Pointer)>> onComplete, ); -/// Releases a buffer returned by [Engine_compileMaterial]. -@ffi.Native)>(isLeaf: true) -external void Engine_freeCompiledMaterial(ffi.Pointer data); - -/// As [Engine_compileMaterial], but the work runs on the engine's render -/// thread. The task writes the malloc'd package to *[outData] and its size to -/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on -/// failure with the message in [outError], then invokes [onComplete] with -/// [requestId]. @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.UnsignedInt, - ffi.UnsignedInt, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Int, ffi.UnsignedInt, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Pointer>, - ffi.Pointer, - ffi.Uint32, - ffi.Pointer>, + Aabb3, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Engine_compileMaterialRenderThread( +external void SceneAsset_createFromBuffersRenderThread( ffi.Pointer tEngine, - ffi.Pointer matSource, - int length, - int platform, - int targetApi, - int optimization, - ffi.Pointer definesJson, - int embedSource, - ffi.Pointer outError, - int outErrorCap, - ffi.Pointer> outData, - ffi.Pointer outSize, - int requestId, - ffi.Pointer> onComplete, + ffi.Pointer tVertexBuffer, + ffi.Pointer tIndexBuffer, + ffi.Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, + ffi.Pointer)>> callback, ); -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyMaterial(ffi.Pointer tEngine, ffi.Pointer tMaterial); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyMaterialInstance( - ffi.Pointer tEngine, - ffi.Pointer tMaterialInstance, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer>, + ffi.Int, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void SceneAsset_createInstanceRenderThread( + ffi.Pointer asset, + ffi.Pointer> tMaterialInstances, + int materialInstanceCount, + ffi.Pointer)>> callback, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_createScene(ffi.Pointer tEngine); +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_releaseSourceDataRenderThread( + ffi.Pointer tSceneAsset, + int requestId, + VoidCallback onComplete, +); -@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Bool, ffi.Float, ffi.Uint8)>( - isLeaf: true, -) -external ffi.Pointer Engine_buildSkybox( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - bool showSun, - double intensity, - int priority, +@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_setFlatShadingRenderThread( + ffi.Pointer tSceneAsset, + bool flatShading, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Pointer Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, + ffi.Void Function( + ffi.Pointer, ffi.Bool, - ffi.Float, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Uint8, + ffi.Uint8, ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Pointer)>>, ) >(isLeaf: true) -external ffi.Pointer Engine_buildColoredSkybox( - ffi.Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, -); - -@ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) ->(isLeaf: true) -external ffi.Pointer Engine_buildIndirectLightFromIrradianceTexture( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer tIrradianceTexture, - double intensity, -); - -@ffi.Native< - ffi.Pointer Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Float) ->(isLeaf: true) -external ffi.Pointer Engine_buildIndirectLightFromIrradianceHarmonics( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer irradianceHarmonics, - double intensity, -); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroySkybox(ffi.Pointer tEngine, ffi.Pointer tSkybox); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external void Engine_destroyIndirectLight(ffi.Pointer tEngine, ffi.Pointer tIndirectLight); - -@ffi.Native)>(isLeaf: true) -external int EntityManager_createEntity(ffi.Pointer tEntityManager); - -@ffi.Native, EntityId)>(isLeaf: true) -external void EntityManager_destroyEntity(ffi.Pointer tEntityManager, int entityId); - -@ffi.Native)>(isLeaf: true) -external void Fence_waitAndDestroy(ffi.Pointer tFence); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_getDebugRegistry(ffi.Pointer tEngine); - -@ffi.Native, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_hasProperty(ffi.Pointer tDebugRegistry, ffi.Pointer name); - -@ffi.Native, ffi.Pointer, ffi.Bool)>(isLeaf: true) -external bool DebugRegistry_setProperty_bool( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - bool value, -); - -@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) -external bool DebugRegistry_setProperty_int( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - int value, -); - -@ffi.Native, ffi.Pointer, ffi.Float)>(isLeaf: true) -external bool DebugRegistry_setProperty_float( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - double value, -); - -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_bool( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, -); - -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_int( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, +external void MaterialProvider_createMaterialInstanceRenderThread( + ffi.Pointer tMaterialProvider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, + ffi.Pointer)>> callback, ); -@ffi.Native, ffi.Pointer, ffi.Pointer)>(isLeaf: true) -external bool DebugRegistry_getProperty_float( - ffi.Pointer tDebugRegistry, - ffi.Pointer name, - ffi.Pointer outValue, +@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void AnimationManager_updateRenderThread( + ffi.Pointer tAnimationManager, + int frameTimeInNanos, + int requestId, + VoidCallback onComplete, ); -@ffi.Native Function()>(isLeaf: true) -external ffi.Pointer RenderThread_create(); - -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer RenderThread_createForCanvas(ffi.Pointer canvasSelector); - -@ffi.Native)>(isLeaf: true) -external void RenderThread_destroy(ffi.Pointer renderThread); - -@ffi.Native>)>(isLeaf: true) -external void RenderThread_addTask(ffi.Pointer> task); - @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Uint8, + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Float, ffi.Uint32, VoidCallback, ) >(isLeaf: true) -external void RenderManager_setRenderableRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - ffi.Pointer> tViews, - int numViews, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderManager_renderRenderThread( - ffi.Pointer tRenderManager, - int frameTimeInNanos, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderManager_addAnimationManagerRenderThread( - ffi.Pointer tRenderManager, - ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderManager_removeAnimationManagerRenderThread( - ffi.Pointer tRenderManager, +external void AnimationManager_setGltfAnimationTimeRenderThread( ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderManager_removeSwapChainRenderThread( - ffi.Pointer tRenderManager, - ffi.Pointer tSwapChain, + ffi.Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, ) >(isLeaf: true) -external void AnimationManager_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void AnimationManager_destroyRenderThread( +external void AnimationManager_updateBoneMatricesRenderThread( ffi.Pointer tAnimationManager, - int requestId, - VoidCallback onComplete, + ffi.Pointer sceneAsset, + ffi.Pointer> callback, ); @ffi.Native< ffi.Void Function( - ffi.UnsignedInt, - ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Bool, - ffi.Pointer)>>, + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Int, + ffi.Pointer>, ) >(isLeaf: true) -external void Engine_createRenderThread( - int backend, - ffi.Pointer platform, - ffi.Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - ffi.Pointer)>> onComplete, +external void AnimationManager_setMorphTargetWeightsRenderThread( + ffi.Pointer tAnimationManager, + int entityId, + ffi.Pointer morphData, + int numWeights, + ffi.Pointer> callback, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Void Function( + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void Engine_createRendererRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void Image_createEmptyRenderThread( + int width, + int height, + int channel, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyRendererRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tRenderer, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Size, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Image_decodeRenderThread( + ffi.Pointer data, + int length, + ffi.Pointer name, + bool alpha, + ffi.Pointer)>> onComplete, +); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void Image_getBytesRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer)>> onComplete, +); + +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Image_destroyRenderThread(ffi.Pointer tLinearImage, int requestId, VoidCallback onComplete); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getWidthRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, +); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getHeightRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, +); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void Image_getChannelsRenderThread( + ffi.Pointer tLinearImage, + ffi.Pointer> onComplete, ); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Uint64, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Int, + ffi.Pointer>, ) >(isLeaf: true) -external void Engine_createSwapChainRenderThread( +external void Texture_loadImageRenderThread( ffi.Pointer tEngine, - ffi.Pointer window, - int flags, - ffi.Pointer)>> onComplete, + ffi.Pointer tTexture, + ffi.Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, + ffi.Pointer> onComplete, ); @ffi.Native< ffi.Void Function( ffi.Pointer, + ffi.Pointer, + ffi.Uint32, + ffi.Pointer, + ffi.Size, ffi.Uint32, ffi.Uint32, - ffi.Uint64, - ffi.Pointer)>>, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer>, ) >(isLeaf: true) -external void Engine_createHeadlessSwapChainRenderThread( +external void Texture_setImageRenderThread( ffi.Pointer tEngine, + ffi.Pointer tTexture, + int level, + ffi.Pointer data, + int size, + int x_offset, + int y_offset, + int z_offset, int width, int height, - int flags, - ffi.Pointer)>> onComplete, + int depth, + int bufferFormat, + int pixelDataType, + ffi.Pointer> onComplete, +); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) +>(isLeaf: true) +external void RenderTarget_getColorTextureRenderThread( + ffi.Pointer tRenderTarget, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( ffi.Pointer, - EntityId, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Engine_createCameraRenderThread( +external void RenderTarget_createRenderThread( ffi.Pointer tEngine, - int entityId, - ffi.Pointer)>> onComplete, + ffi.Pointer color, + ffi.Pointer depth, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyCameraRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderTarget_destroyRenderThread( ffi.Pointer tEngine, - ffi.Pointer tCamera, + ffi.Pointer tRenderTarget, int requestId, VoidCallback onComplete, ); +@ffi.Native)>>)>( + isLeaf: true, +) +external void TextureSampler_createRenderThread( + ffi.Pointer)>> onComplete, +); + @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Void Function( + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void Engine_createViewRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void TextureSampler_createWithFilteringRenderThread( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, + ffi.Pointer)>> onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Pointer)>>, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Engine_buildMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer materialData, - int length, - ffi.Pointer)>> onComplete, +external void TextureSampler_createWithComparisonRenderThread( + int compareMode, + int compareFunc, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setMinFilterRenderThread( + ffi.Pointer sampler, + int filter, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySwapChainRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tSwapChain, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setMagFilterRenderThread( + ffi.Pointer sampler, + int filter, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyViewRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tView, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeSRenderThread( + ffi.Pointer sampler, + int mode, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySceneRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tScene, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeTRenderThread( + ffi.Pointer sampler, + int mode, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyColorGradingRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tColorGrading, +@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setWrapModeRRenderThread( + ffi.Pointer sampler, + int mode, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tMaterial, +@ffi.Native, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_setAnisotropyRenderThread( + ffi.Pointer sampler, + double anisotropy, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void Engine_destroyMaterialInstanceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tMaterialInstance, +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.UnsignedInt, ffi.UnsignedInt, ffi.Uint32, VoidCallback) +>(isLeaf: true) +external void TextureSampler_setCompareModeRenderThread( + ffi.Pointer sampler, + int mode, + int func, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroySkyboxRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tSkybox, +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TextureSampler_destroyRenderThread( + ffi.Pointer sampler, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( isLeaf: true, ) -external void Engine_destroyIndirectLightRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tIndirectLight, +external void AnimationManager_resetToRestPoseRenderThread( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, int requestId, VoidCallback onComplete, ); @@ -3041,1666 +3279,1410 @@ external void Engine_destroyIndirectLightRenderThread( @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint8, - ffi.Uint16, - ffi.IntPtr, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Texture_buildRenderThread( - ffi.Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import$, - int sampler, - int format, - ffi.Pointer)>> onComplete, +external void GltfAssetLoader_createRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tMaterialProvider, + ffi.Pointer tNameComponentManager, + ffi.Pointer)>> callback, +); + +@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void GltfAssetLoader_destroyRenderThread( + ffi.Pointer tAssetLoader, + int requestId, + VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Uint32, VoidCallback) + ffi.Void Function( + ffi.Pointer, + ffi.Pointer)>>, + ) >(isLeaf: true) -external void Texture_setExternalImageRenderThread( +external void GltfResourceLoader_createRenderThread( ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer externalImage, - int requestId, - VoidCallback onComplete, + ffi.Pointer)>> callback, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Texture_generateMipMapsRenderThread( - ffi.Pointer tTexture, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void GltfResourceLoader_destroyRenderThread( ffi.Pointer tEngine, + ffi.Pointer tResourceLoader, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ) +>(isLeaf: true) +external void GltfResourceLoader_loadResourcesRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, + ffi.Pointer> callback, +); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Size, ffi.Uint32, VoidCallback, - ffi.Pointer)>>, ) >(isLeaf: true) -external void Ktx1Reader_createTextureRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBundle, +external void GltfResourceLoader_addResourceDataRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer uri, + ffi.Pointer data, + int length, int requestId, - VoidCallback onTextureUploadComplete, - ffi.Pointer)>> onComplete, + VoidCallback onComplete, +); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ) +>(isLeaf: true) +external void GltfResourceLoader_asyncBeginLoadRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, + ffi.Pointer> callback, +); + +@ffi.Native)>(isLeaf: true) +external void GltfResourceLoader_asyncUpdateLoadRenderThread(ffi.Pointer tGltfResourceLoader); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer>) +>(isLeaf: true) +external void GltfResourceLoader_asyncGetLoadProgressRenderThread( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer> callback, ); @ffi.Native< ffi.Void Function( ffi.Pointer, + ffi.Pointer, ffi.Pointer, ffi.Size, - ffi.Pointer)>>, + ffi.Uint32, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Ktx2Reader_createTextureRenderThread( +external void GltfAssetLoader_loadRenderThread( ffi.Pointer tEngine, + ffi.Pointer tAssetLoader, ffi.Pointer data, - int size, - ffi.Pointer)>> onComplete, + int length, + int numInstances, + ffi.Pointer)>> callback, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyTextureRenderThread( - ffi.Pointer engine, - ffi.Pointer tTexture, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_addFilamentAssetRenderThread( + ffi.Pointer tScene, + ffi.Pointer tAsset, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Void Function(ffi.Pointer, ffi.Pointer>) >(isLeaf: true) -external void Engine_createFenceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void FilamentAsset_getWireframeRenderThread( + ffi.Pointer tFilamentAsset, + ffi.Pointer> onComplete, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Fence_waitAndDestroyRenderThread(ffi.Pointer tFence, int requestId, VoidCallback onComplete); +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_addEntityRenderThread( + ffi.Pointer tScene, + int entityId, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_destroyFenceRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tFence, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_removeEntityRenderThread( + ffi.Pointer tScene, + int entityId, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_flushAndWaitRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_addToSceneRenderThread( + ffi.Pointer tSceneAsset, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, +); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Engine_executeRenderThread(ffi.Pointer tEngine, int requestId, VoidCallback onComplete); +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void SceneAsset_removeFromSceneRenderThread( + ffi.Pointer tSceneAsset, + ffi.Pointer tScene, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_setSkyboxRenderThread( + ffi.Pointer tScene, + ffi.Pointer tSkybox, + int requestId, + VoidCallback onComplete, +); + +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void Scene_setIndirectLightRenderThread( + ffi.Pointer tScene, + ffi.Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, +); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ffi.Float, - ffi.Uint8, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedInt, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Engine_buildSkyboxRenderThread( +external void Gizmo_createRenderThread( ffi.Pointer tEngine, - ffi.Pointer tTexture, - bool showSun, - double intensity, - int priority, - ffi.Pointer)>> onComplete, + ffi.Pointer tAssetLoader, + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tNameComponentManager, + ffi.Pointer tView, + ffi.Pointer tMaterial, + int tGizmoType, + ffi.Pointer)>> callback, ); @ffi.Native< ffi.Void Function( + ffi.Pointer, ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Bool, - ffi.Float, - ffi.Uint8, - ffi.Pointer)>>, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Engine_buildColoredSkyboxRenderThread( +external void VertexBufferBuilder_buildRenderThread( + ffi.Pointer tBuilder, ffi.Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - ffi.Pointer)>> onComplete, + ffi.Pointer)>> onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Float, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildIndirectLightFromIrradianceTextureRenderThread( +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void VertexBuffer_destroyRenderThread( ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer tIrradianceTexture, - double intensity, - ffi.Pointer)>> onComplete, + ffi.Pointer tBuffer, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Float, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tReflectionsTexture, - ffi.Pointer harmonics, - double intensity, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Double, - ffi.Double, - ffi.Double, - ffi.Double, + ffi.Pointer, ffi.Uint8, - ffi.Bool, - ffi.Bool, + ffi.Pointer, + ffi.Size, + ffi.Uint32, ffi.Uint32, VoidCallback, ) >(isLeaf: true) -external void Renderer_setClearOptionsRenderThread( - ffi.Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, +external void VertexBuffer_setBufferAtRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, + int bufferIndex, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint64, - ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>, ) >(isLeaf: true) -external void Renderer_beginFrameRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tSwapChain, - int frameTimeInNanos, - ffi.Pointer> onComplete, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_endFrameRenderThread(ffi.Pointer tRenderer, int requestId, VoidCallback onComplete); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_renderRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tView, - int requestId, - VoidCallback onComplete, +external void IndexBufferBuilder_buildRenderThread( + ffi.Pointer tBuilder, + ffi.Pointer tEngine, + ffi.Pointer)>> onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Renderer_renderStandaloneViewRenderThread( - ffi.Pointer tRenderer, - ffi.Pointer tView, +@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void IndexBuffer_destroyRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, ffi.Size, ffi.Uint32, + ffi.Uint32, VoidCallback, ) >(isLeaf: true) -external void Renderer_readPixelsRenderThread( - ffi.Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - ffi.Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - ffi.Pointer out, - int outLength, +external void IndexBuffer_setBufferRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tBuffer, + ffi.Pointer data, + int sizeInBytes, + int byteOffset, int requestId, VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Material_createInstanceRenderThread( - ffi.Pointer tMaterial, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - VoidCallback, + ffi.Pointer, + ffi.Pointer, + EntityId, + ffi.Pointer>, ) >(isLeaf: true) -external void MaterialInstance_setParameterTextureRenderThread( - ffi.Pointer tMaterialInstance, - ffi.Pointer propertyName, - ffi.Pointer tTexture, - ffi.Pointer tSampler, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createImageMaterialRenderThread( +external void RenderableBuilder_buildRenderThread( + ffi.Pointer tBuilder, ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, + int entityId, + ffi.Pointer> onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Void Function(ffi.Pointer, ffi.Pointer>) >(isLeaf: true) -external void Material_createGizmoMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void EntityManager_createEntityRenderThread( + ffi.Pointer tEntityManager, + ffi.Pointer> onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createBoneOverlayMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void EntityManager_destroyEntityRenderThread( + ffi.Pointer tEntityManager, + int entityId, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createSilhouetteMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, double4x4, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void TransformManager_setTransformRenderThread( + ffi.Pointer tTransformManager, + int entityId, + double4x4 transform, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createEdgeOutlineMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void TransformManager_setParentRenderThread( + ffi.Pointer tTransformManager, + int child, + int parent, + bool preserveScaling, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createWireframeMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TransformManager_createComponentRenderThread( + ffi.Pointer tTransformManager, + int entityId, + int requestId, + VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void Material_createTranslationAxisMaterialRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void TransformManager_removeComponentRenderThread( + ffi.Pointer tTransformManager, + int entityId, + int requestId, + VoidCallback onComplete, ); -@ffi.Native)>>)>( - isLeaf: true, -) -external void ColorGradingBuilder_createRenderThread( - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void RenderableManager_destroyEntityRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Uint32, + VoidCallback, ) >(isLeaf: true) -external void ColorGradingBuilder_buildRenderThread( - ffi.Pointer tBuilder, - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void ColorGradingBuilder_destroyRenderThread( - ffi.Pointer tBuilder, +external void RenderableManager_setBonesFromMat4RenderThread( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer transforms, + int boneCount, + int offset, int requestId, VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createLinearRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createACESRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createACESLegacyRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createFilmicRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createPBRNeutralRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createAGXRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, -); - @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Int, - ffi.Pointer)>>, + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Uint32, + VoidCallback, ) >(isLeaf: true) -external void ToneMapper_createAGXWithLookRenderThread( - ffi.Pointer tEngine, - int look, - ffi.Pointer)>> onComplete, +external void RenderableManager_setBonesFromBoneRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer bones, + int boneCount, + int offset, + int requestId, + VoidCallback onComplete, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Float, - ffi.Pointer)>>, + ffi.Pointer, + EntityId, + ffi.Int, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, + ffi.Pointer>, ) >(isLeaf: true) -external void ToneMapper_createGenericRenderThread( - ffi.Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, - ffi.Pointer)>> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) ->(isLeaf: true) -external void ToneMapper_createDisplayRangeRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void RenderableManager_setGeometryAtNonIndexedRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int type, + ffi.Pointer tVertices, + int offset, + int count, + ffi.Pointer> callback, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void ToneMapper_destroyRenderThread( - ffi.Pointer tToneMapper, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderableManager_setCastShadowsRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) -external void View_pickRenderThread(ffi.Pointer tView, int requestId, int x, int y, PickCallback callback); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setColorGradingRenderThread( - ffi.Pointer tView, - ffi.Pointer tColorGrading, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void RenderableManager_setReceiveShadowsRenderThread( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Bool, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setBloomRenderThread( - ffi.Pointer tView, +@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) +external void LightManager_setShadowCasterRenderThread( + ffi.Pointer tLightManager, + int entityId, bool enabled, - double strength, int requestId, VoidCallback onComplete, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setCameraRenderThread( - ffi.Pointer tView, - ffi.Pointer tCamera, +@ffi.Native, EntityId, TShadowOptions, ffi.Uint32, VoidCallback)>( + isLeaf: true, +) +external void LightManager_setShadowOptionsRenderThread( + ffi.Pointer tLightManager, + int entityId, + TShadowOptions options, int requestId, VoidCallback onComplete, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer)>>) + ffi.Void Function( + ffi.Pointer, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Double, + ffi.Uint8, + ffi.Bool, + ffi.Bool, + ) >(isLeaf: true) -external void View_getNameRenderThread( - ffi.Pointer tView, - ffi.Pointer)>> onComplete, +external void Renderer_setClearOptions( + ffi.Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setNameRenderThread( - ffi.Pointer tView, - ffi.Pointer name, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Uint64)>(isLeaf: true) +external bool Renderer_beginFrame( + ffi.Pointer tRenderer, + ffi.Pointer tSwapChain, + int frameTimeInNanos, ); -@ffi.Native, ffi.Uint32, ffi.Uint32, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setViewportRenderThread( - ffi.Pointer tView, +@ffi.Native)>(isLeaf: true) +external void Renderer_endFrame(ffi.Pointer tRenderer); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Renderer_render(ffi.Pointer tRenderer, ffi.Pointer tView); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void Renderer_renderStandaloneView(ffi.Pointer tRenderer, ffi.Pointer tView); + +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Uint32, + ffi.Pointer, + ffi.UnsignedInt, + ffi.UnsignedInt, + ffi.Pointer, + ffi.Size, + ) +>(isLeaf: true) +external void Renderer_readPixels( + ffi.Pointer tRenderer, int width, int height, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setRenderTargetRenderThread( - ffi.Pointer tView, + int xOffset, + int yOffset, ffi.Pointer tRenderTarget, - int requestId, - VoidCallback onComplete, + int tPixelBufferFormat, + int tPixelDataType, + ffi.Pointer out, + int outLength, ); -@ffi.Native, ffi.Bool, ffi.Bool, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setAntiAliasingRenderThread( - ffi.Pointer tView, - bool msaa, - bool fxaa, - bool taa, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Float, ffi.Float, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void Renderer_setFrameInterval( + ffi.Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setPostProcessingRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>( + isLeaf: true, +) +external ffi.Pointer RenderTarget_create( + ffi.Pointer tEngine, + ffi.Pointer color, + ffi.Pointer depth, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFrustumCullingEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderTarget_destroy(ffi.Pointer tEngine, ffi.Pointer tRenderTarget); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setStencilBufferEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) +external void Skybox_setColor(ffi.Pointer tSkybox, double r, double g, double b, double a); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setDitheringEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, -); +/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). +@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void Skybox_setLayerMask(ffi.Pointer tSkybox, int select, int values); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setRenderQualityRenderThread( - ffi.Pointer tView, - int qualityLevel, - int requestId, - VoidCallback onComplete, -); +/// Returns the visibility mask bits. +@ffi.Native)>(isLeaf: true) +external int Skybox_getLayerMask(ffi.Pointer tSkybox); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setSceneRenderThread( - ffi.Pointer tView, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, -); +/// Returns the skybox intensity in lux. +@ffi.Native)>(isLeaf: true) +external double Skybox_getIntensity(ffi.Pointer tSkybox); -@ffi.Native, ffi.Int, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setLayerEnabledRenderThread( - ffi.Pointer tView, - int layer, - bool visible, - int requestId, - VoidCallback onComplete, -); +/// Returns the environment texture, or nullptr for a color-only skybox. +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer Skybox_getTexture(ffi.Pointer tSkybox); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setBlendModeRenderThread( - ffi.Pointer tView, - int blendMode, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external void RenderableManager_destroyEntity(ffi.Pointer tRenderableManager, int entityId); -@ffi.Native, TFogOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFogOptionsRenderThread( - ffi.Pointer tView, - TFogOptions tFogOptions, - int requestId, - VoidCallback onComplete, -); +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_hasComponent(ffi.Pointer tRenderableManager, int entityId); -@ffi.Native, TAmbientOcclusionOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setAmbientOcclusionOptionsRenderThread( - ffi.Pointer tView, - TAmbientOcclusionOptions options, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external bool RenderableManager_empty(ffi.Pointer tRenderableManager); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setFrontFaceWindingInvertedRenderThread( - ffi.Pointer tView, - bool inverted, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isRenderable(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native)>(isLeaf: true) +external int RenderableManager_getComponentCount(ffi.Pointer tRenderableManager); + +@ffi.Native, EntityId, ffi.Int, ffi.Pointer)>( + isLeaf: true, +) +external bool RenderableManager_setMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + ffi.Pointer tMaterialInstance, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setShadowsEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer, EntityId, ffi.Int)>(isLeaf: true) +external ffi.Pointer RenderableManager_getMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, ); -@ffi.Native, ffi.Int, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setShadowTypeRenderThread( - ffi.Pointer tView, - int shadowType, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Int)>(isLeaf: true) +external void RenderableManager_clearMaterialInstanceAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, ); -@ffi.Native, TSoftShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setSoftShadowOptionsRenderThread( - ffi.Pointer tView, - TSoftShadowOptions options, - int requestId, - VoidCallback onComplete, +@ffi.Native< + ffi.Bool Function( + ffi.Pointer, + EntityId, + ffi.Int, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, + ) +>(isLeaf: true) +external bool RenderableManager_setGeometryAtNonIndexed( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int type, + ffi.Pointer vertices, + int offset, + int count, ); -@ffi.Native, TVsmShadowOptions, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setVsmShadowOptionsRenderThread( - ffi.Pointer tView, - TVsmShadowOptions options, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getPrimitiveCount(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getAxisAlignedBoundingBox( + ffi.Pointer tRenderableManager, + int entityId, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void View_setTransparentPickingEnabledRenderThread( - ffi.Pointer tView, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, Aabb3)>(isLeaf: true) +external void RenderableManager_setAxisAlignedBoundingBox( + ffi.Pointer tRenderableManager, + int entityId, + Aabb3 aabb, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_destroyRenderThread( - ffi.Pointer tSceneAsset, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getAabb(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId)>(isLeaf: true) +external Aabb3 RenderableManager_getBoundingBox(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setLayerMask( + ffi.Pointer tRenderableManager, + int entityId, + int select, + int values, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void SceneAsset_createFromFilamentAssetRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tFilamentAsset, - bool rebuildVertices, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getLayerMask(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setVisibilityLayer( + ffi.Pointer tRenderableManager, + int entityId, + int layer, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.UnsignedInt, - Aabb3, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void SceneAsset_createFromBuffersRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tVertexBuffer, - ffi.Pointer tIndexBuffer, - ffi.Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, - ffi.Pointer)>> callback, +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setPriority( + ffi.Pointer tRenderableManager, + int entityId, + int priority, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer>, - ffi.Int, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void SceneAsset_createInstanceRenderThread( - ffi.Pointer asset, - ffi.Pointer> tMaterialInstances, - int materialInstanceCount, - ffi.Pointer)>> callback, +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getPriority(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Uint8)>(isLeaf: true) +external void RenderableManager_setChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_releaseSourceDataRenderThread( - ffi.Pointer tSceneAsset, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setCulling( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, ); -@ffi.Native, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_setFlatShadingRenderThread( - ffi.Pointer tSceneAsset, - bool flatShading, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_getCulling(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setFogEnabled( + ffi.Pointer tRenderableManager, + int entityId, + bool enabled, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Int, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Uint8, - ffi.Uint8, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Uint8, - ffi.Bool, - ffi.Bool, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void MaterialProvider_createMaterialInstanceRenderThread( - ffi.Pointer tMaterialProvider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, - ffi.Pointer)>> callback, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_getFogEnabled(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setLightChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, + bool enable, ); -@ffi.Native, ffi.Uint64, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void AnimationManager_updateRenderThread( - ffi.Pointer tAnimationManager, - int frameTimeInNanos, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.UnsignedInt)>(isLeaf: true) +external bool RenderableManager_getLightChannel( + ffi.Pointer tRenderableManager, + int entityId, + int channel, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Int, - ffi.Float, - ffi.Uint32, - VoidCallback, - ) ->(isLeaf: true) -external void AnimationManager_setGltfAnimationTimeRenderThread( - ffi.Pointer tAnimationManager, - ffi.Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setCastShadows( + ffi.Pointer tRenderableManager, + int entityId, + bool castShadows, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ) ->(isLeaf: true) -external void AnimationManager_updateBoneMatricesRenderThread( - ffi.Pointer tAnimationManager, - ffi.Pointer sceneAsset, - ffi.Pointer> callback, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isShadowCaster(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setReceiveShadows( + ffi.Pointer tRenderableManager, + int entityId, + bool receiveShadows, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Int, - ffi.Pointer>, - ) ->(isLeaf: true) -external void AnimationManager_setMorphTargetWeightsRenderThread( - ffi.Pointer tAnimationManager, +@ffi.Native, EntityId)>(isLeaf: true) +external bool RenderableManager_isShadowReceiver(ffi.Pointer tRenderableManager, int entityId); + +@ffi.Native, EntityId, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setScreenSpaceContactShadows( + ffi.Pointer tRenderableManager, int entityId, - ffi.Pointer morphData, - int numWeights, - ffi.Pointer> callback, + bool enabled, ); -@ffi.Native< - ffi.Void Function( - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Image_createEmptyRenderThread( - int width, - int height, - int channel, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Size, ffi.Uint16)>(isLeaf: true) +external void RenderableManager_setBlendOrderAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + int order, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Size, - ffi.Pointer, - ffi.Bool, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Image_decodeRenderThread( - ffi.Pointer data, - int length, - ffi.Pointer name, - bool alpha, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Size, ffi.Bool)>(isLeaf: true) +external void RenderableManager_setGlobalBlendOrderEnabledAt( + ffi.Pointer tRenderableManager, + int entityId, + int primitiveIndex, + bool enabled, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Image_getBytesRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer)>> onComplete, +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setMorphWeights( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer weights, + int count, + int offset, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Image_destroyRenderThread(ffi.Pointer tLinearImage, int requestId, VoidCallback onComplete); +@ffi.Native, EntityId)>(isLeaf: true) +external int RenderableManager_getMorphTargetCount(ffi.Pointer tRenderableManager, int entityId); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void Image_getWidthRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setBonesFromMat4( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer transforms, + int boneCount, + int offset, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void Image_getHeightRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, +@ffi.Native, EntityId, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void RenderableManager_setBonesFromBone( + ffi.Pointer tRenderableManager, + int entityId, + ffi.Pointer bones, + int boneCount, + int offset, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void Image_getChannelsRenderThread( - ffi.Pointer tLinearImage, - ffi.Pointer> onComplete, -); +@ffi.Native Function(ffi.Size)>(isLeaf: true) +external ffi.Pointer RenderableBuilder_create(int primitiveCount); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Int, - ffi.Pointer>, - ) ->(isLeaf: true) -external void Texture_loadImageRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - ffi.Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, - ffi.Pointer> onComplete, +@ffi.Native)>(isLeaf: true) +external void RenderableBuilder_destroy(ffi.Pointer builder); + +@ffi.Native, Aabb3)>(isLeaf: true) +external void RenderableBuilder_boundingBox(ffi.Pointer builder, Aabb3 aabb); + +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_material( + ffi.Pointer builder, + int primitiveIndex, + ffi.Pointer materialInstance, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint32, - ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint8, + ffi.Pointer, + ffi.Pointer, + ffi.Size, ffi.Size, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Uint32, - ffi.Pointer>, ) >(isLeaf: true) -external void Texture_setImageRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tTexture, - int level, - ffi.Pointer data, - int size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, - ffi.Pointer> onComplete, +external void RenderableBuilder_geometry( + ffi.Pointer builder, + int primitiveIndex, + int type, + ffi.Pointer vertices, + ffi.Pointer indices, + int offset, + int count, ); @ffi.Native< ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, + ffi.Pointer, + ffi.Size, + ffi.Uint8, + ffi.Pointer, + ffi.Size, + ffi.Size, ) >(isLeaf: true) -external void RenderTarget_getColorTextureRenderThread( - ffi.Pointer tRenderTarget, - ffi.Pointer)>> onComplete, +external void RenderableBuilder_geometryNonIndexed( + ffi.Pointer builder, + int primitiveIndex, + int type, + ffi.Pointer vertices, + int offset, + int count, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void RenderTarget_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer color, - ffi.Pointer depth, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_priority(ffi.Pointer builder, int priority); + +@ffi.Native, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_channel(ffi.Pointer builder, int channel); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_culling(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_castShadows(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_receiveShadows(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_fog(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.UnsignedInt, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_lightChannel(ffi.Pointer builder, int channel, bool enabled); + +@ffi.Native, ffi.Uint8, ffi.Uint8)>(isLeaf: true) +external void RenderableBuilder_layerMask(ffi.Pointer builder, int select, int values); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_screenSpaceContactShadows(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Size, ffi.Uint16)>(isLeaf: true) +external void RenderableBuilder_blendOrder(ffi.Pointer builder, int primitiveIndex, int order); + +@ffi.Native, ffi.Size, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_globalBlendOrderEnabled( + ffi.Pointer builder, + int primitiveIndex, + bool enabled, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderTarget_destroyRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tRenderTarget, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Size)>(isLeaf: true) +external void RenderableBuilder_instances(ffi.Pointer builder, int instanceCount); + +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_skinningFromMat4( + ffi.Pointer builder, + int boneCount, + ffi.Pointer transforms, ); -@ffi.Native)>>)>( +@ffi.Native, ffi.Size, ffi.Pointer)>(isLeaf: true) +external void RenderableBuilder_skinningFromBone( + ffi.Pointer builder, + int boneCount, + ffi.Pointer bones, +); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderableBuilder_enableSkinningBuffers(ffi.Pointer builder, bool enabled); + +@ffi.Native, ffi.Size, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void TextureSampler_createRenderThread( - ffi.Pointer)>> onComplete, +external void RenderableBuilder_boneIndicesAndWeights( + ffi.Pointer builder, + int primitiveIndex, + ffi.Pointer indicesAndWeights, + int count, + int bonesPerVertex, ); -@ffi.Native< - ffi.Void Function( - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void TextureSampler_createWithFilteringRenderThread( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, - ffi.Pointer)>> onComplete, -); +@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) +external int RenderableBuilder_build(ffi.Pointer builder, ffi.Pointer engine, int entity); -@ffi.Native< - ffi.Void Function( - ffi.UnsignedInt, - ffi.UnsignedInt, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void TextureSampler_createWithComparisonRenderThread( - int compareMode, - int compareFunc, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void IndirectLight_setRotation(ffi.Pointer tIndirectLight, ffi.Pointer rotation); + +@ffi.Native Function()>(isLeaf: true) +external ffi.Pointer SurfaceOrientationBuilder_create(); + +@ffi.Native, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_vertexCount(ffi.Pointer builder, int count); + +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_normals( + ffi.Pointer builder, + ffi.Pointer normals, + int stride, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setMinFilterRenderThread( - ffi.Pointer sampler, - int filter, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_tangents( + ffi.Pointer builder, + ffi.Pointer tangents, + int stride, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setMagFilterRenderThread( - ffi.Pointer sampler, - int filter, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_uvs( + ffi.Pointer builder, + ffi.Pointer uvs, + int stride, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeSRenderThread( - ffi.Pointer sampler, - int mode, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_positions( + ffi.Pointer builder, + ffi.Pointer positions, + int stride, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeTRenderThread( - ffi.Pointer sampler, - int mode, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Size)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangleCount(ffi.Pointer builder, int count); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangles_uint( + ffi.Pointer builder, + ffi.Pointer triangles, ); -@ffi.Native, ffi.UnsignedInt, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setWrapModeRRenderThread( - ffi.Pointer sampler, - int mode, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void SurfaceOrientationBuilder_triangles_ushort( + ffi.Pointer builder, + ffi.Pointer triangles, ); -@ffi.Native, ffi.Double, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_setAnisotropyRenderThread( - ffi.Pointer sampler, - double anisotropy, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer SurfaceOrientationBuilder_build( + ffi.Pointer builder, ); -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.UnsignedInt, ffi.UnsignedInt, ffi.Uint32, VoidCallback) ->(isLeaf: true) -external void TextureSampler_setCompareModeRenderThread( - ffi.Pointer sampler, - int mode, - int func, - int requestId, - VoidCallback onComplete, +@ffi.Native)>(isLeaf: true) +external void SurfaceOrientationBuilder_destroy(ffi.Pointer builder); + +@ffi.Native)>(isLeaf: true) +external int SurfaceOrientation_getVertexCount(ffi.Pointer orientation); + +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void SurfaceOrientation_getQuats_float4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TextureSampler_destroyRenderThread( - ffi.Pointer sampler, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( + isLeaf: true, +) +external void SurfaceOrientation_getQuats_short4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( +@ffi.Native, ffi.Pointer, ffi.Size, ffi.Size)>( isLeaf: true, ) -external void AnimationManager_resetToRestPoseRenderThread( +external void SurfaceOrientation_getQuats_half4( + ffi.Pointer orientation, + ffi.Pointer out, + int quatCount, + int stride, +); + +@ffi.Native)>(isLeaf: true) +external void SurfaceOrientation_destroy(ffi.Pointer orientation); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer AnimationManager_create(ffi.Pointer tEngine); + +@ffi.Native)>(isLeaf: true) +external void AnimationManager_destroy(ffi.Pointer tAnimationManager); + +@ffi.Native, ffi.Uint64)>(isLeaf: true) +external void AnimationManager_update(ffi.Pointer tAnimationManager, int frameTimeInNanos); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_addGltfAnimationComponent( ffi.Pointer tAnimationManager, ffi.Pointer tSceneAsset, - int requestId, - VoidCallback onComplete, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void GltfAssetLoader_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tMaterialProvider, - ffi.Pointer tNameComponentManager, - ffi.Pointer)>> callback, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_removeGltfAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); -@ffi.Native, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void GltfAssetLoader_destroyRenderThread( - ffi.Pointer tAssetLoader, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId)>(isLeaf: true) +external void AnimationManager_addMorphAnimationComponent( + ffi.Pointer tAnimationManager, + int entityId, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void GltfResourceLoader_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer)>> callback, +@ffi.Native, EntityId)>(isLeaf: true) +external void AnimationManager_removeMorphAnimationComponent( + ffi.Pointer tAnimationManager, + int entityId, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void GltfResourceLoader_destroyRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tResourceLoader, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_addBoneAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, - ) ->(isLeaf: true) -external void GltfResourceLoader_loadResourcesRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, - ffi.Pointer> callback, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_removeBoneAnimationComponent( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - VoidCallback, + ffi.Bool Function( + ffi.Pointer, + EntityId, + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Float, ) >(isLeaf: true) -external void GltfResourceLoader_addResourceDataRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer uri, - ffi.Pointer data, - int length, - int requestId, - VoidCallback onComplete, +external bool AnimationManager_setMorphAnimation( + ffi.Pointer tAnimationManager, + int entityId, + ffi.Pointer morphData, + ffi.Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, +); + +@ffi.Native, EntityId)>(isLeaf: true) +external bool AnimationManager_clearMorphAnimation(ffi.Pointer tAnimationManager, int entityId); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void AnimationManager_resetToRestPose( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer>, + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Int, + ffi.Pointer, + ffi.Int, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Float, + ffi.Bool, ) >(isLeaf: true) -external void GltfResourceLoader_asyncBeginLoadRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tFilamentAsset, - ffi.Pointer> callback, +external bool AnimationManager_addBoneAnimation( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int skinIndex, + int boneIndex, + ffi.Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, ); -@ffi.Native)>(isLeaf: true) -external void GltfResourceLoader_asyncUpdateLoadRenderThread(ffi.Pointer tGltfResourceLoader); - @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Pointer, ffi.Int) >(isLeaf: true) -external void GltfResourceLoader_asyncGetLoadProgressRenderThread( - ffi.Pointer tGltfResourceLoader, - ffi.Pointer> callback, +external void AnimationManager_getRestLocalTransforms( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int skinIndex, + ffi.Pointer out, + int numBones, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Int, ffi.Int, ffi.Pointer) >(isLeaf: true) -external void GltfAssetLoader_loadRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer data, - int length, - int numInstances, - ffi.Pointer)>> callback, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_addFilamentAssetRenderThread( - ffi.Pointer tScene, - ffi.Pointer tAsset, - int requestId, - VoidCallback onComplete, +external void AnimationManager_getInverseBindMatrix( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int skinIndex, + int boneIndex, + ffi.Pointer out, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Float, + ffi.Float, + ffi.Float, + ) >(isLeaf: true) -external void FilamentAsset_getWireframeRenderThread( - ffi.Pointer tFilamentAsset, - ffi.Pointer> onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_addEntityRenderThread( - ffi.Pointer tScene, - int entityId, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_removeEntityRenderThread( - ffi.Pointer tScene, - int entityId, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_addToSceneRenderThread( - ffi.Pointer tSceneAsset, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, -); - -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void SceneAsset_removeFromSceneRenderThread( +external bool AnimationManager_playGltfAnimation( + ffi.Pointer tAnimationManager, ffi.Pointer tSceneAsset, - ffi.Pointer tScene, - int requestId, - VoidCallback onComplete, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_setSkyboxRenderThread( - ffi.Pointer tScene, - ffi.Pointer tSkybox, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool AnimationManager_stopGltfAnimation( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int index, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void Scene_setIndirectLightRenderThread( - ffi.Pointer tScene, - ffi.Pointer tIndirectLight, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, ffi.Int)>(isLeaf: true) +external double AnimationManager_getGltfAnimationDuration( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int animationIndex, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.UnsignedInt, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void Gizmo_createRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tAssetLoader, - ffi.Pointer tGltfResourceLoader, - ffi.Pointer tNameComponentManager, - ffi.Pointer tView, - ffi.Pointer tMaterial, - int tGizmoType, - ffi.Pointer)>> callback, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external int AnimationManager_getGltfAnimationCount( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Int) >(isLeaf: true) -external void VertexBufferBuilder_buildRenderThread( - ffi.Pointer tBuilder, - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +external void AnimationManager_getGltfAnimationName( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + ffi.Pointer outPtr, + int index, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void VertexBuffer_destroyRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer, EntityId)>(isLeaf: true) +external int AnimationManager_getMorphTargetNameCount( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int childEntity, ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - VoidCallback, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, EntityId, ffi.Pointer, ffi.Int) >(isLeaf: true) -external void VertexBuffer_setBufferAtRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int bufferIndex, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, - int requestId, - VoidCallback onComplete, +external void AnimationManager_getMorphTargetName( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, + int childEntity, + ffi.Pointer outPtr, + int index, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>, - ) ->(isLeaf: true) -external void IndexBufferBuilder_buildRenderThread( - ffi.Pointer tBuilder, - ffi.Pointer tEngine, - ffi.Pointer)>> onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool AnimationManager_updateBoneMatrices( + ffi.Pointer tAnimationManager, + ffi.Pointer sceneAsset, ); -@ffi.Native, ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void IndexBuffer_destroyRenderThread( - ffi.Pointer tEngine, - ffi.Pointer tBuffer, - int requestId, - VoidCallback onComplete, +@ffi.Native, EntityId, ffi.Pointer, ffi.Int)>(isLeaf: true) +external bool AnimationManager_setMorphTargetWeights( + ffi.Pointer tAnimationManager, + int entityId, + ffi.Pointer morphData, + int numWeights, +); + +@ffi.Native, ffi.Pointer, ffi.Int, ffi.Float)>( + isLeaf: true, +) +external bool AnimationManager_setGltfAnimationTime( + ffi.Pointer tAnimationManager, + ffi.Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, ); @ffi.Native< - ffi.Void Function( + ffi.Pointer Function( ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Size, - ffi.Uint32, - ffi.Uint32, - VoidCallback, + ffi.Pointer, + ffi.Pointer, ) >(isLeaf: true) -external void IndexBuffer_setBufferRenderThread( +external ffi.Pointer GltfAssetLoader_create( ffi.Pointer tEngine, - ffi.Pointer tBuffer, - ffi.Pointer data, - int sizeInBytes, - int byteOffset, - int requestId, - VoidCallback onComplete, + ffi.Pointer tMaterialProvider, + ffi.Pointer tNameComponentManager, ); +@ffi.Native)>(isLeaf: true) +external void GltfAssetLoader_destroy(ffi.Pointer tAssetLoader); + @ffi.Native< - ffi.Void Function( - ffi.Pointer, + ffi.Pointer Function( ffi.Pointer, - EntityId, - ffi.Pointer>, + ffi.Pointer, + ffi.Pointer, + ffi.Size, + ffi.Uint32, ) >(isLeaf: true) -external void RenderableBuilder_buildRenderThread( - ffi.Pointer tBuilder, +external ffi.Pointer GltfAssetLoader_load( ffi.Pointer tEngine, - int entityId, - ffi.Pointer> onComplete, -); - -@ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Pointer>) ->(isLeaf: true) -external void EntityManager_createEntityRenderThread( - ffi.Pointer tEntityManager, - ffi.Pointer> onComplete, -); - -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void EntityManager_destroyEntityRenderThread( - ffi.Pointer tEntityManager, - int entityId, - int requestId, - VoidCallback onComplete, + ffi.Pointer tAssetLoader, + ffi.Pointer data, + int length, + int numInstances, ); -@ffi.Native, EntityId, double4x4, ffi.Uint32, VoidCallback)>( +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>( isLeaf: true, ) -external void TransformManager_setTransformRenderThread( - ffi.Pointer tTransformManager, - int entityId, - double4x4 transform, - int requestId, - VoidCallback onComplete, +external ffi.Pointer GltfAssetLoader_getMaterialInstance( + ffi.Pointer tRenderableManager, + ffi.Pointer tAsset, ); -@ffi.Native, EntityId, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void TransformManager_setParentRenderThread( - ffi.Pointer tTransformManager, - int child, - int parent, - bool preserveScaling, - int requestId, - VoidCallback onComplete, -); +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer GltfAssetLoader_getMaterialProvider(ffi.Pointer tAssetLoader); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TransformManager_createComponentRenderThread( - ffi.Pointer tTransformManager, - int entityId, - int requestId, - VoidCallback onComplete, -); +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getResourceUriCount(ffi.Pointer tFilamentAsset); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void TransformManager_removeComponentRenderThread( - ffi.Pointer tTransformManager, - int entityId, - int requestId, - VoidCallback onComplete, -); +@ffi.Native> Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer> FilamentAsset_getResourceUris(ffi.Pointer tFilamentAsset); -@ffi.Native, EntityId, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void RenderableManager_destroyEntityRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer GltfResourceLoader_create(ffi.Pointer tEngine); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void GltfResourceLoader_destroy( + ffi.Pointer tEngine, + ffi.Pointer tGltfResourceLoader, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Uint32, - VoidCallback, - ) ->(isLeaf: true) -external void RenderableManager_setBonesFromMat4RenderThread( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer transforms, - int boneCount, - int offset, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool GltfResourceLoader_asyncBeginLoad( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, ); +@ffi.Native)>(isLeaf: true) +external void GltfResourceLoader_asyncUpdateLoad(ffi.Pointer tGltfResourceLoader); + +@ffi.Native)>(isLeaf: true) +external double GltfResourceLoader_asyncGetLoadProgress(ffi.Pointer tGltfResourceLoader); + @ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Uint32, - VoidCallback, - ) + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Size) >(isLeaf: true) -external void RenderableManager_setBonesFromBoneRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - ffi.Pointer bones, - int boneCount, - int offset, - int requestId, - VoidCallback onComplete, +external void GltfResourceLoader_addResourceData( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer uri, + ffi.Pointer data, + int length, ); -@ffi.Native< - ffi.Void Function( - ffi.Pointer, - EntityId, - ffi.Int, - ffi.Uint8, - ffi.Pointer, - ffi.Size, - ffi.Size, - ffi.Pointer>, - ) ->(isLeaf: true) -external void RenderableManager_setGeometryAtNonIndexedRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - int primitiveIndex, - int type, - ffi.Pointer tVertices, - int offset, - int count, - ffi.Pointer> callback, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external bool GltfResourceLoader_loadResources( + ffi.Pointer tGltfResourceLoader, + ffi.Pointer tFilamentAsset, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderableManager_setCastShadowsRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) +external ffi.Pointer RenderManager_create( + ffi.Pointer tEngine, + ffi.Pointer tRenderer, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void RenderableManager_setReceiveShadowsRenderThread( - ffi.Pointer tRenderableManager, - int entityId, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native)>(isLeaf: true) +external void RenderManager_destroy(ffi.Pointer tRenderer); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_addAnimationManager( + ffi.Pointer tRenderer, + ffi.Pointer tAnimationManager, ); -@ffi.Native, EntityId, ffi.Bool, ffi.Uint32, VoidCallback)>(isLeaf: true) -external void LightManager_setShadowCasterRenderThread( - ffi.Pointer tLightManager, - int entityId, - bool enabled, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_removeAnimationManager( + ffi.Pointer tRenderer, + ffi.Pointer tAnimationManager, ); -@ffi.Native, EntityId, TShadowOptions, ffi.Uint32, VoidCallback)>( - isLeaf: true, -) -external void LightManager_setShadowOptionsRenderThread( - ffi.Pointer tLightManager, - int entityId, - TShadowOptions options, - int requestId, - VoidCallback onComplete, +@ffi.Native, ffi.Uint64)>(isLeaf: true) +external void RenderManager_render(ffi.Pointer tRenderer, int frameTimeInNanos); + +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer, ffi.Pointer>, ffi.Uint8) +>(isLeaf: true) +external void RenderManager_setRenderable( + ffi.Pointer tRenderer, + ffi.Pointer swapChain, + ffi.Pointer> views, + int numViews, ); +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void RenderManager_removeSwapChain(ffi.Pointer tRenderer, ffi.Pointer swapChain); + +@ffi.Native)>(isLeaf: true) +external void RenderManager_requestRender(ffi.Pointer tRenderer); + +@ffi.Native)>(isLeaf: true) +external void RenderManager_attachToRenderThread(ffi.Pointer tRenderer); + +@ffi.Native)>(isLeaf: true) +external void RenderManager_detachFromRenderThread(ffi.Pointer tRenderManager); + +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void RenderManager_setPaused(ffi.Pointer tRenderer, bool paused); + +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getEntityCount(ffi.Pointer filamentAsset); + +@ffi.Native, ffi.Pointer)>(isLeaf: true) +external void FilamentAsset_getEntities(ffi.Pointer filamentAsset, ffi.Pointer out); + +@ffi.Native)>(isLeaf: true) +external int FilamentAsset_getWireframe(ffi.Pointer filamentAsset); + +@ffi.Native Function(ffi.Pointer)>(isLeaf: true) +external ffi.Pointer FilamentAsset_getSourceAsset(ffi.Pointer filamentAsset); + @ffi.Native, EntityId)>(isLeaf: true) external void Scene_addEntity(ffi.Pointer tScene, int entityId); @@ -4747,6 +4729,24 @@ external int Scene_scanForMaterial( int capacity, ); +@ffi.Native(isLeaf: true) +external void FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); + +@ffi.Native() +external void FrameScheduler_stop(); + +@ffi.Native)>(isLeaf: true) +external int FrameScheduler_initDartApi(ffi.Pointer data); + +@ffi.Native(isLeaf: true) +external void FrameScheduler_startWithPort(int port, int targetFps); + +@ffi.Native(isLeaf: true) +external void FrameScheduler_setTargetFps(int fps); + +@ffi.Native(isLeaf: true) +external int FrameScheduler_steadyClockUs(); + @ffi.Native)>(isLeaf: true) external void MovementIntentExecutor_destroy(ffi.Pointer executor); @@ -5080,11 +5080,6 @@ sealed class TIndexType { static const TINDEX_TYPE_UINT = 1; } -sealed class TProjection { - static const Perspective = 0; - static const Orthographic = 1; -} - final class TViewport extends ffi.Struct { @ffi.Int32() external int left; @@ -5375,35 +5370,6 @@ typedef GizmoPickCallbackFunction = typedef DartGizmoPickCallbackFunction = void Function(int resultType, double x, double y, double z); typedef GizmoPickCallback = ffi.Pointer>; -final class TMeshData extends ffi.Struct { - external ffi.Pointer name; - - external ffi.Pointer materialName; - - external ffi.Pointer vertices; - - @ffi.Int() - external int vertexCount; - - external ffi.Pointer normals; - - @ffi.Int() - external int normalCount; - - external ffi.Pointer uvs; - - @ffi.Int() - external int uvCount; - - external ffi.Pointer indices; - - @ffi.Int() - external int indexCount; - - @ffi.UnsignedInt() - external int primitiveType; -} - sealed class TSamplerCompareFunc { /// !< Less or equal static const LE = 0; @@ -5479,6 +5445,40 @@ sealed class TBlendingMode { static const BLENDING_MODE_CUSTOM = 7; } +sealed class TProjection { + static const Perspective = 0; + static const Orthographic = 1; +} + +final class TMeshData extends ffi.Struct { + external ffi.Pointer name; + + external ffi.Pointer materialName; + + external ffi.Pointer vertices; + + @ffi.Int() + external int vertexCount; + + external ffi.Pointer normals; + + @ffi.Int() + external int normalCount; + + external ffi.Pointer uvs; + + @ffi.Int() + external int uvCount; + + external ffi.Pointer indices; + + @ffi.Int() + external int indexCount; + + @ffi.UnsignedInt() + external int primitiveType; +} + sealed class TTextureSamplerType { static const SAMPLER_2D = 0; static const SAMPLER_2D_ARRAY = 1; @@ -5735,9 +5735,44 @@ sealed class TSamplerCompareMode { static const COMPARE_MODE_COMPARE_TO_TEXTURE = 1; } -typedef FrameTickCallbackFunction = ffi.Void Function(ffi.Uint64 frameTimeNanos); -typedef DartFrameTickCallbackFunction = void Function(int frameTimeNanos); -typedef FrameTickCallback = ffi.Pointer>; +sealed class TBackend { + /// !< Automatically selects an appropriate driver for the platform. + static const BACKEND_DEFAULT = 0; + + /// !< Selects the OpenGL/ES driver (default on Android) + static const BACKEND_OPENGL = 1; + + /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) + static const BACKEND_VULKAN = 2; + + /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). + static const BACKEND_METAL = 3; + + /// !< Selects the no-op driver for testing purposes. + static const BACKEND_NOOP = 4; +} + +sealed class TMaterialPlatform { + static const T_MATERIAL_PLATFORM_DESKTOP = 0; + static const T_MATERIAL_PLATFORM_MOBILE = 1; + static const T_MATERIAL_PLATFORM_ALL = 2; +} + +sealed class TMaterialTargetApi { + static const T_MATERIAL_TARGET_API_OPENGL = 1; + static const T_MATERIAL_TARGET_API_VULKAN = 2; + static const T_MATERIAL_TARGET_API_METAL = 4; + static const T_MATERIAL_TARGET_API_WEBGPU = 8; + static const T_MATERIAL_TARGET_API_ALL = 15; + static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; +} + +sealed class TMaterialOptimization { + static const T_MATERIAL_OPTIMIZATION_NONE = 0; + static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; + static const T_MATERIAL_OPTIMIZATION_SIZE = 2; + static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; +} sealed class TLightType { static const LIGHT_TYPE_SUN = 0; @@ -5827,48 +5862,12 @@ final class TShadowOptions extends ffi.Struct { external double transformW; } -sealed class TBackend { - /// !< Automatically selects an appropriate driver for the platform. - static const BACKEND_DEFAULT = 0; - - /// !< Selects the OpenGL/ES driver (default on Android) - static const BACKEND_OPENGL = 1; - - /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) - static const BACKEND_VULKAN = 2; - - /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). - static const BACKEND_METAL = 3; - - /// !< Selects the no-op driver for testing purposes. - static const BACKEND_NOOP = 4; -} - -sealed class TMaterialPlatform { - static const T_MATERIAL_PLATFORM_DESKTOP = 0; - static const T_MATERIAL_PLATFORM_MOBILE = 1; - static const T_MATERIAL_PLATFORM_ALL = 2; -} - -sealed class TMaterialTargetApi { - static const T_MATERIAL_TARGET_API_OPENGL = 1; - static const T_MATERIAL_TARGET_API_VULKAN = 2; - static const T_MATERIAL_TARGET_API_METAL = 4; - static const T_MATERIAL_TARGET_API_WEBGPU = 8; - static const T_MATERIAL_TARGET_API_ALL = 15; - static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; -} - -sealed class TMaterialOptimization { - static const T_MATERIAL_OPTIMIZATION_NONE = 0; - static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; - static const T_MATERIAL_OPTIMIZATION_SIZE = 2; - static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; -} - typedef FilamentRenderCallbackFunction = ffi.Void Function(ffi.Pointer owner); typedef DartFilamentRenderCallbackFunction = void Function(ffi.Pointer owner); typedef FilamentRenderCallback = ffi.Pointer>; +typedef FrameTickCallbackFunction = ffi.Void Function(ffi.Uint64 frameTimeNanos); +typedef DartFrameTickCallbackFunction = void Function(int frameTimeNanos); +typedef FrameTickCallback = ffi.Pointer>; final class TMovementIntentCalculator extends ffi.Opaque {} diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart index 62242b030..a3661da72 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart @@ -27,192 +27,6 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external Pointer _TSWAP_CHAIN_CONFIG_READABLE; external Pointer _TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER; external Pointer _TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER; - external Pointer _AnimationManager_create(Pointer tEngine); - external void _AnimationManager_destroy(Pointer tAnimationManager); - external void _AnimationManager_update(Pointer tAnimationManager, JSBigInt frameTimeInNanos); - external int _AnimationManager_addGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_removeGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external void _AnimationManager_addMorphAnimationComponent( - Pointer tAnimationManager, - EntityId entityId, - ); - external void _AnimationManager_removeMorphAnimationComponent( - Pointer tAnimationManager, - EntityId entityId, - ); - external int _AnimationManager_addBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_removeBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, - ); - external int _AnimationManager_setMorphAnimation( - Pointer tAnimationManager, - EntityId entityId, - Pointer morphData, - Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, - ); - external int _AnimationManager_clearMorphAnimation(Pointer tAnimationManager, EntityId entityId); - external void _AnimationManager_resetToRestPose( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external int _AnimationManager_addBoneAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int skinIndex, - int boneIndex, - Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, - ); - external void _AnimationManager_getRestLocalTransforms( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - Pointer out, - int numBones, - ); - external void _AnimationManager_getInverseBindMatrix( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - int boneIndex, - Pointer out, - ); - external int _AnimationManager_playGltfAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, - ); - external int _AnimationManager_stopGltfAnimation( - Pointer tAnimationManager, - Pointer sceneAsset, - int index, - ); - external double _AnimationManager_getGltfAnimationDuration( - Pointer tAnimationManager, - Pointer sceneAsset, - int animationIndex, - ); - external int _AnimationManager_getGltfAnimationCount( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external void _AnimationManager_getGltfAnimationName( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer outPtr, - int index, - ); - external int _AnimationManager_getMorphTargetNameCount( - Pointer tAnimationManager, - Pointer sceneAsset, - EntityId childEntity, - ); - external void _AnimationManager_getMorphTargetName( - Pointer tAnimationManager, - Pointer sceneAsset, - EntityId childEntity, - Pointer outPtr, - int index, - ); - external int _AnimationManager_updateBoneMatrices( - Pointer tAnimationManager, - Pointer sceneAsset, - ); - external int _AnimationManager_setMorphTargetWeights( - Pointer tAnimationManager, - EntityId entityId, - Pointer morphData, - int numWeights, - ); - external int _AnimationManager_setGltfAnimationTime( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, - ); - external void _Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity); - external double _Camera_getAperture(Pointer camera); - external double _Camera_getShutterSpeed(Pointer camera); - external double _Camera_getSensitivity(Pointer camera); - external void _Camera_getModelMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getViewMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getProjectionMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getCullingProjectionMatrix(Pointer double4x4_out, Pointer camera); - external void _Camera_getFrustum(Pointer camera, Pointer out); - external void _Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far); - external void _Camera_setProjectionFromFov( - Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, - ); - external double _Camera_getFocalLength(Pointer camera); - external void _Camera_lookAt( - Pointer camera, - Pointer eyePtr, - Pointer focusPtr, - Pointer upPtr, - ); - external double _Camera_getNear(Pointer camera); - external double _Camera_getCullingFar(Pointer camera); - external double _Camera_getFov(Pointer camera, bool horizontal); - external double _Camera_getFocusDistance(Pointer camera); - external void _Camera_setFocusDistance(Pointer camera, double focusDistance); - external void _Camera_setCustomProjectionWithCulling( - Pointer camera, - Pointer projectionMatrixPtr, - double near, - double far, - ); - external void _Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix); - external void _Camera_setLensProjection( - Pointer camera, - double near, - double far, - double aspect, - double focalLength, - ); - external EntityId _Camera_getEntity(Pointer camera); - external void _Camera_setProjection( - Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, - ); - external int _FilamentAsset_getEntityCount(Pointer filamentAsset); - external void _FilamentAsset_getEntities(Pointer filamentAsset, Pointer out); - external EntityId _FilamentAsset_getWireframe(Pointer filamentAsset); - external Pointer _FilamentAsset_getSourceAsset(Pointer filamentAsset); external void _View_getViewport(Pointer TViewport_out, Pointer view); external Pointer _ToneMapper_createLinear(Pointer tEngine); external Pointer _ToneMapper_createACES(Pointer tEngine); @@ -362,179 +176,47 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external void _Gizmo_pick(Pointer tGizmo, int x, int y, GizmoPickCallback callback); external void _Gizmo_highlight(Pointer tGizmo, int axis); external void _Gizmo_unhighlight(Pointer tGizmo); - external Pointer _GltfAssetLoader_create( - Pointer tEngine, - Pointer tMaterialProvider, - Pointer tNameComponentManager, - ); - external void _GltfAssetLoader_destroy(Pointer tAssetLoader); - external Pointer _GltfAssetLoader_load( - Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - size_t length, - int numInstances, + external Pointer _Material_createInstance(Pointer tMaterial); + external int _Material_getFeatureLevel(Pointer tMaterial); + external Pointer _Material_createImageMaterial(Pointer tEngine); + external Pointer _Material_createGridMaterial(Pointer tEngine); + external Pointer _Material_createGizmoMaterial(Pointer tEngine); + external Pointer _Material_createSilhouetteMaterial(Pointer tEngine); + external Pointer _Material_createEdgeOutlineMaterial(Pointer tEngine); + external Pointer _Material_createWireframeMaterial(Pointer tEngine); + external Pointer _Material_createTranslationAxisMaterial(Pointer tEngine); + external Pointer _Material_createBoneOverlayMaterial(Pointer tEngine); + external int _Material_hasParameter(Pointer tMaterial, Pointer propertyName); + external int _MaterialInstance_isStencilWriteEnabled(Pointer materialInstance); + external Pointer _MaterialInstance_getMaterial(Pointer materialInstance); + external void _MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setCullingMode(Pointer materialInstance, int culling); + external void _MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided); + external void _MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled); + external void _MaterialInstance_setParameterFloat( + Pointer materialInstance, + Pointer propertyName, + double value, ); - external Pointer _GltfAssetLoader_getMaterialInstance( - Pointer tRenderableManager, - Pointer tAsset, + external void _MaterialInstance_setParameterFloat2( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, ); - external Pointer _GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader); - external int _FilamentAsset_getResourceUriCount(Pointer tFilamentAsset); - external Pointer> _FilamentAsset_getResourceUris(Pointer tFilamentAsset); - external void _MeshData_dispose(Pointer meshData); - external int _GltfParser_parseBuffer( - Pointer data, - size_t length, - Pointer meshName, - Pointer outMeshData, + external void _MaterialInstance_setParameterFloat3( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double z, ); - external Pointer _GltfResourceLoader_create(Pointer tEngine); - external void _GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader); - external int _GltfResourceLoader_asyncBeginLoad( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - ); - external void _GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader); - external double _GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader); - external void _GltfResourceLoader_addResourceData( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - size_t length, - ); - external int _GltfResourceLoader_loadResources( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - ); - external Pointer _IndexBufferBuilder_create(); - external void _IndexBufferBuilder_indexCount(Pointer builder, int count); - external void _IndexBufferBuilder_bufferType(Pointer builder, int indexType); - external Pointer _IndexBufferBuilder_build( - Pointer builder, - Pointer engine, - ); - external void _IndexBufferBuilder_destroy(Pointer builder); - external size_t _IndexBuffer_getIndexCount(Pointer buffer); - external void _IndexBuffer_setBuffer( - Pointer engine, - Pointer buffer, - Pointer data, - size_t sizeInBytes, - int byteOffset, - ); - external void _IndexBuffer_destroy(Pointer engine, Pointer buffer); - external void _IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation); - external Pointer _MaterialProvider_createMaterialInstance( - Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, - ); - external Pointer _NameComponentManager_create(); - external void _NameComponentManager_destroy(Pointer tNameComponentManager); - external Pointer _NameComponentManager_getName( - Pointer tNameComponentManager, - EntityId entity, - ); - external Pointer _RenderManager_create(Pointer tEngine, Pointer tRenderer); - external void _RenderManager_destroy(Pointer tRenderer); - external void _RenderManager_addAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, - ); - external void _RenderManager_removeAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, - ); - external void _RenderManager_render(Pointer tRenderer, JSBigInt frameTimeInNanos); - external void _RenderManager_setRenderable( - Pointer tRenderer, - Pointer swapChain, - Pointer> views, - int numViews, - ); - external void _RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain); - external void _RenderManager_requestRender(Pointer tRenderer); - external void _RenderManager_attachToRenderThread(Pointer tRenderer); - external void _RenderManager_detachFromRenderThread(Pointer tRenderManager); - external void _RenderManager_setPaused(Pointer tRenderer, bool paused); - external Pointer _Material_createInstance(Pointer tMaterial); - external int _Material_getFeatureLevel(Pointer tMaterial); - external Pointer _Material_createImageMaterial(Pointer tEngine); - external Pointer _Material_createGridMaterial(Pointer tEngine); - external Pointer _Material_createGizmoMaterial(Pointer tEngine); - external Pointer _Material_createSilhouetteMaterial(Pointer tEngine); - external Pointer _Material_createEdgeOutlineMaterial(Pointer tEngine); - external Pointer _Material_createWireframeMaterial(Pointer tEngine); - external Pointer _Material_createTranslationAxisMaterial(Pointer tEngine); - external Pointer _Material_createBoneOverlayMaterial(Pointer tEngine); - external int _Material_hasParameter(Pointer tMaterial, Pointer propertyName); - external int _MaterialInstance_isStencilWriteEnabled(Pointer materialInstance); - external Pointer _MaterialInstance_getMaterial(Pointer materialInstance); - external void _MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setCullingMode(Pointer materialInstance, int culling); - external void _MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided); - external void _MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled); - external void _MaterialInstance_setParameterFloat( - Pointer materialInstance, - Pointer propertyName, - double value, - ); - external void _MaterialInstance_setParameterFloat2( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - ); - external void _MaterialInstance_setParameterFloat3( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double z, - ); - external void _MaterialInstance_setParameterFloat3Array( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer raw, - int length, + external void _MaterialInstance_setParameterFloat3Array( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer raw, + int length, ); external void _MaterialInstance_setParameterFloat4( Pointer materialInstance, @@ -600,6 +282,118 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { ); external int _MaterialInstance_getTransparencyMode(Pointer materialInstance); external int _Material_getBlendingMode(Pointer material); + external Pointer _NameComponentManager_create(); + external void _NameComponentManager_destroy(Pointer tNameComponentManager); + external Pointer _NameComponentManager_getName( + Pointer tNameComponentManager, + EntityId entity, + ); + external Pointer _SceneAsset_createFromBuffers( + Pointer tEngine, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Pointer boundingBoxPtr, + ); + external Pointer _SceneAsset_createFromFilamentAsset( + Pointer tEngine, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, + ); + external Pointer _SceneAsset_getFilamentAsset(Pointer tSceneAsset); + external int _SceneAsset_getType(Pointer tSceneAsset); + external void _SceneAsset_destroy(Pointer tSceneAsset); + external void _SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene); + external void _SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene); + external EntityId _SceneAsset_getEntity(Pointer tSceneAsset); + external int _SceneAsset_getChildEntityCount(Pointer tSceneAsset); + external void _SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out); + external Pointer _SceneAsset_getCameraEntities(Pointer tSceneAsset); + external size_t _SceneAsset_getCameraEntityCount(Pointer tSceneAsset); + external Pointer _SceneAsset_getLightEntities(Pointer tSceneAsset); + external size_t _SceneAsset_getLightEntityCount(Pointer tSceneAsset); + external Pointer _SceneAsset_getInstance(Pointer tSceneAsset, int index); + external size_t _SceneAsset_getInstanceCount(Pointer tSceneAsset); + external Pointer _SceneAsset_createInstance( + Pointer asset, + Pointer> materialInstances, + int materialInstanceCount, + ); + external void _SceneAsset_getBoundingBox(Pointer Aabb3_out, Pointer asset); + external Pointer _SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex); + external Pointer _SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex); + external int _SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, EntityId entity); + external void _SceneAsset_releaseSourceData(Pointer tSceneAsset); + external void _SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading); + external void _SceneAsset_getBones(Pointer tSceneAsset, size_t skinIndex, Pointer out); + external size_t _SceneAsset_getBoneCount(Pointer tSceneAsset, size_t skinIndex); + external Pointer _SceneAsset_getBoneName(Pointer tSceneAsset, size_t skinIndex, size_t boneIndex); + external void _Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity); + external double _Camera_getAperture(Pointer camera); + external double _Camera_getShutterSpeed(Pointer camera); + external double _Camera_getSensitivity(Pointer camera); + external void _Camera_getModelMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getViewMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getProjectionMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getCullingProjectionMatrix(Pointer double4x4_out, Pointer camera); + external void _Camera_getFrustum(Pointer camera, Pointer out); + external void _Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far); + external void _Camera_setProjectionFromFov( + Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, + ); + external double _Camera_getFocalLength(Pointer camera); + external void _Camera_lookAt( + Pointer camera, + Pointer eyePtr, + Pointer focusPtr, + Pointer upPtr, + ); + external double _Camera_getNear(Pointer camera); + external double _Camera_getCullingFar(Pointer camera); + external double _Camera_getFov(Pointer camera, bool horizontal); + external double _Camera_getFocusDistance(Pointer camera); + external void _Camera_setFocusDistance(Pointer camera, double focusDistance); + external void _Camera_setCustomProjectionWithCulling( + Pointer camera, + Pointer projectionMatrixPtr, + double near, + double far, + ); + external void _Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix); + external void _Camera_setLensProjection( + Pointer camera, + double near, + double far, + double aspect, + double focalLength, + ); + external EntityId _Camera_getEntity(Pointer camera); + external void _Camera_setProjection( + Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, + ); + external void _MeshData_dispose(Pointer meshData); + external int _GltfParser_parseBuffer( + Pointer data, + size_t length, + Pointer meshName, + Pointer outMeshData, + ); external Pointer _Texture_build( Pointer engine, int width, @@ -683,146 +477,253 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { external void _TextureSampler_setAnisotropy(Pointer sampler, double anisotropy); external void _TextureSampler_setCompareMode(Pointer sampler, int mode, int func); external void _TextureSampler_destroy(Pointer sampler); - external Pointer _RenderTarget_create( - Pointer tEngine, - Pointer color, - Pointer depth, - ); - external void _RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget); - external void _Renderer_setClearOptions( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, - ); - external int _Renderer_beginFrame( - Pointer tRenderer, - Pointer tSwapChain, - JSBigInt frameTimeInNanos, + external Pointer _Engine_create( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, ); - external void _Renderer_endFrame(Pointer tRenderer); - external void _Renderer_render(Pointer tRenderer, Pointer tView); - external void _Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView); - external void _Renderer_readPixels( - Pointer tRenderer, + external int _Engine_getSupportedFeatureLevel(Pointer tEngine); + external void _Engine_destroy(Pointer tEngine); + external Pointer _Engine_createRenderer(Pointer tEngine); + external void _Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer); + external Pointer _Engine_createSwapChain(Pointer tEngine, Pointer window, JSBigInt flags); + external Pointer _Engine_createHeadlessSwapChain( + Pointer tEngine, int width, int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - size_t outLength, - ); - external void _Renderer_setFrameInterval( - Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, + JSBigInt flags, ); - external Pointer _SceneAsset_createFromBuffers( + external void _Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain); + external void _Engine_destroyView(Pointer tEngine, Pointer tView); + external void _Engine_destroyScene(Pointer tEngine, Pointer tScene); + external void _Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading); + external Pointer _Engine_createCamera(Pointer tEngine, EntityId entityId); + external void _Engine_destroyCamera(Pointer tEngine, Pointer tCamera); + external Pointer _Engine_createView(Pointer tEngine); + external Pointer _Engine_getCameraComponent(Pointer tEngine, EntityId entityId); + external Pointer _Engine_getTransformManager(Pointer engine); + external Pointer _Engine_getRenderableManager(Pointer engine); + external Pointer _Engine_getLightManager(Pointer engine); + external Pointer _Engine_getEntityManager(Pointer engine); + external void _Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled); + external size_t _Engine_getMaxAutomaticInstances(Pointer tEngine); + external void _Engine_destroyTexture(Pointer tEngine, Pointer tTexture); + external Pointer _Engine_createFence(Pointer tEngine); + external void _Engine_destroyFence(Pointer tEngine, Pointer tFence); + external void _Engine_flushAndWait(Pointer tEngine); + external void _Engine_execute(Pointer tEngine); + external Pointer _Engine_buildMaterial( Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Pointer boundingBoxPtr, + Pointer materialData, + size_t length, ); - external Pointer _SceneAsset_createFromFilamentAsset( + + /// Compiles .mat [matSource] ([length] bytes, not necessarily + /// NUL-terminated) into a filamat package, synchronously on the calling + /// thread. #include directives must already be resolved by the caller (the + /// Dart layer flattens them). + /// + /// [platform]/[targetApi]/[optimization] select the compilation targets; + /// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the + /// engine's backend. + /// + /// [definesJson] is either nullptr or a flat JSON object of preprocessor + /// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic + /// backslash escapes are supported. + /// + /// [embedSource] controls whether the .mat source is embedded in the + /// package (matc's no-embed-source flag). + /// + /// On success returns a malloc'd buffer of *outSize bytes that the caller + /// must release with [Engine_freeCompiledMaterial]. On failure returns + /// nullptr and writes a NUL-terminated message into [outError] (capacity + /// [outErrorCap]). + external Pointer _Engine_compileMaterial( Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, + Pointer matSource, + size_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + size_t outErrorCap, + Pointer outSize, ); - external Pointer _SceneAsset_getFilamentAsset(Pointer tSceneAsset); - external int _SceneAsset_getType(Pointer tSceneAsset); - external void _SceneAsset_destroy(Pointer tSceneAsset); - external void _SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene); - external void _SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene); - external EntityId _SceneAsset_getEntity(Pointer tSceneAsset); - external int _SceneAsset_getChildEntityCount(Pointer tSceneAsset); - external void _SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out); - external Pointer _SceneAsset_getCameraEntities(Pointer tSceneAsset); - external size_t _SceneAsset_getCameraEntityCount(Pointer tSceneAsset); - external Pointer _SceneAsset_getLightEntities(Pointer tSceneAsset); - external size_t _SceneAsset_getLightEntityCount(Pointer tSceneAsset); - external Pointer _SceneAsset_getInstance(Pointer tSceneAsset, int index); - external size_t _SceneAsset_getInstanceCount(Pointer tSceneAsset); - external Pointer _SceneAsset_createInstance( - Pointer asset, - Pointer> materialInstances, - int materialInstanceCount, + + /// Releases a buffer returned by [Engine_compileMaterial]. + external void _Engine_freeCompiledMaterial(Pointer data); + + /// As [Engine_compileMaterial], but the work runs on the engine's render + /// thread. The task writes the malloc'd package to *[outData] and its size to + /// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on + /// failure with the message in [outError], then invokes [onComplete] with + /// [requestId]. + external void _Engine_compileMaterialRenderThread( + Pointer tEngine, + Pointer matSource, + size_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + size_t outErrorCap, + Pointer> outData, + Pointer outSize, + int requestId, + Pointer> onComplete, ); - external void _SceneAsset_getBoundingBox(Pointer Aabb3_out, Pointer asset); - external Pointer _SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex); - external Pointer _SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex); - external int _SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, EntityId entity); - external void _SceneAsset_releaseSourceData(Pointer tSceneAsset); - external void _SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading); - external void _SceneAsset_getBones(Pointer tSceneAsset, size_t skinIndex, Pointer out); - external size_t _SceneAsset_getBoneCount(Pointer tSceneAsset, size_t skinIndex); - external Pointer _SceneAsset_getBoneName(Pointer tSceneAsset, size_t skinIndex, size_t boneIndex); - external Pointer _SurfaceOrientationBuilder_create(); - external void _SurfaceOrientationBuilder_vertexCount(Pointer builder, size_t count); - external void _SurfaceOrientationBuilder_normals( - Pointer builder, - Pointer normals, - size_t stride, + external void _Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial); + external void _Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance); + external Pointer _Engine_createScene(Pointer tEngine); + external Pointer _Engine_buildSkybox( + Pointer tEngine, + Pointer tTexture, + bool showSun, + double intensity, + int priority, ); - external void _SurfaceOrientationBuilder_tangents( - Pointer builder, - Pointer tangents, - size_t stride, + external Pointer _Engine_buildColoredSkybox( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, ); - external void _SurfaceOrientationBuilder_uvs( - Pointer builder, - Pointer uvs, - size_t stride, + external Pointer _Engine_buildIndirectLightFromIrradianceTexture( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, ); - external void _SurfaceOrientationBuilder_positions( - Pointer builder, - Pointer positions, - size_t stride, + external Pointer _Engine_buildIndirectLightFromIrradianceHarmonics( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer irradianceHarmonics, + double intensity, ); - external void _SurfaceOrientationBuilder_triangleCount(Pointer builder, size_t count); - external void _SurfaceOrientationBuilder_triangles_uint( - Pointer builder, - Pointer triangles, + external void _Engine_destroySkybox(Pointer tEngine, Pointer tSkybox); + external void _Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight); + external EntityId _EntityManager_createEntity(Pointer tEntityManager); + external void _EntityManager_destroyEntity(Pointer tEntityManager, EntityId entityId); + external void _Fence_waitAndDestroy(Pointer tFence); + external Pointer _Engine_getDebugRegistry(Pointer tEngine); + external int _DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name); + external int _DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value); + external int _DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value); + external int _DebugRegistry_setProperty_float( + Pointer tDebugRegistry, + Pointer name, + double value, ); - external void _SurfaceOrientationBuilder_triangles_ushort( - Pointer builder, - Pointer triangles, + external int _DebugRegistry_getProperty_bool( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ); - external Pointer _SurfaceOrientationBuilder_build(Pointer builder); - external void _SurfaceOrientationBuilder_destroy(Pointer builder); - external size_t _SurfaceOrientation_getVertexCount(Pointer orientation); - external void _SurfaceOrientation_getQuats_float4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, + external int _DebugRegistry_getProperty_int( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ); - external void _SurfaceOrientation_getQuats_short4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, + external int _DebugRegistry_getProperty_float( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, ); - external void _SurfaceOrientation_getQuats_half4( - Pointer orientation, - Pointer out, - size_t quatCount, - size_t stride, + external Pointer _MaterialProvider_createMaterialInstance( + Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, ); - external void _SurfaceOrientation_destroy(Pointer orientation); + external Pointer _VertexBufferBuilder_create(); + external void _VertexBufferBuilder_bufferCount(Pointer builder, int count); + external void _VertexBufferBuilder_vertexCount(Pointer builder, int count); + external void _VertexBufferBuilder_attribute( + Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, + ); + external void _VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize); + external Pointer _VertexBufferBuilder_build( + Pointer builder, + Pointer engine, + ); + external void _VertexBufferBuilder_destroy(Pointer builder); + external size_t _VertexBuffer_getVertexCount(Pointer buffer); + external void _VertexBuffer_setBufferAt( + Pointer engine, + Pointer buffer, + int bufferIndex, + Pointer data, + size_t sizeInBytes, + int byteOffset, + ); + external void _VertexBuffer_destroy(Pointer engine, Pointer buffer); + external Pointer _IndexBufferBuilder_create(); + external void _IndexBufferBuilder_indexCount(Pointer builder, int count); + external void _IndexBufferBuilder_bufferType(Pointer builder, int indexType); + external Pointer _IndexBufferBuilder_build( + Pointer builder, + Pointer engine, + ); + external void _IndexBufferBuilder_destroy(Pointer builder); + external size_t _IndexBuffer_getIndexCount(Pointer buffer); + external void _IndexBuffer_setBuffer( + Pointer engine, + Pointer buffer, + Pointer data, + size_t sizeInBytes, + int byteOffset, + ); + external void _IndexBuffer_destroy(Pointer engine, Pointer buffer); external void _TransformManager_getLocalTransform( Pointer double4x4_out, Pointer tTransformManager, @@ -865,39 +766,6 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { ); external void _TransformManager_openLocalTransformTransaction(Pointer tTransformManager); external void _TransformManager_commitLocalTransformTransaction(Pointer tTransformManager); - external Pointer _VertexBufferBuilder_create(); - external void _VertexBufferBuilder_bufferCount(Pointer builder, int count); - external void _VertexBufferBuilder_vertexCount(Pointer builder, int count); - external void _VertexBufferBuilder_attribute( - Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, - ); - external void _VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize); - external Pointer _VertexBufferBuilder_build( - Pointer builder, - Pointer engine, - ); - external void _VertexBufferBuilder_destroy(Pointer builder); - external size_t _VertexBuffer_getVertexCount(Pointer buffer); - external void _VertexBuffer_setBufferAt( - Pointer engine, - Pointer buffer, - int bufferIndex, - Pointer data, - size_t sizeInBytes, - int byteOffset, - ); - external void _VertexBuffer_destroy(Pointer engine, Pointer buffer); - external void _FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); - external void _FrameScheduler_stop(); - external int _FrameScheduler_initDartApi(Pointer data); - external void _FrameScheduler_startWithPort(JSBigInt port, int targetFps); - external void _FrameScheduler_setTargetFps(int fps); - external JSBigInt _FrameScheduler_steadyClockUs(); external int _LightManager_createLight( Pointer tEngine, Pointer tLightManager, @@ -1016,345 +884,218 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { double lambda, ); external double _LightManager_rgbToColorTemperature(double r, double g, double b); - external void _RenderableManager_destroyEntity(Pointer tRenderableManager, EntityId entityId); - external int _RenderableManager_hasComponent(Pointer tRenderableManager, EntityId entityId); - external int _RenderableManager_empty(Pointer tRenderableManager); - external int _RenderableManager_isRenderable(Pointer tRenderableManager, EntityId entityId); - external size_t _RenderableManager_getComponentCount(Pointer tRenderableManager); - external int _RenderableManager_setMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, - Pointer tMaterialInstance, + external Pointer _RenderThread_create(); + external Pointer _RenderThread_createForCanvas(Pointer canvasSelector); + external void _RenderThread_destroy(Pointer renderThread); + external void _RenderThread_addTask(Pointer> task); + external void _RenderManager_setRenderableRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + Pointer> tViews, + int numViews, + int requestId, + VoidCallback onComplete, ); - external Pointer _RenderableManager_getMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, + external void _RenderManager_renderRenderThread( + Pointer tRenderManager, + JSBigInt frameTimeInNanos, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_clearMaterialInstanceAt( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, + external void _RenderManager_addAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); - external int _RenderableManager_setGeometryAtNonIndexed( - Pointer tRenderableManager, - EntityId entityId, - int primitiveIndex, - int type, - Pointer vertices, - size_t offset, - size_t count, + external void _RenderManager_removeAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); - external size_t _RenderableManager_getPrimitiveCount( - Pointer tRenderableManager, - EntityId entityId, + external void _RenderManager_removeSwapChainRenderThread( + Pointer tRenderManager, + Pointer tSwapChain, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_getAxisAlignedBoundingBox( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + external void _AnimationManager_createRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); - external void _RenderableManager_setAxisAlignedBoundingBox( - Pointer tRenderableManager, - EntityId entityId, - Pointer aabbPtr, + external void _AnimationManager_destroyRenderThread( + Pointer tAnimationManager, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_getAabb( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + external void _Engine_createRenderThread( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + Pointer)>> onComplete, ); - external void _RenderableManager_getBoundingBox( - Pointer Aabb3_out, - Pointer tRenderableManager, - EntityId entityId, + external void _Engine_createRendererRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); - external void _RenderableManager_setLayerMask( - Pointer tRenderableManager, - EntityId entityId, - int select, - int values, + external void _Engine_destroyRendererRenderThread( + Pointer tEngine, + Pointer tRenderer, + int requestId, + VoidCallback onComplete, ); - external int _RenderableManager_getLayerMask(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setVisibilityLayer( - Pointer tRenderableManager, - EntityId entityId, - int layer, + external void _Engine_createSwapChainRenderThread( + Pointer tEngine, + Pointer window, + JSBigInt flags, + Pointer)>> onComplete, ); - external void _RenderableManager_setPriority( - Pointer tRenderableManager, - EntityId entityId, - int priority, + external void _Engine_createHeadlessSwapChainRenderThread( + Pointer tEngine, + int width, + int height, + JSBigInt flags, + Pointer)>> onComplete, ); - external int _RenderableManager_getPriority(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setChannel( - Pointer tRenderableManager, + external void _Engine_createCameraRenderThread( + Pointer tEngine, EntityId entityId, - int channel, + Pointer)>> onComplete, ); - external void _RenderableManager_setCulling( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, - ); - external int _RenderableManager_getCulling(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setFogEnabled( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, - ); - external int _RenderableManager_getFogEnabled(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setLightChannel( - Pointer tRenderableManager, - EntityId entityId, - int channel, - bool enable, + external void _Engine_destroyCameraRenderThread( + Pointer tEngine, + Pointer tCamera, + int requestId, + VoidCallback onComplete, ); - external int _RenderableManager_getLightChannel( - Pointer tRenderableManager, - EntityId entityId, - int channel, + external void _Engine_createViewRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); - external void _RenderableManager_setCastShadows( - Pointer tRenderableManager, - EntityId entityId, - bool castShadows, + external void _Engine_buildMaterialRenderThread( + Pointer tEngine, + Pointer materialData, + size_t length, + Pointer)>> onComplete, ); - external int _RenderableManager_isShadowCaster(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setReceiveShadows( - Pointer tRenderableManager, - EntityId entityId, - bool receiveShadows, + external void _Engine_destroyRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_destroySwapChainRenderThread( + Pointer tEngine, + Pointer tSwapChain, + int requestId, + VoidCallback onComplete, ); - external int _RenderableManager_isShadowReceiver(Pointer tRenderableManager, EntityId entityId); - external void _RenderableManager_setScreenSpaceContactShadows( - Pointer tRenderableManager, - EntityId entityId, - bool enabled, + external void _Engine_destroyViewRenderThread( + Pointer tEngine, + Pointer tView, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_setBlendOrderAt( - Pointer tRenderableManager, - EntityId entityId, - size_t primitiveIndex, - int order, + external void _Engine_destroySceneRenderThread( + Pointer tEngine, + Pointer tScene, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_setGlobalBlendOrderEnabledAt( - Pointer tRenderableManager, - EntityId entityId, - size_t primitiveIndex, - bool enabled, + external void _Engine_destroyColorGradingRenderThread( + Pointer tEngine, + Pointer tColorGrading, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_setMorphWeights( - Pointer tRenderableManager, - EntityId entityId, - Pointer weights, - size_t count, - size_t offset, + external void _Engine_destroyMaterialRenderThread( + Pointer tEngine, + Pointer tMaterial, + int requestId, + VoidCallback onComplete, ); - external size_t _RenderableManager_getMorphTargetCount( - Pointer tRenderableManager, - EntityId entityId, + external void _Engine_destroyMaterialInstanceRenderThread( + Pointer tEngine, + Pointer tMaterialInstance, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_setBonesFromMat4( - Pointer tRenderableManager, - EntityId entityId, - Pointer transforms, - size_t boneCount, - size_t offset, + external void _Engine_destroySkyboxRenderThread( + Pointer tEngine, + Pointer tSkybox, + int requestId, + VoidCallback onComplete, ); - external void _RenderableManager_setBonesFromBone( - Pointer tRenderableManager, - EntityId entityId, - Pointer bones, - size_t boneCount, - size_t offset, + external void _Engine_destroyIndirectLightRenderThread( + Pointer tEngine, + Pointer tIndirectLight, + int requestId, + VoidCallback onComplete, ); - external Pointer _RenderableBuilder_create(size_t primitiveCount); - external void _RenderableBuilder_destroy(Pointer builder); - external void _RenderableBuilder_boundingBox(Pointer builder, Pointer aabbPtr); - external void _RenderableBuilder_material( - Pointer builder, - size_t primitiveIndex, - Pointer materialInstance, + external void _Texture_buildRenderThread( + Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import1, + int sampler, + int format, + Pointer)>> onComplete, ); - external void _RenderableBuilder_geometry( - Pointer builder, - size_t primitiveIndex, - int type, - Pointer vertices, - Pointer indices, - size_t offset, - size_t count, + external void _Texture_setExternalImageRenderThread( + Pointer tEngine, + Pointer tTexture, + Pointer externalImage, + int requestId, + VoidCallback onComplete, ); - external void _RenderableBuilder_geometryNonIndexed( - Pointer builder, - size_t primitiveIndex, - int type, - Pointer vertices, - size_t offset, - size_t count, + external void _Texture_generateMipMapsRenderThread( + Pointer tTexture, + Pointer tEngine, + int requestId, + VoidCallback onComplete, ); - external void _RenderableBuilder_priority(Pointer builder, int priority); - external void _RenderableBuilder_channel(Pointer builder, int channel); - external void _RenderableBuilder_culling(Pointer builder, bool enabled); - external void _RenderableBuilder_castShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_receiveShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_fog(Pointer builder, bool enabled); - external void _RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled); - external void _RenderableBuilder_layerMask(Pointer builder, int select, int values); - external void _RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled); - external void _RenderableBuilder_blendOrder(Pointer builder, size_t primitiveIndex, int order); - external void _RenderableBuilder_globalBlendOrderEnabled( - Pointer builder, - size_t primitiveIndex, - bool enabled, + external void _Ktx1Reader_createTextureRenderThread( + Pointer tEngine, + Pointer tBundle, + int requestId, + VoidCallback onTextureUploadComplete, + Pointer)>> onComplete, ); - external void _RenderableBuilder_instances(Pointer builder, size_t instanceCount); - external void _RenderableBuilder_skinningFromMat4( - Pointer builder, - size_t boneCount, - Pointer transforms, + external void _Ktx2Reader_createTextureRenderThread( + Pointer tEngine, + Pointer data, + size_t size, + Pointer)>> onComplete, ); - external void _RenderableBuilder_skinningFromBone( - Pointer builder, - size_t boneCount, - Pointer bones, + external void _Engine_destroyTextureRenderThread( + Pointer engine, + Pointer tTexture, + int requestId, + VoidCallback onComplete, ); - external void _RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled); - external void _RenderableBuilder_boneIndicesAndWeights( - Pointer builder, - size_t primitiveIndex, - Pointer indicesAndWeights, - size_t count, - size_t bonesPerVertex, + external void _Engine_createFenceRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); - external int _RenderableBuilder_build(Pointer builder, Pointer engine, EntityId entity); - external void _Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a); - - /// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). - external void _Skybox_setLayerMask(Pointer tSkybox, int select, int values); - - /// Returns the visibility mask bits. - external int _Skybox_getLayerMask(Pointer tSkybox); - - /// Returns the skybox intensity in lux. - external double _Skybox_getIntensity(Pointer tSkybox); - - /// Returns the environment texture, or nullptr for a color-only skybox. - external Pointer _Skybox_getTexture(Pointer tSkybox); - external Pointer _Engine_create( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, + external void _Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, VoidCallback onComplete); + external void _Engine_destroyFenceRenderThread( + Pointer tEngine, + Pointer tFence, + int requestId, + VoidCallback onComplete, ); - external int _Engine_getSupportedFeatureLevel(Pointer tEngine); - external void _Engine_destroy(Pointer tEngine); - external Pointer _Engine_createRenderer(Pointer tEngine); - external void _Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer); - external Pointer _Engine_createSwapChain(Pointer tEngine, Pointer window, JSBigInt flags); - external Pointer _Engine_createHeadlessSwapChain( + external void _Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_executeRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); + external void _Engine_buildSkyboxRenderThread( Pointer tEngine, - int width, - int height, - JSBigInt flags, + Pointer tTexture, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, ); - external void _Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain); - external void _Engine_destroyView(Pointer tEngine, Pointer tView); - external void _Engine_destroyScene(Pointer tEngine, Pointer tScene); - external void _Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading); - external Pointer _Engine_createCamera(Pointer tEngine, EntityId entityId); - external void _Engine_destroyCamera(Pointer tEngine, Pointer tCamera); - external Pointer _Engine_createView(Pointer tEngine); - external Pointer _Engine_getCameraComponent(Pointer tEngine, EntityId entityId); - external Pointer _Engine_getTransformManager(Pointer engine); - external Pointer _Engine_getRenderableManager(Pointer engine); - external Pointer _Engine_getLightManager(Pointer engine); - external Pointer _Engine_getEntityManager(Pointer engine); - external void _Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled); - external size_t _Engine_getMaxAutomaticInstances(Pointer tEngine); - external void _Engine_destroyTexture(Pointer tEngine, Pointer tTexture); - external Pointer _Engine_createFence(Pointer tEngine); - external void _Engine_destroyFence(Pointer tEngine, Pointer tFence); - external void _Engine_flushAndWait(Pointer tEngine); - external void _Engine_execute(Pointer tEngine); - external Pointer _Engine_buildMaterial( - Pointer tEngine, - Pointer materialData, - size_t length, - ); - - /// Compiles .mat [matSource] ([length] bytes, not necessarily - /// NUL-terminated) into a filamat package, synchronously on the calling - /// thread. #include directives must already be resolved by the caller (the - /// Dart layer flattens them). - /// - /// [platform]/[targetApi]/[optimization] select the compilation targets; - /// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the - /// engine's backend. - /// - /// [definesJson] is either nullptr or a flat JSON object of preprocessor - /// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic - /// backslash escapes are supported. - /// - /// [embedSource] controls whether the .mat source is embedded in the - /// package (matc's no-embed-source flag). - /// - /// On success returns a malloc'd buffer of *outSize bytes that the caller - /// must release with [Engine_freeCompiledMaterial]. On failure returns - /// nullptr and writes a NUL-terminated message into [outError] (capacity - /// [outErrorCap]). - external Pointer _Engine_compileMaterial( - Pointer tEngine, - Pointer matSource, - size_t length, - int platform, - int targetApi, - int optimization, - Pointer definesJson, - int embedSource, - Pointer outError, - size_t outErrorCap, - Pointer outSize, - ); - - /// Releases a buffer returned by [Engine_compileMaterial]. - external void _Engine_freeCompiledMaterial(Pointer data); - - /// As [Engine_compileMaterial], but the work runs on the engine's render - /// thread. The task writes the malloc'd package to *[outData] and its size to - /// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on - /// failure with the message in [outError], then invokes [onComplete] with - /// [requestId]. - external void _Engine_compileMaterialRenderThread( - Pointer tEngine, - Pointer matSource, - size_t length, - int platform, - int targetApi, - int optimization, - Pointer definesJson, - int embedSource, - Pointer outError, - size_t outErrorCap, - Pointer> outData, - Pointer outSize, - int requestId, - Pointer> onComplete, - ); - external void _Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial); - external void _Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance); - external Pointer _Engine_createScene(Pointer tEngine); - external Pointer _Engine_buildSkybox( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, - ); - external Pointer _Engine_buildColoredSkybox( + external void _Engine_buildColoredSkyboxRenderThread( Pointer tEngine, double r, double g, @@ -1363,387 +1104,125 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { bool showSun, double intensity, int priority, + Pointer)>> onComplete, ); - external Pointer _Engine_buildIndirectLightFromIrradianceTexture( + external void _Engine_buildIndirectLightFromIrradianceTextureRenderThread( Pointer tEngine, Pointer tReflectionsTexture, Pointer tIrradianceTexture, double intensity, + Pointer)>> onComplete, ); - external Pointer _Engine_buildIndirectLightFromIrradianceHarmonics( + external void _Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( Pointer tEngine, Pointer tReflectionsTexture, - Pointer irradianceHarmonics, + Pointer harmonics, double intensity, + Pointer)>> onComplete, ); - external void _Engine_destroySkybox(Pointer tEngine, Pointer tSkybox); - external void _Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight); - external EntityId _EntityManager_createEntity(Pointer tEntityManager); - external void _EntityManager_destroyEntity(Pointer tEntityManager, EntityId entityId); - external void _Fence_waitAndDestroy(Pointer tFence); - external Pointer _Engine_getDebugRegistry(Pointer tEngine); - external int _DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name); - external int _DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value); - external int _DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value); - external int _DebugRegistry_setProperty_float( - Pointer tDebugRegistry, - Pointer name, - double value, - ); - external int _DebugRegistry_getProperty_bool( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, - ); - external int _DebugRegistry_getProperty_int( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, - ); - external int _DebugRegistry_getProperty_float( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, - ); - external Pointer _RenderThread_create(); - external Pointer _RenderThread_createForCanvas(Pointer canvasSelector); - external void _RenderThread_destroy(Pointer renderThread); - external void _RenderThread_addTask(Pointer> task); - external void _RenderManager_setRenderableRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - Pointer> tViews, - int numViews, + external void _Renderer_setClearOptionsRenderThread( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, int requestId, VoidCallback onComplete, ); - external void _RenderManager_renderRenderThread( - Pointer tRenderManager, + external void _Renderer_beginFrameRenderThread( + Pointer tRenderer, + Pointer tSwapChain, JSBigInt frameTimeInNanos, - int requestId, - VoidCallback onComplete, + Pointer> onComplete, ); - external void _RenderManager_addAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, + external void _Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, VoidCallback onComplete); + external void _Renderer_renderRenderThread( + Pointer tRenderer, + Pointer tView, int requestId, VoidCallback onComplete, ); - external void _RenderManager_removeAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, + external void _Renderer_renderStandaloneViewRenderThread( + Pointer tRenderer, + Pointer tView, int requestId, VoidCallback onComplete, ); - external void _RenderManager_removeSwapChainRenderThread( - Pointer tRenderManager, - Pointer tSwapChain, + external void _Renderer_readPixelsRenderThread( + Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + size_t outLength, int requestId, VoidCallback onComplete, ); - external void _AnimationManager_createRenderThread( - Pointer tEngine, - Pointer)>> onComplete, + external void _Material_createInstanceRenderThread( + Pointer tMaterial, + Pointer)>> onComplete, ); - external void _AnimationManager_destroyRenderThread( - Pointer tAnimationManager, + external void _MaterialInstance_setParameterTextureRenderThread( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer tTexture, + Pointer tSampler, int requestId, VoidCallback onComplete, ); - external void _Engine_createRenderThread( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - Pointer)>> onComplete, + external void _Material_createImageMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ); - external void _Engine_createRendererRenderThread( + external void _Material_createGizmoMaterialRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Engine_destroyRendererRenderThread( + external void _Material_createBoneOverlayMaterialRenderThread( Pointer tEngine, - Pointer tRenderer, - int requestId, - VoidCallback onComplete, + Pointer)>> onComplete, ); - external void _Engine_createSwapChainRenderThread( + external void _Material_createSilhouetteMaterialRenderThread( Pointer tEngine, - Pointer window, - JSBigInt flags, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Engine_createHeadlessSwapChainRenderThread( + external void _Material_createEdgeOutlineMaterialRenderThread( Pointer tEngine, - int width, - int height, - JSBigInt flags, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Engine_createCameraRenderThread( + external void _Material_createWireframeMaterialRenderThread( Pointer tEngine, - EntityId entityId, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Engine_destroyCameraRenderThread( + external void _Material_createTranslationAxisMaterialRenderThread( Pointer tEngine, - Pointer tCamera, + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_createRenderThread( + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + Pointer)>> onComplete, + ); + external void _ColorGradingBuilder_destroyRenderThread( + Pointer tBuilder, int requestId, VoidCallback onComplete, ); - external void _Engine_createViewRenderThread( + external void _ToneMapper_createLinearRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer)>> onComplete, ); - external void _Engine_buildMaterialRenderThread( - Pointer tEngine, - Pointer materialData, - size_t length, - Pointer)>> onComplete, - ); - external void _Engine_destroyRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_destroySwapChainRenderThread( - Pointer tEngine, - Pointer tSwapChain, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroyViewRenderThread( - Pointer tEngine, - Pointer tView, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroySceneRenderThread( - Pointer tEngine, - Pointer tScene, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroyColorGradingRenderThread( - Pointer tEngine, - Pointer tColorGrading, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroyMaterialRenderThread( - Pointer tEngine, - Pointer tMaterial, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroyMaterialInstanceRenderThread( - Pointer tEngine, - Pointer tMaterialInstance, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroySkyboxRenderThread( - Pointer tEngine, - Pointer tSkybox, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_destroyIndirectLightRenderThread( - Pointer tEngine, - Pointer tIndirectLight, - int requestId, - VoidCallback onComplete, - ); - external void _Texture_buildRenderThread( - Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import1, - int sampler, - int format, - Pointer)>> onComplete, - ); - external void _Texture_setExternalImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer externalImage, - int requestId, - VoidCallback onComplete, - ); - external void _Texture_generateMipMapsRenderThread( - Pointer tTexture, - Pointer tEngine, - int requestId, - VoidCallback onComplete, - ); - external void _Ktx1Reader_createTextureRenderThread( - Pointer tEngine, - Pointer tBundle, - int requestId, - VoidCallback onTextureUploadComplete, - Pointer)>> onComplete, - ); - external void _Ktx2Reader_createTextureRenderThread( - Pointer tEngine, - Pointer data, - size_t size, - Pointer)>> onComplete, - ); - external void _Engine_destroyTextureRenderThread( - Pointer engine, - Pointer tTexture, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_createFenceRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, VoidCallback onComplete); - external void _Engine_destroyFenceRenderThread( - Pointer tEngine, - Pointer tFence, - int requestId, - VoidCallback onComplete, - ); - external void _Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_executeRenderThread(Pointer tEngine, int requestId, VoidCallback onComplete); - external void _Engine_buildSkyboxRenderThread( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, - ); - external void _Engine_buildColoredSkyboxRenderThread( - Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, - ); - external void _Engine_buildIndirectLightFromIrradianceTextureRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, - Pointer)>> onComplete, - ); - external void _Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer harmonics, - double intensity, - Pointer)>> onComplete, - ); - external void _Renderer_setClearOptionsRenderThread( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, - int requestId, - VoidCallback onComplete, - ); - external void _Renderer_beginFrameRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - JSBigInt frameTimeInNanos, - Pointer> onComplete, - ); - external void _Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, VoidCallback onComplete); - external void _Renderer_renderRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - VoidCallback onComplete, - ); - external void _Renderer_renderStandaloneViewRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - VoidCallback onComplete, - ); - external void _Renderer_readPixelsRenderThread( - Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - size_t outLength, - int requestId, - VoidCallback onComplete, - ); - external void _Material_createInstanceRenderThread( - Pointer tMaterial, - Pointer)>> onComplete, - ); - external void _MaterialInstance_setParameterTextureRenderThread( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer tTexture, - Pointer tSampler, - int requestId, - VoidCallback onComplete, - ); - external void _Material_createImageMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createGizmoMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createBoneOverlayMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createSilhouetteMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createEdgeOutlineMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createWireframeMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _Material_createTranslationAxisMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _ColorGradingBuilder_createRenderThread( - Pointer)>> onComplete, - ); - external void _ColorGradingBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _ColorGradingBuilder_destroyRenderThread( - Pointer tBuilder, - int requestId, - VoidCallback onComplete, - ); - external void _ToneMapper_createLinearRenderThread( - Pointer tEngine, - Pointer)>> onComplete, - ); - external void _ToneMapper_createACESRenderThread( + external void _ToneMapper_createACESRenderThread( Pointer tEngine, Pointer)>> onComplete, ); @@ -2436,619 +1915,629 @@ extension type GeneratedBindings(NativeLibrary _) implements JSObject { int requestId, VoidCallback onComplete, ); - external void _Scene_addEntity(Pointer tScene, EntityId entityId); - external void _Scene_removeEntity(Pointer tScene, EntityId entityId); - external void _Scene_setSkybox(Pointer tScene, Pointer skybox); - external Pointer _Scene_getSkybox(Pointer tScene); - external void _Scene_setIndirectLight(Pointer tScene, Pointer tIndirectLight); - external void _Scene_addFilamentAsset(Pointer tScene, Pointer asset); - - /// Walks every renderable primitive in the scene and records the ones whose - /// current MaterialInstance belongs to [tMaterial]. - /// - /// Returns the TOTAL number of matches (which may exceed [capacity]). When - /// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to - /// [capacity] matches are written to them. Call once with null buffers to - /// size the output, then again to fetch it. - external size_t _Scene_scanForMaterial( - Pointer tScene, - Pointer tRenderableManager, - Pointer tMaterial, - Pointer outEntities, - Pointer outPrimitives, - Pointer> outInstances, - size_t capacity, + external void _Renderer_setClearOptions( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, ); - external void _MovementIntentExecutor_destroy(Pointer executor); - external void _MovementIntentExecutor_process( - Pointer executor, - Pointer intent, - JSBigInt deltaTimeInNanos, + external int _Renderer_beginFrame( + Pointer tRenderer, + Pointer tSwapChain, + JSBigInt frameTimeInNanos, ); - external void _Pipeline_registerMovementIntentExecutor(Pointer executor); - external void _TransformPipeline_setEngine(Pointer enginePtr); - external void _TransformPipeline_onMouseEvent( - int eventType, - int button, - double localX, - double localY, - double deltaX, - double deltaY, + external void _Renderer_endFrame(Pointer tRenderer); + external void _Renderer_render(Pointer tRenderer, Pointer tView); + external void _Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView); + external void _Renderer_readPixels( + Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + size_t outLength, ); - external void _TransformPipeline_onKeyEvent(int eventType, int logicalKey, int physicalKey, int synthesized); - external void _TransformPipeline_onScrollEvent(double localX, double localY, double delta); - external void _TransformPipeline_update(double deltaTime); - external void _TransformPipeline_registerPipelineStage(Pointer pipelineStageHandle, Pointer name); - external void _TransformPipeline_unregisterPipelineStage(Pointer pipelineStageHandle); - external void _TransformPipeline_cleanup(); - external void _TransformPipeline_addKeyBinding(int logicalKey, int intentAction, double value); - external void _TransformPipeline_removeKeyBindingsForKey(int logicalKey); - external void _TransformPipeline_removeKeyBindingsForAction(int intentAction); - external void _TransformPipeline_clearKeyBindings(); - external void _TransformPipeline_addMouseButtonBinding(int mouseButton, int intentAction, double value); - external void _TransformPipeline_removeMouseButtonBindings(int mouseButton); - external void _TransformPipeline_setMouseSensitivity(double sensitivity); - external void _TransformPipeline_setInvertMouseY(int invert); -} - -void Thermion_setCanvasElementSize(Pointer name, int width, int height) { - final result = GeneratedBindings.instance._Thermion_setCanvasElementSize(name, width, height); - return result; -} + external void _Renderer_setFrameInterval( + Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, + ); + external Pointer _RenderTarget_create( + Pointer tEngine, + Pointer color, + Pointer depth, + ); + external void _RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget); + external void _Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a); -void Thermion_destroyCanvas(Pointer canvasSelector) { - final result = GeneratedBindings.instance._Thermion_destroyCanvas(canvasSelector); - return result; -} + /// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). + external void _Skybox_setLayerMask(Pointer tSkybox, int select, int values); -int Thermion_createGLContext(Pointer canvasSelector) { - final result = GeneratedBindings.instance._Thermion_createGLContext(canvasSelector); - return result; -} + /// Returns the visibility mask bits. + external int _Skybox_getLayerMask(Pointer tSkybox); -int Thermion_getGLContext() { - final result = GeneratedBindings.instance._Thermion_getGLContext(); - return result; -} + /// Returns the skybox intensity in lux. + external double _Skybox_getIntensity(Pointer tSkybox); -BigInt get TSWAP_CHAIN_CONFIG_TRANSPARENT { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_TRANSPARENT, - "i64", + /// Returns the environment texture, or nullptr for a color-only skybox. + external Pointer _Skybox_getTexture(Pointer tSkybox); + external void _RenderableManager_destroyEntity(Pointer tRenderableManager, EntityId entityId); + external int _RenderableManager_hasComponent(Pointer tRenderableManager, EntityId entityId); + external int _RenderableManager_empty(Pointer tRenderableManager); + external int _RenderableManager_isRenderable(Pointer tRenderableManager, EntityId entityId); + external size_t _RenderableManager_getComponentCount(Pointer tRenderableManager); + external int _RenderableManager_setMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, + Pointer tMaterialInstance, ); - return bigIntasUintN(64, value).toDart; -} - -BigInt get TSWAP_CHAIN_CONFIG_READABLE { - final value = NativeLibrary.instance.getValueBigInt(GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_READABLE, "i64"); - return bigIntasUintN(64, value).toDart; -} - -BigInt get TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER, - "i64", + external Pointer _RenderableManager_getMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, ); - return bigIntasUintN(64, value).toDart; -} - -BigInt get TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER { - final value = NativeLibrary.instance.getValueBigInt( - GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER, - "i64", + external void _RenderableManager_clearMaterialInstanceAt( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, ); - return bigIntasUintN(64, value).toDart; -} - -Pointer AnimationManager_create(Pointer tEngine) { - final result = GeneratedBindings.instance._AnimationManager_create(tEngine.cast()); - return Pointer(result); -} - -void AnimationManager_destroy(Pointer tAnimationManager) { - final result = GeneratedBindings.instance._AnimationManager_destroy(tAnimationManager.cast()); - return result; -} - -void AnimationManager_update(Pointer tAnimationManager, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._AnimationManager_update( - tAnimationManager.cast(), - frameTimeInNanos.toJSBigInt, + external int _RenderableManager_setGeometryAtNonIndexed( + Pointer tRenderableManager, + EntityId entityId, + int primitiveIndex, + int type, + Pointer vertices, + size_t offset, + size_t count, ); - return result; -} - -bool AnimationManager_addGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_addGltfAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + external size_t _RenderableManager_getPrimitiveCount( + Pointer tRenderableManager, + EntityId entityId, ); - return result == 1; -} - -bool AnimationManager_removeGltfAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_removeGltfAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + external void _RenderableManager_getAxisAlignedBoundingBox( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - return result == 1; -} - -void AnimationManager_addMorphAnimationComponent(Pointer tAnimationManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._AnimationManager_addMorphAnimationComponent( - tAnimationManager.cast(), - entityId, + external void _RenderableManager_setAxisAlignedBoundingBox( + Pointer tRenderableManager, + EntityId entityId, + Pointer aabbPtr, ); - return result; -} - -void AnimationManager_removeMorphAnimationComponent( - Pointer tAnimationManager, - DartEntityId entityId, -) { - final result = GeneratedBindings.instance._AnimationManager_removeMorphAnimationComponent( - tAnimationManager.cast(), - entityId, + external void _RenderableManager_getAabb( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - return result; -} - -bool AnimationManager_addBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_addBoneAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + external void _RenderableManager_getBoundingBox( + Pointer Aabb3_out, + Pointer tRenderableManager, + EntityId entityId, ); - return result == 1; -} - -bool AnimationManager_removeBoneAnimationComponent( - Pointer tAnimationManager, - Pointer tSceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_removeBoneAnimationComponent( - tAnimationManager.cast(), - tSceneAsset.cast(), + external void _RenderableManager_setLayerMask( + Pointer tRenderableManager, + EntityId entityId, + int select, + int values, ); - return result == 1; -} - -bool AnimationManager_setMorphAnimation( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - Pointer morphIndices, - int numMorphTargets, - int numFrames, - double frameLengthInMs, -) { - final result = GeneratedBindings.instance._AnimationManager_setMorphAnimation( - tAnimationManager.cast(), - entityId, - morphData, - morphIndices, - numMorphTargets, - numFrames, - frameLengthInMs, + external int _RenderableManager_getLayerMask(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setVisibilityLayer( + Pointer tRenderableManager, + EntityId entityId, + int layer, ); - return result == 1; -} - -bool AnimationManager_clearMorphAnimation(Pointer tAnimationManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._AnimationManager_clearMorphAnimation(tAnimationManager.cast(), entityId); - return result == 1; -} - -void AnimationManager_resetToRestPose(Pointer tAnimationManager, Pointer sceneAsset) { - final result = GeneratedBindings.instance._AnimationManager_resetToRestPose( - tAnimationManager.cast(), - sceneAsset.cast(), + external void _RenderableManager_setPriority( + Pointer tRenderableManager, + EntityId entityId, + int priority, ); - return result; -} - -bool AnimationManager_addBoneAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int skinIndex, - int boneIndex, - Pointer frameData, - int numFrames, - double frameLengthInMs, - double fadeOutInSecs, - double fadeInInSecs, - double maxDelta, - bool loop, -) { - final result = GeneratedBindings.instance._AnimationManager_addBoneAnimation( - tAnimationManager.cast(), - tSceneAsset.cast(), - skinIndex, - boneIndex, - frameData, - numFrames, - frameLengthInMs, - fadeOutInSecs, - fadeInInSecs, - maxDelta, - loop, + external int _RenderableManager_getPriority(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, ); - return result == 1; -} - -void AnimationManager_getRestLocalTransforms( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - Pointer out, - int numBones, -) { - final result = GeneratedBindings.instance._AnimationManager_getRestLocalTransforms( - tAnimationManager.cast(), - sceneAsset.cast(), - skinIndex, - out, - numBones, + external void _RenderableManager_setCulling( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - return result; -} - -void AnimationManager_getInverseBindMatrix( - Pointer tAnimationManager, - Pointer sceneAsset, - int skinIndex, - int boneIndex, - Pointer out, -) { - final result = GeneratedBindings.instance._AnimationManager_getInverseBindMatrix( - tAnimationManager.cast(), - sceneAsset.cast(), - skinIndex, - boneIndex, - out, + external int _RenderableManager_getCulling(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setFogEnabled( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - return result; -} - -bool AnimationManager_playGltfAnimation( - Pointer tAnimationManager, - Pointer tSceneAsset, - int index, - bool loop, - bool reverse, - bool replaceActive, - double crossfade, - double startOffset, - double speed, -) { - final result = GeneratedBindings.instance._AnimationManager_playGltfAnimation( - tAnimationManager.cast(), - tSceneAsset.cast(), - index, - loop, - reverse, - replaceActive, - crossfade, - startOffset, - speed, + external int _RenderableManager_getFogEnabled(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setLightChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, + bool enable, ); - return result == 1; -} - -bool AnimationManager_stopGltfAnimation( - Pointer tAnimationManager, - Pointer sceneAsset, - int index, -) { - final result = GeneratedBindings.instance._AnimationManager_stopGltfAnimation( - tAnimationManager.cast(), - sceneAsset.cast(), - index, + external int _RenderableManager_getLightChannel( + Pointer tRenderableManager, + EntityId entityId, + int channel, ); - return result == 1; -} - -double AnimationManager_getGltfAnimationDuration( - Pointer tAnimationManager, - Pointer sceneAsset, - int animationIndex, -) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationDuration( - tAnimationManager.cast(), - sceneAsset.cast(), - animationIndex, + external void _RenderableManager_setCastShadows( + Pointer tRenderableManager, + EntityId entityId, + bool castShadows, ); - return result; -} - -int AnimationManager_getGltfAnimationCount( - Pointer tAnimationManager, - Pointer sceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationCount( - tAnimationManager.cast(), - sceneAsset.cast(), + external int _RenderableManager_isShadowCaster(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setReceiveShadows( + Pointer tRenderableManager, + EntityId entityId, + bool receiveShadows, ); - return result; -} - -void AnimationManager_getGltfAnimationName( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer outPtr, - int index, -) { - final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationName( - tAnimationManager.cast(), - sceneAsset.cast(), - outPtr, - index, + external int _RenderableManager_isShadowReceiver(Pointer tRenderableManager, EntityId entityId); + external void _RenderableManager_setScreenSpaceContactShadows( + Pointer tRenderableManager, + EntityId entityId, + bool enabled, ); - return result; -} - -int AnimationManager_getMorphTargetNameCount( - Pointer tAnimationManager, - Pointer sceneAsset, - DartEntityId childEntity, -) { - final result = GeneratedBindings.instance._AnimationManager_getMorphTargetNameCount( - tAnimationManager.cast(), - sceneAsset.cast(), - childEntity, + external void _RenderableManager_setBlendOrderAt( + Pointer tRenderableManager, + EntityId entityId, + size_t primitiveIndex, + int order, ); - return result; -} - -void AnimationManager_getMorphTargetName( - Pointer tAnimationManager, - Pointer sceneAsset, - DartEntityId childEntity, - Pointer outPtr, - int index, -) { - final result = GeneratedBindings.instance._AnimationManager_getMorphTargetName( - tAnimationManager.cast(), - sceneAsset.cast(), - childEntity, - outPtr, - index, + external void _RenderableManager_setGlobalBlendOrderEnabledAt( + Pointer tRenderableManager, + EntityId entityId, + size_t primitiveIndex, + bool enabled, ); - return result; -} - -bool AnimationManager_updateBoneMatrices( - Pointer tAnimationManager, - Pointer sceneAsset, -) { - final result = GeneratedBindings.instance._AnimationManager_updateBoneMatrices( - tAnimationManager.cast(), - sceneAsset.cast(), + external void _RenderableManager_setMorphWeights( + Pointer tRenderableManager, + EntityId entityId, + Pointer weights, + size_t count, + size_t offset, ); - return result == 1; -} - -bool AnimationManager_setMorphTargetWeights( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - int numWeights, -) { - final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeights( - tAnimationManager.cast(), - entityId, - morphData, - numWeights, + external size_t _RenderableManager_getMorphTargetCount( + Pointer tRenderableManager, + EntityId entityId, ); - return result == 1; -} - -bool AnimationManager_setGltfAnimationTime( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, -) { - final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTime( - tAnimationManager.cast(), - tSceneAsset.cast(), - animationIndex, - timeInSeconds, + external void _RenderableManager_setBonesFromMat4( + Pointer tRenderableManager, + EntityId entityId, + Pointer transforms, + size_t boneCount, + size_t offset, ); - return result == 1; -} - -void Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity) { - final result = GeneratedBindings.instance._Camera_setExposure(camera.cast(), aperture, shutterSpeed, sensitivity); - return result; -} - -double Camera_getAperture(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getAperture(camera.cast()); - return result; -} - -double Camera_getShutterSpeed(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getShutterSpeed(camera.cast()); - return result; -} - -double Camera_getSensitivity(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getSensitivity(camera.cast()); - return result; -} - -double4x4 Camera_getModelMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getModelMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getViewMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getViewMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getProjectionMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getProjectionMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -double4x4 Camera_getCullingProjectionMatrix(Pointer camera) { - final double4x4_out = double4x4.stackAlloc(); - final result = GeneratedBindings.instance._Camera_getCullingProjectionMatrix(double4x4_out.cast(), camera.cast()); - return double4x4_out.toDart(); -} - -void Camera_getFrustum(Pointer camera, Pointer out) { - final result = GeneratedBindings.instance._Camera_getFrustum(camera.cast(), out); - return result; -} - -void Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far) { - final result = GeneratedBindings.instance._Camera_setProjectionMatrix(camera.cast(), matrix, near, far); - return result; -} - -void Camera_setProjectionFromFov( - Pointer camera, - double fovInDegrees, - double aspect, - double near, - double far, - bool horizontal, -) { - final result = GeneratedBindings.instance._Camera_setProjectionFromFov( - camera.cast(), - fovInDegrees, - aspect, - near, - far, - horizontal, + external void _RenderableManager_setBonesFromBone( + Pointer tRenderableManager, + EntityId entityId, + Pointer bones, + size_t boneCount, + size_t offset, ); - return result; -} - -double Camera_getFocalLength(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getFocalLength(camera.cast()); - return result; -} - -void Camera_lookAt(Pointer camera, double3 eye, double3 focus, double3 up) { - final eyePtr = eye.address; - final focusPtr = focus.address; - final upPtr = up.address; - final result = GeneratedBindings.instance._Camera_lookAt(camera.cast(), eyePtr.cast(), focusPtr.cast(), upPtr.cast()); - return result; -} + external Pointer _RenderableBuilder_create(size_t primitiveCount); + external void _RenderableBuilder_destroy(Pointer builder); + external void _RenderableBuilder_boundingBox(Pointer builder, Pointer aabbPtr); + external void _RenderableBuilder_material( + Pointer builder, + size_t primitiveIndex, + Pointer materialInstance, + ); + external void _RenderableBuilder_geometry( + Pointer builder, + size_t primitiveIndex, + int type, + Pointer vertices, + Pointer indices, + size_t offset, + size_t count, + ); + external void _RenderableBuilder_geometryNonIndexed( + Pointer builder, + size_t primitiveIndex, + int type, + Pointer vertices, + size_t offset, + size_t count, + ); + external void _RenderableBuilder_priority(Pointer builder, int priority); + external void _RenderableBuilder_channel(Pointer builder, int channel); + external void _RenderableBuilder_culling(Pointer builder, bool enabled); + external void _RenderableBuilder_castShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_receiveShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_fog(Pointer builder, bool enabled); + external void _RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled); + external void _RenderableBuilder_layerMask(Pointer builder, int select, int values); + external void _RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled); + external void _RenderableBuilder_blendOrder(Pointer builder, size_t primitiveIndex, int order); + external void _RenderableBuilder_globalBlendOrderEnabled( + Pointer builder, + size_t primitiveIndex, + bool enabled, + ); + external void _RenderableBuilder_instances(Pointer builder, size_t instanceCount); + external void _RenderableBuilder_skinningFromMat4( + Pointer builder, + size_t boneCount, + Pointer transforms, + ); + external void _RenderableBuilder_skinningFromBone( + Pointer builder, + size_t boneCount, + Pointer bones, + ); + external void _RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled); + external void _RenderableBuilder_boneIndicesAndWeights( + Pointer builder, + size_t primitiveIndex, + Pointer indicesAndWeights, + size_t count, + size_t bonesPerVertex, + ); + external int _RenderableBuilder_build(Pointer builder, Pointer engine, EntityId entity); + external void _IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation); + external Pointer _SurfaceOrientationBuilder_create(); + external void _SurfaceOrientationBuilder_vertexCount(Pointer builder, size_t count); + external void _SurfaceOrientationBuilder_normals( + Pointer builder, + Pointer normals, + size_t stride, + ); + external void _SurfaceOrientationBuilder_tangents( + Pointer builder, + Pointer tangents, + size_t stride, + ); + external void _SurfaceOrientationBuilder_uvs( + Pointer builder, + Pointer uvs, + size_t stride, + ); + external void _SurfaceOrientationBuilder_positions( + Pointer builder, + Pointer positions, + size_t stride, + ); + external void _SurfaceOrientationBuilder_triangleCount(Pointer builder, size_t count); + external void _SurfaceOrientationBuilder_triangles_uint( + Pointer builder, + Pointer triangles, + ); + external void _SurfaceOrientationBuilder_triangles_ushort( + Pointer builder, + Pointer triangles, + ); + external Pointer _SurfaceOrientationBuilder_build(Pointer builder); + external void _SurfaceOrientationBuilder_destroy(Pointer builder); + external size_t _SurfaceOrientation_getVertexCount(Pointer orientation); + external void _SurfaceOrientation_getQuats_float4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, + ); + external void _SurfaceOrientation_getQuats_short4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, + ); + external void _SurfaceOrientation_getQuats_half4( + Pointer orientation, + Pointer out, + size_t quatCount, + size_t stride, + ); + external void _SurfaceOrientation_destroy(Pointer orientation); + external Pointer _AnimationManager_create(Pointer tEngine); + external void _AnimationManager_destroy(Pointer tAnimationManager); + external void _AnimationManager_update(Pointer tAnimationManager, JSBigInt frameTimeInNanos); + external int _AnimationManager_addGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_removeGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external void _AnimationManager_addMorphAnimationComponent( + Pointer tAnimationManager, + EntityId entityId, + ); + external void _AnimationManager_removeMorphAnimationComponent( + Pointer tAnimationManager, + EntityId entityId, + ); + external int _AnimationManager_addBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_removeBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, + ); + external int _AnimationManager_setMorphAnimation( + Pointer tAnimationManager, + EntityId entityId, + Pointer morphData, + Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, + ); + external int _AnimationManager_clearMorphAnimation(Pointer tAnimationManager, EntityId entityId); + external void _AnimationManager_resetToRestPose( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external int _AnimationManager_addBoneAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int skinIndex, + int boneIndex, + Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, + ); + external void _AnimationManager_getRestLocalTransforms( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + Pointer out, + int numBones, + ); + external void _AnimationManager_getInverseBindMatrix( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + int boneIndex, + Pointer out, + ); + external int _AnimationManager_playGltfAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, + ); + external int _AnimationManager_stopGltfAnimation( + Pointer tAnimationManager, + Pointer sceneAsset, + int index, + ); + external double _AnimationManager_getGltfAnimationDuration( + Pointer tAnimationManager, + Pointer sceneAsset, + int animationIndex, + ); + external int _AnimationManager_getGltfAnimationCount( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external void _AnimationManager_getGltfAnimationName( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer outPtr, + int index, + ); + external int _AnimationManager_getMorphTargetNameCount( + Pointer tAnimationManager, + Pointer sceneAsset, + EntityId childEntity, + ); + external void _AnimationManager_getMorphTargetName( + Pointer tAnimationManager, + Pointer sceneAsset, + EntityId childEntity, + Pointer outPtr, + int index, + ); + external int _AnimationManager_updateBoneMatrices( + Pointer tAnimationManager, + Pointer sceneAsset, + ); + external int _AnimationManager_setMorphTargetWeights( + Pointer tAnimationManager, + EntityId entityId, + Pointer morphData, + int numWeights, + ); + external int _AnimationManager_setGltfAnimationTime( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, + ); + external Pointer _GltfAssetLoader_create( + Pointer tEngine, + Pointer tMaterialProvider, + Pointer tNameComponentManager, + ); + external void _GltfAssetLoader_destroy(Pointer tAssetLoader); + external Pointer _GltfAssetLoader_load( + Pointer tEngine, + Pointer tAssetLoader, + Pointer data, + size_t length, + int numInstances, + ); + external Pointer _GltfAssetLoader_getMaterialInstance( + Pointer tRenderableManager, + Pointer tAsset, + ); + external Pointer _GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader); + external int _FilamentAsset_getResourceUriCount(Pointer tFilamentAsset); + external Pointer> _FilamentAsset_getResourceUris(Pointer tFilamentAsset); + external Pointer _GltfResourceLoader_create(Pointer tEngine); + external void _GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader); + external int _GltfResourceLoader_asyncBeginLoad( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + ); + external void _GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader); + external double _GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader); + external void _GltfResourceLoader_addResourceData( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + size_t length, + ); + external int _GltfResourceLoader_loadResources( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + ); + external Pointer _RenderManager_create(Pointer tEngine, Pointer tRenderer); + external void _RenderManager_destroy(Pointer tRenderer); + external void _RenderManager_addAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, + ); + external void _RenderManager_removeAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, + ); + external void _RenderManager_render(Pointer tRenderer, JSBigInt frameTimeInNanos); + external void _RenderManager_setRenderable( + Pointer tRenderer, + Pointer swapChain, + Pointer> views, + int numViews, + ); + external void _RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain); + external void _RenderManager_requestRender(Pointer tRenderer); + external void _RenderManager_attachToRenderThread(Pointer tRenderer); + external void _RenderManager_detachFromRenderThread(Pointer tRenderManager); + external void _RenderManager_setPaused(Pointer tRenderer, bool paused); + external int _FilamentAsset_getEntityCount(Pointer filamentAsset); + external void _FilamentAsset_getEntities(Pointer filamentAsset, Pointer out); + external EntityId _FilamentAsset_getWireframe(Pointer filamentAsset); + external Pointer _FilamentAsset_getSourceAsset(Pointer filamentAsset); + external void _Scene_addEntity(Pointer tScene, EntityId entityId); + external void _Scene_removeEntity(Pointer tScene, EntityId entityId); + external void _Scene_setSkybox(Pointer tScene, Pointer skybox); + external Pointer _Scene_getSkybox(Pointer tScene); + external void _Scene_setIndirectLight(Pointer tScene, Pointer tIndirectLight); + external void _Scene_addFilamentAsset(Pointer tScene, Pointer asset); -double Camera_getNear(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getNear(camera.cast()); - return result; + /// Walks every renderable primitive in the scene and records the ones whose + /// current MaterialInstance belongs to [tMaterial]. + /// + /// Returns the TOTAL number of matches (which may exceed [capacity]). When + /// [outEntities]/[outPrimitives]/[outInstances] are non-null, up to + /// [capacity] matches are written to them. Call once with null buffers to + /// size the output, then again to fetch it. + external size_t _Scene_scanForMaterial( + Pointer tScene, + Pointer tRenderableManager, + Pointer tMaterial, + Pointer outEntities, + Pointer outPrimitives, + Pointer> outInstances, + size_t capacity, + ); + external void _FrameScheduler_startWithCallback(FrameTickCallback tickCallback, int targetFps); + external void _FrameScheduler_stop(); + external int _FrameScheduler_initDartApi(Pointer data); + external void _FrameScheduler_startWithPort(JSBigInt port, int targetFps); + external void _FrameScheduler_setTargetFps(int fps); + external JSBigInt _FrameScheduler_steadyClockUs(); + external void _MovementIntentExecutor_destroy(Pointer executor); + external void _MovementIntentExecutor_process( + Pointer executor, + Pointer intent, + JSBigInt deltaTimeInNanos, + ); + external void _Pipeline_registerMovementIntentExecutor(Pointer executor); + external void _TransformPipeline_setEngine(Pointer enginePtr); + external void _TransformPipeline_onMouseEvent( + int eventType, + int button, + double localX, + double localY, + double deltaX, + double deltaY, + ); + external void _TransformPipeline_onKeyEvent(int eventType, int logicalKey, int physicalKey, int synthesized); + external void _TransformPipeline_onScrollEvent(double localX, double localY, double delta); + external void _TransformPipeline_update(double deltaTime); + external void _TransformPipeline_registerPipelineStage(Pointer pipelineStageHandle, Pointer name); + external void _TransformPipeline_unregisterPipelineStage(Pointer pipelineStageHandle); + external void _TransformPipeline_cleanup(); + external void _TransformPipeline_addKeyBinding(int logicalKey, int intentAction, double value); + external void _TransformPipeline_removeKeyBindingsForKey(int logicalKey); + external void _TransformPipeline_removeKeyBindingsForAction(int intentAction); + external void _TransformPipeline_clearKeyBindings(); + external void _TransformPipeline_addMouseButtonBinding(int mouseButton, int intentAction, double value); + external void _TransformPipeline_removeMouseButtonBindings(int mouseButton); + external void _TransformPipeline_setMouseSensitivity(double sensitivity); + external void _TransformPipeline_setInvertMouseY(int invert); } -double Camera_getCullingFar(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getCullingFar(camera.cast()); +void Thermion_setCanvasElementSize(Pointer name, int width, int height) { + final result = GeneratedBindings.instance._Thermion_setCanvasElementSize(name, width, height); return result; } -double Camera_getFov(Pointer camera, bool horizontal) { - final result = GeneratedBindings.instance._Camera_getFov(camera.cast(), horizontal); +void Thermion_destroyCanvas(Pointer canvasSelector) { + final result = GeneratedBindings.instance._Thermion_destroyCanvas(canvasSelector); return result; } -double Camera_getFocusDistance(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getFocusDistance(camera.cast()); +int Thermion_createGLContext(Pointer canvasSelector) { + final result = GeneratedBindings.instance._Thermion_createGLContext(canvasSelector); return result; } -void Camera_setFocusDistance(Pointer camera, double focusDistance) { - final result = GeneratedBindings.instance._Camera_setFocusDistance(camera.cast(), focusDistance); +int Thermion_getGLContext() { + final result = GeneratedBindings.instance._Thermion_getGLContext(); return result; } -void Camera_setCustomProjectionWithCulling( - Pointer camera, - double4x4 projectionMatrix, - double near, - double far, -) { - final projectionMatrixPtr = projectionMatrix.address; - final result = GeneratedBindings.instance._Camera_setCustomProjectionWithCulling( - camera.cast(), - projectionMatrixPtr.cast(), - near, - far, +BigInt get TSWAP_CHAIN_CONFIG_TRANSPARENT { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_TRANSPARENT, + "i64", ); - return result; -} - -void Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix) { - final result = GeneratedBindings.instance._Camera_setModelMatrix(camera.cast(), tModelMatrix); - return result; -} - -void Camera_setLensProjection(Pointer camera, double near, double far, double aspect, double focalLength) { - final result = GeneratedBindings.instance._Camera_setLensProjection(camera.cast(), near, far, aspect, focalLength); - return result; + return bigIntasUintN(64, value).toDart; } -DartEntityId Camera_getEntity(Pointer camera) { - final result = GeneratedBindings.instance._Camera_getEntity(camera.cast()); - return result; +BigInt get TSWAP_CHAIN_CONFIG_READABLE { + final value = NativeLibrary.instance.getValueBigInt(GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_READABLE, "i64"); + return bigIntasUintN(64, value).toDart; } -void Camera_setProjection( - Pointer tCamera, - int projection, - double left, - double right, - double bottom, - double top, - double near, - double far, -) { - final result = GeneratedBindings.instance._Camera_setProjection( - tCamera.cast(), - projection, - left, - right, - bottom, - top, - near, - far, +BigInt get TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_APPLE_CVPIXELBUFFER, + "i64", ); - return result; -} - -int FilamentAsset_getEntityCount(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getEntityCount(filamentAsset.cast()); - return result; -} - -void FilamentAsset_getEntities(Pointer filamentAsset, Pointer out) { - final result = GeneratedBindings.instance._FilamentAsset_getEntities(filamentAsset.cast(), out); - return result; -} - -DartEntityId FilamentAsset_getWireframe(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getWireframe(filamentAsset.cast()); - return result; + return bigIntasUintN(64, value).toDart; } -Pointer FilamentAsset_getSourceAsset(Pointer filamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getSourceAsset(filamentAsset.cast()); - return Pointer(result); +BigInt get TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER { + final value = NativeLibrary.instance.getValueBigInt( + GeneratedBindings.instance._TSWAP_CHAIN_CONFIG_HAS_STENCIL_BUFFER, + "i64", + ); + return bigIntasUintN(64, value).toDart; } TViewport View_getViewport(Pointer view) { @@ -3497,358 +2986,393 @@ TFogOptions View_getFogOptions(Pointer tView) { return TFogOptions_out.toDart(); } -void View_setTransparentPickingEnabled(Pointer tView, bool enabled) { - final result = GeneratedBindings.instance._View_setTransparentPickingEnabled(tView.cast(), enabled); +void View_setTransparentPickingEnabled(Pointer tView, bool enabled) { + final result = GeneratedBindings.instance._View_setTransparentPickingEnabled(tView.cast(), enabled); + return result; +} + +bool View_isTransparentPickingEnabled(Pointer tView) { + final result = GeneratedBindings.instance._View_isTransparentPickingEnabled(tView.cast()); + return result == 1; +} + +void View_pick(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { + final result = GeneratedBindings.instance._View_pick( + tView.cast(), + requestId, + x, + y, + callback as Pointer>, + ); + return result; +} + +void View_setName(Pointer tView, Pointer name) { + final result = GeneratedBindings.instance._View_setName(tView.cast(), name); + return result; +} + +Pointer View_getName(Pointer tView) { + final result = GeneratedBindings.instance._View_getName(tView.cast()); + return Pointer(result); +} + +void Gizmo_dummy(int t) { + final result = GeneratedBindings.instance._Gizmo_dummy(t); + return result; +} + +Pointer Gizmo_create( + Pointer tEngine, + Pointer assetLoader, + Pointer tGltfResourceLoader, + Pointer tNameComponentManager, + Pointer tView, + Pointer tMaterial, + int tGizmoType, +) { + final result = GeneratedBindings.instance._Gizmo_create( + tEngine.cast(), + assetLoader.cast(), + tGltfResourceLoader.cast(), + tNameComponentManager.cast(), + tView.cast(), + tMaterial.cast(), + tGizmoType, + ); + return Pointer(result); +} + +void Gizmo_pick(Pointer tGizmo, int x, int y, DartGizmoPickCallback callback) { + final result = GeneratedBindings.instance._Gizmo_pick( + tGizmo.cast(), + x, + y, + callback as Pointer>, + ); + return result; +} + +void Gizmo_highlight(Pointer tGizmo, int axis) { + final result = GeneratedBindings.instance._Gizmo_highlight(tGizmo.cast(), axis); + return result; +} + +void Gizmo_unhighlight(Pointer tGizmo) { + final result = GeneratedBindings.instance._Gizmo_unhighlight(tGizmo.cast()); + return result; +} + +Pointer Material_createInstance(Pointer tMaterial) { + final result = GeneratedBindings.instance._Material_createInstance(tMaterial.cast()); + return Pointer(result); +} + +int Material_getFeatureLevel(Pointer tMaterial) { + final result = GeneratedBindings.instance._Material_getFeatureLevel(tMaterial.cast()); + return result; +} + +Pointer Material_createImageMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createImageMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createGridMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createGridMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createGizmoMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createGizmoMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createSilhouetteMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createSilhouetteMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createEdgeOutlineMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createWireframeMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createWireframeMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createTranslationAxisMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createTranslationAxisMaterial(tEngine.cast()); + return Pointer(result); +} + +Pointer Material_createBoneOverlayMaterial(Pointer tEngine) { + final result = GeneratedBindings.instance._Material_createBoneOverlayMaterial(tEngine.cast()); + return Pointer(result); +} + +bool Material_hasParameter(Pointer tMaterial, Pointer propertyName) { + final result = GeneratedBindings.instance._Material_hasParameter(tMaterial.cast(), propertyName); + return result == 1; +} + +bool MaterialInstance_isStencilWriteEnabled(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_isStencilWriteEnabled(materialInstance.cast()); + return result == 1; +} + +Pointer MaterialInstance_getMaterial(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_getMaterial(materialInstance.cast()); + return Pointer(result); +} + +void MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilWrite(materialInstance.cast(), enabled); return result; } -bool View_isTransparentPickingEnabled(Pointer tView) { - final result = GeneratedBindings.instance._View_isTransparentPickingEnabled(tView.cast()); - return result == 1; -} - -void View_pick(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { - final result = GeneratedBindings.instance._View_pick( - tView.cast(), - requestId, - x, - y, - callback as Pointer>, - ); +void MaterialInstance_setCullingMode(Pointer materialInstance, int culling) { + final result = GeneratedBindings.instance._MaterialInstance_setCullingMode(materialInstance.cast(), culling); return result; } -void View_setName(Pointer tView, Pointer name) { - final result = GeneratedBindings.instance._View_setName(tView.cast(), name); +void MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided) { + final result = GeneratedBindings.instance._MaterialInstance_setDoubleSided(materialInstance.cast(), doubleSided); return result; } -Pointer View_getName(Pointer tView) { - final result = GeneratedBindings.instance._View_getName(tView.cast()); - return Pointer(result); +void MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthWrite(materialInstance.cast(), enabled); + return result; } -void Gizmo_dummy(int t) { - final result = GeneratedBindings.instance._Gizmo_dummy(t); +void MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthCulling(materialInstance.cast(), enabled); return result; } -Pointer Gizmo_create( - Pointer tEngine, - Pointer assetLoader, - Pointer tGltfResourceLoader, - Pointer tNameComponentManager, - Pointer tView, - Pointer tMaterial, - int tGizmoType, +void MaterialInstance_setParameterFloat( + Pointer materialInstance, + Pointer propertyName, + double value, ) { - final result = GeneratedBindings.instance._Gizmo_create( - tEngine.cast(), - assetLoader.cast(), - tGltfResourceLoader.cast(), - tNameComponentManager.cast(), - tView.cast(), - tMaterial.cast(), - tGizmoType, + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat( + materialInstance.cast(), + propertyName, + value, ); - return Pointer(result); + return result; } -void Gizmo_pick(Pointer tGizmo, int x, int y, DartGizmoPickCallback callback) { - final result = GeneratedBindings.instance._Gizmo_pick( - tGizmo.cast(), +void MaterialInstance_setParameterFloat2( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat2( + materialInstance.cast(), + propertyName, x, y, - callback as Pointer>, ); return result; } -void Gizmo_highlight(Pointer tGizmo, int axis) { - final result = GeneratedBindings.instance._Gizmo_highlight(tGizmo.cast(), axis); - return result; -} - -void Gizmo_unhighlight(Pointer tGizmo) { - final result = GeneratedBindings.instance._Gizmo_unhighlight(tGizmo.cast()); - return result; -} - -Pointer GltfAssetLoader_create( - Pointer tEngine, - Pointer tMaterialProvider, - Pointer tNameComponentManager, +void MaterialInstance_setParameterFloat3( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double z, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_create( - tEngine.cast(), - tMaterialProvider.cast(), - tNameComponentManager.cast(), + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3( + materialInstance.cast(), + propertyName, + x, + y, + z, ); - return Pointer(result); -} - -void GltfAssetLoader_destroy(Pointer tAssetLoader) { - final result = GeneratedBindings.instance._GltfAssetLoader_destroy(tAssetLoader.cast()); return result; } -Pointer GltfAssetLoader_load( - Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - Dartsize_t length, - int numInstances, +void MaterialInstance_setParameterFloat3Array( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer raw, + int length, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_load( - tEngine.cast(), - tAssetLoader.cast(), - data, + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3Array( + tMaterialInstance.cast(), + propertyName, + raw, length, - numInstances, ); - return Pointer(result); + return result; } -Pointer GltfAssetLoader_getMaterialInstance( - Pointer tRenderableManager, - Pointer tAsset, +void MaterialInstance_setParameterFloat4( + Pointer materialInstance, + Pointer propertyName, + double x, + double y, + double w, + double z, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialInstance( - tRenderableManager.cast(), - tAsset.cast(), + final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat4( + materialInstance.cast(), + propertyName, + x, + y, + w, + z, ); - return Pointer(result); -} - -Pointer GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader) { - final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialProvider(tAssetLoader.cast()); - return Pointer(result); -} - -int FilamentAsset_getResourceUriCount(Pointer tFilamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getResourceUriCount(tFilamentAsset.cast()); - return result; -} - -Pointer> FilamentAsset_getResourceUris(Pointer tFilamentAsset) { - final result = GeneratedBindings.instance._FilamentAsset_getResourceUris(tFilamentAsset.cast()); - return Pointer>(result); -} - -void MeshData_dispose(Pointer meshData) { - final result = GeneratedBindings.instance._MeshData_dispose(meshData.cast()); return result; } -int GltfParser_parseBuffer( - Pointer data, - Dartsize_t length, - Pointer meshName, - Pointer outMeshData, +void MaterialInstance_setParameterMat3( + Pointer materialInstance, + Pointer propertyName, + Pointer matrix, ) { - final result = GeneratedBindings.instance._GltfParser_parseBuffer(data, length, meshName, outMeshData.cast()); + final result = GeneratedBindings.instance._MaterialInstance_setParameterMat3( + materialInstance.cast(), + propertyName, + matrix, + ); return result; } -Pointer GltfResourceLoader_create(Pointer tEngine) { - final result = GeneratedBindings.instance._GltfResourceLoader_create(tEngine.cast()); - return Pointer(result); -} - -void GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_destroy(tEngine.cast(), tGltfResourceLoader.cast()); +void MaterialInstance_setParameterMat4( + Pointer materialInstance, + Pointer propertyName, + Pointer matrix, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterMat4( + materialInstance.cast(), + propertyName, + matrix, + ); return result; } -bool GltfResourceLoader_asyncBeginLoad( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, +void MaterialInstance_setParameterInt( + Pointer materialInstance, + Pointer propertyName, + int value, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoad( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), + final result = GeneratedBindings.instance._MaterialInstance_setParameterInt( + materialInstance.cast(), + propertyName, + value, ); - return result == 1; -} - -void GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoad(tGltfResourceLoader.cast()); return result; } -double GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgress(tGltfResourceLoader.cast()); +void MaterialInstance_setParameterBool( + Pointer materialInstance, + Pointer propertyName, + bool value, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterBool( + materialInstance.cast(), + propertyName, + value, + ); return result; } -void GltfResourceLoader_addResourceData( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - Dartsize_t length, +void MaterialInstance_setParameterTexture( + Pointer materialInstance, + Pointer propertyName, + Pointer texture, + Pointer sampler, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_addResourceData( - tGltfResourceLoader.cast(), - uri, - data, - length, + final result = GeneratedBindings.instance._MaterialInstance_setParameterTexture( + materialInstance.cast(), + propertyName, + texture.cast(), + sampler.cast(), ); return result; } -bool GltfResourceLoader_loadResources( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, -) { - final result = GeneratedBindings.instance._GltfResourceLoader_loadResources( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), +void MaterialInstance_setDepthFunc(Pointer materialInstance, int depthFunc) { + final result = GeneratedBindings.instance._MaterialInstance_setDepthFunc(materialInstance.cast(), depthFunc); + return result; +} + +void MaterialInstance_setStencilOpStencilFail(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpStencilFail( + materialInstance.cast(), + op, + face, ); - return result == 1; + return result; } -Pointer IndexBufferBuilder_create() { - final result = GeneratedBindings.instance._IndexBufferBuilder_create(); - return Pointer(result); +void MaterialInstance_setStencilOpDepthFail(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthFail(materialInstance.cast(), op, face); + return result; } -void IndexBufferBuilder_indexCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._IndexBufferBuilder_indexCount(builder.cast(), count); +void MaterialInstance_setStencilOpDepthStencilPass(Pointer materialInstance, int op, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthStencilPass( + materialInstance.cast(), + op, + face, + ); return result; } -void IndexBufferBuilder_bufferType(Pointer builder, int indexType) { - final result = GeneratedBindings.instance._IndexBufferBuilder_bufferType(builder.cast(), indexType); +void MaterialInstance_setStencilCompareFunction(Pointer materialInstance, int func, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilCompareFunction( + materialInstance.cast(), + func, + face, + ); return result; } -Pointer IndexBufferBuilder_build(Pointer builder, Pointer engine) { - final result = GeneratedBindings.instance._IndexBufferBuilder_build(builder.cast(), engine.cast()); - return Pointer(result); +void MaterialInstance_setStencilReferenceValue(Pointer materialInstance, int value, int face) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilReferenceValue( + materialInstance.cast(), + value, + face, + ); + return result; } -void IndexBufferBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._IndexBufferBuilder_destroy(builder.cast()); +void MaterialInstance_setStencilReadMask(Pointer materialInstance, int mask) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilReadMask(materialInstance.cast(), mask); return result; } -Dartsize_t IndexBuffer_getIndexCount(Pointer buffer) { - final result = GeneratedBindings.instance._IndexBuffer_getIndexCount(buffer.cast()); +void MaterialInstance_setStencilWriteMask(Pointer materialInstance, int mask) { + final result = GeneratedBindings.instance._MaterialInstance_setStencilWriteMask(materialInstance.cast(), mask); return result; } -void IndexBuffer_setBuffer( - Pointer engine, - Pointer buffer, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, -) { - final result = GeneratedBindings.instance._IndexBuffer_setBuffer( - engine.cast(), - buffer.cast(), - data, - sizeInBytes, - byteOffset, +void MaterialInstance_setTransparencyMode(Pointer materialInstance, int transparencyMode) { + final result = GeneratedBindings.instance._MaterialInstance_setTransparencyMode( + materialInstance.cast(), + transparencyMode, ); return result; } -void IndexBuffer_destroy(Pointer engine, Pointer buffer) { - final result = GeneratedBindings.instance._IndexBuffer_destroy(engine.cast(), buffer.cast()); +int MaterialInstance_getTransparencyMode(Pointer materialInstance) { + final result = GeneratedBindings.instance._MaterialInstance_getTransparencyMode(materialInstance.cast()); return result; } -void IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation) { - final result = GeneratedBindings.instance._IndirectLight_setRotation(tIndirectLight.cast(), rotation); +int Material_getBlendingMode(Pointer material) { + final result = GeneratedBindings.instance._Material_getBlendingMode(material.cast()); return result; } -Pointer MaterialProvider_createMaterialInstance( - Pointer provider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, -) { - final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstance( - provider.cast(), - doubleSided, - unlit, - hasVertexColors, - hasBaseColorTexture, - hasNormalTexture, - hasOcclusionTexture, - hasEmissiveTexture, - useSpecularGlossiness, - alphaMode, - enableDiagnostics, - hasMetallicRoughnessTexture, - metallicRoughnessUV, - hasSpecularGlossinessTexture, - specularGlossinessUV, - baseColorUV, - hasClearCoatTexture, - clearCoatUV, - hasClearCoatRoughnessTexture, - clearCoatRoughnessUV, - hasClearCoatNormalTexture, - clearCoatNormalUV, - hasClearCoat, - hasTransmission, - hasTextureTransforms, - emissiveUV, - aoUV, - normalUV, - hasTransmissionTexture, - transmissionUV, - hasSheenColorTexture, - sheenColorUV, - hasSheenRoughnessTexture, - sheenRoughnessUV, - hasVolumeThicknessTexture, - volumeThicknessUV, - hasSheen, - hasIOR, - hasVolume, - ); - return Pointer(result); -} - Pointer NameComponentManager_create() { final result = GeneratedBindings.instance._NameComponentManager_create(); return Pointer(result); @@ -3864,390 +3388,351 @@ Pointer NameComponentManager_getName(Pointer tNameC return Pointer(result); } -Pointer RenderManager_create(Pointer tEngine, Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_create(tEngine.cast(), tRenderer.cast()); - return Pointer(result); -} - -void RenderManager_destroy(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_destroy(tRenderer.cast()); - return result; -} - -void RenderManager_addAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, +Pointer SceneAsset_createFromBuffers( + Pointer tEngine, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, ) { - final result = GeneratedBindings.instance._RenderManager_addAnimationManager( - tRenderer.cast(), - tAnimationManager.cast(), + final boundingBoxPtr = boundingBox.address; + final result = GeneratedBindings.instance._SceneAsset_createFromBuffers( + tEngine.cast(), + tVertexBuffer.cast(), + tIndexBuffer.cast(), + materialInstances.cast(), + materialInstanceCount, + tPrimitiveType, + boundingBoxPtr.cast(), ); - return result; + return Pointer(result); } -void RenderManager_removeAnimationManager( - Pointer tRenderer, - Pointer tAnimationManager, +Pointer SceneAsset_createFromFilamentAsset( + Pointer tEngine, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, ) { - final result = GeneratedBindings.instance._RenderManager_removeAnimationManager( - tRenderer.cast(), - tAnimationManager.cast(), + final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAsset( + tEngine.cast(), + tAssetLoader.cast(), + tNameComponentManager.cast(), + tFilamentAsset.cast(), + rebuildVertices, ); + return Pointer(result); +} + +Pointer SceneAsset_getFilamentAsset(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getFilamentAsset(tSceneAsset.cast()); + return Pointer(result); +} + +int SceneAsset_getType(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getType(tSceneAsset.cast()); return result; } -void RenderManager_render(Pointer tRenderer, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._RenderManager_render(tRenderer.cast(), frameTimeInNanos.toJSBigInt); +void SceneAsset_destroy(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_destroy(tSceneAsset.cast()); return result; } -void RenderManager_setRenderable( - Pointer tRenderer, - Pointer swapChain, - Pointer> views, - int numViews, -) { - final result = GeneratedBindings.instance._RenderManager_setRenderable( - tRenderer.cast(), - swapChain.cast(), - views.cast(), - numViews, - ); +void SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene) { + final result = GeneratedBindings.instance._SceneAsset_addToScene(tSceneAsset.cast(), tScene.cast()); return result; } -void RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain) { - final result = GeneratedBindings.instance._RenderManager_removeSwapChain(tRenderer.cast(), swapChain.cast()); +void SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene) { + final result = GeneratedBindings.instance._SceneAsset_removeFromScene(tSceneAsset.cast(), tScene.cast()); return result; } -void RenderManager_requestRender(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_requestRender(tRenderer.cast()); +DartEntityId SceneAsset_getEntity(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getEntity(tSceneAsset.cast()); return result; } -void RenderManager_attachToRenderThread(Pointer tRenderer) { - final result = GeneratedBindings.instance._RenderManager_attachToRenderThread(tRenderer.cast()); +int SceneAsset_getChildEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getChildEntityCount(tSceneAsset.cast()); return result; } -void RenderManager_detachFromRenderThread(Pointer tRenderManager) { - final result = GeneratedBindings.instance._RenderManager_detachFromRenderThread(tRenderManager.cast()); +void SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out) { + final result = GeneratedBindings.instance._SceneAsset_getChildEntities(tSceneAsset.cast(), out); return result; } -void RenderManager_setPaused(Pointer tRenderer, bool paused) { - final result = GeneratedBindings.instance._RenderManager_setPaused(tRenderer.cast(), paused); +Pointer SceneAsset_getCameraEntities(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getCameraEntities(tSceneAsset.cast()); + return Pointer(result); +} + +Dartsize_t SceneAsset_getCameraEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getCameraEntityCount(tSceneAsset.cast()); return result; } -Pointer Material_createInstance(Pointer tMaterial) { - final result = GeneratedBindings.instance._Material_createInstance(tMaterial.cast()); - return Pointer(result); +Pointer SceneAsset_getLightEntities(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getLightEntities(tSceneAsset.cast()); + return Pointer(result); } -int Material_getFeatureLevel(Pointer tMaterial) { - final result = GeneratedBindings.instance._Material_getFeatureLevel(tMaterial.cast()); +Dartsize_t SceneAsset_getLightEntityCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getLightEntityCount(tSceneAsset.cast()); return result; } -Pointer Material_createImageMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createImageMaterial(tEngine.cast()); - return Pointer(result); +Pointer SceneAsset_getInstance(Pointer tSceneAsset, int index) { + final result = GeneratedBindings.instance._SceneAsset_getInstance(tSceneAsset.cast(), index); + return Pointer(result); } -Pointer Material_createGridMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createGridMaterial(tEngine.cast()); - return Pointer(result); +Dartsize_t SceneAsset_getInstanceCount(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_getInstanceCount(tSceneAsset.cast()); + return result; } -Pointer Material_createGizmoMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createGizmoMaterial(tEngine.cast()); - return Pointer(result); +Pointer SceneAsset_createInstance( + Pointer asset, + Pointer> materialInstances, + int materialInstanceCount, +) { + final result = GeneratedBindings.instance._SceneAsset_createInstance( + asset.cast(), + materialInstances.cast(), + materialInstanceCount, + ); + return Pointer(result); } -Pointer Material_createSilhouetteMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createSilhouetteMaterial(tEngine.cast()); - return Pointer(result); +Aabb3 SceneAsset_getBoundingBox(Pointer asset) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._SceneAsset_getBoundingBox(Aabb3_out.cast(), asset.cast()); + return Aabb3_out.toDart(); } -Pointer Material_createEdgeOutlineMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterial(tEngine.cast()); - return Pointer(result); +Pointer SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex) { + final result = GeneratedBindings.instance._SceneAsset_getVertexBuffer(tSceneAsset.cast(), primitiveIndex); + return Pointer(result); } -Pointer Material_createWireframeMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createWireframeMaterial(tEngine.cast()); - return Pointer(result); +Pointer SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex) { + final result = GeneratedBindings.instance._SceneAsset_getIndexBuffer(tSceneAsset.cast(), primitiveIndex); + return Pointer(result); } -Pointer Material_createTranslationAxisMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createTranslationAxisMaterial(tEngine.cast()); - return Pointer(result); +int SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, DartEntityId entity) { + final result = GeneratedBindings.instance._SceneAsset_getPrimitiveOffsetForEntity(tSceneAsset.cast(), entity); + return result; } -Pointer Material_createBoneOverlayMaterial(Pointer tEngine) { - final result = GeneratedBindings.instance._Material_createBoneOverlayMaterial(tEngine.cast()); - return Pointer(result); +void SceneAsset_releaseSourceData(Pointer tSceneAsset) { + final result = GeneratedBindings.instance._SceneAsset_releaseSourceData(tSceneAsset.cast()); + return result; } -bool Material_hasParameter(Pointer tMaterial, Pointer propertyName) { - final result = GeneratedBindings.instance._Material_hasParameter(tMaterial.cast(), propertyName); - return result == 1; +void SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading) { + final result = GeneratedBindings.instance._SceneAsset_setFlatShading(tSceneAsset.cast(), flatShading); + return result; } -bool MaterialInstance_isStencilWriteEnabled(Pointer materialInstance) { - final result = GeneratedBindings.instance._MaterialInstance_isStencilWriteEnabled(materialInstance.cast()); - return result == 1; +void SceneAsset_getBones(Pointer tSceneAsset, Dartsize_t skinIndex, Pointer out) { + final result = GeneratedBindings.instance._SceneAsset_getBones(tSceneAsset.cast(), skinIndex, out); + return result; } -Pointer MaterialInstance_getMaterial(Pointer materialInstance) { - final result = GeneratedBindings.instance._MaterialInstance_getMaterial(materialInstance.cast()); - return Pointer(result); +Dartsize_t SceneAsset_getBoneCount(Pointer tSceneAsset, Dartsize_t skinIndex) { + final result = GeneratedBindings.instance._SceneAsset_getBoneCount(tSceneAsset.cast(), skinIndex); + return result; } -void MaterialInstance_setStencilWrite(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilWrite(materialInstance.cast(), enabled); - return result; +Pointer SceneAsset_getBoneName(Pointer tSceneAsset, Dartsize_t skinIndex, Dartsize_t boneIndex) { + final result = GeneratedBindings.instance._SceneAsset_getBoneName(tSceneAsset.cast(), skinIndex, boneIndex); + return Pointer(result); } -void MaterialInstance_setCullingMode(Pointer materialInstance, int culling) { - final result = GeneratedBindings.instance._MaterialInstance_setCullingMode(materialInstance.cast(), culling); +void Camera_setExposure(Pointer camera, double aperture, double shutterSpeed, double sensitivity) { + final result = GeneratedBindings.instance._Camera_setExposure(camera.cast(), aperture, shutterSpeed, sensitivity); return result; } -void MaterialInstance_setDoubleSided(Pointer materialInstance, bool doubleSided) { - final result = GeneratedBindings.instance._MaterialInstance_setDoubleSided(materialInstance.cast(), doubleSided); +double Camera_getAperture(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getAperture(camera.cast()); return result; } -void MaterialInstance_setDepthWrite(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthWrite(materialInstance.cast(), enabled); +double Camera_getShutterSpeed(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getShutterSpeed(camera.cast()); return result; } -void MaterialInstance_setDepthCulling(Pointer materialInstance, bool enabled) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthCulling(materialInstance.cast(), enabled); +double Camera_getSensitivity(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getSensitivity(camera.cast()); return result; } -void MaterialInstance_setParameterFloat( - Pointer materialInstance, - Pointer propertyName, - double value, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat( - materialInstance.cast(), - propertyName, - value, - ); - return result; +double4x4 Camera_getModelMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getModelMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); } -void MaterialInstance_setParameterFloat2( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat2( - materialInstance.cast(), - propertyName, - x, - y, - ); - return result; +double4x4 Camera_getViewMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getViewMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); } -void MaterialInstance_setParameterFloat3( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double z, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3( - materialInstance.cast(), - propertyName, - x, - y, - z, - ); - return result; +double4x4 Camera_getProjectionMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getProjectionMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); } -void MaterialInstance_setParameterFloat3Array( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer raw, - int length, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat3Array( - tMaterialInstance.cast(), - propertyName, - raw, - length, - ); - return result; +double4x4 Camera_getCullingProjectionMatrix(Pointer camera) { + final double4x4_out = double4x4.stackAlloc(); + final result = GeneratedBindings.instance._Camera_getCullingProjectionMatrix(double4x4_out.cast(), camera.cast()); + return double4x4_out.toDart(); } -void MaterialInstance_setParameterFloat4( - Pointer materialInstance, - Pointer propertyName, - double x, - double y, - double w, - double z, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterFloat4( - materialInstance.cast(), - propertyName, - x, - y, - w, - z, - ); +void Camera_getFrustum(Pointer camera, Pointer out) { + final result = GeneratedBindings.instance._Camera_getFrustum(camera.cast(), out); return result; } -void MaterialInstance_setParameterMat3( - Pointer materialInstance, - Pointer propertyName, - Pointer matrix, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterMat3( - materialInstance.cast(), - propertyName, - matrix, - ); +void Camera_setProjectionMatrix(Pointer camera, Pointer matrix, double near, double far) { + final result = GeneratedBindings.instance._Camera_setProjectionMatrix(camera.cast(), matrix, near, far); return result; } -void MaterialInstance_setParameterMat4( - Pointer materialInstance, - Pointer propertyName, - Pointer matrix, +void Camera_setProjectionFromFov( + Pointer camera, + double fovInDegrees, + double aspect, + double near, + double far, + bool horizontal, ) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterMat4( - materialInstance.cast(), - propertyName, - matrix, + final result = GeneratedBindings.instance._Camera_setProjectionFromFov( + camera.cast(), + fovInDegrees, + aspect, + near, + far, + horizontal, ); return result; } -void MaterialInstance_setParameterInt( - Pointer materialInstance, - Pointer propertyName, - int value, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterInt( - materialInstance.cast(), - propertyName, - value, - ); +double Camera_getFocalLength(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getFocalLength(camera.cast()); return result; } -void MaterialInstance_setParameterBool( - Pointer materialInstance, - Pointer propertyName, - bool value, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterBool( - materialInstance.cast(), - propertyName, - value, - ); +void Camera_lookAt(Pointer camera, double3 eye, double3 focus, double3 up) { + final eyePtr = eye.address; + final focusPtr = focus.address; + final upPtr = up.address; + final result = GeneratedBindings.instance._Camera_lookAt(camera.cast(), eyePtr.cast(), focusPtr.cast(), upPtr.cast()); return result; } -void MaterialInstance_setParameterTexture( - Pointer materialInstance, - Pointer propertyName, - Pointer texture, - Pointer sampler, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterTexture( - materialInstance.cast(), - propertyName, - texture.cast(), - sampler.cast(), - ); +double Camera_getNear(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getNear(camera.cast()); return result; } -void MaterialInstance_setDepthFunc(Pointer materialInstance, int depthFunc) { - final result = GeneratedBindings.instance._MaterialInstance_setDepthFunc(materialInstance.cast(), depthFunc); +double Camera_getCullingFar(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getCullingFar(camera.cast()); return result; } -void MaterialInstance_setStencilOpStencilFail(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpStencilFail( - materialInstance.cast(), - op, - face, - ); +double Camera_getFov(Pointer camera, bool horizontal) { + final result = GeneratedBindings.instance._Camera_getFov(camera.cast(), horizontal); return result; } -void MaterialInstance_setStencilOpDepthFail(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthFail(materialInstance.cast(), op, face); +double Camera_getFocusDistance(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getFocusDistance(camera.cast()); return result; } -void MaterialInstance_setStencilOpDepthStencilPass(Pointer materialInstance, int op, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilOpDepthStencilPass( - materialInstance.cast(), - op, - face, - ); +void Camera_setFocusDistance(Pointer camera, double focusDistance) { + final result = GeneratedBindings.instance._Camera_setFocusDistance(camera.cast(), focusDistance); return result; } -void MaterialInstance_setStencilCompareFunction(Pointer materialInstance, int func, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilCompareFunction( - materialInstance.cast(), - func, - face, +void Camera_setCustomProjectionWithCulling( + Pointer camera, + double4x4 projectionMatrix, + double near, + double far, +) { + final projectionMatrixPtr = projectionMatrix.address; + final result = GeneratedBindings.instance._Camera_setCustomProjectionWithCulling( + camera.cast(), + projectionMatrixPtr.cast(), + near, + far, ); return result; } -void MaterialInstance_setStencilReferenceValue(Pointer materialInstance, int value, int face) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilReferenceValue( - materialInstance.cast(), - value, - face, - ); +void Camera_setModelMatrix(Pointer camera, Pointer tModelMatrix) { + final result = GeneratedBindings.instance._Camera_setModelMatrix(camera.cast(), tModelMatrix); return result; } -void MaterialInstance_setStencilReadMask(Pointer materialInstance, int mask) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilReadMask(materialInstance.cast(), mask); +void Camera_setLensProjection(Pointer camera, double near, double far, double aspect, double focalLength) { + final result = GeneratedBindings.instance._Camera_setLensProjection(camera.cast(), near, far, aspect, focalLength); return result; } -void MaterialInstance_setStencilWriteMask(Pointer materialInstance, int mask) { - final result = GeneratedBindings.instance._MaterialInstance_setStencilWriteMask(materialInstance.cast(), mask); +DartEntityId Camera_getEntity(Pointer camera) { + final result = GeneratedBindings.instance._Camera_getEntity(camera.cast()); return result; } -void MaterialInstance_setTransparencyMode(Pointer materialInstance, int transparencyMode) { - final result = GeneratedBindings.instance._MaterialInstance_setTransparencyMode( - materialInstance.cast(), - transparencyMode, +void Camera_setProjection( + Pointer tCamera, + int projection, + double left, + double right, + double bottom, + double top, + double near, + double far, +) { + final result = GeneratedBindings.instance._Camera_setProjection( + tCamera.cast(), + projection, + left, + right, + bottom, + top, + near, + far, ); return result; } -int MaterialInstance_getTransparencyMode(Pointer materialInstance) { - final result = GeneratedBindings.instance._MaterialInstance_getTransparencyMode(materialInstance.cast()); +void MeshData_dispose(Pointer meshData) { + final result = GeneratedBindings.instance._MeshData_dispose(meshData.cast()); return result; } -int Material_getBlendingMode(Pointer material) { - final result = GeneratedBindings.instance._Material_getBlendingMode(material.cast()); +int GltfParser_parseBuffer( + Pointer data, + Dartsize_t length, + Pointer meshName, + Pointer outMeshData, +) { + final result = GeneratedBindings.instance._GltfParser_parseBuffer(data, length, meshName, outMeshData.cast()); return result; } @@ -4520,401 +4005,627 @@ void TextureSampler_destroy(Pointer sampler) { return result; } -Pointer RenderTarget_create(Pointer tEngine, Pointer color, Pointer depth) { - final result = GeneratedBindings.instance._RenderTarget_create(tEngine.cast(), color.cast(), depth.cast()); - return Pointer(result); +Pointer Engine_create( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, +) { + final result = GeneratedBindings.instance._Engine_create( + backend, + platform, + sharedContext, + stereoscopicEyeCount, + disableHandleUseAfterFreeCheck, + ); + return Pointer(result); } -void RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget) { - final result = GeneratedBindings.instance._RenderTarget_destroy(tEngine.cast(), tRenderTarget.cast()); +int Engine_getSupportedFeatureLevel(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getSupportedFeatureLevel(tEngine.cast()); return result; } -void Renderer_setClearOptions( - Pointer tRenderer, - double clearR, - double clearG, - double clearB, - double clearA, - int clearStencil, - bool clear, - bool discard, -) { - final result = GeneratedBindings.instance._Renderer_setClearOptions( - tRenderer.cast(), - clearR, - clearG, - clearB, - clearA, - clearStencil, - clear, - discard, - ); +void Engine_destroy(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_destroy(tEngine.cast()); return result; } -bool Renderer_beginFrame(Pointer tRenderer, Pointer tSwapChain, BigInt frameTimeInNanos) { - final result = GeneratedBindings.instance._Renderer_beginFrame( - tRenderer.cast(), - tSwapChain.cast(), - frameTimeInNanos.toJSBigInt, +Pointer Engine_createRenderer(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createRenderer(tEngine.cast()); + return Pointer(result); +} + +void Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer) { + final result = GeneratedBindings.instance._Engine_destroyRenderer(tEngine.cast(), tRenderer.cast()); + return result; +} + +Pointer Engine_createSwapChain(Pointer tEngine, Pointer window, BigInt flags) { + final result = GeneratedBindings.instance._Engine_createSwapChain(tEngine.cast(), window, flags.toJSBigInt); + return Pointer(result); +} + +Pointer Engine_createHeadlessSwapChain(Pointer tEngine, int width, int height, BigInt flags) { + final result = GeneratedBindings.instance._Engine_createHeadlessSwapChain( + tEngine.cast(), + width, + height, + flags.toJSBigInt, ); - return result == 1; + return Pointer(result); +} + +void Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain) { + final result = GeneratedBindings.instance._Engine_destroySwapChain(tEngine.cast(), tSwapChain.cast()); + return result; +} + +void Engine_destroyView(Pointer tEngine, Pointer tView) { + final result = GeneratedBindings.instance._Engine_destroyView(tEngine.cast(), tView.cast()); + return result; +} + +void Engine_destroyScene(Pointer tEngine, Pointer tScene) { + final result = GeneratedBindings.instance._Engine_destroyScene(tEngine.cast(), tScene.cast()); + return result; +} + +void Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading) { + final result = GeneratedBindings.instance._Engine_destroyColorGrading(tEngine.cast(), tColorGrading.cast()); + return result; +} + +Pointer Engine_createCamera(Pointer tEngine, DartEntityId entityId) { + final result = GeneratedBindings.instance._Engine_createCamera(tEngine.cast(), entityId); + return Pointer(result); +} + +void Engine_destroyCamera(Pointer tEngine, Pointer tCamera) { + final result = GeneratedBindings.instance._Engine_destroyCamera(tEngine.cast(), tCamera.cast()); + return result; +} + +Pointer Engine_createView(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createView(tEngine.cast()); + return Pointer(result); +} + +Pointer Engine_getCameraComponent(Pointer tEngine, DartEntityId entityId) { + final result = GeneratedBindings.instance._Engine_getCameraComponent(tEngine.cast(), entityId); + return Pointer(result); +} + +Pointer Engine_getTransformManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getTransformManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getRenderableManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getRenderableManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getLightManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getLightManager(engine.cast()); + return Pointer(result); +} + +Pointer Engine_getEntityManager(Pointer engine) { + final result = GeneratedBindings.instance._Engine_getEntityManager(engine.cast()); + return Pointer(result); +} + +void Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled) { + final result = GeneratedBindings.instance._Engine_setAutomaticInstancingEnabled(tEngine.cast(), enabled); + return result; } -void Renderer_endFrame(Pointer tRenderer) { - final result = GeneratedBindings.instance._Renderer_endFrame(tRenderer.cast()); +Dartsize_t Engine_getMaxAutomaticInstances(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getMaxAutomaticInstances(tEngine.cast()); return result; } -void Renderer_render(Pointer tRenderer, Pointer tView) { - final result = GeneratedBindings.instance._Renderer_render(tRenderer.cast(), tView.cast()); +void Engine_destroyTexture(Pointer tEngine, Pointer tTexture) { + final result = GeneratedBindings.instance._Engine_destroyTexture(tEngine.cast(), tTexture.cast()); return result; } -void Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView) { - final result = GeneratedBindings.instance._Renderer_renderStandaloneView(tRenderer.cast(), tView.cast()); +Pointer Engine_createFence(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createFence(tEngine.cast()); + return Pointer(result); +} + +void Engine_destroyFence(Pointer tEngine, Pointer tFence) { + final result = GeneratedBindings.instance._Engine_destroyFence(tEngine.cast(), tFence.cast()); return result; } -void Renderer_readPixels( - Pointer tRenderer, - int width, - int height, - int xOffset, - int yOffset, - Pointer tRenderTarget, - int tPixelBufferFormat, - int tPixelDataType, - Pointer out, - Dartsize_t outLength, -) { - final result = GeneratedBindings.instance._Renderer_readPixels( - tRenderer.cast(), - width, - height, - xOffset, - yOffset, - tRenderTarget.cast(), - tPixelBufferFormat, - tPixelDataType, - out, - outLength, - ); +void Engine_flushAndWait(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_flushAndWait(tEngine.cast()); return result; } -void Renderer_setFrameInterval( - Pointer tRenderer, - double headRoomRatio, - double scaleRate, - int history, - int interval, -) { - final result = GeneratedBindings.instance._Renderer_setFrameInterval( - tRenderer.cast(), - headRoomRatio, - scaleRate, - history, - interval, - ); +void Engine_execute(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_execute(tEngine.cast()); return result; } -Pointer SceneAsset_createFromBuffers( - Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, -) { - final boundingBoxPtr = boundingBox.address; - final result = GeneratedBindings.instance._SceneAsset_createFromBuffers( - tEngine.cast(), - tVertexBuffer.cast(), - tIndexBuffer.cast(), - materialInstances.cast(), - materialInstanceCount, - tPrimitiveType, - boundingBoxPtr.cast(), - ); - return Pointer(result); +Pointer Engine_buildMaterial(Pointer tEngine, Pointer materialData, Dartsize_t length) { + final result = GeneratedBindings.instance._Engine_buildMaterial(tEngine.cast(), materialData, length); + return Pointer(result); } -Pointer SceneAsset_createFromFilamentAsset( +/// Compiles .mat [matSource] ([length] bytes, not necessarily +/// NUL-terminated) into a filamat package, synchronously on the calling +/// thread. #include directives must already be resolved by the caller (the +/// Dart layer flattens them). +/// +/// [platform]/[targetApi]/[optimization] select the compilation targets; +/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the +/// engine's backend. +/// +/// [definesJson] is either nullptr or a flat JSON object of preprocessor +/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic +/// backslash escapes are supported. +/// +/// [embedSource] controls whether the .mat source is embedded in the +/// package (matc's no-embed-source flag). +/// +/// On success returns a malloc'd buffer of *outSize bytes that the caller +/// must release with [Engine_freeCompiledMaterial]. On failure returns +/// nullptr and writes a NUL-terminated message into [outError] (capacity +/// [outErrorCap]). +Pointer Engine_compileMaterial( Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, + Pointer matSource, + Dartsize_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + Dartsize_t outErrorCap, + Pointer outSize, ) { - final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAsset( + final result = GeneratedBindings.instance._Engine_compileMaterial( tEngine.cast(), - tAssetLoader.cast(), - tNameComponentManager.cast(), - tFilamentAsset.cast(), - rebuildVertices, + matSource, + length, + platform, + targetApi, + optimization, + definesJson, + embedSource, + outError, + outErrorCap, + outSize, ); - return Pointer(result); + return Pointer(result); } -Pointer SceneAsset_getFilamentAsset(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getFilamentAsset(tSceneAsset.cast()); - return Pointer(result); +/// Releases a buffer returned by [Engine_compileMaterial]. +void Engine_freeCompiledMaterial(Pointer data) { + final result = GeneratedBindings.instance._Engine_freeCompiledMaterial(data); + return result; } -int SceneAsset_getType(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getType(tSceneAsset.cast()); +/// As [Engine_compileMaterial], but the work runs on the engine's render +/// thread. The task writes the malloc'd package to *[outData] and its size to +/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on +/// failure with the message in [outError], then invokes [onComplete] with +/// [requestId]. +void Engine_compileMaterialRenderThread( + Pointer tEngine, + Pointer matSource, + Dartsize_t length, + int platform, + int targetApi, + int optimization, + Pointer definesJson, + int embedSource, + Pointer outError, + Dartsize_t outErrorCap, + Pointer> outData, + Pointer outSize, + int requestId, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Engine_compileMaterialRenderThread( + tEngine.cast(), + matSource, + length, + platform, + targetApi, + optimization, + definesJson, + embedSource, + outError, + outErrorCap, + outData, + outSize, + requestId, + onComplete.cast(), + ); return result; } -void SceneAsset_destroy(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_destroy(tSceneAsset.cast()); +void Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial) { + final result = GeneratedBindings.instance._Engine_destroyMaterial(tEngine.cast(), tMaterial.cast()); return result; } -void SceneAsset_addToScene(Pointer tSceneAsset, Pointer tScene) { - final result = GeneratedBindings.instance._SceneAsset_addToScene(tSceneAsset.cast(), tScene.cast()); +void Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance) { + final result = GeneratedBindings.instance._Engine_destroyMaterialInstance(tEngine.cast(), tMaterialInstance.cast()); return result; } -void SceneAsset_removeFromScene(Pointer tSceneAsset, Pointer tScene) { - final result = GeneratedBindings.instance._SceneAsset_removeFromScene(tSceneAsset.cast(), tScene.cast()); - return result; +Pointer Engine_createScene(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_createScene(tEngine.cast()); + return Pointer(result); } -DartEntityId SceneAsset_getEntity(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getEntity(tSceneAsset.cast()); - return result; +Pointer Engine_buildSkybox( + Pointer tEngine, + Pointer tTexture, + bool showSun, + double intensity, + int priority, +) { + final result = GeneratedBindings.instance._Engine_buildSkybox( + tEngine.cast(), + tTexture.cast(), + showSun, + intensity, + priority, + ); + return Pointer(result); } -int SceneAsset_getChildEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getChildEntityCount(tSceneAsset.cast()); - return result; +Pointer Engine_buildColoredSkybox( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, +) { + final result = GeneratedBindings.instance._Engine_buildColoredSkybox( + tEngine.cast(), + r, + g, + b, + a, + showSun, + intensity, + priority, + ); + return Pointer(result); } -void SceneAsset_getChildEntities(Pointer tSceneAsset, Pointer out) { - final result = GeneratedBindings.instance._SceneAsset_getChildEntities(tSceneAsset.cast(), out); - return result; +Pointer Engine_buildIndirectLightFromIrradianceTexture( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, +) { + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTexture( + tEngine.cast(), + tReflectionsTexture.cast(), + tIrradianceTexture.cast(), + intensity, + ); + return Pointer(result); } -Pointer SceneAsset_getCameraEntities(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getCameraEntities(tSceneAsset.cast()); - return Pointer(result); +Pointer Engine_buildIndirectLightFromIrradianceHarmonics( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer irradianceHarmonics, + double intensity, +) { + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonics( + tEngine.cast(), + tReflectionsTexture.cast(), + irradianceHarmonics, + intensity, + ); + return Pointer(result); } -Dartsize_t SceneAsset_getCameraEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getCameraEntityCount(tSceneAsset.cast()); +void Engine_destroySkybox(Pointer tEngine, Pointer tSkybox) { + final result = GeneratedBindings.instance._Engine_destroySkybox(tEngine.cast(), tSkybox.cast()); return result; } -Pointer SceneAsset_getLightEntities(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getLightEntities(tSceneAsset.cast()); - return Pointer(result); -} - -Dartsize_t SceneAsset_getLightEntityCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getLightEntityCount(tSceneAsset.cast()); +void Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight) { + final result = GeneratedBindings.instance._Engine_destroyIndirectLight(tEngine.cast(), tIndirectLight.cast()); return result; } -Pointer SceneAsset_getInstance(Pointer tSceneAsset, int index) { - final result = GeneratedBindings.instance._SceneAsset_getInstance(tSceneAsset.cast(), index); - return Pointer(result); +DartEntityId EntityManager_createEntity(Pointer tEntityManager) { + final result = GeneratedBindings.instance._EntityManager_createEntity(tEntityManager.cast()); + return result; } -Dartsize_t SceneAsset_getInstanceCount(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_getInstanceCount(tSceneAsset.cast()); +void EntityManager_destroyEntity(Pointer tEntityManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._EntityManager_destroyEntity(tEntityManager.cast(), entityId); return result; } -Pointer SceneAsset_createInstance( - Pointer asset, - Pointer> materialInstances, - int materialInstanceCount, -) { - final result = GeneratedBindings.instance._SceneAsset_createInstance( - asset.cast(), - materialInstances.cast(), - materialInstanceCount, - ); - return Pointer(result); +void Fence_waitAndDestroy(Pointer tFence) { + final result = GeneratedBindings.instance._Fence_waitAndDestroy(tFence.cast()); + return result; } -Aabb3 SceneAsset_getBoundingBox(Pointer asset) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._SceneAsset_getBoundingBox(Aabb3_out.cast(), asset.cast()); - return Aabb3_out.toDart(); +Pointer Engine_getDebugRegistry(Pointer tEngine) { + final result = GeneratedBindings.instance._Engine_getDebugRegistry(tEngine.cast()); + return Pointer(result); } -Pointer SceneAsset_getVertexBuffer(Pointer tSceneAsset, int primitiveIndex) { - final result = GeneratedBindings.instance._SceneAsset_getVertexBuffer(tSceneAsset.cast(), primitiveIndex); - return Pointer(result); +bool DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name) { + final result = GeneratedBindings.instance._DebugRegistry_hasProperty(tDebugRegistry.cast(), name); + return result == 1; } -Pointer SceneAsset_getIndexBuffer(Pointer tSceneAsset, int primitiveIndex) { - final result = GeneratedBindings.instance._SceneAsset_getIndexBuffer(tSceneAsset.cast(), primitiveIndex); - return Pointer(result); +bool DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_bool(tDebugRegistry.cast(), name, value); + return result == 1; } -int SceneAsset_getPrimitiveOffsetForEntity(Pointer tSceneAsset, DartEntityId entity) { - final result = GeneratedBindings.instance._SceneAsset_getPrimitiveOffsetForEntity(tSceneAsset.cast(), entity); - return result; +bool DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_int(tDebugRegistry.cast(), name, value); + return result == 1; } -void SceneAsset_releaseSourceData(Pointer tSceneAsset) { - final result = GeneratedBindings.instance._SceneAsset_releaseSourceData(tSceneAsset.cast()); - return result; +bool DebugRegistry_setProperty_float(Pointer tDebugRegistry, Pointer name, double value) { + final result = GeneratedBindings.instance._DebugRegistry_setProperty_float(tDebugRegistry.cast(), name, value); + return result == 1; } -void SceneAsset_setFlatShading(Pointer tSceneAsset, bool flatShading) { - final result = GeneratedBindings.instance._SceneAsset_setFlatShading(tSceneAsset.cast(), flatShading); - return result; +bool DebugRegistry_getProperty_bool( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, +) { + final result = GeneratedBindings.instance._DebugRegistry_getProperty_bool(tDebugRegistry.cast(), name, outValue); + return result == 1; } -void SceneAsset_getBones(Pointer tSceneAsset, Dartsize_t skinIndex, Pointer out) { - final result = GeneratedBindings.instance._SceneAsset_getBones(tSceneAsset.cast(), skinIndex, out); - return result; +bool DebugRegistry_getProperty_int( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, +) { + final result = GeneratedBindings.instance._DebugRegistry_getProperty_int(tDebugRegistry.cast(), name, outValue); + return result == 1; } -Dartsize_t SceneAsset_getBoneCount(Pointer tSceneAsset, Dartsize_t skinIndex) { - final result = GeneratedBindings.instance._SceneAsset_getBoneCount(tSceneAsset.cast(), skinIndex); - return result; +bool DebugRegistry_getProperty_float( + Pointer tDebugRegistry, + Pointer name, + Pointer outValue, +) { + final result = GeneratedBindings.instance._DebugRegistry_getProperty_float(tDebugRegistry.cast(), name, outValue); + return result == 1; } -Pointer SceneAsset_getBoneName(Pointer tSceneAsset, Dartsize_t skinIndex, Dartsize_t boneIndex) { - final result = GeneratedBindings.instance._SceneAsset_getBoneName(tSceneAsset.cast(), skinIndex, boneIndex); - return Pointer(result); +Pointer MaterialProvider_createMaterialInstance( + Pointer provider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, +) { + final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstance( + provider.cast(), + doubleSided, + unlit, + hasVertexColors, + hasBaseColorTexture, + hasNormalTexture, + hasOcclusionTexture, + hasEmissiveTexture, + useSpecularGlossiness, + alphaMode, + enableDiagnostics, + hasMetallicRoughnessTexture, + metallicRoughnessUV, + hasSpecularGlossinessTexture, + specularGlossinessUV, + baseColorUV, + hasClearCoatTexture, + clearCoatUV, + hasClearCoatRoughnessTexture, + clearCoatRoughnessUV, + hasClearCoatNormalTexture, + clearCoatNormalUV, + hasClearCoat, + hasTransmission, + hasTextureTransforms, + emissiveUV, + aoUV, + normalUV, + hasTransmissionTexture, + transmissionUV, + hasSheenColorTexture, + sheenColorUV, + hasSheenRoughnessTexture, + sheenRoughnessUV, + hasVolumeThicknessTexture, + volumeThicknessUV, + hasSheen, + hasIOR, + hasVolume, + ); + return Pointer(result); } -Pointer SurfaceOrientationBuilder_create() { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_create(); - return Pointer(result); +Pointer VertexBufferBuilder_create() { + final result = GeneratedBindings.instance._VertexBufferBuilder_create(); + return Pointer(result); } -void SurfaceOrientationBuilder_vertexCount(Pointer builder, Dartsize_t count) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_vertexCount(builder.cast(), count); +void VertexBufferBuilder_bufferCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._VertexBufferBuilder_bufferCount(builder.cast(), count); return result; } -void SurfaceOrientationBuilder_normals( - Pointer builder, - Pointer normals, - Dartsize_t stride, -) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_normals(builder.cast(), normals, stride); +void VertexBufferBuilder_vertexCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._VertexBufferBuilder_vertexCount(builder.cast(), count); return result; } -void SurfaceOrientationBuilder_tangents( - Pointer builder, - Pointer tangents, - Dartsize_t stride, +void VertexBufferBuilder_attribute( + Pointer builder, + int attribute, + int bufferIndex, + int attributeType, + int byteOffset, + int byteStride, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_tangents(builder.cast(), tangents, stride); + final result = GeneratedBindings.instance._VertexBufferBuilder_attribute( + builder.cast(), + attribute, + bufferIndex, + attributeType, + byteOffset, + byteStride, + ); return result; } -void SurfaceOrientationBuilder_uvs( - Pointer builder, - Pointer uvs, - Dartsize_t stride, -) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_uvs(builder.cast(), uvs, stride); +void VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize) { + final result = GeneratedBindings.instance._VertexBufferBuilder_normalized(builder.cast(), attribute, normalize); return result; } -void SurfaceOrientationBuilder_positions( - Pointer builder, - Pointer positions, - Dartsize_t stride, -) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_positions(builder.cast(), positions, stride); - return result; +Pointer VertexBufferBuilder_build(Pointer builder, Pointer engine) { + final result = GeneratedBindings.instance._VertexBufferBuilder_build(builder.cast(), engine.cast()); + return Pointer(result); } -void SurfaceOrientationBuilder_triangleCount(Pointer builder, Dartsize_t count) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangleCount(builder.cast(), count); +void VertexBufferBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._VertexBufferBuilder_destroy(builder.cast()); return result; } -void SurfaceOrientationBuilder_triangles_uint(Pointer builder, Pointer triangles) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_uint(builder.cast(), triangles); +Dartsize_t VertexBuffer_getVertexCount(Pointer buffer) { + final result = GeneratedBindings.instance._VertexBuffer_getVertexCount(buffer.cast()); return result; } -void SurfaceOrientationBuilder_triangles_ushort( - Pointer builder, - Pointer triangles, +void VertexBuffer_setBufferAt( + Pointer engine, + Pointer buffer, + int bufferIndex, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, ) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_ushort(builder.cast(), triangles); + final result = GeneratedBindings.instance._VertexBuffer_setBufferAt( + engine.cast(), + buffer.cast(), + bufferIndex, + data, + sizeInBytes, + byteOffset, + ); return result; } -Pointer SurfaceOrientationBuilder_build(Pointer builder) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_build(builder.cast()); - return Pointer(result); +void VertexBuffer_destroy(Pointer engine, Pointer buffer) { + final result = GeneratedBindings.instance._VertexBuffer_destroy(engine.cast(), buffer.cast()); + return result; } -void SurfaceOrientationBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._SurfaceOrientationBuilder_destroy(builder.cast()); +Pointer IndexBufferBuilder_create() { + final result = GeneratedBindings.instance._IndexBufferBuilder_create(); + return Pointer(result); +} + +void IndexBufferBuilder_indexCount(Pointer builder, int count) { + final result = GeneratedBindings.instance._IndexBufferBuilder_indexCount(builder.cast(), count); return result; } -Dartsize_t SurfaceOrientation_getVertexCount(Pointer orientation) { - final result = GeneratedBindings.instance._SurfaceOrientation_getVertexCount(orientation.cast()); +void IndexBufferBuilder_bufferType(Pointer builder, int indexType) { + final result = GeneratedBindings.instance._IndexBufferBuilder_bufferType(builder.cast(), indexType); return result; } -void SurfaceOrientation_getQuats_float4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, -) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_float4( - orientation.cast(), - out, - quatCount, - stride, - ); +Pointer IndexBufferBuilder_build(Pointer builder, Pointer engine) { + final result = GeneratedBindings.instance._IndexBufferBuilder_build(builder.cast(), engine.cast()); + return Pointer(result); +} + +void IndexBufferBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._IndexBufferBuilder_destroy(builder.cast()); return result; } -void SurfaceOrientation_getQuats_short4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, -) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_short4( - orientation.cast(), - out, - quatCount, - stride, - ); +Dartsize_t IndexBuffer_getIndexCount(Pointer buffer) { + final result = GeneratedBindings.instance._IndexBuffer_getIndexCount(buffer.cast()); return result; } -void SurfaceOrientation_getQuats_half4( - Pointer orientation, - Pointer out, - Dartsize_t quatCount, - Dartsize_t stride, +void IndexBuffer_setBuffer( + Pointer engine, + Pointer buffer, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, ) { - final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_half4( - orientation.cast(), - out, - quatCount, - stride, + final result = GeneratedBindings.instance._IndexBuffer_setBuffer( + engine.cast(), + buffer.cast(), + data, + sizeInBytes, + byteOffset, ); return result; } -void SurfaceOrientation_destroy(Pointer orientation) { - final result = GeneratedBindings.instance._SurfaceOrientation_destroy(orientation.cast()); +void IndexBuffer_destroy(Pointer engine, Pointer buffer) { + final result = GeneratedBindings.instance._IndexBuffer_destroy(engine.cast(), buffer.cast()); return result; } @@ -5011,2026 +4722,2815 @@ bool TransformManager_empty(Pointer tTransformManager) { return result == 1; } -int TransformManager_getComponentCount(Pointer tTransformManager) { - final result = GeneratedBindings.instance._TransformManager_getComponentCount(tTransformManager.cast()); +int TransformManager_getComponentCount(Pointer tTransformManager) { + final result = GeneratedBindings.instance._TransformManager_getComponentCount(tTransformManager.cast()); + return result; +} + +int TransformManager_getChildCount(Pointer tTransformManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._TransformManager_getChildCount(tTransformManager.cast(), entityId); + return result; +} + +void TransformManager_getChildren( + Pointer tTransformManager, + DartEntityId entityId, + Pointer children, + int count, +) { + final result = GeneratedBindings.instance._TransformManager_getChildren( + tTransformManager.cast(), + entityId, + children, + count, + ); + return result; +} + +void TransformManager_openLocalTransformTransaction(Pointer tTransformManager) { + final result = GeneratedBindings.instance._TransformManager_openLocalTransformTransaction(tTransformManager.cast()); + return result; +} + +void TransformManager_commitLocalTransformTransaction(Pointer tTransformManager) { + final result = GeneratedBindings.instance._TransformManager_commitLocalTransformTransaction(tTransformManager.cast()); + return result; +} + +int LightManager_createLight(Pointer tEngine, Pointer tLightManager, int tLightTtype) { + final result = GeneratedBindings.instance._LightManager_createLight( + tEngine.cast(), + tLightManager.cast(), + tLightTtype, + ); + return result; +} + +void LightManager_destroyLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_destroyLight(tLightManager.cast(), entity); + return result; +} + +bool LightManager_hasComponent(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_hasComponent(tLightManager.cast(), entity); + return result == 1; +} + +int LightManager_getType(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getType(tLightManager.cast(), entity); + return result; +} + +bool LightManager_isDirectional(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isDirectional(tLightManager.cast(), entity); + return result == 1; +} + +bool LightManager_isPointLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isPointLight(tLightManager.cast(), entity); + return result == 1; +} + +bool LightManager_isSpotLight(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isSpotLight(tLightManager.cast(), entity); + return result == 1; +} + +void LightManager_setPosition(Pointer tLightManager, DartEntityId light, double x, double y, double z) { + final result = GeneratedBindings.instance._LightManager_setPosition(tLightManager.cast(), light, x, y, z); + return result; +} + +double3 LightManager_getPosition(Pointer tLightManager, DartEntityId light) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getPosition(double3_out.cast(), tLightManager.cast(), light); + return double3_out.toDart(); +} + +void LightManager_setDirection(Pointer tLightManager, DartEntityId light, double x, double y, double z) { + final result = GeneratedBindings.instance._LightManager_setDirection(tLightManager.cast(), light, x, y, z); + return result; +} + +double3 LightManager_getDirection(Pointer tLightManager, DartEntityId light) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getDirection(double3_out.cast(), tLightManager.cast(), light); + return double3_out.toDart(); +} + +void LightManager_setColor(Pointer tLightManager, DartEntityId entity, double r, double g, double b) { + final result = GeneratedBindings.instance._LightManager_setColor(tLightManager.cast(), entity, r, g, b); + return result; +} + +void LightManager_setColorTemperature( + Pointer tLightManager, + DartEntityId entity, + double colorTemperature, +) { + final result = GeneratedBindings.instance._LightManager_setColorTemperature( + tLightManager.cast(), + entity, + colorTemperature, + ); + return result; +} + +double3 LightManager_getColor(Pointer tLightManager, DartEntityId entity) { + final double3_out = double3.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getColor(double3_out.cast(), tLightManager.cast(), entity); + return double3_out.toDart(); +} + +void LightManager_setIntensity(Pointer tLightManager, DartEntityId entity, double intensity) { + final result = GeneratedBindings.instance._LightManager_setIntensity(tLightManager.cast(), entity, intensity); + return result; +} + +void LightManager_setIntensityCandela(Pointer tLightManager, DartEntityId entity, double intensity) { + final result = GeneratedBindings.instance._LightManager_setIntensityCandela(tLightManager.cast(), entity, intensity); + return result; +} + +void LightManager_setIntensityWatts( + Pointer tLightManager, + DartEntityId entity, + double watts, + double efficiency, +) { + final result = GeneratedBindings.instance._LightManager_setIntensityWatts( + tLightManager.cast(), + entity, + watts, + efficiency, + ); + return result; +} + +double LightManager_getIntensity(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getIntensity(tLightManager.cast(), entity); + return result; +} + +void LightManager_setFalloff(Pointer tLightManager, DartEntityId entity, double falloff) { + final result = GeneratedBindings.instance._LightManager_setFalloff(tLightManager.cast(), entity, falloff); return result; } -int TransformManager_getChildCount(Pointer tTransformManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._TransformManager_getChildCount(tTransformManager.cast(), entityId); +double LightManager_getFalloff(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getFalloff(tLightManager.cast(), entity); return result; } -void TransformManager_getChildren( - Pointer tTransformManager, - DartEntityId entityId, - Pointer children, - int count, +void LightManager_setSpotLightCone( + Pointer tLightManager, + DartEntityId entity, + double inner, + double outer, ) { - final result = GeneratedBindings.instance._TransformManager_getChildren( - tTransformManager.cast(), - entityId, - children, - count, - ); + final result = GeneratedBindings.instance._LightManager_setSpotLightCone(tLightManager.cast(), entity, inner, outer); return result; } -void TransformManager_openLocalTransformTransaction(Pointer tTransformManager) { - final result = GeneratedBindings.instance._TransformManager_openLocalTransformTransaction(tTransformManager.cast()); +double LightManager_getSpotLightOuterCone(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSpotLightOuterCone(tLightManager.cast(), entity); return result; } -void TransformManager_commitLocalTransformTransaction(Pointer tTransformManager) { - final result = GeneratedBindings.instance._TransformManager_commitLocalTransformTransaction(tTransformManager.cast()); +double LightManager_getSpotLightInnerCone(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSpotLightInnerCone(tLightManager.cast(), entity); return result; } -Pointer VertexBufferBuilder_create() { - final result = GeneratedBindings.instance._VertexBufferBuilder_create(); - return Pointer(result); +void LightManager_setSunAngularRadius(Pointer tLightManager, DartEntityId entity, double angularRadius) { + final result = GeneratedBindings.instance._LightManager_setSunAngularRadius( + tLightManager.cast(), + entity, + angularRadius, + ); + return result; } -void VertexBufferBuilder_bufferCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._VertexBufferBuilder_bufferCount(builder.cast(), count); +double LightManager_getSunAngularRadius(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunAngularRadius(tLightManager.cast(), entity); return result; } -void VertexBufferBuilder_vertexCount(Pointer builder, int count) { - final result = GeneratedBindings.instance._VertexBufferBuilder_vertexCount(builder.cast(), count); +void LightManager_setSunHaloSize(Pointer tLightManager, DartEntityId entity, double haloSize) { + final result = GeneratedBindings.instance._LightManager_setSunHaloSize(tLightManager.cast(), entity, haloSize); return result; } -void VertexBufferBuilder_attribute( - Pointer builder, - int attribute, - int bufferIndex, - int attributeType, - int byteOffset, - int byteStride, -) { - final result = GeneratedBindings.instance._VertexBufferBuilder_attribute( - builder.cast(), - attribute, - bufferIndex, - attributeType, - byteOffset, - byteStride, - ); +double LightManager_getSunHaloSize(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunHaloSize(tLightManager.cast(), entity); return result; } -void VertexBufferBuilder_normalized(Pointer builder, int attribute, bool normalize) { - final result = GeneratedBindings.instance._VertexBufferBuilder_normalized(builder.cast(), attribute, normalize); +void LightManager_setSunHaloFalloff(Pointer tLightManager, DartEntityId entity, double haloFalloff) { + final result = GeneratedBindings.instance._LightManager_setSunHaloFalloff(tLightManager.cast(), entity, haloFalloff); return result; } -Pointer VertexBufferBuilder_build(Pointer builder, Pointer engine) { - final result = GeneratedBindings.instance._VertexBufferBuilder_build(builder.cast(), engine.cast()); - return Pointer(result); +double LightManager_getSunHaloFalloff(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_getSunHaloFalloff(tLightManager.cast(), entity); + return result; } -void VertexBufferBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._VertexBufferBuilder_destroy(builder.cast()); +void LightManager_setShadowCaster(Pointer tLightManager, DartEntityId entity, bool enabled) { + final result = GeneratedBindings.instance._LightManager_setShadowCaster(tLightManager.cast(), entity, enabled); return result; } -Dartsize_t VertexBuffer_getVertexCount(Pointer buffer) { - final result = GeneratedBindings.instance._VertexBuffer_getVertexCount(buffer.cast()); - return result; +bool LightManager_isShadowCaster(Pointer tLightManager, DartEntityId entity) { + final result = GeneratedBindings.instance._LightManager_isShadowCaster(tLightManager.cast(), entity); + return result == 1; } -void VertexBuffer_setBufferAt( - Pointer engine, - Pointer buffer, - int bufferIndex, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, -) { - final result = GeneratedBindings.instance._VertexBuffer_setBufferAt( - engine.cast(), - buffer.cast(), - bufferIndex, - data, - sizeInBytes, - byteOffset, +void LightManager_setShadowOptions(Pointer tLightManager, DartEntityId entity, TShadowOptions options) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._LightManager_setShadowOptions( + tLightManager.cast(), + entity, + optionsPtr.cast(), ); return result; } -void VertexBuffer_destroy(Pointer engine, Pointer buffer) { - final result = GeneratedBindings.instance._VertexBuffer_destroy(engine.cast(), buffer.cast()); - return result; +TShadowOptions LightManager_getShadowOptions(Pointer tLightManager, DartEntityId entity) { + final TShadowOptions_out = TShadowOptions.stackAlloc(); + final result = GeneratedBindings.instance._LightManager_getShadowOptions( + TShadowOptions_out.cast(), + tLightManager.cast(), + entity, + ); + return TShadowOptions_out.toDart(); } -void FrameScheduler_startWithCallback(DartFrameTickCallback tickCallback, int targetFps) { - final result = GeneratedBindings.instance._FrameScheduler_startWithCallback( - tickCallback as Pointer>, - targetFps, +void LightManager_setLightChannel(Pointer tLightManager, DartEntityId entity, int channel, bool enable) { + final result = GeneratedBindings.instance._LightManager_setLightChannel( + tLightManager.cast(), + entity, + channel, + enable, ); return result; } -void FrameScheduler_stop() { - final result = GeneratedBindings.instance._FrameScheduler_stop(); - return result; +bool LightManager_getLightChannel(Pointer tLightManager, DartEntityId entity, int channel) { + final result = GeneratedBindings.instance._LightManager_getLightChannel(tLightManager.cast(), entity, channel); + return result == 1; } -int FrameScheduler_initDartApi(Pointer data) { - final result = GeneratedBindings.instance._FrameScheduler_initDartApi(data); +void LightManager_computeUniformSplits(Pointer splitPositions, int cascades) { + final result = GeneratedBindings.instance._LightManager_computeUniformSplits(splitPositions, cascades); return result; } -void FrameScheduler_startWithPort(BigInt port, int targetFps) { - final result = GeneratedBindings.instance._FrameScheduler_startWithPort(port.toJSBigInt, targetFps); +void LightManager_computeLogSplits(Pointer splitPositions, int cascades, double near, double far) { + final result = GeneratedBindings.instance._LightManager_computeLogSplits(splitPositions, cascades, near, far); return result; } -void FrameScheduler_setTargetFps(int fps) { - final result = GeneratedBindings.instance._FrameScheduler_setTargetFps(fps); +void LightManager_computePracticalSplits( + Pointer splitPositions, + int cascades, + double near, + double far, + double lambda, +) { + final result = GeneratedBindings.instance._LightManager_computePracticalSplits( + splitPositions, + cascades, + near, + far, + lambda, + ); return result; } -BigInt FrameScheduler_steadyClockUs() { - final result = GeneratedBindings.instance._FrameScheduler_steadyClockUs(); - return result.toDart; +double LightManager_rgbToColorTemperature(double r, double g, double b) { + final result = GeneratedBindings.instance._LightManager_rgbToColorTemperature(r, g, b); + return result; } -int LightManager_createLight(Pointer tEngine, Pointer tLightManager, int tLightTtype) { - final result = GeneratedBindings.instance._LightManager_createLight( - tEngine.cast(), - tLightManager.cast(), - tLightTtype, - ); - return result; +Pointer RenderThread_create() { + final result = GeneratedBindings.instance._RenderThread_create(); + return Pointer(result); } -void LightManager_destroyLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_destroyLight(tLightManager.cast(), entity); - return result; +Pointer RenderThread_createForCanvas(Pointer canvasSelector) { + final result = GeneratedBindings.instance._RenderThread_createForCanvas(canvasSelector); + return Pointer(result); } -bool LightManager_hasComponent(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_hasComponent(tLightManager.cast(), entity); - return result == 1; +void RenderThread_destroy(Pointer renderThread) { + final result = GeneratedBindings.instance._RenderThread_destroy(renderThread); + return result; } -int LightManager_getType(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getType(tLightManager.cast(), entity); +void RenderThread_addTask(Pointer> task) { + final result = GeneratedBindings.instance._RenderThread_addTask(task.cast()); return result; } -bool LightManager_isDirectional(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isDirectional(tLightManager.cast(), entity); - return result == 1; +void RenderManager_setRenderableRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + Pointer> tViews, + int numViews, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderManager_setRenderableRenderThread( + tRenderer.cast(), + tSwapChain.cast(), + tViews.cast(), + numViews, + requestId, + onComplete as Pointer>, + ); + return result; } -bool LightManager_isPointLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isPointLight(tLightManager.cast(), entity); - return result == 1; +void RenderManager_renderRenderThread( + Pointer tRenderManager, + BigInt frameTimeInNanos, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderManager_renderRenderThread( + tRenderManager.cast(), + frameTimeInNanos.toJSBigInt, + requestId, + onComplete as Pointer>, + ); + return result; } -bool LightManager_isSpotLight(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isSpotLight(tLightManager.cast(), entity); - return result == 1; +void RenderManager_addAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderManager_addAnimationManagerRenderThread( + tRenderManager.cast(), + tAnimationManager.cast(), + requestId, + onComplete as Pointer>, + ); + return result; } -void LightManager_setPosition(Pointer tLightManager, DartEntityId light, double x, double y, double z) { - final result = GeneratedBindings.instance._LightManager_setPosition(tLightManager.cast(), light, x, y, z); +void RenderManager_removeAnimationManagerRenderThread( + Pointer tRenderManager, + Pointer tAnimationManager, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderManager_removeAnimationManagerRenderThread( + tRenderManager.cast(), + tAnimationManager.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -double3 LightManager_getPosition(Pointer tLightManager, DartEntityId light) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getPosition(double3_out.cast(), tLightManager.cast(), light); - return double3_out.toDart(); -} - -void LightManager_setDirection(Pointer tLightManager, DartEntityId light, double x, double y, double z) { - final result = GeneratedBindings.instance._LightManager_setDirection(tLightManager.cast(), light, x, y, z); +void RenderManager_removeSwapChainRenderThread( + Pointer tRenderManager, + Pointer tSwapChain, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderManager_removeSwapChainRenderThread( + tRenderManager.cast(), + tSwapChain.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -double3 LightManager_getDirection(Pointer tLightManager, DartEntityId light) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getDirection(double3_out.cast(), tLightManager.cast(), light); - return double3_out.toDart(); -} - -void LightManager_setColor(Pointer tLightManager, DartEntityId entity, double r, double g, double b) { - final result = GeneratedBindings.instance._LightManager_setColor(tLightManager.cast(), entity, r, g, b); +void AnimationManager_createRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._AnimationManager_createRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void LightManager_setColorTemperature( - Pointer tLightManager, - DartEntityId entity, - double colorTemperature, +void AnimationManager_destroyRenderThread( + Pointer tAnimationManager, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._LightManager_setColorTemperature( - tLightManager.cast(), - entity, - colorTemperature, + final result = GeneratedBindings.instance._AnimationManager_destroyRenderThread( + tAnimationManager.cast(), + requestId, + onComplete as Pointer>, ); return result; } -double3 LightManager_getColor(Pointer tLightManager, DartEntityId entity) { - final double3_out = double3.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getColor(double3_out.cast(), tLightManager.cast(), entity); - return double3_out.toDart(); +void Engine_createRenderThread( + int backend, + Pointer platform, + Pointer sharedContext, + int stereoscopicEyeCount, + bool disableHandleUseAfterFreeCheck, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_createRenderThread( + backend, + platform, + sharedContext, + stereoscopicEyeCount, + disableHandleUseAfterFreeCheck, + onComplete.cast(), + ); + return result; } -void LightManager_setIntensity(Pointer tLightManager, DartEntityId entity, double intensity) { - final result = GeneratedBindings.instance._LightManager_setIntensity(tLightManager.cast(), entity, intensity); +void Engine_createRendererRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_createRendererRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void LightManager_setIntensityCandela(Pointer tLightManager, DartEntityId entity, double intensity) { - final result = GeneratedBindings.instance._LightManager_setIntensityCandela(tLightManager.cast(), entity, intensity); +void Engine_destroyRendererRenderThread( + Pointer tEngine, + Pointer tRenderer, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyRendererRenderThread( + tEngine.cast(), + tRenderer.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setIntensityWatts( - Pointer tLightManager, - DartEntityId entity, - double watts, - double efficiency, +void Engine_createSwapChainRenderThread( + Pointer tEngine, + Pointer window, + BigInt flags, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._LightManager_setIntensityWatts( - tLightManager.cast(), - entity, - watts, - efficiency, + final result = GeneratedBindings.instance._Engine_createSwapChainRenderThread( + tEngine.cast(), + window, + flags.toJSBigInt, + onComplete.cast(), ); return result; } -double LightManager_getIntensity(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getIntensity(tLightManager.cast(), entity); +void Engine_createHeadlessSwapChainRenderThread( + Pointer tEngine, + int width, + int height, + BigInt flags, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_createHeadlessSwapChainRenderThread( + tEngine.cast(), + width, + height, + flags.toJSBigInt, + onComplete.cast(), + ); return result; } -void LightManager_setFalloff(Pointer tLightManager, DartEntityId entity, double falloff) { - final result = GeneratedBindings.instance._LightManager_setFalloff(tLightManager.cast(), entity, falloff); +void Engine_createCameraRenderThread( + Pointer tEngine, + DartEntityId entityId, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_createCameraRenderThread( + tEngine.cast(), + entityId, + onComplete.cast(), + ); return result; } -double LightManager_getFalloff(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getFalloff(tLightManager.cast(), entity); +void Engine_destroyCameraRenderThread( + Pointer tEngine, + Pointer tCamera, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyCameraRenderThread( + tEngine.cast(), + tCamera.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setSpotLightCone( - Pointer tLightManager, - DartEntityId entity, - double inner, - double outer, +void Engine_createViewRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._LightManager_setSpotLightCone(tLightManager.cast(), entity, inner, outer); + final result = GeneratedBindings.instance._Engine_createViewRenderThread(tEngine.cast(), onComplete.cast()); return result; } -double LightManager_getSpotLightOuterCone(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSpotLightOuterCone(tLightManager.cast(), entity); +void Engine_buildMaterialRenderThread( + Pointer tEngine, + Pointer materialData, + Dartsize_t length, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_buildMaterialRenderThread( + tEngine.cast(), + materialData, + length, + onComplete.cast(), + ); return result; } -double LightManager_getSpotLightInnerCone(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSpotLightInnerCone(tLightManager.cast(), entity); +void Engine_destroyRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_destroyRenderThread( + tEngine.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setSunAngularRadius(Pointer tLightManager, DartEntityId entity, double angularRadius) { - final result = GeneratedBindings.instance._LightManager_setSunAngularRadius( - tLightManager.cast(), - entity, - angularRadius, +void Engine_destroySwapChainRenderThread( + Pointer tEngine, + Pointer tSwapChain, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroySwapChainRenderThread( + tEngine.cast(), + tSwapChain.cast(), + requestId, + onComplete as Pointer>, ); return result; } -double LightManager_getSunAngularRadius(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunAngularRadius(tLightManager.cast(), entity); +void Engine_destroyViewRenderThread( + Pointer tEngine, + Pointer tView, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyViewRenderThread( + tEngine.cast(), + tView.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setSunHaloSize(Pointer tLightManager, DartEntityId entity, double haloSize) { - final result = GeneratedBindings.instance._LightManager_setSunHaloSize(tLightManager.cast(), entity, haloSize); +void Engine_destroySceneRenderThread( + Pointer tEngine, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroySceneRenderThread( + tEngine.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -double LightManager_getSunHaloSize(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunHaloSize(tLightManager.cast(), entity); +void Engine_destroyColorGradingRenderThread( + Pointer tEngine, + Pointer tColorGrading, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyColorGradingRenderThread( + tEngine.cast(), + tColorGrading.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setSunHaloFalloff(Pointer tLightManager, DartEntityId entity, double haloFalloff) { - final result = GeneratedBindings.instance._LightManager_setSunHaloFalloff(tLightManager.cast(), entity, haloFalloff); +void Engine_destroyMaterialRenderThread( + Pointer tEngine, + Pointer tMaterial, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyMaterialRenderThread( + tEngine.cast(), + tMaterial.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -double LightManager_getSunHaloFalloff(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_getSunHaloFalloff(tLightManager.cast(), entity); +void Engine_destroyMaterialInstanceRenderThread( + Pointer tEngine, + Pointer tMaterialInstance, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyMaterialInstanceRenderThread( + tEngine.cast(), + tMaterialInstance.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_setShadowCaster(Pointer tLightManager, DartEntityId entity, bool enabled) { - final result = GeneratedBindings.instance._LightManager_setShadowCaster(tLightManager.cast(), entity, enabled); +void Engine_destroySkyboxRenderThread( + Pointer tEngine, + Pointer tSkybox, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroySkyboxRenderThread( + tEngine.cast(), + tSkybox.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -bool LightManager_isShadowCaster(Pointer tLightManager, DartEntityId entity) { - final result = GeneratedBindings.instance._LightManager_isShadowCaster(tLightManager.cast(), entity); - return result == 1; -} - -void LightManager_setShadowOptions(Pointer tLightManager, DartEntityId entity, TShadowOptions options) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._LightManager_setShadowOptions( - tLightManager.cast(), - entity, - optionsPtr.cast(), +void Engine_destroyIndirectLightRenderThread( + Pointer tEngine, + Pointer tIndirectLight, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyIndirectLightRenderThread( + tEngine.cast(), + tIndirectLight.cast(), + requestId, + onComplete as Pointer>, ); return result; } -TShadowOptions LightManager_getShadowOptions(Pointer tLightManager, DartEntityId entity) { - final TShadowOptions_out = TShadowOptions.stackAlloc(); - final result = GeneratedBindings.instance._LightManager_getShadowOptions( - TShadowOptions_out.cast(), - tLightManager.cast(), - entity, +void Texture_buildRenderThread( + Pointer engine, + int width, + int height, + int depth, + int levels, + int tUsage, + int import1, + int sampler, + int format, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Texture_buildRenderThread( + engine.cast(), + width, + height, + depth, + levels, + tUsage, + import1, + sampler, + format, + onComplete.cast(), ); - return TShadowOptions_out.toDart(); + return result; } -void LightManager_setLightChannel(Pointer tLightManager, DartEntityId entity, int channel, bool enable) { - final result = GeneratedBindings.instance._LightManager_setLightChannel( - tLightManager.cast(), - entity, - channel, - enable, +void Texture_setExternalImageRenderThread( + Pointer tEngine, + Pointer tTexture, + Pointer externalImage, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Texture_setExternalImageRenderThread( + tEngine.cast(), + tTexture.cast(), + externalImage, + requestId, + onComplete as Pointer>, ); return result; } -bool LightManager_getLightChannel(Pointer tLightManager, DartEntityId entity, int channel) { - final result = GeneratedBindings.instance._LightManager_getLightChannel(tLightManager.cast(), entity, channel); - return result == 1; -} - -void LightManager_computeUniformSplits(Pointer splitPositions, int cascades) { - final result = GeneratedBindings.instance._LightManager_computeUniformSplits(splitPositions, cascades); +void Texture_generateMipMapsRenderThread( + Pointer tTexture, + Pointer tEngine, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Texture_generateMipMapsRenderThread( + tTexture.cast(), + tEngine.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void LightManager_computeLogSplits(Pointer splitPositions, int cascades, double near, double far) { - final result = GeneratedBindings.instance._LightManager_computeLogSplits(splitPositions, cascades, near, far); +void Ktx1Reader_createTextureRenderThread( + Pointer tEngine, + Pointer tBundle, + int requestId, + DartVoidCallback onTextureUploadComplete, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Ktx1Reader_createTextureRenderThread( + tEngine.cast(), + tBundle.cast(), + requestId, + onTextureUploadComplete as Pointer>, + onComplete.cast(), + ); return result; } -void LightManager_computePracticalSplits( - Pointer splitPositions, - int cascades, - double near, - double far, - double lambda, +void Ktx2Reader_createTextureRenderThread( + Pointer tEngine, + Pointer data, + Dartsize_t size, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._LightManager_computePracticalSplits( - splitPositions, - cascades, - near, - far, - lambda, + final result = GeneratedBindings.instance._Ktx2Reader_createTextureRenderThread( + tEngine.cast(), + data, + size, + onComplete.cast(), ); return result; } -double LightManager_rgbToColorTemperature(double r, double g, double b) { - final result = GeneratedBindings.instance._LightManager_rgbToColorTemperature(r, g, b); +void Engine_destroyTextureRenderThread( + Pointer engine, + Pointer tTexture, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Engine_destroyTextureRenderThread( + engine.cast(), + tTexture.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_destroyEntity(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_destroyEntity(tRenderableManager.cast(), entityId); +void Engine_createFenceRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_createFenceRenderThread(tEngine.cast(), onComplete.cast()); return result; } -bool RenderableManager_hasComponent(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_hasComponent(tRenderableManager.cast(), entityId); - return result == 1; -} - -bool RenderableManager_empty(Pointer tRenderableManager) { - final result = GeneratedBindings.instance._RenderableManager_empty(tRenderableManager.cast()); - return result == 1; -} - -bool RenderableManager_isRenderable(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isRenderable(tRenderableManager.cast(), entityId); - return result == 1; -} - -Dartsize_t RenderableManager_getComponentCount(Pointer tRenderableManager) { - final result = GeneratedBindings.instance._RenderableManager_getComponentCount(tRenderableManager.cast()); +void Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Fence_waitAndDestroyRenderThread( + tFence.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -bool RenderableManager_setMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - Pointer tMaterialInstance, +void Engine_destroyFenceRenderThread( + Pointer tEngine, + Pointer tFence, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, - tMaterialInstance.cast(), + final result = GeneratedBindings.instance._Engine_destroyFenceRenderThread( + tEngine.cast(), + tFence.cast(), + requestId, + onComplete as Pointer>, ); - return result == 1; + return result; } -Pointer RenderableManager_getMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, -) { - final result = GeneratedBindings.instance._RenderableManager_getMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, +void Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_flushAndWaitRenderThread( + tEngine.cast(), + requestId, + onComplete as Pointer>, ); - return Pointer(result); + return result; } -void RenderableManager_clearMaterialInstanceAt( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, -) { - final result = GeneratedBindings.instance._RenderableManager_clearMaterialInstanceAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, +void Engine_executeRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Engine_executeRenderThread( + tEngine.cast(), + requestId, + onComplete as Pointer>, ); return result; } -bool RenderableManager_setGeometryAtNonIndexed( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - int type, - Pointer vertices, - Dartsize_t offset, - Dartsize_t count, +void Engine_buildSkyboxRenderThread( + Pointer tEngine, + Pointer tTexture, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexed( - tRenderableManager.cast(), - entityId, - primitiveIndex, - type, - vertices.cast(), - offset, - count, + final result = GeneratedBindings.instance._Engine_buildSkyboxRenderThread( + tEngine.cast(), + tTexture.cast(), + showSun, + intensity, + priority, + onComplete.cast(), ); - return result == 1; -} - -Dartsize_t RenderableManager_getPrimitiveCount(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getPrimitiveCount(tRenderableManager.cast(), entityId); return result; } -Aabb3 RenderableManager_getAxisAlignedBoundingBox( - Pointer tRenderableManager, - DartEntityId entityId, +void Engine_buildColoredSkyboxRenderThread( + Pointer tEngine, + double r, + double g, + double b, + double a, + bool showSun, + double intensity, + int priority, + Pointer)>> onComplete, ) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getAxisAlignedBoundingBox( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, + final result = GeneratedBindings.instance._Engine_buildColoredSkyboxRenderThread( + tEngine.cast(), + r, + g, + b, + a, + showSun, + intensity, + priority, + onComplete.cast(), ); - return Aabb3_out.toDart(); + return result; } -void RenderableManager_setAxisAlignedBoundingBox( - Pointer tRenderableManager, - DartEntityId entityId, - Aabb3 aabb, +void Engine_buildIndirectLightFromIrradianceTextureRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer tIrradianceTexture, + double intensity, + Pointer)>> onComplete, ) { - final aabbPtr = aabb.address; - final result = GeneratedBindings.instance._RenderableManager_setAxisAlignedBoundingBox( - tRenderableManager.cast(), - entityId, - aabbPtr.cast(), + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTextureRenderThread( + tEngine.cast(), + tReflectionsTexture.cast(), + tIrradianceTexture.cast(), + intensity, + onComplete.cast(), ); return result; } -Aabb3 RenderableManager_getAabb(Pointer tRenderableManager, DartEntityId entityId) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getAabb( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, +void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + Pointer tEngine, + Pointer tReflectionsTexture, + Pointer harmonics, + double intensity, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( + tEngine.cast(), + tReflectionsTexture.cast(), + harmonics, + intensity, + onComplete.cast(), ); - return Aabb3_out.toDart(); + return result; } -Aabb3 RenderableManager_getBoundingBox(Pointer tRenderableManager, DartEntityId entityId) { - final Aabb3_out = Aabb3.stackAlloc(); - final result = GeneratedBindings.instance._RenderableManager_getBoundingBox( - Aabb3_out.cast(), - tRenderableManager.cast(), - entityId, +void Renderer_setClearOptionsRenderThread( + Pointer tRenderer, + double clearR, + double clearG, + double clearB, + double clearA, + int clearStencil, + bool clear, + bool discard, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Renderer_setClearOptionsRenderThread( + tRenderer.cast(), + clearR, + clearG, + clearB, + clearA, + clearStencil, + clear, + discard, + requestId, + onComplete as Pointer>, ); - return Aabb3_out.toDart(); + return result; } -void RenderableManager_setLayerMask( - Pointer tRenderableManager, - DartEntityId entityId, - int select, - int values, +void Renderer_beginFrameRenderThread( + Pointer tRenderer, + Pointer tSwapChain, + BigInt frameTimeInNanos, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setLayerMask( - tRenderableManager.cast(), - entityId, - select, - values, + final result = GeneratedBindings.instance._Renderer_beginFrameRenderThread( + tRenderer.cast(), + tSwapChain.cast(), + frameTimeInNanos.toJSBigInt, + onComplete.cast(), ); return result; } -int RenderableManager_getLayerMask(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getLayerMask(tRenderableManager.cast(), entityId); +void Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Renderer_endFrameRenderThread( + tRenderer.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_setVisibilityLayer( - Pointer tRenderableManager, - DartEntityId entityId, - int layer, +void Renderer_renderRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setVisibilityLayer( - tRenderableManager.cast(), - entityId, - layer, + final result = GeneratedBindings.instance._Renderer_renderRenderThread( + tRenderer.cast(), + tView.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void RenderableManager_setPriority( - Pointer tRenderableManager, - DartEntityId entityId, - int priority, +void Renderer_renderStandaloneViewRenderThread( + Pointer tRenderer, + Pointer tView, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setPriority( - tRenderableManager.cast(), - entityId, - priority, + final result = GeneratedBindings.instance._Renderer_renderStandaloneViewRenderThread( + tRenderer.cast(), + tView.cast(), + requestId, + onComplete as Pointer>, ); return result; } -int RenderableManager_getPriority(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getPriority(tRenderableManager.cast(), entityId); +void Renderer_readPixelsRenderThread( + Pointer tRenderer, + int width, + int height, + int xOffset, + int yOffset, + Pointer tRenderTarget, + int tPixelBufferFormat, + int tPixelDataType, + Pointer out, + Dartsize_t outLength, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Renderer_readPixelsRenderThread( + tRenderer.cast(), + width, + height, + xOffset, + yOffset, + tRenderTarget.cast(), + tPixelBufferFormat, + tPixelDataType, + out, + outLength, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_setChannel(Pointer tRenderableManager, DartEntityId entityId, int channel) { - final result = GeneratedBindings.instance._RenderableManager_setChannel(tRenderableManager.cast(), entityId, channel); +void Material_createInstanceRenderThread( + Pointer tMaterial, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Material_createInstanceRenderThread(tMaterial.cast(), onComplete.cast()); return result; } -void RenderableManager_setCulling(Pointer tRenderableManager, DartEntityId entityId, bool enabled) { - final result = GeneratedBindings.instance._RenderableManager_setCulling(tRenderableManager.cast(), entityId, enabled); +void MaterialInstance_setParameterTextureRenderThread( + Pointer tMaterialInstance, + Pointer propertyName, + Pointer tTexture, + Pointer tSampler, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._MaterialInstance_setParameterTextureRenderThread( + tMaterialInstance.cast(), + propertyName, + tTexture.cast(), + tSampler.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -bool RenderableManager_getCulling(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getCulling(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setFogEnabled( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, +void Material_createImageMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setFogEnabled( - tRenderableManager.cast(), - entityId, - enabled, + final result = GeneratedBindings.instance._Material_createImageMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -bool RenderableManager_getFogEnabled(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_getFogEnabled(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setLightChannel( - Pointer tRenderableManager, - DartEntityId entityId, - int channel, - bool enable, +void Material_createGizmoMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setLightChannel( - tRenderableManager.cast(), - entityId, - channel, - enable, + final result = GeneratedBindings.instance._Material_createGizmoMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -bool RenderableManager_getLightChannel( - Pointer tRenderableManager, - DartEntityId entityId, - int channel, +void Material_createBoneOverlayMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_getLightChannel( - tRenderableManager.cast(), - entityId, - channel, + final result = GeneratedBindings.instance._Material_createBoneOverlayMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); - return result == 1; + return result; } -void RenderableManager_setCastShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool castShadows, +void Material_createSilhouetteMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setCastShadows( - tRenderableManager.cast(), - entityId, - castShadows, + final result = GeneratedBindings.instance._Material_createSilhouetteMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -bool RenderableManager_isShadowCaster(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isShadowCaster(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setReceiveShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool receiveShadows, +void Material_createEdgeOutlineMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setReceiveShadows( - tRenderableManager.cast(), - entityId, - receiveShadows, + final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -bool RenderableManager_isShadowReceiver(Pointer tRenderableManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._RenderableManager_isShadowReceiver(tRenderableManager.cast(), entityId); - return result == 1; -} - -void RenderableManager_setScreenSpaceContactShadows( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, +void Material_createWireframeMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setScreenSpaceContactShadows( - tRenderableManager.cast(), - entityId, - enabled, + final result = GeneratedBindings.instance._Material_createWireframeMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -void RenderableManager_setBlendOrderAt( - Pointer tRenderableManager, - DartEntityId entityId, - Dartsize_t primitiveIndex, - int order, +void Material_createTranslationAxisMaterialRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBlendOrderAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, - order, + final result = GeneratedBindings.instance._Material_createTranslationAxisMaterialRenderThread( + tEngine.cast(), + onComplete.cast(), ); return result; } -void RenderableManager_setGlobalBlendOrderEnabledAt( - Pointer tRenderableManager, - DartEntityId entityId, - Dartsize_t primitiveIndex, - bool enabled, +void ColorGradingBuilder_createRenderThread( + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setGlobalBlendOrderEnabledAt( - tRenderableManager.cast(), - entityId, - primitiveIndex, - enabled, - ); + final result = GeneratedBindings.instance._ColorGradingBuilder_createRenderThread(onComplete.cast()); return result; } -void RenderableManager_setMorphWeights( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer weights, - Dartsize_t count, - Dartsize_t offset, +void ColorGradingBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setMorphWeights( - tRenderableManager.cast(), - entityId, - weights, - count, - offset, + final result = GeneratedBindings.instance._ColorGradingBuilder_buildRenderThread( + tBuilder.cast(), + tEngine.cast(), + onComplete.cast(), ); return result; } -Dartsize_t RenderableManager_getMorphTargetCount( - Pointer tRenderableManager, - DartEntityId entityId, +void ColorGradingBuilder_destroyRenderThread( + Pointer tBuilder, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_getMorphTargetCount(tRenderableManager.cast(), entityId); + final result = GeneratedBindings.instance._ColorGradingBuilder_destroyRenderThread( + tBuilder.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableManager_setBonesFromMat4( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer transforms, - Dartsize_t boneCount, - Dartsize_t offset, +void ToneMapper_createLinearRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4( - tRenderableManager.cast(), - entityId, - transforms, - boneCount, - offset, - ); + final result = GeneratedBindings.instance._ToneMapper_createLinearRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void RenderableManager_setBonesFromBone( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer bones, - Dartsize_t boneCount, - Dartsize_t offset, +void ToneMapper_createACESRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromBone( - tRenderableManager.cast(), - entityId, - bones, - boneCount, - offset, - ); + final result = GeneratedBindings.instance._ToneMapper_createACESRenderThread(tEngine.cast(), onComplete.cast()); return result; } -Pointer RenderableBuilder_create(Dartsize_t primitiveCount) { - final result = GeneratedBindings.instance._RenderableBuilder_create(primitiveCount); - return Pointer(result); +void ToneMapper_createACESLegacyRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createACESLegacyRenderThread(tEngine.cast(), onComplete.cast()); + return result; } -void RenderableBuilder_destroy(Pointer builder) { - final result = GeneratedBindings.instance._RenderableBuilder_destroy(builder.cast()); +void ToneMapper_createFilmicRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createFilmicRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void RenderableBuilder_boundingBox(Pointer builder, Aabb3 aabb) { - final aabbPtr = aabb.address; - final result = GeneratedBindings.instance._RenderableBuilder_boundingBox(builder.cast(), aabbPtr.cast()); +void ToneMapper_createPBRNeutralRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createPBRNeutralRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void RenderableBuilder_material( - Pointer builder, - Dartsize_t primitiveIndex, - Pointer materialInstance, +void ToneMapper_createAGXRenderThread( + Pointer tEngine, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_material( - builder.cast(), - primitiveIndex, - materialInstance.cast(), - ); + final result = GeneratedBindings.instance._ToneMapper_createAGXRenderThread(tEngine.cast(), onComplete.cast()); return result; } -void RenderableBuilder_geometry( - Pointer builder, - Dartsize_t primitiveIndex, - int type, - Pointer vertices, - Pointer indices, - Dartsize_t offset, - Dartsize_t count, +void ToneMapper_createAGXWithLookRenderThread( + Pointer tEngine, + int look, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_geometry( - builder.cast(), - primitiveIndex, - type, - vertices.cast(), - indices.cast(), - offset, - count, + final result = GeneratedBindings.instance._ToneMapper_createAGXWithLookRenderThread( + tEngine.cast(), + look, + onComplete.cast(), ); return result; } -void RenderableBuilder_geometryNonIndexed( - Pointer builder, - Dartsize_t primitiveIndex, - int type, - Pointer vertices, - Dartsize_t offset, - Dartsize_t count, +void ToneMapper_createGenericRenderThread( + Pointer tEngine, + double contrast, + double midGrayIn, + double midGrayOut, + double hdrMax, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_geometryNonIndexed( - builder.cast(), - primitiveIndex, - type, - vertices.cast(), - offset, - count, + final result = GeneratedBindings.instance._ToneMapper_createGenericRenderThread( + tEngine.cast(), + contrast, + midGrayIn, + midGrayOut, + hdrMax, + onComplete.cast(), ); return result; } -void RenderableBuilder_priority(Pointer builder, int priority) { - final result = GeneratedBindings.instance._RenderableBuilder_priority(builder.cast(), priority); +void ToneMapper_createDisplayRangeRenderThread( + Pointer tEngine, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._ToneMapper_createDisplayRangeRenderThread( + tEngine.cast(), + onComplete.cast(), + ); return result; } -void RenderableBuilder_channel(Pointer builder, int channel) { - final result = GeneratedBindings.instance._RenderableBuilder_channel(builder.cast(), channel); +void ToneMapper_destroyRenderThread(Pointer tToneMapper, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._ToneMapper_destroyRenderThread( + tToneMapper.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_culling(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_culling(builder.cast(), enabled); +void View_pickRenderThread(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { + final result = GeneratedBindings.instance._View_pickRenderThread( + tView.cast(), + requestId, + x, + y, + callback as Pointer>, + ); return result; } -void RenderableBuilder_castShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_castShadows(builder.cast(), enabled); +void View_setColorGradingRenderThread( + Pointer tView, + Pointer tColorGrading, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setColorGradingRenderThread( + tView.cast(), + tColorGrading.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_receiveShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_receiveShadows(builder.cast(), enabled); +void View_setBloomRenderThread( + Pointer tView, + bool enabled, + double strength, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setBloomRenderThread( + tView.cast(), + enabled, + strength, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_fog(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_fog(builder.cast(), enabled); +void View_setCameraRenderThread( + Pointer tView, + Pointer tCamera, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setCameraRenderThread( + tView.cast(), + tCamera.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_lightChannel(builder.cast(), channel, enabled); +void View_getNameRenderThread(Pointer tView, Pointer)>> onComplete) { + final result = GeneratedBindings.instance._View_getNameRenderThread(tView.cast(), onComplete.cast()); return result; } -void RenderableBuilder_layerMask(Pointer builder, int select, int values) { - final result = GeneratedBindings.instance._RenderableBuilder_layerMask(builder.cast(), select, values); +void View_setNameRenderThread(Pointer tView, Pointer name, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setNameRenderThread( + tView.cast(), + name, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_screenSpaceContactShadows(builder.cast(), enabled); +void View_setViewportRenderThread( + Pointer tView, + int width, + int height, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setViewportRenderThread( + tView.cast(), + width, + height, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_blendOrder(Pointer builder, Dartsize_t primitiveIndex, int order) { - final result = GeneratedBindings.instance._RenderableBuilder_blendOrder(builder.cast(), primitiveIndex, order); +void View_setRenderTargetRenderThread( + Pointer tView, + Pointer tRenderTarget, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setRenderTargetRenderThread( + tView.cast(), + tRenderTarget.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_globalBlendOrderEnabled( - Pointer builder, - Dartsize_t primitiveIndex, - bool enabled, +void View_setAntiAliasingRenderThread( + Pointer tView, + bool msaa, + bool fxaa, + bool taa, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_globalBlendOrderEnabled( - builder.cast(), - primitiveIndex, - enabled, + final result = GeneratedBindings.instance._View_setAntiAliasingRenderThread( + tView.cast(), + msaa, + fxaa, + taa, + requestId, + onComplete as Pointer>, ); return result; } -void RenderableBuilder_instances(Pointer builder, Dartsize_t instanceCount) { - final result = GeneratedBindings.instance._RenderableBuilder_instances(builder.cast(), instanceCount); +void View_setPostProcessingRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setPostProcessingRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_skinningFromMat4( - Pointer builder, - Dartsize_t boneCount, - Pointer transforms, +void View_setFrustumCullingEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_skinningFromMat4(builder.cast(), boneCount, transforms); + final result = GeneratedBindings.instance._View_setFrustumCullingEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_skinningFromBone( - Pointer builder, - Dartsize_t boneCount, - Pointer bones, +void View_setStencilBufferEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_skinningFromBone(builder.cast(), boneCount, bones); + final result = GeneratedBindings.instance._View_setStencilBufferEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled) { - final result = GeneratedBindings.instance._RenderableBuilder_enableSkinningBuffers(builder.cast(), enabled); +void View_setDitheringEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setDitheringEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderableBuilder_boneIndicesAndWeights( - Pointer builder, - Dartsize_t primitiveIndex, - Pointer indicesAndWeights, - Dartsize_t count, - Dartsize_t bonesPerVertex, +void View_setRenderQualityRenderThread( + Pointer tView, + int qualityLevel, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderableBuilder_boneIndicesAndWeights( - builder.cast(), - primitiveIndex, - indicesAndWeights, - count, - bonesPerVertex, + final result = GeneratedBindings.instance._View_setRenderQualityRenderThread( + tView.cast(), + qualityLevel, + requestId, + onComplete as Pointer>, ); return result; } -int RenderableBuilder_build(Pointer builder, Pointer engine, DartEntityId entity) { - final result = GeneratedBindings.instance._RenderableBuilder_build(builder.cast(), engine.cast(), entity); +void View_setSceneRenderThread( + Pointer tView, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setSceneRenderThread( + tView.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a) { - final result = GeneratedBindings.instance._Skybox_setColor(tSkybox.cast(), r, g, b, a); +void View_setLayerEnabledRenderThread( + Pointer tView, + int layer, + bool visible, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setLayerEnabledRenderThread( + tView.cast(), + layer, + visible, + requestId, + onComplete as Pointer>, + ); return result; } -/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). -void Skybox_setLayerMask(Pointer tSkybox, int select, int values) { - final result = GeneratedBindings.instance._Skybox_setLayerMask(tSkybox.cast(), select, values); +void View_setBlendModeRenderThread(Pointer tView, int blendMode, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setBlendModeRenderThread( + tView.cast(), + blendMode, + requestId, + onComplete as Pointer>, + ); return result; } -/// Returns the visibility mask bits. -int Skybox_getLayerMask(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getLayerMask(tSkybox.cast()); +void View_setFogOptionsRenderThread( + Pointer tView, + TFogOptions tFogOptions, + int requestId, + DartVoidCallback onComplete, +) { + final tFogOptionsPtr = tFogOptions.address; + final result = GeneratedBindings.instance._View_setFogOptionsRenderThread( + tView.cast(), + tFogOptionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -/// Returns the skybox intensity in lux. -double Skybox_getIntensity(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getIntensity(tSkybox.cast()); +void View_setAmbientOcclusionOptionsRenderThread( + Pointer tView, + TAmbientOcclusionOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setAmbientOcclusionOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -/// Returns the environment texture, or nullptr for a color-only skybox. -Pointer Skybox_getTexture(Pointer tSkybox) { - final result = GeneratedBindings.instance._Skybox_getTexture(tSkybox.cast()); - return Pointer(result); -} - -Pointer Engine_create( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, +void View_setFrontFaceWindingInvertedRenderThread( + Pointer tView, + bool inverted, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_create( - backend, - platform, - sharedContext, - stereoscopicEyeCount, - disableHandleUseAfterFreeCheck, + final result = GeneratedBindings.instance._View_setFrontFaceWindingInvertedRenderThread( + tView.cast(), + inverted, + requestId, + onComplete as Pointer>, ); - return Pointer(result); -} - -int Engine_getSupportedFeatureLevel(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getSupportedFeatureLevel(tEngine.cast()); return result; } -void Engine_destroy(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_destroy(tEngine.cast()); +void View_setShadowsEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setShadowsEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -Pointer Engine_createRenderer(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createRenderer(tEngine.cast()); - return Pointer(result); -} - -void Engine_destroyRenderer(Pointer tEngine, Pointer tRenderer) { - final result = GeneratedBindings.instance._Engine_destroyRenderer(tEngine.cast(), tRenderer.cast()); +void View_setShadowTypeRenderThread(Pointer tView, int shadowType, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._View_setShadowTypeRenderThread( + tView.cast(), + shadowType, + requestId, + onComplete as Pointer>, + ); return result; } -Pointer Engine_createSwapChain(Pointer tEngine, Pointer window, BigInt flags) { - final result = GeneratedBindings.instance._Engine_createSwapChain(tEngine.cast(), window, flags.toJSBigInt); - return Pointer(result); -} - -Pointer Engine_createHeadlessSwapChain(Pointer tEngine, int width, int height, BigInt flags) { - final result = GeneratedBindings.instance._Engine_createHeadlessSwapChain( - tEngine.cast(), - width, - height, - flags.toJSBigInt, +void View_setSoftShadowOptionsRenderThread( + Pointer tView, + TSoftShadowOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setSoftShadowOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, ); - return Pointer(result); -} - -void Engine_destroySwapChain(Pointer tEngine, Pointer tSwapChain) { - final result = GeneratedBindings.instance._Engine_destroySwapChain(tEngine.cast(), tSwapChain.cast()); return result; } -void Engine_destroyView(Pointer tEngine, Pointer tView) { - final result = GeneratedBindings.instance._Engine_destroyView(tEngine.cast(), tView.cast()); +void View_setVsmShadowOptionsRenderThread( + Pointer tView, + TVsmShadowOptions options, + int requestId, + DartVoidCallback onComplete, +) { + final optionsPtr = options.address; + final result = GeneratedBindings.instance._View_setVsmShadowOptionsRenderThread( + tView.cast(), + optionsPtr.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Engine_destroyScene(Pointer tEngine, Pointer tScene) { - final result = GeneratedBindings.instance._Engine_destroyScene(tEngine.cast(), tScene.cast()); +void View_setTransparentPickingEnabledRenderThread( + Pointer tView, + bool enabled, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._View_setTransparentPickingEnabledRenderThread( + tView.cast(), + enabled, + requestId, + onComplete as Pointer>, + ); return result; } -void Engine_destroyColorGrading(Pointer tEngine, Pointer tColorGrading) { - final result = GeneratedBindings.instance._Engine_destroyColorGrading(tEngine.cast(), tColorGrading.cast()); +void SceneAsset_destroyRenderThread(Pointer tSceneAsset, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._SceneAsset_destroyRenderThread( + tSceneAsset.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -Pointer Engine_createCamera(Pointer tEngine, DartEntityId entityId) { - final result = GeneratedBindings.instance._Engine_createCamera(tEngine.cast(), entityId); - return Pointer(result); -} - -void Engine_destroyCamera(Pointer tEngine, Pointer tCamera) { - final result = GeneratedBindings.instance._Engine_destroyCamera(tEngine.cast(), tCamera.cast()); +void SceneAsset_createFromFilamentAssetRenderThread( + Pointer tEngine, + Pointer tAssetLoader, + Pointer tNameComponentManager, + Pointer tFilamentAsset, + bool rebuildVertices, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAssetRenderThread( + tEngine.cast(), + tAssetLoader.cast(), + tNameComponentManager.cast(), + tFilamentAsset.cast(), + rebuildVertices, + onComplete.cast(), + ); return result; } -Pointer Engine_createView(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createView(tEngine.cast()); - return Pointer(result); -} - -Pointer Engine_getCameraComponent(Pointer tEngine, DartEntityId entityId) { - final result = GeneratedBindings.instance._Engine_getCameraComponent(tEngine.cast(), entityId); - return Pointer(result); -} - -Pointer Engine_getTransformManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getTransformManager(engine.cast()); - return Pointer(result); -} - -Pointer Engine_getRenderableManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getRenderableManager(engine.cast()); - return Pointer(result); -} - -Pointer Engine_getLightManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getLightManager(engine.cast()); - return Pointer(result); -} - -Pointer Engine_getEntityManager(Pointer engine) { - final result = GeneratedBindings.instance._Engine_getEntityManager(engine.cast()); - return Pointer(result); -} - -void Engine_setAutomaticInstancingEnabled(Pointer tEngine, bool enabled) { - final result = GeneratedBindings.instance._Engine_setAutomaticInstancingEnabled(tEngine.cast(), enabled); +void SceneAsset_createFromBuffersRenderThread( + Pointer tEngine, + Pointer tVertexBuffer, + Pointer tIndexBuffer, + Pointer> materialInstances, + int materialInstanceCount, + int tPrimitiveType, + Aabb3 boundingBox, + Pointer)>> callback, +) { + final boundingBoxPtr = boundingBox.address; + final result = GeneratedBindings.instance._SceneAsset_createFromBuffersRenderThread( + tEngine.cast(), + tVertexBuffer.cast(), + tIndexBuffer.cast(), + materialInstances.cast(), + materialInstanceCount, + tPrimitiveType, + boundingBoxPtr.cast(), + callback.cast(), + ); return result; } -Dartsize_t Engine_getMaxAutomaticInstances(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getMaxAutomaticInstances(tEngine.cast()); +void SceneAsset_createInstanceRenderThread( + Pointer asset, + Pointer> tMaterialInstances, + int materialInstanceCount, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._SceneAsset_createInstanceRenderThread( + asset.cast(), + tMaterialInstances.cast(), + materialInstanceCount, + callback.cast(), + ); return result; } -void Engine_destroyTexture(Pointer tEngine, Pointer tTexture) { - final result = GeneratedBindings.instance._Engine_destroyTexture(tEngine.cast(), tTexture.cast()); +void SceneAsset_releaseSourceDataRenderThread( + Pointer tSceneAsset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._SceneAsset_releaseSourceDataRenderThread( + tSceneAsset.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -Pointer Engine_createFence(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createFence(tEngine.cast()); - return Pointer(result); +void SceneAsset_setFlatShadingRenderThread( + Pointer tSceneAsset, + bool flatShading, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._SceneAsset_setFlatShadingRenderThread( + tSceneAsset.cast(), + flatShading, + requestId, + onComplete as Pointer>, + ); + return result; } -void Engine_destroyFence(Pointer tEngine, Pointer tFence) { - final result = GeneratedBindings.instance._Engine_destroyFence(tEngine.cast(), tFence.cast()); +void MaterialProvider_createMaterialInstanceRenderThread( + Pointer tMaterialProvider, + bool doubleSided, + bool unlit, + bool hasVertexColors, + bool hasBaseColorTexture, + bool hasNormalTexture, + bool hasOcclusionTexture, + bool hasEmissiveTexture, + bool useSpecularGlossiness, + int alphaMode, + bool enableDiagnostics, + bool hasMetallicRoughnessTexture, + int metallicRoughnessUV, + bool hasSpecularGlossinessTexture, + int specularGlossinessUV, + int baseColorUV, + bool hasClearCoatTexture, + int clearCoatUV, + bool hasClearCoatRoughnessTexture, + int clearCoatRoughnessUV, + bool hasClearCoatNormalTexture, + int clearCoatNormalUV, + bool hasClearCoat, + bool hasTransmission, + bool hasTextureTransforms, + int emissiveUV, + int aoUV, + int normalUV, + bool hasTransmissionTexture, + int transmissionUV, + bool hasSheenColorTexture, + int sheenColorUV, + bool hasSheenRoughnessTexture, + int sheenRoughnessUV, + bool hasVolumeThicknessTexture, + int volumeThicknessUV, + bool hasSheen, + bool hasIOR, + bool hasVolume, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstanceRenderThread( + tMaterialProvider.cast(), + doubleSided, + unlit, + hasVertexColors, + hasBaseColorTexture, + hasNormalTexture, + hasOcclusionTexture, + hasEmissiveTexture, + useSpecularGlossiness, + alphaMode, + enableDiagnostics, + hasMetallicRoughnessTexture, + metallicRoughnessUV, + hasSpecularGlossinessTexture, + specularGlossinessUV, + baseColorUV, + hasClearCoatTexture, + clearCoatUV, + hasClearCoatRoughnessTexture, + clearCoatRoughnessUV, + hasClearCoatNormalTexture, + clearCoatNormalUV, + hasClearCoat, + hasTransmission, + hasTextureTransforms, + emissiveUV, + aoUV, + normalUV, + hasTransmissionTexture, + transmissionUV, + hasSheenColorTexture, + sheenColorUV, + hasSheenRoughnessTexture, + sheenRoughnessUV, + hasVolumeThicknessTexture, + volumeThicknessUV, + hasSheen, + hasIOR, + hasVolume, + callback.cast(), + ); return result; } -void Engine_flushAndWait(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_flushAndWait(tEngine.cast()); +void AnimationManager_updateRenderThread( + Pointer tAnimationManager, + BigInt frameTimeInNanos, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._AnimationManager_updateRenderThread( + tAnimationManager.cast(), + frameTimeInNanos.toJSBigInt, + requestId, + onComplete as Pointer>, + ); return result; } -void Engine_execute(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_execute(tEngine.cast()); +void AnimationManager_setGltfAnimationTimeRenderThread( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTimeRenderThread( + tAnimationManager.cast(), + tSceneAsset.cast(), + animationIndex, + timeInSeconds, + requestId, + onComplete as Pointer>, + ); return result; } -Pointer Engine_buildMaterial(Pointer tEngine, Pointer materialData, Dartsize_t length) { - final result = GeneratedBindings.instance._Engine_buildMaterial(tEngine.cast(), materialData, length); - return Pointer(result); +void AnimationManager_updateBoneMatricesRenderThread( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer> callback, +) { + final result = GeneratedBindings.instance._AnimationManager_updateBoneMatricesRenderThread( + tAnimationManager.cast(), + sceneAsset.cast(), + callback.cast(), + ); + return result; } -/// Compiles .mat [matSource] ([length] bytes, not necessarily -/// NUL-terminated) into a filamat package, synchronously on the calling -/// thread. #include directives must already be resolved by the caller (the -/// Dart layer flattens them). -/// -/// [platform]/[targetApi]/[optimization] select the compilation targets; -/// pass T_MATERIAL_TARGET_API_FROM_ENGINE to derive targetApi from the -/// engine's backend. -/// -/// [definesJson] is either nullptr or a flat JSON object of preprocessor -/// defines, e.g. `{"OCCLUSION": "1"}`. Only string keys/values and basic -/// backslash escapes are supported. -/// -/// [embedSource] controls whether the .mat source is embedded in the -/// package (matc's no-embed-source flag). -/// -/// On success returns a malloc'd buffer of *outSize bytes that the caller -/// must release with [Engine_freeCompiledMaterial]. On failure returns -/// nullptr and writes a NUL-terminated message into [outError] (capacity -/// [outErrorCap]). -Pointer Engine_compileMaterial( - Pointer tEngine, - Pointer matSource, - Dartsize_t length, - int platform, - int targetApi, - int optimization, - Pointer definesJson, - int embedSource, - Pointer outError, - Dartsize_t outErrorCap, - Pointer outSize, +void AnimationManager_setMorphTargetWeightsRenderThread( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + int numWeights, + Pointer> callback, ) { - final result = GeneratedBindings.instance._Engine_compileMaterial( - tEngine.cast(), - matSource, - length, - platform, - targetApi, - optimization, - definesJson, - embedSource, - outError, - outErrorCap, - outSize, + final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeightsRenderThread( + tAnimationManager.cast(), + entityId, + morphData, + numWeights, + callback.cast(), ); - return Pointer(result); + return result; +} + +void Image_createEmptyRenderThread( + int width, + int height, + int channel, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Image_createEmptyRenderThread(width, height, channel, onComplete.cast()); + return result; } -/// Releases a buffer returned by [Engine_compileMaterial]. -void Engine_freeCompiledMaterial(Pointer data) { - final result = GeneratedBindings.instance._Engine_freeCompiledMaterial(data); +void Image_decodeRenderThread( + Pointer data, + Dartsize_t length, + Pointer name, + bool alpha, + Pointer)>> onComplete, +) { + final result = GeneratedBindings.instance._Image_decodeRenderThread(data, length, name, alpha, onComplete.cast()); return result; } -/// As [Engine_compileMaterial], but the work runs on the engine's render -/// thread. The task writes the malloc'd package to *[outData] and its size to -/// *[outSize] (release it with [Engine_freeCompiledMaterial]), or nullptr on -/// failure with the message in [outError], then invokes [onComplete] with -/// [requestId]. -void Engine_compileMaterialRenderThread( - Pointer tEngine, - Pointer matSource, - Dartsize_t length, - int platform, - int targetApi, - int optimization, - Pointer definesJson, - int embedSource, - Pointer outError, - Dartsize_t outErrorCap, - Pointer> outData, - Pointer outSize, - int requestId, - Pointer> onComplete, +void Image_getBytesRenderThread( + Pointer tLinearImage, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Engine_compileMaterialRenderThread( - tEngine.cast(), - matSource, - length, - platform, - targetApi, - optimization, - definesJson, - embedSource, - outError, - outErrorCap, - outData, - outSize, + final result = GeneratedBindings.instance._Image_getBytesRenderThread(tLinearImage.cast(), onComplete.cast()); + return result; +} + +void Image_destroyRenderThread(Pointer tLinearImage, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._Image_destroyRenderThread( + tLinearImage.cast(), requestId, - onComplete.cast(), + onComplete as Pointer>, ); return result; } -void Engine_destroyMaterial(Pointer tEngine, Pointer tMaterial) { - final result = GeneratedBindings.instance._Engine_destroyMaterial(tEngine.cast(), tMaterial.cast()); +void Image_getWidthRenderThread( + Pointer tLinearImage, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Image_getWidthRenderThread(tLinearImage.cast(), onComplete.cast()); return result; } -void Engine_destroyMaterialInstance(Pointer tEngine, Pointer tMaterialInstance) { - final result = GeneratedBindings.instance._Engine_destroyMaterialInstance(tEngine.cast(), tMaterialInstance.cast()); +void Image_getHeightRenderThread( + Pointer tLinearImage, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Image_getHeightRenderThread(tLinearImage.cast(), onComplete.cast()); return result; } -Pointer Engine_createScene(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_createScene(tEngine.cast()); - return Pointer(result); +void Image_getChannelsRenderThread( + Pointer tLinearImage, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._Image_getChannelsRenderThread(tLinearImage.cast(), onComplete.cast()); + return result; } -Pointer Engine_buildSkybox( +void Texture_loadImageRenderThread( Pointer tEngine, Pointer tTexture, - bool showSun, - double intensity, - int priority, + Pointer tImage, + int bufferFormat, + int pixelDataType, + int level, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildSkybox( + final result = GeneratedBindings.instance._Texture_loadImageRenderThread( tEngine.cast(), tTexture.cast(), - showSun, - intensity, - priority, + tImage.cast(), + bufferFormat, + pixelDataType, + level, + onComplete.cast(), ); - return Pointer(result); + return result; } -Pointer Engine_buildColoredSkybox( +void Texture_setImageRenderThread( Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, + Pointer tTexture, + int level, + Pointer data, + Dartsize_t size, + int x_offset, + int y_offset, + int z_offset, + int width, + int height, + int depth, + int bufferFormat, + int pixelDataType, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildColoredSkybox( + final result = GeneratedBindings.instance._Texture_setImageRenderThread( tEngine.cast(), - r, - g, - b, - a, - showSun, - intensity, - priority, + tTexture.cast(), + level, + data, + size, + x_offset, + y_offset, + z_offset, + width, + height, + depth, + bufferFormat, + pixelDataType, + onComplete.cast(), ); - return Pointer(result); + return result; } -Pointer Engine_buildIndirectLightFromIrradianceTexture( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, +void RenderTarget_getColorTextureRenderThread( + Pointer tRenderTarget, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTexture( - tEngine.cast(), - tReflectionsTexture.cast(), - tIrradianceTexture.cast(), - intensity, + final result = GeneratedBindings.instance._RenderTarget_getColorTextureRenderThread( + tRenderTarget.cast(), + onComplete.cast(), ); - return Pointer(result); + return result; } -Pointer Engine_buildIndirectLightFromIrradianceHarmonics( +void RenderTarget_createRenderThread( Pointer tEngine, - Pointer tReflectionsTexture, - Pointer irradianceHarmonics, - double intensity, + Pointer color, + Pointer depth, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonics( + final result = GeneratedBindings.instance._RenderTarget_createRenderThread( tEngine.cast(), - tReflectionsTexture.cast(), - irradianceHarmonics, - intensity, + color.cast(), + depth.cast(), + onComplete.cast(), ); - return Pointer(result); -} - -void Engine_destroySkybox(Pointer tEngine, Pointer tSkybox) { - final result = GeneratedBindings.instance._Engine_destroySkybox(tEngine.cast(), tSkybox.cast()); - return result; -} - -void Engine_destroyIndirectLight(Pointer tEngine, Pointer tIndirectLight) { - final result = GeneratedBindings.instance._Engine_destroyIndirectLight(tEngine.cast(), tIndirectLight.cast()); - return result; -} - -DartEntityId EntityManager_createEntity(Pointer tEntityManager) { - final result = GeneratedBindings.instance._EntityManager_createEntity(tEntityManager.cast()); return result; } -void EntityManager_destroyEntity(Pointer tEntityManager, DartEntityId entityId) { - final result = GeneratedBindings.instance._EntityManager_destroyEntity(tEntityManager.cast(), entityId); +void RenderTarget_destroyRenderThread( + Pointer tEngine, + Pointer tRenderTarget, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderTarget_destroyRenderThread( + tEngine.cast(), + tRenderTarget.cast(), + requestId, + onComplete as Pointer>, + ); return result; } -void Fence_waitAndDestroy(Pointer tFence) { - final result = GeneratedBindings.instance._Fence_waitAndDestroy(tFence.cast()); +void TextureSampler_createRenderThread(Pointer)>> onComplete) { + final result = GeneratedBindings.instance._TextureSampler_createRenderThread(onComplete.cast()); return result; } -Pointer Engine_getDebugRegistry(Pointer tEngine) { - final result = GeneratedBindings.instance._Engine_getDebugRegistry(tEngine.cast()); - return Pointer(result); -} - -bool DebugRegistry_hasProperty(Pointer tDebugRegistry, Pointer name) { - final result = GeneratedBindings.instance._DebugRegistry_hasProperty(tDebugRegistry.cast(), name); - return result == 1; -} - -bool DebugRegistry_setProperty_bool(Pointer tDebugRegistry, Pointer name, bool value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_bool(tDebugRegistry.cast(), name, value); - return result == 1; -} - -bool DebugRegistry_setProperty_int(Pointer tDebugRegistry, Pointer name, int value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_int(tDebugRegistry.cast(), name, value); - return result == 1; -} - -bool DebugRegistry_setProperty_float(Pointer tDebugRegistry, Pointer name, double value) { - final result = GeneratedBindings.instance._DebugRegistry_setProperty_float(tDebugRegistry.cast(), name, value); - return result == 1; -} - -bool DebugRegistry_getProperty_bool( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, +void TextureSampler_createWithFilteringRenderThread( + int minFilter, + int magFilter, + int wrapS, + int wrapT, + int wrapR, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_bool(tDebugRegistry.cast(), name, outValue); - return result == 1; + final result = GeneratedBindings.instance._TextureSampler_createWithFilteringRenderThread( + minFilter, + magFilter, + wrapS, + wrapT, + wrapR, + onComplete.cast(), + ); + return result; } -bool DebugRegistry_getProperty_int( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, +void TextureSampler_createWithComparisonRenderThread( + int compareMode, + int compareFunc, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_int(tDebugRegistry.cast(), name, outValue); - return result == 1; + final result = GeneratedBindings.instance._TextureSampler_createWithComparisonRenderThread( + compareMode, + compareFunc, + onComplete.cast(), + ); + return result; } -bool DebugRegistry_getProperty_float( - Pointer tDebugRegistry, - Pointer name, - Pointer outValue, +void TextureSampler_setMinFilterRenderThread( + Pointer sampler, + int filter, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._DebugRegistry_getProperty_float(tDebugRegistry.cast(), name, outValue); - return result == 1; + final result = GeneratedBindings.instance._TextureSampler_setMinFilterRenderThread( + sampler.cast(), + filter, + requestId, + onComplete as Pointer>, + ); + return result; } -Pointer RenderThread_create() { - final result = GeneratedBindings.instance._RenderThread_create(); - return Pointer(result); +void TextureSampler_setMagFilterRenderThread( + Pointer sampler, + int filter, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setMagFilterRenderThread( + sampler.cast(), + filter, + requestId, + onComplete as Pointer>, + ); + return result; } -Pointer RenderThread_createForCanvas(Pointer canvasSelector) { - final result = GeneratedBindings.instance._RenderThread_createForCanvas(canvasSelector); - return Pointer(result); +void TextureSampler_setWrapModeSRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setWrapModeSRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, + ); + return result; } -void RenderThread_destroy(Pointer renderThread) { - final result = GeneratedBindings.instance._RenderThread_destroy(renderThread); +void TextureSampler_setWrapModeTRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setWrapModeTRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderThread_addTask(Pointer> task) { - final result = GeneratedBindings.instance._RenderThread_addTask(task.cast()); +void TextureSampler_setWrapModeRRenderThread( + Pointer sampler, + int mode, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._TextureSampler_setWrapModeRRenderThread( + sampler.cast(), + mode, + requestId, + onComplete as Pointer>, + ); return result; } -void RenderManager_setRenderableRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - Pointer> tViews, - int numViews, +void TextureSampler_setAnisotropyRenderThread( + Pointer sampler, + double anisotropy, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_setRenderableRenderThread( - tRenderer.cast(), - tSwapChain.cast(), - tViews.cast(), - numViews, + final result = GeneratedBindings.instance._TextureSampler_setAnisotropyRenderThread( + sampler.cast(), + anisotropy, requestId, onComplete as Pointer>, ); return result; } -void RenderManager_renderRenderThread( - Pointer tRenderManager, - BigInt frameTimeInNanos, +void TextureSampler_setCompareModeRenderThread( + Pointer sampler, + int mode, + int func, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_renderRenderThread( - tRenderManager.cast(), - frameTimeInNanos.toJSBigInt, + final result = GeneratedBindings.instance._TextureSampler_setCompareModeRenderThread( + sampler.cast(), + mode, + func, requestId, onComplete as Pointer>, ); return result; } -void RenderManager_addAnimationManagerRenderThread( - Pointer tRenderManager, +void TextureSampler_destroyRenderThread(Pointer sampler, int requestId, DartVoidCallback onComplete) { + final result = GeneratedBindings.instance._TextureSampler_destroyRenderThread( + sampler.cast(), + requestId, + onComplete as Pointer>, + ); + return result; +} + +void AnimationManager_resetToRestPoseRenderThread( Pointer tAnimationManager, + Pointer tSceneAsset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_addAnimationManagerRenderThread( - tRenderManager.cast(), + final result = GeneratedBindings.instance._AnimationManager_resetToRestPoseRenderThread( tAnimationManager.cast(), + tSceneAsset.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderManager_removeAnimationManagerRenderThread( - Pointer tRenderManager, - Pointer tAnimationManager, +void GltfAssetLoader_createRenderThread( + Pointer tEngine, + Pointer tMaterialProvider, + Pointer tNameComponentManager, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._GltfAssetLoader_createRenderThread( + tEngine.cast(), + tMaterialProvider.cast(), + tNameComponentManager.cast(), + callback.cast(), + ); + return result; +} + +void GltfAssetLoader_destroyRenderThread( + Pointer tAssetLoader, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_removeAnimationManagerRenderThread( - tRenderManager.cast(), - tAnimationManager.cast(), + final result = GeneratedBindings.instance._GltfAssetLoader_destroyRenderThread( + tAssetLoader.cast(), requestId, onComplete as Pointer>, ); return result; } -void RenderManager_removeSwapChainRenderThread( - Pointer tRenderManager, - Pointer tSwapChain, +void GltfResourceLoader_createRenderThread( + Pointer tEngine, + Pointer)>> callback, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_createRenderThread(tEngine.cast(), callback.cast()); + return result; +} + +void GltfResourceLoader_destroyRenderThread( + Pointer tEngine, + Pointer tResourceLoader, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._RenderManager_removeSwapChainRenderThread( - tRenderManager.cast(), - tSwapChain.cast(), + final result = GeneratedBindings.instance._GltfResourceLoader_destroyRenderThread( + tEngine.cast(), + tResourceLoader.cast(), requestId, onComplete as Pointer>, ); return result; } -void AnimationManager_createRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void GltfResourceLoader_loadResourcesRenderThread( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + Pointer> callback, ) { - final result = GeneratedBindings.instance._AnimationManager_createRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._GltfResourceLoader_loadResourcesRenderThread( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), + callback.cast(), + ); return result; } -void AnimationManager_destroyRenderThread( - Pointer tAnimationManager, +void GltfResourceLoader_addResourceDataRenderThread( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + Dartsize_t length, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_destroyRenderThread( - tAnimationManager.cast(), + final result = GeneratedBindings.instance._GltfResourceLoader_addResourceDataRenderThread( + tGltfResourceLoader.cast(), + uri, + data, + length, requestId, onComplete as Pointer>, ); return result; } -void Engine_createRenderThread( - int backend, - Pointer platform, - Pointer sharedContext, - int stereoscopicEyeCount, - bool disableHandleUseAfterFreeCheck, - Pointer)>> onComplete, +void GltfResourceLoader_asyncBeginLoadRenderThread( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, + Pointer> callback, ) { - final result = GeneratedBindings.instance._Engine_createRenderThread( - backend, - platform, - sharedContext, - stereoscopicEyeCount, - disableHandleUseAfterFreeCheck, - onComplete.cast(), + final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoadRenderThread( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), + callback.cast(), + ); + return result; +} + +void GltfResourceLoader_asyncUpdateLoadRenderThread(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoadRenderThread(tGltfResourceLoader.cast()); + return result; +} + +void GltfResourceLoader_asyncGetLoadProgressRenderThread( + Pointer tGltfResourceLoader, + Pointer> callback, +) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgressRenderThread( + tGltfResourceLoader.cast(), + callback.cast(), ); return result; } -void Engine_createRendererRenderThread( +void GltfAssetLoader_loadRenderThread( Pointer tEngine, - Pointer)>> onComplete, + Pointer tAssetLoader, + Pointer data, + Dartsize_t length, + int numInstances, + Pointer)>> callback, ) { - final result = GeneratedBindings.instance._Engine_createRendererRenderThread(tEngine.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._GltfAssetLoader_loadRenderThread( + tEngine.cast(), + tAssetLoader.cast(), + data, + length, + numInstances, + callback.cast(), + ); return result; } -void Engine_destroyRendererRenderThread( - Pointer tEngine, - Pointer tRenderer, +void Scene_addFilamentAssetRenderThread( + Pointer tScene, + Pointer tAsset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyRendererRenderThread( - tEngine.cast(), - tRenderer.cast(), + final result = GeneratedBindings.instance._Scene_addFilamentAssetRenderThread( + tScene.cast(), + tAsset.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_createSwapChainRenderThread( - Pointer tEngine, - Pointer window, - BigInt flags, - Pointer)>> onComplete, +void FilamentAsset_getWireframeRenderThread( + Pointer tFilamentAsset, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._Engine_createSwapChainRenderThread( - tEngine.cast(), - window, - flags.toJSBigInt, + final result = GeneratedBindings.instance._FilamentAsset_getWireframeRenderThread( + tFilamentAsset.cast(), onComplete.cast(), ); return result; } -void Engine_createHeadlessSwapChainRenderThread( - Pointer tEngine, - int width, - int height, - BigInt flags, - Pointer)>> onComplete, +void Scene_addEntityRenderThread( + Pointer tScene, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_createHeadlessSwapChainRenderThread( - tEngine.cast(), - width, - height, - flags.toJSBigInt, - onComplete.cast(), + final result = GeneratedBindings.instance._Scene_addEntityRenderThread( + tScene.cast(), + entityId, + requestId, + onComplete as Pointer>, ); return result; } -void Engine_createCameraRenderThread( - Pointer tEngine, +void Scene_removeEntityRenderThread( + Pointer tScene, DartEntityId entityId, - Pointer)>> onComplete, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_createCameraRenderThread( - tEngine.cast(), + final result = GeneratedBindings.instance._Scene_removeEntityRenderThread( + tScene.cast(), entityId, - onComplete.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void Engine_destroyCameraRenderThread( - Pointer tEngine, - Pointer tCamera, +void SceneAsset_addToSceneRenderThread( + Pointer tSceneAsset, + Pointer tScene, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyCameraRenderThread( - tEngine.cast(), - tCamera.cast(), + final result = GeneratedBindings.instance._SceneAsset_addToSceneRenderThread( + tSceneAsset.cast(), + tScene.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_createViewRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Engine_createViewRenderThread(tEngine.cast(), onComplete.cast()); - return result; -} - -void Engine_buildMaterialRenderThread( - Pointer tEngine, - Pointer materialData, - Dartsize_t length, - Pointer)>> onComplete, +void SceneAsset_removeFromSceneRenderThread( + Pointer tSceneAsset, + Pointer tScene, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildMaterialRenderThread( - tEngine.cast(), - materialData, - length, - onComplete.cast(), + final result = GeneratedBindings.instance._SceneAsset_removeFromSceneRenderThread( + tSceneAsset.cast(), + tScene.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void Engine_destroyRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_destroyRenderThread( - tEngine.cast(), +void Scene_setSkyboxRenderThread( + Pointer tScene, + Pointer tSkybox, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._Scene_setSkyboxRenderThread( + tScene.cast(), + tSkybox.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_destroySwapChainRenderThread( - Pointer tEngine, - Pointer tSwapChain, +void Scene_setIndirectLightRenderThread( + Pointer tScene, + Pointer tIndirectLight, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroySwapChainRenderThread( - tEngine.cast(), - tSwapChain.cast(), + final result = GeneratedBindings.instance._Scene_setIndirectLightRenderThread( + tScene.cast(), + tIndirectLight.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_destroyViewRenderThread( +void Gizmo_createRenderThread( Pointer tEngine, + Pointer tAssetLoader, + Pointer tGltfResourceLoader, + Pointer tNameComponentManager, Pointer tView, - int requestId, - DartVoidCallback onComplete, + Pointer tMaterial, + int tGizmoType, + Pointer)>> callback, ) { - final result = GeneratedBindings.instance._Engine_destroyViewRenderThread( + final result = GeneratedBindings.instance._Gizmo_createRenderThread( tEngine.cast(), + tAssetLoader.cast(), + tGltfResourceLoader.cast(), + tNameComponentManager.cast(), tView.cast(), - requestId, - onComplete as Pointer>, + tMaterial.cast(), + tGizmoType, + callback.cast(), ); return result; } -void Engine_destroySceneRenderThread( +void VertexBufferBuilder_buildRenderThread( + Pointer tBuilder, Pointer tEngine, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroySceneRenderThread( + final result = GeneratedBindings.instance._VertexBufferBuilder_buildRenderThread( + tBuilder.cast(), tEngine.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, + onComplete.cast(), ); return result; } -void Engine_destroyColorGradingRenderThread( +void VertexBuffer_destroyRenderThread( Pointer tEngine, - Pointer tColorGrading, + Pointer tBuffer, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyColorGradingRenderThread( + final result = GeneratedBindings.instance._VertexBuffer_destroyRenderThread( tEngine.cast(), - tColorGrading.cast(), + tBuffer.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_destroyMaterialRenderThread( +void VertexBuffer_setBufferAtRenderThread( Pointer tEngine, - Pointer tMaterial, + Pointer tBuffer, + int bufferIndex, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyMaterialRenderThread( + final result = GeneratedBindings.instance._VertexBuffer_setBufferAtRenderThread( tEngine.cast(), - tMaterial.cast(), + tBuffer.cast(), + bufferIndex, + data, + sizeInBytes, + byteOffset, requestId, onComplete as Pointer>, ); return result; } -void Engine_destroyMaterialInstanceRenderThread( +void IndexBufferBuilder_buildRenderThread( + Pointer tBuilder, Pointer tEngine, - Pointer tMaterialInstance, - int requestId, - DartVoidCallback onComplete, + Pointer)>> onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyMaterialInstanceRenderThread( + final result = GeneratedBindings.instance._IndexBufferBuilder_buildRenderThread( + tBuilder.cast(), tEngine.cast(), - tMaterialInstance.cast(), - requestId, - onComplete as Pointer>, + onComplete.cast(), ); return result; } -void Engine_destroySkyboxRenderThread( +void IndexBuffer_destroyRenderThread( Pointer tEngine, - Pointer tSkybox, + Pointer tBuffer, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroySkyboxRenderThread( + final result = GeneratedBindings.instance._IndexBuffer_destroyRenderThread( tEngine.cast(), - tSkybox.cast(), + tBuffer.cast(), requestId, onComplete as Pointer>, ); return result; } -void Engine_destroyIndirectLightRenderThread( +void IndexBuffer_setBufferRenderThread( Pointer tEngine, - Pointer tIndirectLight, + Pointer tBuffer, + Pointer data, + Dartsize_t sizeInBytes, + int byteOffset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyIndirectLightRenderThread( + final result = GeneratedBindings.instance._IndexBuffer_setBufferRenderThread( tEngine.cast(), - tIndirectLight.cast(), + tBuffer.cast(), + data, + sizeInBytes, + byteOffset, requestId, onComplete as Pointer>, ); return result; } -void Texture_buildRenderThread( - Pointer engine, - int width, - int height, - int depth, - int levels, - int tUsage, - int import1, - int sampler, - int format, - Pointer)>> onComplete, +void RenderableBuilder_buildRenderThread( + Pointer tBuilder, + Pointer tEngine, + DartEntityId entityId, + Pointer> onComplete, +) { + final result = GeneratedBindings.instance._RenderableBuilder_buildRenderThread( + tBuilder.cast(), + tEngine.cast(), + entityId, + onComplete.cast(), + ); + return result; +} + +void EntityManager_createEntityRenderThread( + Pointer tEntityManager, + Pointer> onComplete, ) { - final result = GeneratedBindings.instance._Texture_buildRenderThread( - engine.cast(), - width, - height, - depth, - levels, - tUsage, - import1, - sampler, - format, + final result = GeneratedBindings.instance._EntityManager_createEntityRenderThread( + tEntityManager.cast(), onComplete.cast(), ); return result; } -void Texture_setExternalImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer externalImage, +void EntityManager_destroyEntityRenderThread( + Pointer tEntityManager, + DartEntityId entityId, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Texture_setExternalImageRenderThread( - tEngine.cast(), - tTexture.cast(), - externalImage, + final result = GeneratedBindings.instance._EntityManager_destroyEntityRenderThread( + tEntityManager.cast(), + entityId, requestId, onComplete as Pointer>, ); return result; } -void Texture_generateMipMapsRenderThread( - Pointer tTexture, - Pointer tEngine, +void TransformManager_setTransformRenderThread( + Pointer tTransformManager, + DartEntityId entityId, + double4x4 transform, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Texture_generateMipMapsRenderThread( - tTexture.cast(), - tEngine.cast(), + final transformPtr = transform.address; + final result = GeneratedBindings.instance._TransformManager_setTransformRenderThread( + tTransformManager.cast(), + entityId, + transformPtr.cast(), requestId, onComplete as Pointer>, ); return result; } -void Ktx1Reader_createTextureRenderThread( - Pointer tEngine, - Pointer tBundle, +void TransformManager_setParentRenderThread( + Pointer tTransformManager, + DartEntityId child, + DartEntityId parent, + bool preserveScaling, int requestId, - DartVoidCallback onTextureUploadComplete, - Pointer)>> onComplete, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Ktx1Reader_createTextureRenderThread( - tEngine.cast(), - tBundle.cast(), + final result = GeneratedBindings.instance._TransformManager_setParentRenderThread( + tTransformManager.cast(), + child, + parent, + preserveScaling, requestId, - onTextureUploadComplete as Pointer>, - onComplete.cast(), + onComplete as Pointer>, ); return result; } -void Ktx2Reader_createTextureRenderThread( - Pointer tEngine, - Pointer data, - Dartsize_t size, - Pointer)>> onComplete, +void TransformManager_createComponentRenderThread( + Pointer tTransformManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Ktx2Reader_createTextureRenderThread( - tEngine.cast(), - data, - size, - onComplete.cast(), + final result = GeneratedBindings.instance._TransformManager_createComponentRenderThread( + tTransformManager.cast(), + entityId, + requestId, + onComplete as Pointer>, ); return result; } -void Engine_destroyTextureRenderThread( - Pointer engine, - Pointer tTexture, +void TransformManager_removeComponentRenderThread( + Pointer tTransformManager, + DartEntityId entityId, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyTextureRenderThread( - engine.cast(), - tTexture.cast(), + final result = GeneratedBindings.instance._TransformManager_removeComponentRenderThread( + tTransformManager.cast(), + entityId, requestId, onComplete as Pointer>, ); return result; } -void Engine_createFenceRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void RenderableManager_destroyEntityRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_createFenceRenderThread(tEngine.cast(), onComplete.cast()); - return result; -} - -void Fence_waitAndDestroyRenderThread(Pointer tFence, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Fence_waitAndDestroyRenderThread( - tFence.cast(), + final result = GeneratedBindings.instance._RenderableManager_destroyEntityRenderThread( + tRenderableManager.cast(), + entityId, requestId, onComplete as Pointer>, ); return result; } -void Engine_destroyFenceRenderThread( - Pointer tEngine, - Pointer tFence, +void RenderableManager_setBonesFromMat4RenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer transforms, + Dartsize_t boneCount, + Dartsize_t offset, int requestId, DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_destroyFenceRenderThread( - tEngine.cast(), - tFence.cast(), + final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4RenderThread( + tRenderableManager.cast(), + entityId, + transforms, + boneCount, + offset, requestId, onComplete as Pointer>, ); return result; } -void Engine_flushAndWaitRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_flushAndWaitRenderThread( - tEngine.cast(), +void RenderableManager_setBonesFromBoneRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer bones, + Dartsize_t boneCount, + Dartsize_t offset, + int requestId, + DartVoidCallback onComplete, +) { + final result = GeneratedBindings.instance._RenderableManager_setBonesFromBoneRenderThread( + tRenderableManager.cast(), + entityId, + bones, + boneCount, + offset, requestId, onComplete as Pointer>, ); return result; } -void Engine_executeRenderThread(Pointer tEngine, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Engine_executeRenderThread( - tEngine.cast(), - requestId, - onComplete as Pointer>, +void RenderableManager_setGeometryAtNonIndexedRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + int type, + Pointer tVertices, + Dartsize_t offset, + Dartsize_t count, + Pointer> callback, +) { + final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexedRenderThread( + tRenderableManager.cast(), + entityId, + primitiveIndex, + type, + tVertices.cast(), + offset, + count, + callback.cast(), ); return result; } -void Engine_buildSkyboxRenderThread( - Pointer tEngine, - Pointer tTexture, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, +void RenderableManager_setCastShadowsRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildSkyboxRenderThread( - tEngine.cast(), - tTexture.cast(), - showSun, - intensity, - priority, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setCastShadowsRenderThread( + tRenderableManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, ); return result; } -void Engine_buildColoredSkyboxRenderThread( - Pointer tEngine, - double r, - double g, - double b, - double a, - bool showSun, - double intensity, - int priority, - Pointer)>> onComplete, +void RenderableManager_setReceiveShadowsRenderThread( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildColoredSkyboxRenderThread( - tEngine.cast(), - r, - g, - b, - a, - showSun, - intensity, - priority, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setReceiveShadowsRenderThread( + tRenderableManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, ); return result; } -void Engine_buildIndirectLightFromIrradianceTextureRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer tIrradianceTexture, - double intensity, - Pointer)>> onComplete, +void LightManager_setShadowCasterRenderThread( + Pointer tLightManager, + DartEntityId entityId, + bool enabled, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceTextureRenderThread( - tEngine.cast(), - tReflectionsTexture.cast(), - tIrradianceTexture.cast(), - intensity, - onComplete.cast(), + final result = GeneratedBindings.instance._LightManager_setShadowCasterRenderThread( + tLightManager.cast(), + entityId, + enabled, + requestId, + onComplete as Pointer>, ); return result; } -void Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - Pointer tEngine, - Pointer tReflectionsTexture, - Pointer harmonics, - double intensity, - Pointer)>> onComplete, +void LightManager_setShadowOptionsRenderThread( + Pointer tLightManager, + DartEntityId entityId, + TShadowOptions options, + int requestId, + DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Engine_buildIndirectLightFromIrradianceHarmonicsRenderThread( - tEngine.cast(), - tReflectionsTexture.cast(), - harmonics, - intensity, - onComplete.cast(), + final optionsPtr = options.address; + final result = GeneratedBindings.instance._LightManager_setShadowOptionsRenderThread( + tLightManager.cast(), + entityId, + optionsPtr.cast(), + requestId, + onComplete as Pointer>, ); return result; } -void Renderer_setClearOptionsRenderThread( +void Renderer_setClearOptions( Pointer tRenderer, double clearR, double clearG, @@ -7039,10 +7539,8 @@ void Renderer_setClearOptionsRenderThread( int clearStencil, bool clear, bool discard, - int requestId, - DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Renderer_setClearOptionsRenderThread( + final result = GeneratedBindings.instance._Renderer_setClearOptions( tRenderer.cast(), clearR, clearG, @@ -7051,67 +7549,35 @@ void Renderer_setClearOptionsRenderThread( clearStencil, clear, discard, - requestId, - onComplete as Pointer>, ); return result; } -void Renderer_beginFrameRenderThread( - Pointer tRenderer, - Pointer tSwapChain, - BigInt frameTimeInNanos, - Pointer> onComplete, -) { - final result = GeneratedBindings.instance._Renderer_beginFrameRenderThread( +bool Renderer_beginFrame(Pointer tRenderer, Pointer tSwapChain, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._Renderer_beginFrame( tRenderer.cast(), tSwapChain.cast(), frameTimeInNanos.toJSBigInt, - onComplete.cast(), ); - return result; + return result == 1; } -void Renderer_endFrameRenderThread(Pointer tRenderer, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Renderer_endFrameRenderThread( - tRenderer.cast(), - requestId, - onComplete as Pointer>, - ); +void Renderer_endFrame(Pointer tRenderer) { + final result = GeneratedBindings.instance._Renderer_endFrame(tRenderer.cast()); return result; } -void Renderer_renderRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Renderer_renderRenderThread( - tRenderer.cast(), - tView.cast(), - requestId, - onComplete as Pointer>, - ); +void Renderer_render(Pointer tRenderer, Pointer tView) { + final result = GeneratedBindings.instance._Renderer_render(tRenderer.cast(), tView.cast()); return result; } -void Renderer_renderStandaloneViewRenderThread( - Pointer tRenderer, - Pointer tView, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._Renderer_renderStandaloneViewRenderThread( - tRenderer.cast(), - tView.cast(), - requestId, - onComplete as Pointer>, - ); +void Renderer_renderStandaloneView(Pointer tRenderer, Pointer tView) { + final result = GeneratedBindings.instance._Renderer_renderStandaloneView(tRenderer.cast(), tView.cast()); return result; } -void Renderer_readPixelsRenderThread( +void Renderer_readPixels( Pointer tRenderer, int width, int height, @@ -7122,10 +7588,8 @@ void Renderer_readPixelsRenderThread( int tPixelDataType, Pointer out, Dartsize_t outLength, - int requestId, - DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._Renderer_readPixelsRenderThread( + final result = GeneratedBindings.instance._Renderer_readPixels( tRenderer.cast(), width, height, @@ -7136,1809 +7600,1312 @@ void Renderer_readPixelsRenderThread( tPixelDataType, out, outLength, - requestId, - onComplete as Pointer>, - ); - return result; -} - -void Material_createInstanceRenderThread( - Pointer tMaterial, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createInstanceRenderThread(tMaterial.cast(), onComplete.cast()); - return result; -} - -void MaterialInstance_setParameterTextureRenderThread( - Pointer tMaterialInstance, - Pointer propertyName, - Pointer tTexture, - Pointer tSampler, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._MaterialInstance_setParameterTextureRenderThread( - tMaterialInstance.cast(), - propertyName, - tTexture.cast(), - tSampler.cast(), - requestId, - onComplete as Pointer>, - ); - return result; -} - -void Material_createImageMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createImageMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); - return result; -} - -void Material_createGizmoMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createGizmoMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); - return result; -} - -void Material_createBoneOverlayMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createBoneOverlayMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); - return result; -} - -void Material_createSilhouetteMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createSilhouetteMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), ); return result; } -void Material_createEdgeOutlineMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createEdgeOutlineMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); - return result; -} - -void Material_createWireframeMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +void Renderer_setFrameInterval( + Pointer tRenderer, + double headRoomRatio, + double scaleRate, + int history, + int interval, ) { - final result = GeneratedBindings.instance._Material_createWireframeMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._Renderer_setFrameInterval( + tRenderer.cast(), + headRoomRatio, + scaleRate, + history, + interval, ); return result; } -void Material_createTranslationAxisMaterialRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Material_createTranslationAxisMaterialRenderThread( - tEngine.cast(), - onComplete.cast(), - ); - return result; +Pointer RenderTarget_create(Pointer tEngine, Pointer color, Pointer depth) { + final result = GeneratedBindings.instance._RenderTarget_create(tEngine.cast(), color.cast(), depth.cast()); + return Pointer(result); } -void ColorGradingBuilder_createRenderThread( - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ColorGradingBuilder_createRenderThread(onComplete.cast()); +void RenderTarget_destroy(Pointer tEngine, Pointer tRenderTarget) { + final result = GeneratedBindings.instance._RenderTarget_destroy(tEngine.cast(), tRenderTarget.cast()); return result; } -void ColorGradingBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ColorGradingBuilder_buildRenderThread( - tBuilder.cast(), - tEngine.cast(), - onComplete.cast(), - ); +void Skybox_setColor(Pointer tSkybox, double r, double g, double b, double a) { + final result = GeneratedBindings.instance._Skybox_setColor(tSkybox.cast(), r, g, b, a); return result; } -void ColorGradingBuilder_destroyRenderThread( - Pointer tBuilder, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._ColorGradingBuilder_destroyRenderThread( - tBuilder.cast(), - requestId, - onComplete as Pointer>, - ); +/// Sets bits in a visibility mask (see filament::Skybox::setLayerMask). +void Skybox_setLayerMask(Pointer tSkybox, int select, int values) { + final result = GeneratedBindings.instance._Skybox_setLayerMask(tSkybox.cast(), select, values); return result; } -void ToneMapper_createLinearRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createLinearRenderThread(tEngine.cast(), onComplete.cast()); +/// Returns the visibility mask bits. +int Skybox_getLayerMask(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getLayerMask(tSkybox.cast()); return result; } -void ToneMapper_createACESRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createACESRenderThread(tEngine.cast(), onComplete.cast()); +/// Returns the skybox intensity in lux. +double Skybox_getIntensity(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getIntensity(tSkybox.cast()); return result; } -void ToneMapper_createACESLegacyRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createACESLegacyRenderThread(tEngine.cast(), onComplete.cast()); - return result; +/// Returns the environment texture, or nullptr for a color-only skybox. +Pointer Skybox_getTexture(Pointer tSkybox) { + final result = GeneratedBindings.instance._Skybox_getTexture(tSkybox.cast()); + return Pointer(result); } -void ToneMapper_createFilmicRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createFilmicRenderThread(tEngine.cast(), onComplete.cast()); +void RenderableManager_destroyEntity(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_destroyEntity(tRenderableManager.cast(), entityId); return result; } -void ToneMapper_createPBRNeutralRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createPBRNeutralRenderThread(tEngine.cast(), onComplete.cast()); - return result; +bool RenderableManager_hasComponent(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_hasComponent(tRenderableManager.cast(), entityId); + return result == 1; } -void ToneMapper_createAGXRenderThread( - Pointer tEngine, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createAGXRenderThread(tEngine.cast(), onComplete.cast()); - return result; +bool RenderableManager_empty(Pointer tRenderableManager) { + final result = GeneratedBindings.instance._RenderableManager_empty(tRenderableManager.cast()); + return result == 1; } -void ToneMapper_createAGXWithLookRenderThread( - Pointer tEngine, - int look, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createAGXWithLookRenderThread( - tEngine.cast(), - look, - onComplete.cast(), - ); - return result; +bool RenderableManager_isRenderable(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isRenderable(tRenderableManager.cast(), entityId); + return result == 1; } -void ToneMapper_createGenericRenderThread( - Pointer tEngine, - double contrast, - double midGrayIn, - double midGrayOut, - double hdrMax, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._ToneMapper_createGenericRenderThread( - tEngine.cast(), - contrast, - midGrayIn, - midGrayOut, - hdrMax, - onComplete.cast(), - ); +Dartsize_t RenderableManager_getComponentCount(Pointer tRenderableManager) { + final result = GeneratedBindings.instance._RenderableManager_getComponentCount(tRenderableManager.cast()); return result; } -void ToneMapper_createDisplayRangeRenderThread( - Pointer tEngine, - Pointer)>> onComplete, +bool RenderableManager_setMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + Pointer tMaterialInstance, ) { - final result = GeneratedBindings.instance._ToneMapper_createDisplayRangeRenderThread( - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableManager_setMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, + tMaterialInstance.cast(), ); - return result; + return result == 1; } -void ToneMapper_destroyRenderThread(Pointer tToneMapper, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._ToneMapper_destroyRenderThread( - tToneMapper.cast(), - requestId, - onComplete as Pointer>, +Pointer RenderableManager_getMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, +) { + final result = GeneratedBindings.instance._RenderableManager_getMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, ); - return result; + return Pointer(result); } -void View_pickRenderThread(Pointer tView, int requestId, int x, int y, DartPickCallback callback) { - final result = GeneratedBindings.instance._View_pickRenderThread( - tView.cast(), - requestId, - x, - y, - callback as Pointer>, +void RenderableManager_clearMaterialInstanceAt( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, +) { + final result = GeneratedBindings.instance._RenderableManager_clearMaterialInstanceAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, ); return result; } -void View_setColorGradingRenderThread( - Pointer tView, - Pointer tColorGrading, - int requestId, - DartVoidCallback onComplete, +bool RenderableManager_setGeometryAtNonIndexed( + Pointer tRenderableManager, + DartEntityId entityId, + int primitiveIndex, + int type, + Pointer vertices, + Dartsize_t offset, + Dartsize_t count, ) { - final result = GeneratedBindings.instance._View_setColorGradingRenderThread( - tView.cast(), - tColorGrading.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexed( + tRenderableManager.cast(), + entityId, + primitiveIndex, + type, + vertices.cast(), + offset, + count, ); - return result; + return result == 1; } -void View_setBloomRenderThread( - Pointer tView, - bool enabled, - double strength, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setBloomRenderThread( - tView.cast(), - enabled, - strength, - requestId, - onComplete as Pointer>, - ); +Dartsize_t RenderableManager_getPrimitiveCount(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getPrimitiveCount(tRenderableManager.cast(), entityId); return result; } -void View_setCameraRenderThread( - Pointer tView, - Pointer tCamera, - int requestId, - DartVoidCallback onComplete, +Aabb3 RenderableManager_getAxisAlignedBoundingBox( + Pointer tRenderableManager, + DartEntityId entityId, ) { - final result = GeneratedBindings.instance._View_setCameraRenderThread( - tView.cast(), - tCamera.cast(), - requestId, - onComplete as Pointer>, + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getAxisAlignedBoundingBox( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, ); - return result; + return Aabb3_out.toDart(); } -void View_getNameRenderThread(Pointer tView, Pointer)>> onComplete) { - final result = GeneratedBindings.instance._View_getNameRenderThread(tView.cast(), onComplete.cast()); +void RenderableManager_setAxisAlignedBoundingBox( + Pointer tRenderableManager, + DartEntityId entityId, + Aabb3 aabb, +) { + final aabbPtr = aabb.address; + final result = GeneratedBindings.instance._RenderableManager_setAxisAlignedBoundingBox( + tRenderableManager.cast(), + entityId, + aabbPtr.cast(), + ); return result; } -void View_setNameRenderThread(Pointer tView, Pointer name, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setNameRenderThread( - tView.cast(), - name, - requestId, - onComplete as Pointer>, +Aabb3 RenderableManager_getAabb(Pointer tRenderableManager, DartEntityId entityId) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getAabb( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, ); - return result; + return Aabb3_out.toDart(); } -void View_setViewportRenderThread( - Pointer tView, - int width, - int height, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setViewportRenderThread( - tView.cast(), - width, - height, - requestId, - onComplete as Pointer>, +Aabb3 RenderableManager_getBoundingBox(Pointer tRenderableManager, DartEntityId entityId) { + final Aabb3_out = Aabb3.stackAlloc(); + final result = GeneratedBindings.instance._RenderableManager_getBoundingBox( + Aabb3_out.cast(), + tRenderableManager.cast(), + entityId, ); - return result; + return Aabb3_out.toDart(); } -void View_setRenderTargetRenderThread( - Pointer tView, - Pointer tRenderTarget, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setLayerMask( + Pointer tRenderableManager, + DartEntityId entityId, + int select, + int values, ) { - final result = GeneratedBindings.instance._View_setRenderTargetRenderThread( - tView.cast(), - tRenderTarget.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setLayerMask( + tRenderableManager.cast(), + entityId, + select, + values, ); return result; } -void View_setAntiAliasingRenderThread( - Pointer tView, - bool msaa, - bool fxaa, - bool taa, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setAntiAliasingRenderThread( - tView.cast(), - msaa, - fxaa, - taa, - requestId, - onComplete as Pointer>, - ); +int RenderableManager_getLayerMask(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getLayerMask(tRenderableManager.cast(), entityId); return result; } -void View_setPostProcessingRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setVisibilityLayer( + Pointer tRenderableManager, + DartEntityId entityId, + int layer, ) { - final result = GeneratedBindings.instance._View_setPostProcessingRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setVisibilityLayer( + tRenderableManager.cast(), + entityId, + layer, ); return result; } -void View_setFrustumCullingEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setPriority( + Pointer tRenderableManager, + DartEntityId entityId, + int priority, ) { - final result = GeneratedBindings.instance._View_setFrustumCullingEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setPriority( + tRenderableManager.cast(), + entityId, + priority, ); return result; } -void View_setStencilBufferEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setStencilBufferEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +int RenderableManager_getPriority(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getPriority(tRenderableManager.cast(), entityId); return result; } -void View_setDitheringEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setDitheringEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderableManager_setChannel(Pointer tRenderableManager, DartEntityId entityId, int channel) { + final result = GeneratedBindings.instance._RenderableManager_setChannel(tRenderableManager.cast(), entityId, channel); return result; } -void View_setRenderQualityRenderThread( - Pointer tView, - int qualityLevel, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setRenderQualityRenderThread( - tView.cast(), - qualityLevel, - requestId, - onComplete as Pointer>, - ); +void RenderableManager_setCulling(Pointer tRenderableManager, DartEntityId entityId, bool enabled) { + final result = GeneratedBindings.instance._RenderableManager_setCulling(tRenderableManager.cast(), entityId, enabled); return result; } -void View_setSceneRenderThread( - Pointer tView, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._View_setSceneRenderThread( - tView.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, - ); - return result; +bool RenderableManager_getCulling(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getCulling(tRenderableManager.cast(), entityId); + return result == 1; } -void View_setLayerEnabledRenderThread( - Pointer tView, - int layer, - bool visible, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setFogEnabled( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, ) { - final result = GeneratedBindings.instance._View_setLayerEnabledRenderThread( - tView.cast(), - layer, - visible, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setFogEnabled( + tRenderableManager.cast(), + entityId, + enabled, ); return result; } -void View_setBlendModeRenderThread(Pointer tView, int blendMode, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setBlendModeRenderThread( - tView.cast(), - blendMode, - requestId, - onComplete as Pointer>, - ); - return result; +bool RenderableManager_getFogEnabled(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_getFogEnabled(tRenderableManager.cast(), entityId); + return result == 1; } -void View_setFogOptionsRenderThread( - Pointer tView, - TFogOptions tFogOptions, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setLightChannel( + Pointer tRenderableManager, + DartEntityId entityId, + int channel, + bool enable, ) { - final tFogOptionsPtr = tFogOptions.address; - final result = GeneratedBindings.instance._View_setFogOptionsRenderThread( - tView.cast(), - tFogOptionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setLightChannel( + tRenderableManager.cast(), + entityId, + channel, + enable, ); return result; } -void View_setAmbientOcclusionOptionsRenderThread( - Pointer tView, - TAmbientOcclusionOptions options, - int requestId, - DartVoidCallback onComplete, +bool RenderableManager_getLightChannel( + Pointer tRenderableManager, + DartEntityId entityId, + int channel, ) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setAmbientOcclusionOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_getLightChannel( + tRenderableManager.cast(), + entityId, + channel, ); - return result; + return result == 1; } -void View_setFrontFaceWindingInvertedRenderThread( - Pointer tView, - bool inverted, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setCastShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool castShadows, ) { - final result = GeneratedBindings.instance._View_setFrontFaceWindingInvertedRenderThread( - tView.cast(), - inverted, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setCastShadows( + tRenderableManager.cast(), + entityId, + castShadows, ); return result; } -void View_setShadowsEnabledRenderThread( - Pointer tView, - bool enabled, - int requestId, - DartVoidCallback onComplete, +bool RenderableManager_isShadowCaster(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isShadowCaster(tRenderableManager.cast(), entityId); + return result == 1; +} + +void RenderableManager_setReceiveShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool receiveShadows, ) { - final result = GeneratedBindings.instance._View_setShadowsEnabledRenderThread( - tView.cast(), - enabled, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setReceiveShadows( + tRenderableManager.cast(), + entityId, + receiveShadows, ); return result; } -void View_setShadowTypeRenderThread(Pointer tView, int shadowType, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._View_setShadowTypeRenderThread( - tView.cast(), - shadowType, - requestId, - onComplete as Pointer>, - ); - return result; +bool RenderableManager_isShadowReceiver(Pointer tRenderableManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._RenderableManager_isShadowReceiver(tRenderableManager.cast(), entityId); + return result == 1; } -void View_setSoftShadowOptionsRenderThread( - Pointer tView, - TSoftShadowOptions options, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setScreenSpaceContactShadows( + Pointer tRenderableManager, + DartEntityId entityId, + bool enabled, ) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setSoftShadowOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setScreenSpaceContactShadows( + tRenderableManager.cast(), + entityId, + enabled, ); return result; } -void View_setVsmShadowOptionsRenderThread( - Pointer tView, - TVsmShadowOptions options, - int requestId, - DartVoidCallback onComplete, +void RenderableManager_setBlendOrderAt( + Pointer tRenderableManager, + DartEntityId entityId, + Dartsize_t primitiveIndex, + int order, ) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._View_setVsmShadowOptionsRenderThread( - tView.cast(), - optionsPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableManager_setBlendOrderAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, + order, ); return result; } -void View_setTransparentPickingEnabledRenderThread( - Pointer tView, +void RenderableManager_setGlobalBlendOrderEnabledAt( + Pointer tRenderableManager, + DartEntityId entityId, + Dartsize_t primitiveIndex, bool enabled, - int requestId, - DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._View_setTransparentPickingEnabledRenderThread( - tView.cast(), + final result = GeneratedBindings.instance._RenderableManager_setGlobalBlendOrderEnabledAt( + tRenderableManager.cast(), + entityId, + primitiveIndex, enabled, - requestId, - onComplete as Pointer>, ); return result; } -void SceneAsset_destroyRenderThread(Pointer tSceneAsset, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._SceneAsset_destroyRenderThread( - tSceneAsset.cast(), - requestId, - onComplete as Pointer>, +void RenderableManager_setMorphWeights( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer weights, + Dartsize_t count, + Dartsize_t offset, +) { + final result = GeneratedBindings.instance._RenderableManager_setMorphWeights( + tRenderableManager.cast(), + entityId, + weights, + count, + offset, ); return result; } -void SceneAsset_createFromFilamentAssetRenderThread( - Pointer tEngine, - Pointer tAssetLoader, - Pointer tNameComponentManager, - Pointer tFilamentAsset, - bool rebuildVertices, - Pointer)>> onComplete, +Dartsize_t RenderableManager_getMorphTargetCount( + Pointer tRenderableManager, + DartEntityId entityId, ) { - final result = GeneratedBindings.instance._SceneAsset_createFromFilamentAssetRenderThread( - tEngine.cast(), - tAssetLoader.cast(), - tNameComponentManager.cast(), - tFilamentAsset.cast(), - rebuildVertices, - onComplete.cast(), - ); + final result = GeneratedBindings.instance._RenderableManager_getMorphTargetCount(tRenderableManager.cast(), entityId); return result; } -void SceneAsset_createFromBuffersRenderThread( - Pointer tEngine, - Pointer tVertexBuffer, - Pointer tIndexBuffer, - Pointer> materialInstances, - int materialInstanceCount, - int tPrimitiveType, - Aabb3 boundingBox, - Pointer)>> callback, +void RenderableManager_setBonesFromMat4( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer transforms, + Dartsize_t boneCount, + Dartsize_t offset, ) { - final boundingBoxPtr = boundingBox.address; - final result = GeneratedBindings.instance._SceneAsset_createFromBuffersRenderThread( - tEngine.cast(), - tVertexBuffer.cast(), - tIndexBuffer.cast(), - materialInstances.cast(), - materialInstanceCount, - tPrimitiveType, - boundingBoxPtr.cast(), - callback.cast(), + final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4( + tRenderableManager.cast(), + entityId, + transforms, + boneCount, + offset, ); return result; } -void SceneAsset_createInstanceRenderThread( - Pointer asset, - Pointer> tMaterialInstances, - int materialInstanceCount, - Pointer)>> callback, +void RenderableManager_setBonesFromBone( + Pointer tRenderableManager, + DartEntityId entityId, + Pointer bones, + Dartsize_t boneCount, + Dartsize_t offset, ) { - final result = GeneratedBindings.instance._SceneAsset_createInstanceRenderThread( - asset.cast(), - tMaterialInstances.cast(), - materialInstanceCount, - callback.cast(), + final result = GeneratedBindings.instance._RenderableManager_setBonesFromBone( + tRenderableManager.cast(), + entityId, + bones, + boneCount, + offset, ); return result; } -void SceneAsset_releaseSourceDataRenderThread( - Pointer tSceneAsset, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._SceneAsset_releaseSourceDataRenderThread( - tSceneAsset.cast(), - requestId, - onComplete as Pointer>, - ); +Pointer RenderableBuilder_create(Dartsize_t primitiveCount) { + final result = GeneratedBindings.instance._RenderableBuilder_create(primitiveCount); + return Pointer(result); +} + +void RenderableBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._RenderableBuilder_destroy(builder.cast()); return result; } -void SceneAsset_setFlatShadingRenderThread( - Pointer tSceneAsset, - bool flatShading, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_boundingBox(Pointer builder, Aabb3 aabb) { + final aabbPtr = aabb.address; + final result = GeneratedBindings.instance._RenderableBuilder_boundingBox(builder.cast(), aabbPtr.cast()); + return result; +} + +void RenderableBuilder_material( + Pointer builder, + Dartsize_t primitiveIndex, + Pointer materialInstance, ) { - final result = GeneratedBindings.instance._SceneAsset_setFlatShadingRenderThread( - tSceneAsset.cast(), - flatShading, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableBuilder_material( + builder.cast(), + primitiveIndex, + materialInstance.cast(), ); return result; } -void MaterialProvider_createMaterialInstanceRenderThread( - Pointer tMaterialProvider, - bool doubleSided, - bool unlit, - bool hasVertexColors, - bool hasBaseColorTexture, - bool hasNormalTexture, - bool hasOcclusionTexture, - bool hasEmissiveTexture, - bool useSpecularGlossiness, - int alphaMode, - bool enableDiagnostics, - bool hasMetallicRoughnessTexture, - int metallicRoughnessUV, - bool hasSpecularGlossinessTexture, - int specularGlossinessUV, - int baseColorUV, - bool hasClearCoatTexture, - int clearCoatUV, - bool hasClearCoatRoughnessTexture, - int clearCoatRoughnessUV, - bool hasClearCoatNormalTexture, - int clearCoatNormalUV, - bool hasClearCoat, - bool hasTransmission, - bool hasTextureTransforms, - int emissiveUV, - int aoUV, - int normalUV, - bool hasTransmissionTexture, - int transmissionUV, - bool hasSheenColorTexture, - int sheenColorUV, - bool hasSheenRoughnessTexture, - int sheenRoughnessUV, - bool hasVolumeThicknessTexture, - int volumeThicknessUV, - bool hasSheen, - bool hasIOR, - bool hasVolume, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._MaterialProvider_createMaterialInstanceRenderThread( - tMaterialProvider.cast(), - doubleSided, - unlit, - hasVertexColors, - hasBaseColorTexture, - hasNormalTexture, - hasOcclusionTexture, - hasEmissiveTexture, - useSpecularGlossiness, - alphaMode, - enableDiagnostics, - hasMetallicRoughnessTexture, - metallicRoughnessUV, - hasSpecularGlossinessTexture, - specularGlossinessUV, - baseColorUV, - hasClearCoatTexture, - clearCoatUV, - hasClearCoatRoughnessTexture, - clearCoatRoughnessUV, - hasClearCoatNormalTexture, - clearCoatNormalUV, - hasClearCoat, - hasTransmission, - hasTextureTransforms, - emissiveUV, - aoUV, - normalUV, - hasTransmissionTexture, - transmissionUV, - hasSheenColorTexture, - sheenColorUV, - hasSheenRoughnessTexture, - sheenRoughnessUV, - hasVolumeThicknessTexture, - volumeThicknessUV, - hasSheen, - hasIOR, - hasVolume, - callback.cast(), +void RenderableBuilder_geometry( + Pointer builder, + Dartsize_t primitiveIndex, + int type, + Pointer vertices, + Pointer indices, + Dartsize_t offset, + Dartsize_t count, +) { + final result = GeneratedBindings.instance._RenderableBuilder_geometry( + builder.cast(), + primitiveIndex, + type, + vertices.cast(), + indices.cast(), + offset, + count, ); return result; } -void AnimationManager_updateRenderThread( - Pointer tAnimationManager, - BigInt frameTimeInNanos, - int requestId, - DartVoidCallback onComplete, +void RenderableBuilder_geometryNonIndexed( + Pointer builder, + Dartsize_t primitiveIndex, + int type, + Pointer vertices, + Dartsize_t offset, + Dartsize_t count, ) { - final result = GeneratedBindings.instance._AnimationManager_updateRenderThread( - tAnimationManager.cast(), - frameTimeInNanos.toJSBigInt, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderableBuilder_geometryNonIndexed( + builder.cast(), + primitiveIndex, + type, + vertices.cast(), + offset, + count, ); return result; } -void AnimationManager_setGltfAnimationTimeRenderThread( - Pointer tAnimationManager, - Pointer tSceneAsset, - int animationIndex, - double timeInSeconds, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTimeRenderThread( - tAnimationManager.cast(), - tSceneAsset.cast(), - animationIndex, - timeInSeconds, - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_priority(Pointer builder, int priority) { + final result = GeneratedBindings.instance._RenderableBuilder_priority(builder.cast(), priority); return result; } -void AnimationManager_updateBoneMatricesRenderThread( - Pointer tAnimationManager, - Pointer sceneAsset, - Pointer> callback, -) { - final result = GeneratedBindings.instance._AnimationManager_updateBoneMatricesRenderThread( - tAnimationManager.cast(), - sceneAsset.cast(), - callback.cast(), - ); +void RenderableBuilder_channel(Pointer builder, int channel) { + final result = GeneratedBindings.instance._RenderableBuilder_channel(builder.cast(), channel); return result; } -void AnimationManager_setMorphTargetWeightsRenderThread( - Pointer tAnimationManager, - DartEntityId entityId, - Pointer morphData, - int numWeights, - Pointer> callback, -) { - final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeightsRenderThread( - tAnimationManager.cast(), - entityId, - morphData, - numWeights, - callback.cast(), - ); +void RenderableBuilder_culling(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_culling(builder.cast(), enabled); return result; } -void Image_createEmptyRenderThread( - int width, - int height, - int channel, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_createEmptyRenderThread(width, height, channel, onComplete.cast()); +void RenderableBuilder_castShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_castShadows(builder.cast(), enabled); return result; } -void Image_decodeRenderThread( - Pointer data, - Dartsize_t length, - Pointer name, - bool alpha, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_decodeRenderThread(data, length, name, alpha, onComplete.cast()); +void RenderableBuilder_receiveShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_receiveShadows(builder.cast(), enabled); return result; } -void Image_getBytesRenderThread( - Pointer tLinearImage, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._Image_getBytesRenderThread(tLinearImage.cast(), onComplete.cast()); +void RenderableBuilder_fog(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_fog(builder.cast(), enabled); return result; } -void Image_destroyRenderThread(Pointer tLinearImage, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._Image_destroyRenderThread( - tLinearImage.cast(), - requestId, - onComplete as Pointer>, - ); +void RenderableBuilder_lightChannel(Pointer builder, int channel, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_lightChannel(builder.cast(), channel, enabled); return result; } -void Image_getWidthRenderThread( - Pointer tLinearImage, - Pointer> onComplete, +void RenderableBuilder_layerMask(Pointer builder, int select, int values) { + final result = GeneratedBindings.instance._RenderableBuilder_layerMask(builder.cast(), select, values); + return result; +} + +void RenderableBuilder_screenSpaceContactShadows(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_screenSpaceContactShadows(builder.cast(), enabled); + return result; +} + +void RenderableBuilder_blendOrder(Pointer builder, Dartsize_t primitiveIndex, int order) { + final result = GeneratedBindings.instance._RenderableBuilder_blendOrder(builder.cast(), primitiveIndex, order); + return result; +} + +void RenderableBuilder_globalBlendOrderEnabled( + Pointer builder, + Dartsize_t primitiveIndex, + bool enabled, ) { - final result = GeneratedBindings.instance._Image_getWidthRenderThread(tLinearImage.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableBuilder_globalBlendOrderEnabled( + builder.cast(), + primitiveIndex, + enabled, + ); return result; } -void Image_getHeightRenderThread( - Pointer tLinearImage, - Pointer> onComplete, +void RenderableBuilder_instances(Pointer builder, Dartsize_t instanceCount) { + final result = GeneratedBindings.instance._RenderableBuilder_instances(builder.cast(), instanceCount); + return result; +} + +void RenderableBuilder_skinningFromMat4( + Pointer builder, + Dartsize_t boneCount, + Pointer transforms, ) { - final result = GeneratedBindings.instance._Image_getHeightRenderThread(tLinearImage.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableBuilder_skinningFromMat4(builder.cast(), boneCount, transforms); return result; } -void Image_getChannelsRenderThread( - Pointer tLinearImage, - Pointer> onComplete, +void RenderableBuilder_skinningFromBone( + Pointer builder, + Dartsize_t boneCount, + Pointer bones, ) { - final result = GeneratedBindings.instance._Image_getChannelsRenderThread(tLinearImage.cast(), onComplete.cast()); + final result = GeneratedBindings.instance._RenderableBuilder_skinningFromBone(builder.cast(), boneCount, bones); return result; } -void Texture_loadImageRenderThread( - Pointer tEngine, - Pointer tTexture, - Pointer tImage, - int bufferFormat, - int pixelDataType, - int level, - Pointer> onComplete, +void RenderableBuilder_enableSkinningBuffers(Pointer builder, bool enabled) { + final result = GeneratedBindings.instance._RenderableBuilder_enableSkinningBuffers(builder.cast(), enabled); + return result; +} + +void RenderableBuilder_boneIndicesAndWeights( + Pointer builder, + Dartsize_t primitiveIndex, + Pointer indicesAndWeights, + Dartsize_t count, + Dartsize_t bonesPerVertex, ) { - final result = GeneratedBindings.instance._Texture_loadImageRenderThread( - tEngine.cast(), - tTexture.cast(), - tImage.cast(), - bufferFormat, - pixelDataType, - level, - onComplete.cast(), + final result = GeneratedBindings.instance._RenderableBuilder_boneIndicesAndWeights( + builder.cast(), + primitiveIndex, + indicesAndWeights, + count, + bonesPerVertex, ); return result; } -void Texture_setImageRenderThread( - Pointer tEngine, - Pointer tTexture, - int level, - Pointer data, - Dartsize_t size, - int x_offset, - int y_offset, - int z_offset, - int width, - int height, - int depth, - int bufferFormat, - int pixelDataType, - Pointer> onComplete, +int RenderableBuilder_build(Pointer builder, Pointer engine, DartEntityId entity) { + final result = GeneratedBindings.instance._RenderableBuilder_build(builder.cast(), engine.cast(), entity); + return result; +} + +void IndirectLight_setRotation(Pointer tIndirectLight, Pointer rotation) { + final result = GeneratedBindings.instance._IndirectLight_setRotation(tIndirectLight.cast(), rotation); + return result; +} + +Pointer SurfaceOrientationBuilder_create() { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_create(); + return Pointer(result); +} + +void SurfaceOrientationBuilder_vertexCount(Pointer builder, Dartsize_t count) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_vertexCount(builder.cast(), count); + return result; +} + +void SurfaceOrientationBuilder_normals( + Pointer builder, + Pointer normals, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._Texture_setImageRenderThread( - tEngine.cast(), - tTexture.cast(), - level, - data, - size, - x_offset, - y_offset, - z_offset, - width, - height, - depth, - bufferFormat, - pixelDataType, - onComplete.cast(), - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_normals(builder.cast(), normals, stride); return result; } -void RenderTarget_getColorTextureRenderThread( - Pointer tRenderTarget, - Pointer)>> onComplete, +void SurfaceOrientationBuilder_tangents( + Pointer builder, + Pointer tangents, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._RenderTarget_getColorTextureRenderThread( - tRenderTarget.cast(), - onComplete.cast(), - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_tangents(builder.cast(), tangents, stride); return result; } -void RenderTarget_createRenderThread( - Pointer tEngine, - Pointer color, - Pointer depth, - Pointer)>> onComplete, +void SurfaceOrientationBuilder_uvs( + Pointer builder, + Pointer uvs, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._RenderTarget_createRenderThread( - tEngine.cast(), - color.cast(), - depth.cast(), - onComplete.cast(), - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_uvs(builder.cast(), uvs, stride); return result; } -void RenderTarget_destroyRenderThread( - Pointer tEngine, - Pointer tRenderTarget, - int requestId, - DartVoidCallback onComplete, +void SurfaceOrientationBuilder_positions( + Pointer builder, + Pointer positions, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._RenderTarget_destroyRenderThread( - tEngine.cast(), - tRenderTarget.cast(), - requestId, - onComplete as Pointer>, - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_positions(builder.cast(), positions, stride); return result; } -void TextureSampler_createRenderThread(Pointer)>> onComplete) { - final result = GeneratedBindings.instance._TextureSampler_createRenderThread(onComplete.cast()); +void SurfaceOrientationBuilder_triangleCount(Pointer builder, Dartsize_t count) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangleCount(builder.cast(), count); return result; } -void TextureSampler_createWithFilteringRenderThread( - int minFilter, - int magFilter, - int wrapS, - int wrapT, - int wrapR, - Pointer)>> onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_createWithFilteringRenderThread( - minFilter, - magFilter, - wrapS, - wrapT, - wrapR, - onComplete.cast(), - ); +void SurfaceOrientationBuilder_triangles_uint(Pointer builder, Pointer triangles) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_uint(builder.cast(), triangles); return result; } -void TextureSampler_createWithComparisonRenderThread( - int compareMode, - int compareFunc, - Pointer)>> onComplete, +void SurfaceOrientationBuilder_triangles_ushort( + Pointer builder, + Pointer triangles, ) { - final result = GeneratedBindings.instance._TextureSampler_createWithComparisonRenderThread( - compareMode, - compareFunc, - onComplete.cast(), - ); + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_triangles_ushort(builder.cast(), triangles); return result; } -void TextureSampler_setMinFilterRenderThread( - Pointer sampler, - int filter, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setMinFilterRenderThread( - sampler.cast(), - filter, - requestId, - onComplete as Pointer>, - ); +Pointer SurfaceOrientationBuilder_build(Pointer builder) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_build(builder.cast()); + return Pointer(result); +} + +void SurfaceOrientationBuilder_destroy(Pointer builder) { + final result = GeneratedBindings.instance._SurfaceOrientationBuilder_destroy(builder.cast()); return result; } -void TextureSampler_setMagFilterRenderThread( - Pointer sampler, - int filter, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setMagFilterRenderThread( - sampler.cast(), - filter, - requestId, - onComplete as Pointer>, - ); +Dartsize_t SurfaceOrientation_getVertexCount(Pointer orientation) { + final result = GeneratedBindings.instance._SurfaceOrientation_getVertexCount(orientation.cast()); return result; } -void TextureSampler_setWrapModeSRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, +void SurfaceOrientation_getQuats_float4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeSRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_float4( + orientation.cast(), + out, + quatCount, + stride, ); return result; } -void TextureSampler_setWrapModeTRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, +void SurfaceOrientation_getQuats_short4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeTRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_short4( + orientation.cast(), + out, + quatCount, + stride, ); return result; } -void TextureSampler_setWrapModeRRenderThread( - Pointer sampler, - int mode, - int requestId, - DartVoidCallback onComplete, +void SurfaceOrientation_getQuats_half4( + Pointer orientation, + Pointer out, + Dartsize_t quatCount, + Dartsize_t stride, ) { - final result = GeneratedBindings.instance._TextureSampler_setWrapModeRRenderThread( - sampler.cast(), - mode, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._SurfaceOrientation_getQuats_half4( + orientation.cast(), + out, + quatCount, + stride, ); return result; } -void TextureSampler_setAnisotropyRenderThread( - Pointer sampler, - double anisotropy, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setAnisotropyRenderThread( - sampler.cast(), - anisotropy, - requestId, - onComplete as Pointer>, - ); +void SurfaceOrientation_destroy(Pointer orientation) { + final result = GeneratedBindings.instance._SurfaceOrientation_destroy(orientation.cast()); return result; } -void TextureSampler_setCompareModeRenderThread( - Pointer sampler, - int mode, - int func, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._TextureSampler_setCompareModeRenderThread( - sampler.cast(), - mode, - func, - requestId, - onComplete as Pointer>, - ); +Pointer AnimationManager_create(Pointer tEngine) { + final result = GeneratedBindings.instance._AnimationManager_create(tEngine.cast()); + return Pointer(result); +} + +void AnimationManager_destroy(Pointer tAnimationManager) { + final result = GeneratedBindings.instance._AnimationManager_destroy(tAnimationManager.cast()); return result; } -void TextureSampler_destroyRenderThread(Pointer sampler, int requestId, DartVoidCallback onComplete) { - final result = GeneratedBindings.instance._TextureSampler_destroyRenderThread( - sampler.cast(), - requestId, - onComplete as Pointer>, +void AnimationManager_update(Pointer tAnimationManager, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._AnimationManager_update( + tAnimationManager.cast(), + frameTimeInNanos.toJSBigInt, ); return result; } -void AnimationManager_resetToRestPoseRenderThread( +bool AnimationManager_addGltfAnimationComponent( Pointer tAnimationManager, Pointer tSceneAsset, - int requestId, - DartVoidCallback onComplete, ) { - final result = GeneratedBindings.instance._AnimationManager_resetToRestPoseRenderThread( + final result = GeneratedBindings.instance._AnimationManager_addGltfAnimationComponent( tAnimationManager.cast(), tSceneAsset.cast(), - requestId, - onComplete as Pointer>, - ); - return result; -} - -void GltfAssetLoader_createRenderThread( - Pointer tEngine, - Pointer tMaterialProvider, - Pointer tNameComponentManager, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._GltfAssetLoader_createRenderThread( - tEngine.cast(), - tMaterialProvider.cast(), - tNameComponentManager.cast(), - callback.cast(), ); - return result; + return result == 1; } -void GltfAssetLoader_destroyRenderThread( - Pointer tAssetLoader, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_removeGltfAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_destroyRenderThread( - tAssetLoader.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_removeGltfAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - return result; + return result == 1; } -void GltfResourceLoader_createRenderThread( - Pointer tEngine, - Pointer)>> callback, -) { - final result = GeneratedBindings.instance._GltfResourceLoader_createRenderThread(tEngine.cast(), callback.cast()); +void AnimationManager_addMorphAnimationComponent(Pointer tAnimationManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._AnimationManager_addMorphAnimationComponent( + tAnimationManager.cast(), + entityId, + ); return result; } -void GltfResourceLoader_destroyRenderThread( - Pointer tEngine, - Pointer tResourceLoader, - int requestId, - DartVoidCallback onComplete, +void AnimationManager_removeMorphAnimationComponent( + Pointer tAnimationManager, + DartEntityId entityId, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_destroyRenderThread( - tEngine.cast(), - tResourceLoader.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_removeMorphAnimationComponent( + tAnimationManager.cast(), + entityId, ); return result; } -void GltfResourceLoader_loadResourcesRenderThread( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - Pointer> callback, +bool AnimationManager_addBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_loadResourcesRenderThread( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), - callback.cast(), + final result = GeneratedBindings.instance._AnimationManager_addBoneAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - return result; + return result == 1; } -void GltfResourceLoader_addResourceDataRenderThread( - Pointer tGltfResourceLoader, - Pointer uri, - Pointer data, - Dartsize_t length, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_removeBoneAnimationComponent( + Pointer tAnimationManager, + Pointer tSceneAsset, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_addResourceDataRenderThread( - tGltfResourceLoader.cast(), - uri, - data, - length, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_removeBoneAnimationComponent( + tAnimationManager.cast(), + tSceneAsset.cast(), ); - return result; + return result == 1; } -void GltfResourceLoader_asyncBeginLoadRenderThread( - Pointer tGltfResourceLoader, - Pointer tFilamentAsset, - Pointer> callback, +bool AnimationManager_setMorphAnimation( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + Pointer morphIndices, + int numMorphTargets, + int numFrames, + double frameLengthInMs, ) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoadRenderThread( - tGltfResourceLoader.cast(), - tFilamentAsset.cast(), - callback.cast(), + final result = GeneratedBindings.instance._AnimationManager_setMorphAnimation( + tAnimationManager.cast(), + entityId, + morphData, + morphIndices, + numMorphTargets, + numFrames, + frameLengthInMs, ); - return result; + return result == 1; } -void GltfResourceLoader_asyncUpdateLoadRenderThread(Pointer tGltfResourceLoader) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoadRenderThread(tGltfResourceLoader.cast()); - return result; +bool AnimationManager_clearMorphAnimation(Pointer tAnimationManager, DartEntityId entityId) { + final result = GeneratedBindings.instance._AnimationManager_clearMorphAnimation(tAnimationManager.cast(), entityId); + return result == 1; } -void GltfResourceLoader_asyncGetLoadProgressRenderThread( - Pointer tGltfResourceLoader, - Pointer> callback, -) { - final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgressRenderThread( - tGltfResourceLoader.cast(), - callback.cast(), +void AnimationManager_resetToRestPose(Pointer tAnimationManager, Pointer sceneAsset) { + final result = GeneratedBindings.instance._AnimationManager_resetToRestPose( + tAnimationManager.cast(), + sceneAsset.cast(), ); return result; } -void GltfAssetLoader_loadRenderThread( - Pointer tEngine, - Pointer tAssetLoader, - Pointer data, - Dartsize_t length, - int numInstances, - Pointer)>> callback, +bool AnimationManager_addBoneAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int skinIndex, + int boneIndex, + Pointer frameData, + int numFrames, + double frameLengthInMs, + double fadeOutInSecs, + double fadeInInSecs, + double maxDelta, + bool loop, ) { - final result = GeneratedBindings.instance._GltfAssetLoader_loadRenderThread( - tEngine.cast(), - tAssetLoader.cast(), - data, - length, - numInstances, - callback.cast(), + final result = GeneratedBindings.instance._AnimationManager_addBoneAnimation( + tAnimationManager.cast(), + tSceneAsset.cast(), + skinIndex, + boneIndex, + frameData, + numFrames, + frameLengthInMs, + fadeOutInSecs, + fadeInInSecs, + maxDelta, + loop, ); - return result; + return result == 1; } -void Scene_addFilamentAssetRenderThread( - Pointer tScene, - Pointer tAsset, - int requestId, - DartVoidCallback onComplete, +void AnimationManager_getRestLocalTransforms( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + Pointer out, + int numBones, ) { - final result = GeneratedBindings.instance._Scene_addFilamentAssetRenderThread( - tScene.cast(), - tAsset.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_getRestLocalTransforms( + tAnimationManager.cast(), + sceneAsset.cast(), + skinIndex, + out, + numBones, ); return result; } -void FilamentAsset_getWireframeRenderThread( - Pointer tFilamentAsset, - Pointer> onComplete, +void AnimationManager_getInverseBindMatrix( + Pointer tAnimationManager, + Pointer sceneAsset, + int skinIndex, + int boneIndex, + Pointer out, ) { - final result = GeneratedBindings.instance._FilamentAsset_getWireframeRenderThread( - tFilamentAsset.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._AnimationManager_getInverseBindMatrix( + tAnimationManager.cast(), + sceneAsset.cast(), + skinIndex, + boneIndex, + out, ); return result; } -void Scene_addEntityRenderThread( - Pointer tScene, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_playGltfAnimation( + Pointer tAnimationManager, + Pointer tSceneAsset, + int index, + bool loop, + bool reverse, + bool replaceActive, + double crossfade, + double startOffset, + double speed, ) { - final result = GeneratedBindings.instance._Scene_addEntityRenderThread( - tScene.cast(), - entityId, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_playGltfAnimation( + tAnimationManager.cast(), + tSceneAsset.cast(), + index, + loop, + reverse, + replaceActive, + crossfade, + startOffset, + speed, ); - return result; + return result == 1; } -void Scene_removeEntityRenderThread( - Pointer tScene, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_stopGltfAnimation( + Pointer tAnimationManager, + Pointer sceneAsset, + int index, ) { - final result = GeneratedBindings.instance._Scene_removeEntityRenderThread( - tScene.cast(), - entityId, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_stopGltfAnimation( + tAnimationManager.cast(), + sceneAsset.cast(), + index, ); - return result; + return result == 1; } -void SceneAsset_addToSceneRenderThread( - Pointer tSceneAsset, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._SceneAsset_addToSceneRenderThread( - tSceneAsset.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, +double AnimationManager_getGltfAnimationDuration( + Pointer tAnimationManager, + Pointer sceneAsset, + int animationIndex, +) { + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationDuration( + tAnimationManager.cast(), + sceneAsset.cast(), + animationIndex, ); return result; } -void SceneAsset_removeFromSceneRenderThread( - Pointer tSceneAsset, - Pointer tScene, - int requestId, - DartVoidCallback onComplete, +int AnimationManager_getGltfAnimationCount( + Pointer tAnimationManager, + Pointer sceneAsset, ) { - final result = GeneratedBindings.instance._SceneAsset_removeFromSceneRenderThread( - tSceneAsset.cast(), - tScene.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationCount( + tAnimationManager.cast(), + sceneAsset.cast(), ); return result; } -void Scene_setSkyboxRenderThread( - Pointer tScene, - Pointer tSkybox, - int requestId, - DartVoidCallback onComplete, +void AnimationManager_getGltfAnimationName( + Pointer tAnimationManager, + Pointer sceneAsset, + Pointer outPtr, + int index, ) { - final result = GeneratedBindings.instance._Scene_setSkyboxRenderThread( - tScene.cast(), - tSkybox.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_getGltfAnimationName( + tAnimationManager.cast(), + sceneAsset.cast(), + outPtr, + index, ); return result; } -void Scene_setIndirectLightRenderThread( - Pointer tScene, - Pointer tIndirectLight, - int requestId, - DartVoidCallback onComplete, +int AnimationManager_getMorphTargetNameCount( + Pointer tAnimationManager, + Pointer sceneAsset, + DartEntityId childEntity, ) { - final result = GeneratedBindings.instance._Scene_setIndirectLightRenderThread( - tScene.cast(), - tIndirectLight.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_getMorphTargetNameCount( + tAnimationManager.cast(), + sceneAsset.cast(), + childEntity, ); return result; } -void Gizmo_createRenderThread( - Pointer tEngine, - Pointer tAssetLoader, - Pointer tGltfResourceLoader, - Pointer tNameComponentManager, - Pointer tView, - Pointer tMaterial, - int tGizmoType, - Pointer)>> callback, +void AnimationManager_getMorphTargetName( + Pointer tAnimationManager, + Pointer sceneAsset, + DartEntityId childEntity, + Pointer outPtr, + int index, ) { - final result = GeneratedBindings.instance._Gizmo_createRenderThread( - tEngine.cast(), - tAssetLoader.cast(), - tGltfResourceLoader.cast(), - tNameComponentManager.cast(), - tView.cast(), - tMaterial.cast(), - tGizmoType, - callback.cast(), + final result = GeneratedBindings.instance._AnimationManager_getMorphTargetName( + tAnimationManager.cast(), + sceneAsset.cast(), + childEntity, + outPtr, + index, ); return result; } -void VertexBufferBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - Pointer)>> onComplete, +bool AnimationManager_updateBoneMatrices( + Pointer tAnimationManager, + Pointer sceneAsset, ) { - final result = GeneratedBindings.instance._VertexBufferBuilder_buildRenderThread( - tBuilder.cast(), - tEngine.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._AnimationManager_updateBoneMatrices( + tAnimationManager.cast(), + sceneAsset.cast(), ); - return result; + return result == 1; } -void VertexBuffer_destroyRenderThread( - Pointer tEngine, - Pointer tBuffer, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_setMorphTargetWeights( + Pointer tAnimationManager, + DartEntityId entityId, + Pointer morphData, + int numWeights, ) { - final result = GeneratedBindings.instance._VertexBuffer_destroyRenderThread( - tEngine.cast(), - tBuffer.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_setMorphTargetWeights( + tAnimationManager.cast(), + entityId, + morphData, + numWeights, ); - return result; + return result == 1; } -void VertexBuffer_setBufferAtRenderThread( - Pointer tEngine, - Pointer tBuffer, - int bufferIndex, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, - int requestId, - DartVoidCallback onComplete, +bool AnimationManager_setGltfAnimationTime( + Pointer tAnimationManager, + Pointer tSceneAsset, + int animationIndex, + double timeInSeconds, ) { - final result = GeneratedBindings.instance._VertexBuffer_setBufferAtRenderThread( - tEngine.cast(), - tBuffer.cast(), - bufferIndex, - data, - sizeInBytes, - byteOffset, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._AnimationManager_setGltfAnimationTime( + tAnimationManager.cast(), + tSceneAsset.cast(), + animationIndex, + timeInSeconds, ); - return result; + return result == 1; } -void IndexBufferBuilder_buildRenderThread( - Pointer tBuilder, +Pointer GltfAssetLoader_create( Pointer tEngine, - Pointer)>> onComplete, + Pointer tMaterialProvider, + Pointer tNameComponentManager, ) { - final result = GeneratedBindings.instance._IndexBufferBuilder_buildRenderThread( - tBuilder.cast(), + final result = GeneratedBindings.instance._GltfAssetLoader_create( tEngine.cast(), - onComplete.cast(), + tMaterialProvider.cast(), + tNameComponentManager.cast(), ); - return result; + return Pointer(result); } -void IndexBuffer_destroyRenderThread( - Pointer tEngine, - Pointer tBuffer, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._IndexBuffer_destroyRenderThread( - tEngine.cast(), - tBuffer.cast(), - requestId, - onComplete as Pointer>, - ); +void GltfAssetLoader_destroy(Pointer tAssetLoader) { + final result = GeneratedBindings.instance._GltfAssetLoader_destroy(tAssetLoader.cast()); return result; } -void IndexBuffer_setBufferRenderThread( +Pointer GltfAssetLoader_load( Pointer tEngine, - Pointer tBuffer, - Pointer data, - Dartsize_t sizeInBytes, - int byteOffset, - int requestId, - DartVoidCallback onComplete, + Pointer tAssetLoader, + Pointer data, + Dartsize_t length, + int numInstances, ) { - final result = GeneratedBindings.instance._IndexBuffer_setBufferRenderThread( + final result = GeneratedBindings.instance._GltfAssetLoader_load( tEngine.cast(), - tBuffer.cast(), + tAssetLoader.cast(), data, - sizeInBytes, - byteOffset, - requestId, - onComplete as Pointer>, + length, + numInstances, ); - return result; + return Pointer(result); } -void RenderableBuilder_buildRenderThread( - Pointer tBuilder, - Pointer tEngine, - DartEntityId entityId, - Pointer> onComplete, +Pointer GltfAssetLoader_getMaterialInstance( + Pointer tRenderableManager, + Pointer tAsset, ) { - final result = GeneratedBindings.instance._RenderableBuilder_buildRenderThread( - tBuilder.cast(), - tEngine.cast(), - entityId, - onComplete.cast(), + final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialInstance( + tRenderableManager.cast(), + tAsset.cast(), ); + return Pointer(result); +} + +Pointer GltfAssetLoader_getMaterialProvider(Pointer tAssetLoader) { + final result = GeneratedBindings.instance._GltfAssetLoader_getMaterialProvider(tAssetLoader.cast()); + return Pointer(result); +} + +int FilamentAsset_getResourceUriCount(Pointer tFilamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getResourceUriCount(tFilamentAsset.cast()); return result; } -void EntityManager_createEntityRenderThread( - Pointer tEntityManager, - Pointer> onComplete, +Pointer> FilamentAsset_getResourceUris(Pointer tFilamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getResourceUris(tFilamentAsset.cast()); + return Pointer>(result); +} + +Pointer GltfResourceLoader_create(Pointer tEngine) { + final result = GeneratedBindings.instance._GltfResourceLoader_create(tEngine.cast()); + return Pointer(result); +} + +void GltfResourceLoader_destroy(Pointer tEngine, Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_destroy(tEngine.cast(), tGltfResourceLoader.cast()); + return result; +} + +bool GltfResourceLoader_asyncBeginLoad( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, ) { - final result = GeneratedBindings.instance._EntityManager_createEntityRenderThread( - tEntityManager.cast(), - onComplete.cast(), + final result = GeneratedBindings.instance._GltfResourceLoader_asyncBeginLoad( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), ); + return result == 1; +} + +void GltfResourceLoader_asyncUpdateLoad(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncUpdateLoad(tGltfResourceLoader.cast()); return result; } -void EntityManager_destroyEntityRenderThread( - Pointer tEntityManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._EntityManager_destroyEntityRenderThread( - tEntityManager.cast(), - entityId, - requestId, - onComplete as Pointer>, - ); +double GltfResourceLoader_asyncGetLoadProgress(Pointer tGltfResourceLoader) { + final result = GeneratedBindings.instance._GltfResourceLoader_asyncGetLoadProgress(tGltfResourceLoader.cast()); return result; } -void TransformManager_setTransformRenderThread( - Pointer tTransformManager, - DartEntityId entityId, - double4x4 transform, - int requestId, - DartVoidCallback onComplete, +void GltfResourceLoader_addResourceData( + Pointer tGltfResourceLoader, + Pointer uri, + Pointer data, + Dartsize_t length, ) { - final transformPtr = transform.address; - final result = GeneratedBindings.instance._TransformManager_setTransformRenderThread( - tTransformManager.cast(), - entityId, - transformPtr.cast(), - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._GltfResourceLoader_addResourceData( + tGltfResourceLoader.cast(), + uri, + data, + length, ); return result; } -void TransformManager_setParentRenderThread( - Pointer tTransformManager, - DartEntityId child, - DartEntityId parent, - bool preserveScaling, - int requestId, - DartVoidCallback onComplete, +bool GltfResourceLoader_loadResources( + Pointer tGltfResourceLoader, + Pointer tFilamentAsset, ) { - final result = GeneratedBindings.instance._TransformManager_setParentRenderThread( - tTransformManager.cast(), - child, - parent, - preserveScaling, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._GltfResourceLoader_loadResources( + tGltfResourceLoader.cast(), + tFilamentAsset.cast(), ); + return result == 1; +} + +Pointer RenderManager_create(Pointer tEngine, Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_create(tEngine.cast(), tRenderer.cast()); + return Pointer(result); +} + +void RenderManager_destroy(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_destroy(tRenderer.cast()); return result; } -void TransformManager_createComponentRenderThread( - Pointer tTransformManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +void RenderManager_addAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, ) { - final result = GeneratedBindings.instance._TransformManager_createComponentRenderThread( - tTransformManager.cast(), - entityId, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderManager_addAnimationManager( + tRenderer.cast(), + tAnimationManager.cast(), ); return result; } -void TransformManager_removeComponentRenderThread( - Pointer tTransformManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, +void RenderManager_removeAnimationManager( + Pointer tRenderer, + Pointer tAnimationManager, ) { - final result = GeneratedBindings.instance._TransformManager_removeComponentRenderThread( - tTransformManager.cast(), - entityId, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderManager_removeAnimationManager( + tRenderer.cast(), + tAnimationManager.cast(), ); return result; } -void RenderableManager_destroyEntityRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderableManager_destroyEntityRenderThread( - tRenderableManager.cast(), - entityId, - requestId, - onComplete as Pointer>, - ); +void RenderManager_render(Pointer tRenderer, BigInt frameTimeInNanos) { + final result = GeneratedBindings.instance._RenderManager_render(tRenderer.cast(), frameTimeInNanos.toJSBigInt); return result; } -void RenderableManager_setBonesFromMat4RenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer transforms, - Dartsize_t boneCount, - Dartsize_t offset, - int requestId, - DartVoidCallback onComplete, +void RenderManager_setRenderable( + Pointer tRenderer, + Pointer swapChain, + Pointer> views, + int numViews, ) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromMat4RenderThread( - tRenderableManager.cast(), - entityId, - transforms, - boneCount, - offset, - requestId, - onComplete as Pointer>, + final result = GeneratedBindings.instance._RenderManager_setRenderable( + tRenderer.cast(), + swapChain.cast(), + views.cast(), + numViews, ); return result; } -void RenderableManager_setBonesFromBoneRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - Pointer bones, - Dartsize_t boneCount, - Dartsize_t offset, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderableManager_setBonesFromBoneRenderThread( - tRenderableManager.cast(), - entityId, - bones, - boneCount, - offset, - requestId, - onComplete as Pointer>, - ); +void RenderManager_removeSwapChain(Pointer tRenderer, Pointer swapChain) { + final result = GeneratedBindings.instance._RenderManager_removeSwapChain(tRenderer.cast(), swapChain.cast()); return result; } -void RenderableManager_setGeometryAtNonIndexedRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - int primitiveIndex, - int type, - Pointer tVertices, - Dartsize_t offset, - Dartsize_t count, - Pointer> callback, -) { - final result = GeneratedBindings.instance._RenderableManager_setGeometryAtNonIndexedRenderThread( - tRenderableManager.cast(), - entityId, - primitiveIndex, - type, - tVertices.cast(), - offset, - count, - callback.cast(), - ); +void RenderManager_requestRender(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_requestRender(tRenderer.cast()); return result; } -void RenderableManager_setCastShadowsRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderableManager_setCastShadowsRenderThread( - tRenderableManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderManager_attachToRenderThread(Pointer tRenderer) { + final result = GeneratedBindings.instance._RenderManager_attachToRenderThread(tRenderer.cast()); return result; } -void RenderableManager_setReceiveShadowsRenderThread( - Pointer tRenderableManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._RenderableManager_setReceiveShadowsRenderThread( - tRenderableManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderManager_detachFromRenderThread(Pointer tRenderManager) { + final result = GeneratedBindings.instance._RenderManager_detachFromRenderThread(tRenderManager.cast()); return result; } -void LightManager_setShadowCasterRenderThread( - Pointer tLightManager, - DartEntityId entityId, - bool enabled, - int requestId, - DartVoidCallback onComplete, -) { - final result = GeneratedBindings.instance._LightManager_setShadowCasterRenderThread( - tLightManager.cast(), - entityId, - enabled, - requestId, - onComplete as Pointer>, - ); +void RenderManager_setPaused(Pointer tRenderer, bool paused) { + final result = GeneratedBindings.instance._RenderManager_setPaused(tRenderer.cast(), paused); return result; } -void LightManager_setShadowOptionsRenderThread( - Pointer tLightManager, - DartEntityId entityId, - TShadowOptions options, - int requestId, - DartVoidCallback onComplete, -) { - final optionsPtr = options.address; - final result = GeneratedBindings.instance._LightManager_setShadowOptionsRenderThread( - tLightManager.cast(), - entityId, - optionsPtr.cast(), - requestId, - onComplete as Pointer>, - ); +int FilamentAsset_getEntityCount(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getEntityCount(filamentAsset.cast()); + return result; +} + +void FilamentAsset_getEntities(Pointer filamentAsset, Pointer out) { + final result = GeneratedBindings.instance._FilamentAsset_getEntities(filamentAsset.cast(), out); + return result; +} + +DartEntityId FilamentAsset_getWireframe(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getWireframe(filamentAsset.cast()); return result; } +Pointer FilamentAsset_getSourceAsset(Pointer filamentAsset) { + final result = GeneratedBindings.instance._FilamentAsset_getSourceAsset(filamentAsset.cast()); + return Pointer(result); +} + void Scene_addEntity(Pointer tScene, DartEntityId entityId) { final result = GeneratedBindings.instance._Scene_addEntity(tScene.cast(), entityId); return result; @@ -8997,6 +8964,39 @@ Dartsize_t Scene_scanForMaterial( return result; } +void FrameScheduler_startWithCallback(DartFrameTickCallback tickCallback, int targetFps) { + final result = GeneratedBindings.instance._FrameScheduler_startWithCallback( + tickCallback as Pointer>, + targetFps, + ); + return result; +} + +void FrameScheduler_stop() { + final result = GeneratedBindings.instance._FrameScheduler_stop(); + return result; +} + +int FrameScheduler_initDartApi(Pointer data) { + final result = GeneratedBindings.instance._FrameScheduler_initDartApi(data); + return result; +} + +void FrameScheduler_startWithPort(BigInt port, int targetFps) { + final result = GeneratedBindings.instance._FrameScheduler_startWithPort(port.toJSBigInt, targetFps); + return result; +} + +void FrameScheduler_setTargetFps(int fps) { + final result = GeneratedBindings.instance._FrameScheduler_setTargetFps(fps); + return result; +} + +BigInt FrameScheduler_steadyClockUs() { + final result = GeneratedBindings.instance._FrameScheduler_steadyClockUs(); + return result.toDart; +} + void MovementIntentExecutor_destroy(Pointer executor) { final result = GeneratedBindings.instance._MovementIntentExecutor_destroy(executor.cast()); return result; @@ -9119,189 +9119,6 @@ void TransformPipeline_setInvertMouseY(int invert) { return result; } -extension TAnimationManagerExt on Pointer { - TAnimationManager toDart() { - return TAnimationManager(this); - } -} - -final class TAnimationManager extends Struct { - Pointer get address => super.address.cast(); - TAnimationManager(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -extension TEngineExt on Pointer { - TEngine toDart() { - return TEngine(this); - } -} - -final class TEngine extends Struct { - Pointer get address => super.address.cast(); - TEngine(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -extension TSceneAssetExt on Pointer { - TSceneAsset toDart() { - return TSceneAsset(this); - } -} - -final class TSceneAsset extends Struct { - Pointer get address => super.address.cast(); - TSceneAsset(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -typedef EntityId = int; -typedef DartEntityId = int; - -extension TCameraExt on Pointer { - TCamera toDart() { - return TCamera(this); - } -} - -final class TCamera extends Struct { - Pointer get address => super.address.cast(); - TCamera(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -extension double4x4Ext on Pointer { - double4x4 toDart() { - return double4x4(this); - } -} - -final class double4x4 extends Struct { - Pointer get address => super.address.cast(); - Array get col1 { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 0))); - } - - set col1(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.internal.addr.addr.toJS, '*'); - } - - Array get col2 { - final addr = Pointer(this.address.addr + 32); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 32))); - } - - set col2(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 32), val.internal.addr.addr.toJS, '*'); - } - - Array get col3 { - final addr = Pointer(this.address.addr + 64); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 64))); - } - - set col3(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 64), val.internal.addr.addr.toJS, '*'); - } - - Array get col4 { - final addr = Pointer(this.address.addr + 96); - final value = NativeLibrary.instance.getValue(addr, '*'); - return Array((numElements: 4, addr: Pointer(this.address.addr + 96))); - } - - set col4(Array val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 96), val.internal.addr.addr.toJS, '*'); - } - - double4x4(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(128)); - } -} - -extension double3Ext on Pointer { - double3 toDart() { - return double3(this); - } -} - -final class double3 extends Struct { - Pointer get address => super.address.cast(); - double get x { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } - - set x(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'double'); - } - - double get y { - final addr = Pointer(this.address.addr + 8); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } - - set y(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'double'); - } - - double get z { - final addr = Pointer(this.address.addr + 16); - final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; - return value; - } - - set z(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'double'); - } - - double3(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(24)); - } -} - -sealed class TProjection { - static const Perspective = 0; - static const Orthographic = 1; -} - -extension TFilamentAssetExt on Pointer { - TFilamentAsset toDart() { - return TFilamentAsset(this); - } -} - -final class TFilamentAsset extends Struct { - Pointer get address => super.address.cast(); - TFilamentAsset(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - extension TViewportExt on Pointer { TViewport toDart() { return TViewport(this); @@ -9387,6 +9204,21 @@ final class TToneMapper extends Struct { } } +extension TEngineExt on Pointer { + TEngine toDart() { + return TEngine(this); + } +} + +final class TEngine extends Struct { + Pointer get address => super.address.cast(); + TEngine(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + extension TColorGradingBuilderExt on Pointer { TColorGradingBuilder toDart() { return TColorGradingBuilder(this); @@ -9576,10 +9408,25 @@ final class TVsmShadowOptions extends Struct { NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'float'); } - TVsmShadowOptions(super.address); + TVsmShadowOptions(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(12)); + } +} + +extension TCameraExt on Pointer { + TCamera toDart() { + return TCamera(this); + } +} + +final class TCamera extends Struct { + Pointer get address => super.address.cast(); + TCamera(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(12)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } @@ -10205,6 +10052,8 @@ typedef PickCallbackFunction = void Function(int requestId, EntityId entityId, double depth, double fragX, double fragY, double fragZ); typedef DartPickCallbackFunction = void Function(int requestId, DartEntityId entityId, double depth, double fragX, double fragY, double fragZ); +typedef EntityId = int; +typedef DartEntityId = int; sealed class TGizmoPickResultType { static const AxisX = 0; @@ -10305,24 +10154,6 @@ sealed class TGizmoAxis { static const Z = 2; } -extension TMaterialProviderExt on Pointer { - TMaterialProvider toDart() { - return TMaterialProvider(this); - } -} - -final class TMaterialProvider extends Struct { - Pointer get address => super.address.cast(); - TMaterialProvider(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } -} - -typedef size_t = int; -typedef Dartsize_t = int; - extension TMaterialInstanceExt on Pointer { TMaterialInstance toDart() { return TMaterialInstance(this); @@ -10338,226 +10169,386 @@ final class TMaterialInstance extends Struct { } } -extension TRenderableManagerExt on Pointer { - TRenderableManager toDart() { - return TRenderableManager(this); +sealed class TFeatureLevel { + static const FEATURE_LEVEL_0 = 0; + static const FEATURE_LEVEL_1 = 1; + static const FEATURE_LEVEL_2 = 2; + static const FEATURE_LEVEL_3 = 3; +} + +sealed class TCullingMode { + static const CULLING_MODE_NONE = 0; + static const CULLING_MODE_FRONT = 1; + static const CULLING_MODE_BACK = 2; + static const CULLING_MODE_FRONT_AND_BACK = 3; +} + +extension TTextureSamplerExt on Pointer { + TTextureSampler toDart() { + return TTextureSampler(this); } } -final class TRenderableManager extends Struct { - Pointer get address => super.address.cast(); - TRenderableManager(super.address); +final class TTextureSampler extends Struct { + Pointer get address => super.address.cast(); + TTextureSampler(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TMeshDataExt on Pointer { - TMeshData toDart() { - return TMeshData(this); +sealed class TSamplerCompareFunc { + /// !< Less or equal + static const LE = 0; + + /// !< Greater or equal + static const GE = 1; + + /// !< Strictly less than + static const L = 2; + + /// !< Strictly greater than + static const G = 3; + + /// !< Equal + static const E = 4; + + /// !< Not equal + static const NE = 5; + + /// !< Always. Depth / stencil testing is deactivated. + static const A = 6; + + /// !< Never. The depth / stencil test always fails. + static const N = 7; +} + +sealed class TStencilOperation { + static const KEEP = 0; + static const ZERO = 1; + static const REPLACE = 2; + static const INCR = 3; + static const INCR_WRAP = 4; + static const DECR = 5; + static const DECR_WRAP = 6; + static const INVERT = 7; +} + +sealed class TStencilFace { + static const STENCIL_FACE_FRONT = 1; + static const STENCIL_FACE_BACK = 2; + static const STENCIL_FACE_FRONT_AND_BACK = 3; +} + +sealed class TTransparencyMode { + /// ! the transparent object is drawn honoring the raster state + static const DEFAULT = 0; + + /// the transparent object is first drawn in the depth buffer, + /// then in the color buffer, honoring the culling mode, but ignoring the depth test function + static const TWO_PASSES_ONE_SIDE = 1; + + /// the transparent object is drawn twice in the color buffer, + /// first with back faces only, then with front faces; the culling + /// mode is ignored. Can be combined with two-sided lighting + static const TWO_PASSES_TWO_SIDES = 2; +} + +sealed class TBlendingMode { + static const BLENDING_MODE_OPAQUE = 0; + static const BLENDING_MODE_TRANSPARENT = 1; + static const BLENDING_MODE_ADD = 2; + static const BLENDING_MODE_MASKED = 3; + static const BLENDING_MODE_FADE = 4; + static const BLENDING_MODE_MULTIPLY = 5; + static const BLENDING_MODE_SCREEN = 6; + static const BLENDING_MODE_CUSTOM = 7; +} + +extension TSceneAssetExt on Pointer { + TSceneAsset toDart() { + return TSceneAsset(this); } } -final class TMeshData extends Struct { - Pointer get address => super.address.cast(); - TMeshData(super.address); +final class TSceneAsset extends Struct { + Pointer get address => super.address.cast(); + TSceneAsset(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TIndexBufferBuilderExt on Pointer { - TIndexBufferBuilder toDart() { - return TIndexBufferBuilder(this); +extension TVertexBufferExt on Pointer { + TVertexBuffer toDart() { + return TVertexBuffer(this); } } -final class TIndexBufferBuilder extends Struct { - Pointer get address => super.address.cast(); - TIndexBufferBuilder(super.address); +final class TVertexBuffer extends Struct { + Pointer get address => super.address.cast(); + TVertexBuffer(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -sealed class TIndexType { - static const TINDEX_TYPE_USHORT = 0; - static const TINDEX_TYPE_UINT = 1; +extension TIndexBufferExt on Pointer { + TIndexBuffer toDart() { + return TIndexBuffer(this); + } +} + +final class TIndexBuffer extends Struct { + Pointer get address => super.address.cast(); + TIndexBuffer(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} + +sealed class TPrimitiveType { + /// !< points + static const PRIMITIVETYPE_POINTS = 0; + + /// !< lines + static const PRIMITIVETYPE_LINES = 1; + + /// !< line strip + static const PRIMITIVETYPE_LINE_STRIP = 3; + + /// !< triangles + static const PRIMITIVETYPE_TRIANGLES = 4; + + /// !< triangle strip + static const PRIMITIVETYPE_TRIANGLE_STRIP = 5; +} + +extension Aabb3Ext on Pointer { + Aabb3 toDart() { + return Aabb3(this); + } } -extension TIndexBufferExt on Pointer { - TIndexBuffer toDart() { - return TIndexBuffer(this); +final class Aabb3 extends Struct { + Pointer get address => super.address.cast(); + double get centerX { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set centerX(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'float'); + } + + double get centerY { + final addr = Pointer(this.address.addr + 4); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set centerY(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 4), val.toJS, 'float'); + } + + double get centerZ { + final addr = Pointer(this.address.addr + 8); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set centerZ(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'float'); + } + + double get halfExtentX { + final addr = Pointer(this.address.addr + 12); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set halfExtentX(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 12), val.toJS, 'float'); + } + + double get halfExtentY { + final addr = Pointer(this.address.addr + 16); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set halfExtentY(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'float'); + } + + double get halfExtentZ { + final addr = Pointer(this.address.addr + 20); + final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; + return value; + } + + set halfExtentZ(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 20), val.toJS, 'float'); } -} -final class TIndexBuffer extends Struct { - Pointer get address => super.address.cast(); - TIndexBuffer(super.address); + Aabb3(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(24)); } } -extension TIndirectLightExt on Pointer { - TIndirectLight toDart() { - return TIndirectLight(this); +extension TFilamentAssetExt on Pointer { + TFilamentAsset toDart() { + return TFilamentAsset(this); } } -final class TIndirectLight extends Struct { - Pointer get address => super.address.cast(); - TIndirectLight(super.address); +final class TFilamentAsset extends Struct { + Pointer get address => super.address.cast(); + TFilamentAsset(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TRenderManagerExt on Pointer { - TRenderManager toDart() { - return TRenderManager(this); - } +sealed class TSceneAssetType { + static const SCENE_ASSET_TYPE_GLTF = 0; + static const SCENE_ASSET_TYPE_GEOMETRY = 1; + static const SCENE_ASSET_TYPE_LIGHT = 2; + static const SCENE_ASSET_TYPE_SKYBOX = 3; + static const SCENE_ASSET_TYPE_IBL = 4; + static const SCENE_ASSET_TYPE_IMAGE = 5; + static const SCENE_ASSET_TYPE_GIZMO = 6; } -final class TRenderManager extends Struct { - Pointer get address => super.address.cast(); - TRenderManager(super.address); +typedef size_t = int; +typedef Dartsize_t = int; - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); +extension double4x4Ext on Pointer { + double4x4 toDart() { + return double4x4(this); } } -extension TRendererExt on Pointer { - TRenderer toDart() { - return TRenderer(this); +final class double4x4 extends Struct { + Pointer get address => super.address.cast(); + Array get col1 { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 0))); } -} -final class TRenderer extends Struct { - Pointer get address => super.address.cast(); - TRenderer(super.address); + set col1(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.internal.addr.addr.toJS, '*'); + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + Array get col2 { + final addr = Pointer(this.address.addr + 32); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 32))); } -} -extension TSwapChainExt on Pointer { - TSwapChain toDart() { - return TSwapChain(this); + set col2(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 32), val.internal.addr.addr.toJS, '*'); } -} -final class TSwapChain extends Struct { - Pointer get address => super.address.cast(); - TSwapChain(super.address); + Array get col3 { + final addr = Pointer(this.address.addr + 64); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 64))); + } - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + set col3(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 64), val.internal.addr.addr.toJS, '*'); } -} -sealed class TFeatureLevel { - static const FEATURE_LEVEL_0 = 0; - static const FEATURE_LEVEL_1 = 1; - static const FEATURE_LEVEL_2 = 2; - static const FEATURE_LEVEL_3 = 3; -} + Array get col4 { + final addr = Pointer(this.address.addr + 96); + final value = NativeLibrary.instance.getValue(addr, '*'); + return Array((numElements: 4, addr: Pointer(this.address.addr + 96))); + } -sealed class TCullingMode { - static const CULLING_MODE_NONE = 0; - static const CULLING_MODE_FRONT = 1; - static const CULLING_MODE_BACK = 2; - static const CULLING_MODE_FRONT_AND_BACK = 3; -} + set col4(Array val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 96), val.internal.addr.addr.toJS, '*'); + } -extension TTextureSamplerExt on Pointer { - TTextureSampler toDart() { - return TTextureSampler(this); + double4x4(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(128)); } } -final class TTextureSampler extends Struct { - Pointer get address => super.address.cast(); - TTextureSampler(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); +extension double3Ext on Pointer { + double3 toDart() { + return double3(this); } } -sealed class TSamplerCompareFunc { - /// !< Less or equal - static const LE = 0; +final class double3 extends Struct { + Pointer get address => super.address.cast(); + double get x { + final addr = Pointer(this.address.addr + 0); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } - /// !< Greater or equal - static const GE = 1; + set x(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'double'); + } - /// !< Strictly less than - static const L = 2; + double get y { + final addr = Pointer(this.address.addr + 8); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } - /// !< Strictly greater than - static const G = 3; + set y(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'double'); + } - /// !< Equal - static const E = 4; + double get z { + final addr = Pointer(this.address.addr + 16); + final value = NativeLibrary.instance.getValue(addr, 'double').toDartDouble; + return value; + } - /// !< Not equal - static const NE = 5; + set z(double val) { + NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'double'); + } - /// !< Always. Depth / stencil testing is deactivated. - static const A = 6; + double3(super.address); - /// !< Never. The depth / stencil test always fails. - static const N = 7; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(24)); + } } -sealed class TStencilOperation { - static const KEEP = 0; - static const ZERO = 1; - static const REPLACE = 2; - static const INCR = 3; - static const INCR_WRAP = 4; - static const DECR = 5; - static const DECR_WRAP = 6; - static const INVERT = 7; +sealed class TProjection { + static const Perspective = 0; + static const Orthographic = 1; } -sealed class TStencilFace { - static const STENCIL_FACE_FRONT = 1; - static const STENCIL_FACE_BACK = 2; - static const STENCIL_FACE_FRONT_AND_BACK = 3; +extension TMeshDataExt on Pointer { + TMeshData toDart() { + return TMeshData(this); + } } -sealed class TTransparencyMode { - /// ! the transparent object is drawn honoring the raster state - static const DEFAULT = 0; - - /// the transparent object is first drawn in the depth buffer, - /// then in the color buffer, honoring the culling mode, but ignoring the depth test function - static const TWO_PASSES_ONE_SIDE = 1; - - /// the transparent object is drawn twice in the color buffer, - /// first with back faces only, then with front faces; the culling - /// mode is ignored. Can be combined with two-sided lighting - static const TWO_PASSES_TWO_SIDES = 2; -} +final class TMeshData extends Struct { + Pointer get address => super.address.cast(); + TMeshData(super.address); -sealed class TBlendingMode { - static const BLENDING_MODE_OPAQUE = 0; - static const BLENDING_MODE_TRANSPARENT = 1; - static const BLENDING_MODE_ADD = 2; - static const BLENDING_MODE_MASKED = 3; - static const BLENDING_MODE_FADE = 4; - static const BLENDING_MODE_MULTIPLY = 5; - static const BLENDING_MODE_SCREEN = 6; - static const BLENDING_MODE_CUSTOM = 7; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } } sealed class TTextureSamplerType { @@ -10835,181 +10826,223 @@ sealed class TSamplerMinFilter { static const FILTER_LINEAR_MIPMAP_LINEAR = 5; } -sealed class TSamplerMagFilter { - static const MAG_FILTER_NEAREST = 0; - static const MAG_FILTER_LINEAR = 1; +sealed class TSamplerMagFilter { + static const MAG_FILTER_NEAREST = 0; + static const MAG_FILTER_LINEAR = 1; +} + +sealed class TSamplerWrapMode { + static const WRAP_CLAMP_TO_EDGE = 0; + static const WRAP_REPEAT = 1; + static const WRAP_MIRRORED_REPEAT = 2; +} + +sealed class TSamplerCompareMode { + static const COMPARE_MODE_NONE = 0; + static const COMPARE_MODE_COMPARE_TO_TEXTURE = 1; +} + +sealed class TBackend { + /// !< Automatically selects an appropriate driver for the platform. + static const BACKEND_DEFAULT = 0; + + /// !< Selects the OpenGL/ES driver (default on Android) + static const BACKEND_OPENGL = 1; + + /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) + static const BACKEND_VULKAN = 2; + + /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). + static const BACKEND_METAL = 3; + + /// !< Selects the no-op driver for testing purposes. + static const BACKEND_NOOP = 4; } -sealed class TSamplerWrapMode { - static const WRAP_CLAMP_TO_EDGE = 0; - static const WRAP_REPEAT = 1; - static const WRAP_MIRRORED_REPEAT = 2; +extension TRendererExt on Pointer { + TRenderer toDart() { + return TRenderer(this); + } } -sealed class TSamplerCompareMode { - static const COMPARE_MODE_NONE = 0; - static const COMPARE_MODE_COMPARE_TO_TEXTURE = 1; -} +final class TRenderer extends Struct { + Pointer get address => super.address.cast(); + TRenderer(super.address); -extension TVertexBufferExt on Pointer { - TVertexBuffer toDart() { - return TVertexBuffer(this); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -final class TVertexBuffer extends Struct { - Pointer get address => super.address.cast(); - TVertexBuffer(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); +extension TSwapChainExt on Pointer { + TSwapChain toDart() { + return TSwapChain(this); } } -sealed class TPrimitiveType { - /// !< points - static const PRIMITIVETYPE_POINTS = 0; +final class TSwapChain extends Struct { + Pointer get address => super.address.cast(); + TSwapChain(super.address); - /// !< lines - static const PRIMITIVETYPE_LINES = 1; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } +} - /// !< line strip - static const PRIMITIVETYPE_LINE_STRIP = 3; +extension TTransformManagerExt on Pointer { + TTransformManager toDart() { + return TTransformManager(this); + } +} - /// !< triangles - static const PRIMITIVETYPE_TRIANGLES = 4; +final class TTransformManager extends Struct { + Pointer get address => super.address.cast(); + TTransformManager(super.address); - /// !< triangle strip - static const PRIMITIVETYPE_TRIANGLE_STRIP = 5; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } } -extension Aabb3Ext on Pointer { - Aabb3 toDart() { - return Aabb3(this); +extension TRenderableManagerExt on Pointer { + TRenderableManager toDart() { + return TRenderableManager(this); } } -final class Aabb3 extends Struct { - Pointer get address => super.address.cast(); - double get centerX { - final addr = Pointer(this.address.addr + 0); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; - } +final class TRenderableManager extends Struct { + Pointer get address => super.address.cast(); + TRenderableManager(super.address); - set centerX(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 0), val.toJS, 'float'); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - double get centerY { - final addr = Pointer(this.address.addr + 4); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; +extension TLightManagerExt on Pointer { + TLightManager toDart() { + return TLightManager(this); } +} - set centerY(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 4), val.toJS, 'float'); - } +final class TLightManager extends Struct { + Pointer get address => super.address.cast(); + TLightManager(super.address); - double get centerZ { - final addr = Pointer(this.address.addr + 8); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - set centerZ(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 8), val.toJS, 'float'); +extension TEntityManagerExt on Pointer { + TEntityManager toDart() { + return TEntityManager(this); } +} - double get halfExtentX { - final addr = Pointer(this.address.addr + 12); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; - } +final class TEntityManager extends Struct { + Pointer get address => super.address.cast(); + TEntityManager(super.address); - set halfExtentX(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 12), val.toJS, 'float'); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - double get halfExtentY { - final addr = Pointer(this.address.addr + 16); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; +extension TFenceExt on Pointer { + TFence toDart() { + return TFence(this); } +} - set halfExtentY(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 16), val.toJS, 'float'); - } +final class TFence extends Struct { + Pointer get address => super.address.cast(); + TFence(super.address); - double get halfExtentZ { - final addr = Pointer(this.address.addr + 20); - final value = NativeLibrary.instance.getValue(addr, 'float').toDartDouble; - return value; + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } +} - set halfExtentZ(double val) { - NativeLibrary.instance.setValue(Pointer(this.address.addr + 20), val.toJS, 'float'); - } +sealed class TMaterialPlatform { + static const T_MATERIAL_PLATFORM_DESKTOP = 0; + static const T_MATERIAL_PLATFORM_MOBILE = 1; + static const T_MATERIAL_PLATFORM_ALL = 2; +} - Aabb3(super.address); +sealed class TMaterialTargetApi { + static const T_MATERIAL_TARGET_API_OPENGL = 1; + static const T_MATERIAL_TARGET_API_VULKAN = 2; + static const T_MATERIAL_TARGET_API_METAL = 4; + static const T_MATERIAL_TARGET_API_WEBGPU = 8; + static const T_MATERIAL_TARGET_API_ALL = 15; + static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; +} - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(24)); +sealed class TMaterialOptimization { + static const T_MATERIAL_OPTIMIZATION_NONE = 0; + static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; + static const T_MATERIAL_OPTIMIZATION_SIZE = 2; + static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; +} + +extension TSkyboxExt on Pointer { + TSkybox toDart() { + return TSkybox(this); } } -sealed class TSceneAssetType { - static const SCENE_ASSET_TYPE_GLTF = 0; - static const SCENE_ASSET_TYPE_GEOMETRY = 1; - static const SCENE_ASSET_TYPE_LIGHT = 2; - static const SCENE_ASSET_TYPE_SKYBOX = 3; - static const SCENE_ASSET_TYPE_IBL = 4; - static const SCENE_ASSET_TYPE_IMAGE = 5; - static const SCENE_ASSET_TYPE_GIZMO = 6; +final class TSkybox extends Struct { + Pointer get address => super.address.cast(); + TSkybox(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); + } } -extension TSurfaceOrientationBuilderExt on Pointer { - TSurfaceOrientationBuilder toDart() { - return TSurfaceOrientationBuilder(this); +extension TIndirectLightExt on Pointer { + TIndirectLight toDart() { + return TIndirectLight(this); } } -final class TSurfaceOrientationBuilder extends Struct { - Pointer get address => super.address.cast(); - TSurfaceOrientationBuilder(super.address); +final class TIndirectLight extends Struct { + Pointer get address => super.address.cast(); + TIndirectLight(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TSurfaceOrientationExt on Pointer { - TSurfaceOrientation toDart() { - return TSurfaceOrientation(this); +extension TDebugRegistryExt on Pointer { + TDebugRegistry toDart() { + return TDebugRegistry(this); } } -final class TSurfaceOrientation extends Struct { - Pointer get address => super.address.cast(); - TSurfaceOrientation(super.address); +final class TDebugRegistry extends Struct { + Pointer get address => super.address.cast(); + TDebugRegistry(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TTransformManagerExt on Pointer { - TTransformManager toDart() { - return TTransformManager(this); +extension TMaterialProviderExt on Pointer { + TMaterialProvider toDart() { + return TMaterialProvider(this); } } -final class TTransformManager extends Struct { - Pointer get address => super.address.cast(); - TTransformManager(super.address); +final class TMaterialProvider extends Struct { + Pointer get address => super.address.cast(); + TMaterialProvider(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } @@ -11075,24 +11108,24 @@ sealed class TVertexAttributeType { static const TVERTEXATTRIBUTE_TYPE_HALF4 = 25; } -typedef FrameTickCallback = Pointer>; -typedef DartFrameTickCallback = Pointer>; -typedef FrameTickCallbackFunction = void Function(JSBigInt frameTimeNanos); -typedef DartFrameTickCallbackFunction = void Function(BigInt frameTimeNanos); +extension TIndexBufferBuilderExt on Pointer { + TIndexBufferBuilder toDart() { + return TIndexBufferBuilder(this); + } +} -extension TLightManagerExt on Pointer { - TLightManager toDart() { - return TLightManager(this); +final class TIndexBufferBuilder extends Struct { + Pointer get address => super.address.cast(); + TIndexBufferBuilder(super.address); + + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -final class TLightManager extends Struct { - Pointer get address => super.address.cast(); - TLightManager(super.address); - - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); - } +sealed class TIndexType { + static const TINDEX_TYPE_USHORT = 0; + static const TINDEX_TYPE_UINT = 1; } sealed class TLightType { @@ -11378,120 +11411,86 @@ final class TShadowOptions extends Struct { } } -extension TRenderableBuilderExt on Pointer { - TRenderableBuilder toDart() { - return TRenderableBuilder(this); +extension TRenderManagerExt on Pointer { + TRenderManager toDart() { + return TRenderManager(this); } } -final class TRenderableBuilder extends Struct { - Pointer get address => super.address.cast(); - TRenderableBuilder(super.address); +final class TRenderManager extends Struct { + Pointer get address => super.address.cast(); + TRenderManager(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TSkyboxExt on Pointer { - TSkybox toDart() { - return TSkybox(this); +extension TAnimationManagerExt on Pointer { + TAnimationManager toDart() { + return TAnimationManager(this); } } -final class TSkybox extends Struct { - Pointer get address => super.address.cast(); - TSkybox(super.address); +final class TAnimationManager extends Struct { + Pointer get address => super.address.cast(); + TAnimationManager(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -sealed class TBackend { - /// !< Automatically selects an appropriate driver for the platform. - static const BACKEND_DEFAULT = 0; - - /// !< Selects the OpenGL/ES driver (default on Android) - static const BACKEND_OPENGL = 1; - - /// !< Selects the Vulkan driver if the platform supports it (default on Linux/Windows) - static const BACKEND_VULKAN = 2; - - /// !< Selects the Metal driver if the platform supports it (default on MacOS/iOS). - static const BACKEND_METAL = 3; - - /// !< Selects the no-op driver for testing purposes. - static const BACKEND_NOOP = 4; -} - -extension TEntityManagerExt on Pointer { - TEntityManager toDart() { - return TEntityManager(this); +extension TRenderableBuilderExt on Pointer { + TRenderableBuilder toDart() { + return TRenderableBuilder(this); } } -final class TEntityManager extends Struct { - Pointer get address => super.address.cast(); - TEntityManager(super.address); +final class TRenderableBuilder extends Struct { + Pointer get address => super.address.cast(); + TRenderableBuilder(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -extension TFenceExt on Pointer { - TFence toDart() { - return TFence(this); +extension TSurfaceOrientationBuilderExt on Pointer { + TSurfaceOrientationBuilder toDart() { + return TSurfaceOrientationBuilder(this); } } -final class TFence extends Struct { - Pointer get address => super.address.cast(); - TFence(super.address); +final class TSurfaceOrientationBuilder extends Struct { + Pointer get address => super.address.cast(); + TSurfaceOrientationBuilder(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } -sealed class TMaterialPlatform { - static const T_MATERIAL_PLATFORM_DESKTOP = 0; - static const T_MATERIAL_PLATFORM_MOBILE = 1; - static const T_MATERIAL_PLATFORM_ALL = 2; -} - -sealed class TMaterialTargetApi { - static const T_MATERIAL_TARGET_API_OPENGL = 1; - static const T_MATERIAL_TARGET_API_VULKAN = 2; - static const T_MATERIAL_TARGET_API_METAL = 4; - static const T_MATERIAL_TARGET_API_WEBGPU = 8; - static const T_MATERIAL_TARGET_API_ALL = 15; - static const T_MATERIAL_TARGET_API_FROM_ENGINE = 256; -} - -sealed class TMaterialOptimization { - static const T_MATERIAL_OPTIMIZATION_NONE = 0; - static const T_MATERIAL_OPTIMIZATION_PREPROCESSOR = 1; - static const T_MATERIAL_OPTIMIZATION_SIZE = 2; - static const T_MATERIAL_OPTIMIZATION_PERFORMANCE = 3; -} - -extension TDebugRegistryExt on Pointer { - TDebugRegistry toDart() { - return TDebugRegistry(this); +extension TSurfaceOrientationExt on Pointer { + TSurfaceOrientation toDart() { + return TSurfaceOrientation(this); } } -final class TDebugRegistry extends Struct { - Pointer get address => super.address.cast(); - TDebugRegistry(super.address); +final class TSurfaceOrientation extends Struct { + Pointer get address => super.address.cast(); + TSurfaceOrientation(super.address); - static Pointer stackAlloc() { - return Pointer(NativeLibrary.instance.stackAlloc(0)); + static Pointer stackAlloc() { + return Pointer(NativeLibrary.instance.stackAlloc(0)); } } +typedef FrameTickCallback = Pointer>; +typedef DartFrameTickCallback = Pointer>; +typedef FrameTickCallbackFunction = void Function(JSBigInt frameTimeNanos); +typedef DartFrameTickCallbackFunction = void Function(BigInt frameTimeNanos); + extension TMovementIntentExecutorExt on Pointer { TMovementIntentExecutor toDart() { return TMovementIntentExecutor(this); @@ -11537,27 +11536,6 @@ const int SPRINT_INTENT_MASK = 8; extension StructAllocator on Struct { static T create() { switch (T) { - case TAnimationManager: - final ptr = TAnimationManager.stackAlloc(); - return ptr.toDart() as T; - case TEngine: - final ptr = TEngine.stackAlloc(); - return ptr.toDart() as T; - case TSceneAsset: - final ptr = TSceneAsset.stackAlloc(); - return ptr.toDart() as T; - case TCamera: - final ptr = TCamera.stackAlloc(); - return ptr.toDart() as T; - case double4x4: - final ptr = double4x4.stackAlloc(); - return ptr.toDart() as T; - case double3: - final ptr = double3.stackAlloc(); - return ptr.toDart() as T; - case TFilamentAsset: - final ptr = TFilamentAsset.stackAlloc(); - return ptr.toDart() as T; case TViewport: final ptr = TViewport.stackAlloc(); return ptr.toDart() as T; @@ -11567,6 +11545,9 @@ extension StructAllocator on Struct { case TToneMapper: final ptr = TToneMapper.stackAlloc(); return ptr.toDart() as T; + case TEngine: + final ptr = TEngine.stackAlloc(); + return ptr.toDart() as T; case TColorGradingBuilder: final ptr = TColorGradingBuilder.stackAlloc(); return ptr.toDart() as T; @@ -11582,6 +11563,9 @@ extension StructAllocator on Struct { case TVsmShadowOptions: final ptr = TVsmShadowOptions.stackAlloc(); return ptr.toDart() as T; + case TCamera: + final ptr = TCamera.stackAlloc(); + return ptr.toDart() as T; case TScene: final ptr = TScene.stackAlloc(); return ptr.toDart() as T; @@ -11615,38 +11599,35 @@ extension StructAllocator on Struct { case TMaterial: final ptr = TMaterial.stackAlloc(); return ptr.toDart() as T; - case TMaterialProvider: - final ptr = TMaterialProvider.stackAlloc(); - return ptr.toDart() as T; case TMaterialInstance: final ptr = TMaterialInstance.stackAlloc(); return ptr.toDart() as T; - case TRenderableManager: - final ptr = TRenderableManager.stackAlloc(); + case TTextureSampler: + final ptr = TTextureSampler.stackAlloc(); return ptr.toDart() as T; - case TMeshData: - final ptr = TMeshData.stackAlloc(); + case TSceneAsset: + final ptr = TSceneAsset.stackAlloc(); return ptr.toDart() as T; - case TIndexBufferBuilder: - final ptr = TIndexBufferBuilder.stackAlloc(); + case TVertexBuffer: + final ptr = TVertexBuffer.stackAlloc(); return ptr.toDart() as T; case TIndexBuffer: final ptr = TIndexBuffer.stackAlloc(); return ptr.toDart() as T; - case TIndirectLight: - final ptr = TIndirectLight.stackAlloc(); + case Aabb3: + final ptr = Aabb3.stackAlloc(); return ptr.toDart() as T; - case TRenderManager: - final ptr = TRenderManager.stackAlloc(); + case TFilamentAsset: + final ptr = TFilamentAsset.stackAlloc(); return ptr.toDart() as T; - case TRenderer: - final ptr = TRenderer.stackAlloc(); + case double4x4: + final ptr = double4x4.stackAlloc(); return ptr.toDart() as T; - case TSwapChain: - final ptr = TSwapChain.stackAlloc(); + case double3: + final ptr = double3.stackAlloc(); return ptr.toDart() as T; - case TTextureSampler: - final ptr = TTextureSampler.stackAlloc(); + case TMeshData: + final ptr = TMeshData.stackAlloc(); return ptr.toDart() as T; case TLinearImage: final ptr = TLinearImage.stackAlloc(); @@ -11654,45 +11635,63 @@ extension StructAllocator on Struct { case TKtx1Bundle: final ptr = TKtx1Bundle.stackAlloc(); return ptr.toDart() as T; - case TVertexBuffer: - final ptr = TVertexBuffer.stackAlloc(); - return ptr.toDart() as T; - case Aabb3: - final ptr = Aabb3.stackAlloc(); - return ptr.toDart() as T; - case TSurfaceOrientationBuilder: - final ptr = TSurfaceOrientationBuilder.stackAlloc(); + case TRenderer: + final ptr = TRenderer.stackAlloc(); return ptr.toDart() as T; - case TSurfaceOrientation: - final ptr = TSurfaceOrientation.stackAlloc(); + case TSwapChain: + final ptr = TSwapChain.stackAlloc(); return ptr.toDart() as T; case TTransformManager: final ptr = TTransformManager.stackAlloc(); return ptr.toDart() as T; - case TVertexBufferBuilder: - final ptr = TVertexBufferBuilder.stackAlloc(); + case TRenderableManager: + final ptr = TRenderableManager.stackAlloc(); return ptr.toDart() as T; case TLightManager: final ptr = TLightManager.stackAlloc(); return ptr.toDart() as T; - case TShadowOptions: - final ptr = TShadowOptions.stackAlloc(); - return ptr.toDart() as T; - case TRenderableBuilder: - final ptr = TRenderableBuilder.stackAlloc(); - return ptr.toDart() as T; - case TSkybox: - final ptr = TSkybox.stackAlloc(); - return ptr.toDart() as T; case TEntityManager: final ptr = TEntityManager.stackAlloc(); return ptr.toDart() as T; case TFence: final ptr = TFence.stackAlloc(); return ptr.toDart() as T; + case TSkybox: + final ptr = TSkybox.stackAlloc(); + return ptr.toDart() as T; + case TIndirectLight: + final ptr = TIndirectLight.stackAlloc(); + return ptr.toDart() as T; case TDebugRegistry: final ptr = TDebugRegistry.stackAlloc(); return ptr.toDart() as T; + case TMaterialProvider: + final ptr = TMaterialProvider.stackAlloc(); + return ptr.toDart() as T; + case TVertexBufferBuilder: + final ptr = TVertexBufferBuilder.stackAlloc(); + return ptr.toDart() as T; + case TIndexBufferBuilder: + final ptr = TIndexBufferBuilder.stackAlloc(); + return ptr.toDart() as T; + case TShadowOptions: + final ptr = TShadowOptions.stackAlloc(); + return ptr.toDart() as T; + case TRenderManager: + final ptr = TRenderManager.stackAlloc(); + return ptr.toDart() as T; + case TAnimationManager: + final ptr = TAnimationManager.stackAlloc(); + return ptr.toDart() as T; + case TRenderableBuilder: + final ptr = TRenderableBuilder.stackAlloc(); + return ptr.toDart() as T; + case TSurfaceOrientationBuilder: + final ptr = TSurfaceOrientationBuilder.stackAlloc(); + return ptr.toDart() as T; + case TSurfaceOrientation: + final ptr = TSurfaceOrientation.stackAlloc(); + return ptr.toDart() as T; case TMovementIntentExecutor: final ptr = TMovementIntentExecutor.stackAlloc(); return ptr.toDart() as T; diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index b34446217..55c5a7f0c 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -808,7 +808,14 @@ class FFIFilamentApp extends FilamentApp { final scenePtr = scene.getNativeHandle(); final renderableManagerPtr = renderableManager.renderableManager; final count = Scene_scanForMaterial( - scenePtr, renderableManagerPtr, ffiMaterial.pointer, nullptr.cast(), nullptr.cast(), nullptr.cast(), 0); + scenePtr, + renderableManagerPtr, + ffiMaterial.pointer, + nullptr.cast(), + nullptr.cast(), + nullptr.cast(), + 0, + ); if (count == 0) { continue; } @@ -820,8 +827,14 @@ class FFIFilamentApp extends FilamentApp { } try { Scene_scanForMaterial( - scenePtr, renderableManagerPtr, ffiMaterial.pointer, entities.address, primitives.address, - nullptr.cast(), count); + scenePtr, + renderableManagerPtr, + ffiMaterial.pointer, + entities.address, + primitives.address, + nullptr.cast(), + count, + ); for (var i = 0; i < count; i++) { final entity = entities[i]; final primitiveIndex = primitives[i]; @@ -874,7 +887,11 @@ class FFIFilamentApp extends FilamentApp { } @override - Future reloadMaterialFromBytes(Material oldMaterial, Uint8List materialBytes, {bool destroyOld = true}) async { + Future reloadMaterialFromBytes( + Material oldMaterial, + Uint8List materialBytes, { + bool destroyOld = true, + }) async { final oldFFIMaterial = oldMaterial as FFIMaterial; // Build the replacement first: if the bytes are invalid we want to fail @@ -947,11 +964,11 @@ class FFIFilamentApp extends FilamentApp { final name = match.group(1)!; if (active.contains(name)) { throw MaterialCompileException( - "#include \"$name\" from $referencing is circular (${active.join(" -> ")} -> $name)"); + "#include \"$name\" from $referencing is circular (${active.join(" -> ")} -> $name)", + ); } if (active.length >= 64) { - throw MaterialCompileException( - "#include nesting exceeded 64 levels at \"$name\" from $referencing"); + throw MaterialCompileException("#include nesting exceeded 64 levels at \"$name\" from $referencing"); } String? included; String? resolvedAs; @@ -965,8 +982,10 @@ class FFIFilamentApp extends FilamentApp { } } if (included == null) { - throw MaterialCompileException("Could not resolve #include \"$name\" " - "from $referencing (searched: ${includePaths.isEmpty ? "" : includePaths.join(", ")})"); + throw MaterialCompileException( + "Could not resolve #include \"$name\" " + "from $referencing (searched: ${includePaths.isEmpty ? "" : includePaths.join(", ")})", + ); } // Splice the file in place of the directive. Nested includes in the // included file are resolved the same way. @@ -990,9 +1009,10 @@ class FFIFilamentApp extends FilamentApp { }) async { if (FILAMENT_WASM) { throw UnsupportedError( - "compileMaterial is not supported on web: the WASM engine does not link the " - "material compiler. Pre-compile .mat sources to .filamat with matc and load " - "them with createMaterial instead."); + "compileMaterial is not supported on web: the WASM engine does not link the " + "material compiler. Pre-compile .mat sources to .filamat with matc and load " + "them with createMaterial instead.", + ); } final platformFlag = switch (platform) { @@ -1025,9 +1045,7 @@ class FFIFilamentApp extends FilamentApp { final sourceByteLength = utf8.encode(flattened).length; final sourcePtr = flattened.toNativeUtf8().cast(); - final definesPtr = defines.isEmpty - ? nullptr.cast() - : jsonEncode(defines).toNativeUtf8().cast(); + final definesPtr = defines.isEmpty ? nullptr.cast() : jsonEncode(defines).toNativeUtf8().cast(); final outError = allocate(1024); outError[0] = 0; // Written by the render-thread task before the completion callback fires. diff --git a/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart b/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart index 52b87b490..091cf80a8 100644 --- a/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart +++ b/thermion_dart/lib/src/filament/src/implementation/material_shadow_state.dart @@ -69,14 +69,11 @@ class MaterialInstanceShadowState { case 2: await target.setParameterFloat2(entry.key, value[0], value[1]); case 3: - await target.setParameterFloat3( - entry.key, value[0], value[1], value[2]); + await target.setParameterFloat3(entry.key, value[0], value[1], value[2]); case 4: - await target.setParameterFloat4( - entry.key, value[0], value[1], value[2], value[3]); + await target.setParameterFloat4(entry.key, value[0], value[1], value[2], value[3]); default: - throw StateError( - "Cannot replay float parameter ${entry.key} of ${value.length} components"); + throw StateError("Cannot replay float parameter ${entry.key} of ${value.length} components"); } } else if (value is List) { await target.setParameterFloat3Array(entry.key, value); @@ -89,11 +86,9 @@ class MaterialInstanceShadowState { } else if (value is Matrix4) { await target.setParameterMat4(entry.key, value); } else if (value is MaterialInstanceTextureBinding) { - await target.setParameterTexture( - entry.key, value.texture, value.sampler); + await target.setParameterTexture(entry.key, value.texture, value.sampler); } else { - throw StateError( - "Cannot replay parameter ${entry.key} of type ${value.runtimeType}"); + throw StateError("Cannot replay parameter ${entry.key} of type ${value.runtimeType}"); } } diff --git a/thermion_dart/lib/src/filament/src/interface/filament_app.dart b/thermion_dart/lib/src/filament/src/interface/filament_app.dart index 6d10e6a80..5633aa9d9 100644 --- a/thermion_dart/lib/src/filament/src/interface/filament_app.dart +++ b/thermion_dart/lib/src/filament/src/interface/filament_app.dart @@ -341,8 +341,6 @@ abstract class FilamentApp { /// example to re-run per-entity material setup after a reload). Future> findRenderablesUsingMaterial(Material material); - - // Returns all valid swapchains. Future> getSwapChains(); diff --git a/thermion_dart/test/material_compile_tests.dart b/thermion_dart/test/material_compile_tests.dart index 14516177c..7b816ba09 100644 --- a/thermion_dart/test/material_compile_tests.dart +++ b/thermion_dart/test/material_compile_tests.dart @@ -20,17 +20,14 @@ Set parameterNames(String source) { return {}; } final blockEnd = source.indexOf("]", blockStart); - final block = - source.substring(blockStart, blockEnd < 0 ? source.length : blockEnd); - return RegExp(r"name\s*:\s*([A-Za-z_][A-Za-z0-9_]*)") - .allMatches(block) - .map((m) => m.group(1)!) - .toSet(); + final block = source.substring(blockStart, blockEnd < 0 ? source.length : blockEnd); + return RegExp(r"name\s*:\s*([A-Za-z_][A-Za-z0-9_]*)").allMatches(block).map((m) => m.group(1)!).toSet(); } /// A minimal parameterised unlit material, with [fragmentExtra] spliced into /// the fragment shader so tests can vary the compiled output. -String colorMaterial(String fragmentExtra) => """ +String colorMaterial(String fragmentExtra) => + """ material { name : RuntimeCompileColor, requires : [ position ], @@ -63,8 +60,7 @@ void main() async { // (materials/ also holds unlit/depth_sampler/vdtm sources that the build // does not ship; vdtm.mat is outright broken — `z` declared inside an if // block and used outside — and would fail under matc too.) - final workspaceMaterials = - p.normalize(p.join(testHelper.assetsDir, "..", "..", "materials")); + final workspaceMaterials = p.normalize(p.join(testHelper.assetsDir, "..", "..", "materials")); final shippedNames = [ "bone_overlay", "capture_uv", @@ -83,10 +79,7 @@ void main() async { "solidcolor.mat", "viewspace.mat", ].map((name) => p.join(testHelper.assetsDir, name)).toList(); - final allShipped = [ - ...shippedNames.map((name) => p.join(workspaceMaterials, "$name.mat")), - ...exampleMaterials, - ]; + final allShipped = [...shippedNames.map((name) => p.join(workspaceMaterials, "$name.mat")), ...exampleMaterials]; test("golden: runtime compile accepts every shipped .mat", () async { await testHelper.withViewer((viewer) async { @@ -94,10 +87,7 @@ void main() async { for (final path in allShipped) { final source = File(path).readAsStringSync(); try { - final compiled = await app.compileMaterial( - source, - includePaths: [workspaceMaterials], - ); + final compiled = await app.compileMaterial(source, includePaths: [workspaceMaterials]); if (compiled.isEmpty) { failures.add("$path compiled to an empty package"); continue; @@ -123,11 +113,7 @@ void main() async { await testHelper.withViewer((viewer) async { await expectLater( app.compileMaterial("material { this is not a valid material }"), - throwsA(isA().having( - (e) => e.message, - "message", - isNotEmpty, - )), + throwsA(isA().having((e) => e.message, "message", isNotEmpty)), ); }); }); @@ -176,8 +162,7 @@ fragment { } """; final withoutDefine = await app.compileMaterial(source); - final withDefine = - await app.compileMaterial(source, defines: {"TINT_RED": "1"}); + final withDefine = await app.compileMaterial(source, defines: {"TINT_RED": "1"}); expect(withoutDefine, isNotEmpty); expect(withDefine, isNotEmpty); // Both variants load; they are different packages (different shaders). @@ -205,10 +190,10 @@ fragment { // Includes live inside shader blocks (matp's grammar only accepts // the material document at the top level — same restriction matc's // own include preprocessing has). - File(p.join(tmp.path, "outer.h")).writeAsStringSync( - "#include \"inner.h\"\nfloat tweak(float v) { return v * HALF; }\n"); - File(p.join(tmp.path, "inner.h")).writeAsStringSync( - "#define HALF (0.5)\n#define DOUBLE_IT(v) ((v) * 2.0)\n"); + File( + p.join(tmp.path, "outer.h"), + ).writeAsStringSync("#include \"inner.h\"\nfloat tweak(float v) { return v * HALF; }\n"); + File(p.join(tmp.path, "inner.h")).writeAsStringSync("#define HALF (0.5)\n#define DOUBLE_IT(v) ((v) * 2.0)\n"); final source = """ material { name : IncludeMaterial, @@ -225,8 +210,7 @@ fragment { } } """; - final compiled = - await app.compileMaterial(source, includePaths: [tmp.path]); + final compiled = await app.compileMaterial(source, includePaths: [tmp.path]); expect(compiled, isNotEmpty); final material = await app.createMaterial(compiled); await material.destroy(); @@ -236,10 +220,8 @@ fragment { test("missing includes throw with the offending name", () async { await testHelper.withViewer((viewer) async { await expectLater( - app.compileMaterial( - '#include "does_not_exist.h"\nmaterial { }', includePaths: [tmp.path]), - throwsA(isA().having( - (e) => e.message, "message", contains("does_not_exist.h"))), + app.compileMaterial('#include "does_not_exist.h"\nmaterial { }', includePaths: [tmp.path]), + throwsA(isA().having((e) => e.message, "message", contains("does_not_exist.h"))), ); }); }); @@ -248,10 +230,8 @@ fragment { await testHelper.withViewer((viewer) async { File(p.join(tmp.path, "loop.h")).writeAsStringSync('#include "loop.h"\n'); await expectLater( - app.compileMaterial('#include "loop.h"\nmaterial { }', - includePaths: [tmp.path]), - throwsA(isA().having( - (e) => e.message, "message", contains("circular"))), + app.compileMaterial('#include "loop.h"\nmaterial { }', includePaths: [tmp.path]), + throwsA(isA().having((e) => e.message, "message", contains("circular"))), ); }); }); @@ -262,8 +242,7 @@ fragment { const width = 512; const height = 512; - final material = - await app.createMaterial(await app.compileMaterial(colorMaterial(""))); + final material = await app.createMaterial(await app.compileMaterial(colorMaterial(""))); final instance = await material.createInstance(); await instance.setParameterFloat4("color", 0.0, 0.0, 1.0, 1.0); final cube = await viewer.createGeometry( @@ -273,8 +252,7 @@ fragment { Future> center() async { final pixels = (await testHelper.capture(viewer.view, "compile_e2e"))[viewer.view]!; - return pixelAt( - pixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); + return pixelAt(pixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); } final before = await center(); @@ -282,8 +260,7 @@ fragment { expect(before[0], lessThan(0.1)); // Recompile with the fragment forcing red, then hot-swap the package. - final recompiled = await app.compileMaterial( - colorMaterial("material.baseColor = float4(1.0, 0.0, 0.0, 1.0);")); + final recompiled = await app.compileMaterial(colorMaterial("material.baseColor = float4(1.0, 0.0, 0.0, 1.0);")); final reloaded = await app.reloadMaterialFromBytes(material, recompiled); final after = await center(); diff --git a/thermion_dart/test/material_reload_tests.dart b/thermion_dart/test/material_reload_tests.dart index 96e3deda8..6daa657a2 100644 --- a/thermion_dart/test/material_reload_tests.dart +++ b/thermion_dart/test/material_reload_tests.dart @@ -31,8 +31,11 @@ void main() async { expect(uses.length, 1, reason: "exactly one primitive uses the material"); expect(uses.single.entity, cube.entity); expect(uses.single.primitiveIndex, 0); - expect(uses.single.materialInstance, same(instance), - reason: "looked-up instances must reuse the wrapper that recorded their state"); + expect( + uses.single.materialInstance, + same(instance), + reason: "looked-up instances must reuse the wrapper that recorded their state", + ); await viewer.destroyAsset(cube); }, bg: kWhite); @@ -50,8 +53,7 @@ void main() async { const width = 512; const height = 512; - final beforePixels = - (await testHelper.capture(viewer.view, "reload_before"))[viewer.view]!; + final beforePixels = (await testHelper.capture(viewer.view, "reload_before"))[viewer.view]!; final beforeCenter = pixelAt(beforePixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); expect(beforeCenter[2], greaterThan(0.4), reason: "cube renders blue before reload"); expect(beforeCenter[0], lessThan(0.1)); @@ -74,8 +76,7 @@ void main() async { expect(newInstance.shadow.parameters["color"], equals([0.0, 0.0, 1.0, 1.0])); // Rendering is unchanged by the swap. - final afterPixels = - (await testHelper.capture(viewer.view, "reload_after"))[viewer.view]!; + final afterPixels = (await testHelper.capture(viewer.view, "reload_after"))[viewer.view]!; final afterCenter = pixelAt(afterPixels.buffer.asFloat32List(), width, height, width ~/ 2, height ~/ 2); expect(afterCenter[2], greaterThan(0.4), reason: "cube still renders blue after reload"); expect(afterCenter[0], lessThan(0.1)); @@ -132,10 +133,16 @@ void main() async { materialInstances: [instance], ); - final reloaded = - await FilamentApp.instance!.reloadMaterialFromBytes(material, solidColorBytes, destroyOld: false); - expect(await (material as FFIMaterial).hasParameter("color"), isTrue, - reason: "old material must still be alive when destroyOld is false"); + final reloaded = await FilamentApp.instance!.reloadMaterialFromBytes( + material, + solidColorBytes, + destroyOld: false, + ); + expect( + await (material as FFIMaterial).hasParameter("color"), + isTrue, + reason: "old material must still be alive when destroyOld is false", + ); // Caller owns both materials and every instance now. Order matters: // instances must not be destroyed while still attached to a renderable