@nayan-ui/engine 0.0.0-stage → 1.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NayanEngine.podspec +28 -0
- package/README.md +308 -2
- package/lib/module/assets/AssetBytesCache.js +76 -0
- package/lib/module/assets/AssetCache.js +19 -0
- package/lib/module/assets/AssetLoader.js +52 -0
- package/lib/module/assets/CacheGeneration.js +7 -0
- package/lib/module/assets/IndexedDbCache.web.js +149 -0
- package/lib/module/assets/ProceduralCache.js +249 -0
- package/lib/module/assets/font.js +139 -0
- package/lib/module/assets/loft.js +142 -0
- package/lib/module/assets/model.js +96 -0
- package/lib/module/assets/modelling.js +254 -0
- package/lib/module/assets/shape.js +926 -0
- package/lib/module/assets/source.js +58 -0
- package/lib/module/assets/source.web.js +22 -0
- package/lib/module/assets/storage.js +4 -0
- package/lib/module/assets/storage.shared.js +38 -0
- package/lib/module/assets/storage.web.js +38 -0
- package/lib/module/assets/surface.js +47 -0
- package/lib/module/assets/texture.js +69 -0
- package/lib/module/drawing/DrawingCanvas.js +38 -0
- package/lib/module/drawing/DrawingCanvas.web.js +206 -0
- package/lib/module/drawing/DrawingDocument.js +256 -0
- package/lib/module/drawing/types.js +4 -0
- package/lib/module/globals.d.ts +12 -0
- package/lib/module/index.js +39 -0
- package/lib/module/input/Joystick.js +84 -0
- package/lib/module/input/Joystick.web.js +93 -0
- package/lib/module/input/keyboard.js +250 -0
- package/lib/module/media/audio-worklet.js +34 -0
- package/lib/module/media/audio.js +97 -0
- package/lib/module/media/haptics.js +82 -0
- package/lib/module/media/output.web.js +66 -0
- package/lib/module/native/BrowserEngine.js +568 -0
- package/lib/module/native/EngineBridge.js +4 -0
- package/lib/module/native/NativeNayanEngine.js +7 -0
- package/lib/module/native/NativeNayanEngine.web.js +62 -0
- package/lib/module/native/prepare.js +7 -0
- package/lib/module/native/prepare.web.js +17 -0
- package/lib/module/native/spec/NativeNayanEngine.js +17 -0
- package/lib/module/package.json +1 -0
- package/lib/module/render/GameView.js +317 -0
- package/lib/module/render/camera.js +34 -0
- package/lib/module/render/host.js +39 -0
- package/lib/module/render/host.web.js +104 -0
- package/lib/module/render/light.js +24 -0
- package/lib/module/render/meshes.js +159 -0
- package/lib/module/render/quality.js +119 -0
- package/lib/module/render/responder.js +4 -0
- package/lib/module/render/responder.web.js +97 -0
- package/lib/module/render/touch.js +185 -0
- package/lib/module/render/useWorld.js +72 -0
- package/lib/module/types.js +30 -0
- package/lib/module/world/Scoreboard.js +161 -0
- package/lib/module/world/TransformBatch.js +128 -0
- package/lib/module/world/World.js +704 -0
- package/lib/module/world/color.js +80 -0
- package/lib/module/world/desc.js +187 -0
- package/lib/module/world/effects.js +463 -0
- package/lib/module/world/quat.js +86 -0
- package/lib/module/world/types.js +4 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/assets/AssetBytesCache.d.ts +7 -0
- package/lib/typescript/src/assets/AssetCache.d.ts +9 -0
- package/lib/typescript/src/assets/AssetLoader.d.ts +11 -0
- package/lib/typescript/src/assets/CacheGeneration.d.ts +3 -0
- package/lib/typescript/src/assets/IndexedDbCache.web.d.ts +20 -0
- package/lib/typescript/src/assets/ProceduralCache.d.ts +45 -0
- package/lib/typescript/src/assets/font.d.ts +53 -0
- package/lib/typescript/src/assets/loft.d.ts +31 -0
- package/lib/typescript/src/assets/model.d.ts +58 -0
- package/lib/typescript/src/assets/modelling.d.ts +157 -0
- package/lib/typescript/src/assets/shape.d.ts +203 -0
- package/lib/typescript/src/assets/source.d.ts +10 -0
- package/lib/typescript/src/assets/source.web.d.ts +8 -0
- package/lib/typescript/src/assets/storage.d.ts +2 -0
- package/lib/typescript/src/assets/storage.shared.d.ts +7 -0
- package/lib/typescript/src/assets/storage.web.d.ts +7 -0
- package/lib/typescript/src/assets/surface.d.ts +17 -0
- package/lib/typescript/src/assets/texture.d.ts +30 -0
- package/lib/typescript/src/drawing/DrawingCanvas.d.ts +5 -0
- package/lib/typescript/src/drawing/DrawingCanvas.web.d.ts +4 -0
- package/lib/typescript/src/drawing/DrawingDocument.d.ts +210 -0
- package/lib/typescript/src/drawing/types.d.ts +12 -0
- package/lib/typescript/src/index.d.ts +45 -0
- package/lib/typescript/src/input/Joystick.d.ts +20 -0
- package/lib/typescript/src/input/Joystick.web.d.ts +13 -0
- package/lib/typescript/src/input/keyboard.d.ts +17 -0
- package/lib/typescript/src/media/audio.d.ts +46 -0
- package/lib/typescript/src/media/haptics.d.ts +22 -0
- package/lib/typescript/src/media/output.web.d.ts +4 -0
- package/lib/typescript/src/native/BrowserEngine.d.ts +8 -0
- package/lib/typescript/src/native/EngineBridge.d.ts +26 -0
- package/lib/typescript/src/native/NativeNayanEngine.d.ts +5 -0
- package/lib/typescript/src/native/NativeNayanEngine.web.d.ts +10 -0
- package/lib/typescript/src/native/prepare.d.ts +3 -0
- package/lib/typescript/src/native/prepare.web.d.ts +2 -0
- package/lib/typescript/src/native/spec/NativeNayanEngine.d.ts +211 -0
- package/lib/typescript/src/render/GameView.d.ts +107 -0
- package/lib/typescript/src/render/camera.d.ts +6 -0
- package/lib/typescript/src/render/host.d.ts +29 -0
- package/lib/typescript/src/render/host.web.d.ts +16 -0
- package/lib/typescript/src/render/light.d.ts +12 -0
- package/lib/typescript/src/render/meshes.d.ts +45 -0
- package/lib/typescript/src/render/quality.d.ts +48 -0
- package/lib/typescript/src/render/responder.d.ts +2 -0
- package/lib/typescript/src/render/responder.web.d.ts +40 -0
- package/lib/typescript/src/render/touch.d.ts +26 -0
- package/lib/typescript/src/render/useWorld.d.ts +20 -0
- package/lib/typescript/src/types.d.ts +81 -0
- package/lib/typescript/src/world/Scoreboard.d.ts +75 -0
- package/lib/typescript/src/world/TransformBatch.d.ts +39 -0
- package/lib/typescript/src/world/World.d.ts +207 -0
- package/lib/typescript/src/world/color.d.ts +18 -0
- package/lib/typescript/src/world/desc.d.ts +17 -0
- package/lib/typescript/src/world/effects.d.ts +157 -0
- package/lib/typescript/src/world/quat.d.ts +31 -0
- package/lib/typescript/src/world/types.d.ts +238 -0
- package/lib/web/audio-worklet.js +29 -0
- package/lib/web/engine_core_bg.wasm +0 -0
- package/lib/web/index.js +8240 -0
- package/lib/web/types/src/assets/AssetBytesCache.d.ts +6 -0
- package/lib/web/types/src/assets/AssetCache.d.ts +8 -0
- package/lib/web/types/src/assets/AssetLoader.d.ts +10 -0
- package/lib/web/types/src/assets/CacheGeneration.d.ts +2 -0
- package/lib/web/types/src/assets/IndexedDbCache.d.ts +19 -0
- package/lib/web/types/src/assets/ProceduralCache.d.ts +44 -0
- package/lib/web/types/src/assets/font.d.ts +52 -0
- package/lib/web/types/src/assets/loft.d.ts +30 -0
- package/lib/web/types/src/assets/model.d.ts +57 -0
- package/lib/web/types/src/assets/modelling.d.ts +156 -0
- package/lib/web/types/src/assets/shape.d.ts +202 -0
- package/lib/web/types/src/assets/source.d.ts +7 -0
- package/lib/web/types/src/assets/storage.d.ts +6 -0
- package/lib/web/types/src/assets/storage.shared.d.ts +6 -0
- package/lib/web/types/src/assets/surface.d.ts +16 -0
- package/lib/web/types/src/assets/texture.d.ts +29 -0
- package/lib/web/types/src/drawing/DrawingCanvas.d.ts +3 -0
- package/lib/web/types/src/drawing/DrawingDocument.d.ts +209 -0
- package/lib/web/types/src/drawing/types.d.ts +11 -0
- package/lib/web/types/src/index.d.ts +44 -0
- package/lib/web/types/src/input/Joystick.d.ts +12 -0
- package/lib/web/types/src/input/keyboard.d.ts +16 -0
- package/lib/web/types/src/media/audio.d.ts +45 -0
- package/lib/web/types/src/media/haptics.d.ts +21 -0
- package/lib/web/types/src/media/output.d.ts +3 -0
- package/lib/web/types/src/native/BrowserEngine.d.ts +7 -0
- package/lib/web/types/src/native/EngineBridge.d.ts +25 -0
- package/lib/web/types/src/native/NativeNayanEngine.d.ts +9 -0
- package/lib/web/types/src/native/prepare.d.ts +1 -0
- package/lib/web/types/src/native/spec/NativeNayanEngine.d.ts +210 -0
- package/lib/web/types/src/render/GameView.d.ts +106 -0
- package/lib/web/types/src/render/camera.d.ts +5 -0
- package/lib/web/types/src/render/host.d.ts +15 -0
- package/lib/web/types/src/render/light.d.ts +11 -0
- package/lib/web/types/src/render/meshes.d.ts +44 -0
- package/lib/web/types/src/render/quality.d.ts +47 -0
- package/lib/web/types/src/render/responder.d.ts +39 -0
- package/lib/web/types/src/render/touch.d.ts +25 -0
- package/lib/web/types/src/render/useWorld.d.ts +19 -0
- package/lib/web/types/src/types.d.ts +80 -0
- package/lib/web/types/src/world/Scoreboard.d.ts +74 -0
- package/lib/web/types/src/world/TransformBatch.d.ts +38 -0
- package/lib/web/types/src/world/World.d.ts +206 -0
- package/lib/web/types/src/world/color.d.ts +17 -0
- package/lib/web/types/src/world/desc.d.ts +16 -0
- package/lib/web/types/src/world/effects.d.ts +156 -0
- package/lib/web/types/src/world/quat.d.ts +30 -0
- package/lib/web/types/src/world/types.d.ts +237 -0
- package/native/android/CMakeLists.txt +34 -0
- package/native/android/NayanEngineSpec.h +15 -0
- package/native/android/build.gradle +26 -0
- package/native/android/codegen/CMakeLists.txt +3 -0
- package/native/android/proguard-rules.pro +2 -0
- package/native/android/src/main/java/com/nayanui/engine/EngineSurfaceView.java +295 -0
- package/native/android/src/main/java/com/nayanui/engine/EngineSurfaceViewManager.java +45 -0
- package/native/android/src/main/java/com/nayanui/engine/NayanEnginePackage.java +24 -0
- package/native/core/build/EngineCore.xcframework/Info.plist +43 -0
- package/native/core/build/EngineCore.xcframework/ios-arm64/libengine_core.a +0 -0
- package/native/core/build/EngineCore.xcframework/ios-arm64-simulator/libengine_core.a +0 -0
- package/native/core/build/android/arm64-v8a/libengine_core.a +0 -0
- package/native/core/build/android/armeabi-v7a/libengine_core.a +0 -0
- package/native/core/build/android/x86/libengine_core.a +0 -0
- package/native/core/build/android/x86_64/libengine_core.a +0 -0
- package/native/core/include/drawing-licenses.txt +58 -0
- package/native/core/include/engine_core.h +331 -0
- package/native/cpp/NayanEngineModule.cpp +998 -0
- package/native/cpp/NayanEngineModule.h +174 -0
- package/native/cpp/generated/NayanEngineSpecJSI.cpp +2 -0
- package/native/cpp/generated/NayanEngineSpecJSI.h +1026 -0
- package/native/ios/NayanEngineProvider.h +5 -0
- package/native/ios/NayanEngineProvider.mm +21 -0
- package/native/ios/NayanEngineSurface.mm +252 -0
- package/native/scripts/check-package.mjs +39 -0
- package/package.json +162 -4
- package/react-native.config.js +18 -0
- package/src/native/spec/NativeNayanEngine.ts +265 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-wrapper-object-types -- Codegen requires Object for JSI buffers; EngineBridge supplies their precise TypeScript types. */
|
|
2
|
+
import { type TurboModule, TurboModuleRegistry } from 'react-native';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Bridge to the Rust core. Use the `World`, `audio` and `haptics` APIs instead of calling this.
|
|
6
|
+
*
|
|
7
|
+
* Worlds are identified by the number `createWorld` returns; entity ids are opaque numbers.
|
|
8
|
+
* Entities are created and changed with one call each: `spawnDesc` / `setDesc` take a
|
|
9
|
+
* Float64Array's ArrayBuffer encoding every option (layout in native/core/include/engine_core.h).
|
|
10
|
+
* Capacity is fixed at creation, so the buffers returned by `get*` alias Rust memory (zero-copy)
|
|
11
|
+
* and stay valid until `destroyWorld`.
|
|
12
|
+
*/
|
|
13
|
+
export interface Spec extends TurboModule {
|
|
14
|
+
createWorld(capacity: number): number;
|
|
15
|
+
destroyWorld(world: number): void;
|
|
16
|
+
|
|
17
|
+
/** Returns the entity id, or -1 if the world is full or the description is rejected. */
|
|
18
|
+
spawnDesc(world: number, desc: Object): number;
|
|
19
|
+
/** Returns false if the entity is gone or a field was rejected (the rest still apply). */
|
|
20
|
+
setDesc(world: number, entity: number, desc: Object): boolean;
|
|
21
|
+
/** Packed draw transforms, 16 doubles per record: id, flags, position, rotation, scale, color. */
|
|
22
|
+
setTransforms(world: number, data: Object, count: number): number;
|
|
23
|
+
/** Returns false for stale or unknown ids. */
|
|
24
|
+
despawn(world: number, entity: number): boolean;
|
|
25
|
+
/** Instant change in momentum (dynamic bodies only). */
|
|
26
|
+
impulse(world: number, entity: number, x: number, y: number, z: number): void;
|
|
27
|
+
|
|
28
|
+
setGravity(world: number, x: number, y: number, z: number): void;
|
|
29
|
+
setBounds(world: number, minX: number, minZ: number, maxX: number, maxZ: number): void;
|
|
30
|
+
/** Entity used to pan/attenuate impact sounds (-1 clears). */
|
|
31
|
+
setListener(world: number, entity: number): void;
|
|
32
|
+
|
|
33
|
+
/** Returns the hit entity or -1; on a hit the scratch buffer holds distance, normal, point. */
|
|
34
|
+
raycast(world: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, maxDistance: number, mask: number): number;
|
|
35
|
+
/** Nearest pickable entity along a ray (as last drawn), or -1; on a hit the scratch buffer holds distance, point. */
|
|
36
|
+
pick(world: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number): number;
|
|
37
|
+
/** Nearest pickable entity under a screen point (in view points), or -1; scratch holds distance, point. */
|
|
38
|
+
pickScreen(world: number, x: number, y: number): number;
|
|
39
|
+
/** Stores the view-projection matrix (16 column-major floats) and view size in points. */
|
|
40
|
+
setView(world: number, viewProj: Object, width: number, height: number): void;
|
|
41
|
+
/** World ray [origin xyz, direction xyz] through a view point. Writes into scratch[0..6]. Returns true on success. */
|
|
42
|
+
screenRay(world: number, x: number, y: number): boolean;
|
|
43
|
+
/** Where a view point lands on a plane. Writes into scratch[0..3]. Returns true on success. */
|
|
44
|
+
screenToWorld(world: number, x: number, y: number, ppx: number, ppy: number, ppz: number, pnx: number, pny: number, pnz: number): boolean;
|
|
45
|
+
/** Where a world position appears on screen (points from top-left). Writes into scratch[0..2]. */
|
|
46
|
+
toScreen(world: number, x: number, y: number, z: number): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Write position / velocity to the scratch buffer (`getScratch`). Return false if not alive.
|
|
49
|
+
* `rendered`: where it was last drawn, in world space (otherwise simulated, relative to its parent).
|
|
50
|
+
*/
|
|
51
|
+
readPosition(world: number, entity: number, rendered: boolean): boolean;
|
|
52
|
+
readVelocity(world: number, entity: number): boolean;
|
|
53
|
+
|
|
54
|
+
/** Starts an animation (Float64Array buffer, layout in engine_core.h). Returns its id, or 0 if nothing started. */
|
|
55
|
+
animate(world: number, animation: Object): number;
|
|
56
|
+
stopAnimation(world: number, entity: number): boolean;
|
|
57
|
+
/** Spawns a particle burst (Float64Array buffer). Returns how many particles were spawned. */
|
|
58
|
+
burst(world: number, burst: Object): number;
|
|
59
|
+
|
|
60
|
+
update(world: number, dt: number): void;
|
|
61
|
+
/** Starts a timer firing `seconds` of update time from now; its id is reported in `getDone`. Returns the id, or 0. */
|
|
62
|
+
after(world: number, seconds: number): number;
|
|
63
|
+
/** Drops every pending timer. Returns how many were dropped. */
|
|
64
|
+
cancelTimers(world: number): number;
|
|
65
|
+
/** Score / lives / clock operation (layout in engine_core.h). Returns the score after it. */
|
|
66
|
+
scoreboard(world: number, op: number, a: number, b: number): number;
|
|
67
|
+
/** 8 doubles: score, lives, seconds, shown seconds, changed flags, running, points per second, best. Aliases native memory. */
|
|
68
|
+
getScoreboard(world: number): Object;
|
|
69
|
+
count(world: number): number;
|
|
70
|
+
|
|
71
|
+
/** capacity * 16 floats, column-major, grouped by mesh. */
|
|
72
|
+
getMatrices(world: number): Object;
|
|
73
|
+
/** capacity * 4 floats (rgba), same order as the matrices. */
|
|
74
|
+
getColors(world: number): Object;
|
|
75
|
+
/** capacity * 4 floats: texture region (u0 v0 u1 v1), same order as the matrices. */
|
|
76
|
+
getRegions(world: number): Object;
|
|
77
|
+
/** MAX_MESHES * 4 u32: [first, count] per mesh id for opaque instances, then for transparent ones. */
|
|
78
|
+
getRanges(world: number): Object;
|
|
79
|
+
/** Ids of animations that ended since the last update began (room for capacity * 5 + 64). */
|
|
80
|
+
getDone(world: number): Object;
|
|
81
|
+
doneLength(world: number): number;
|
|
82
|
+
/** Collision events from the last update, 4 u32 each: [a, b, flags, speed as f32 bits]. */
|
|
83
|
+
getEvents(world: number): Object;
|
|
84
|
+
eventLength(world: number): number;
|
|
85
|
+
/** 16 floats. */
|
|
86
|
+
getScratch(world: number): Object;
|
|
87
|
+
|
|
88
|
+
// Meshes, models, textures, fonts (global)
|
|
89
|
+
/** Parses a glTF/GLB ArrayBuffer. Returns its mesh id, or -1 (see `loadError`). */
|
|
90
|
+
/** Joint count and animation clips as JSON, loaded once with the model. */
|
|
91
|
+
modelRig(mesh: number): string;
|
|
92
|
+
playClip(world: number, entity: number, clip: string, loop: boolean, speed: number, fade: number, time: number): boolean;
|
|
93
|
+
stopClip(world: number, entity: number, reset: boolean): boolean;
|
|
94
|
+
skinPoints(world: number, entity: number, vertices: Object, output: Object, after: number): boolean;
|
|
95
|
+
/** Rust owns cache hashing, persistence, validation and mesh preparation. */
|
|
96
|
+
cacheRead(key: string): Object;
|
|
97
|
+
cacheWrite(key: string, data: Object): boolean;
|
|
98
|
+
cacheRemove(key: string): boolean;
|
|
99
|
+
cacheClear(): boolean;
|
|
100
|
+
shapePrepare(vertices: Object, indices: Object, options: string): number;
|
|
101
|
+
solidPrepare(recipe: string, options: string): number;
|
|
102
|
+
modelLoad(data: Object, center: boolean, fit: number): number;
|
|
103
|
+
/** `modelLoad` on a background native thread (the data is copied first): resolves to the mesh id, or -1. */
|
|
104
|
+
modelLoadAsync(data: Object, center: boolean, fit: number): Promise<number>;
|
|
105
|
+
/** 11 floats per vertex (position, normal, color, uv); aliases native memory. */
|
|
106
|
+
modelVertices(mesh: number): Object;
|
|
107
|
+
/** u32 triangle indices; aliases native memory. */
|
|
108
|
+
modelIndices(mesh: number): Object;
|
|
109
|
+
/** Full bounding-box size [x, y, z]. */
|
|
110
|
+
modelSize(mesh: number): Array<number>;
|
|
111
|
+
/** The model's base color texture id, or -1. */
|
|
112
|
+
modelTexture(mesh: number): number;
|
|
113
|
+
/** A new mesh id with `base`'s geometry (to give it another texture), or -1. */
|
|
114
|
+
meshAlias(base: number): number;
|
|
115
|
+
/** Registers geometry (copied): 11 floats per vertex, u32 triangle indices. Returns the mesh id, or -1. */
|
|
116
|
+
meshCreate(vertices: Object, indices: Object): number;
|
|
117
|
+
/**
|
|
118
|
+
* Hands a core model's own geometry (from `meshCreate`, `modelLoad`, a font) to the renderer, in
|
|
119
|
+
* Rust: nothing is copied through JS. `texture` -1 for none. False if the mesh is unknown.
|
|
120
|
+
*/
|
|
121
|
+
renderModel(mesh: number, texture: number, shine: number): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Fills 2D contours ([x, y] f32 pairs, `counts[k]` points per contour) by the non-zero or even-odd
|
|
124
|
+
* rule and extrudes them `depth` deep. Returns an ArrayBuffer of 11 floats per vertex (unindexed).
|
|
125
|
+
*/
|
|
126
|
+
pathExtrude(points: Object, counts: Array<number>, depth: number, evenOdd: boolean): Object;
|
|
127
|
+
/** Recomputes normals in place (vertex / u32 index ArrayBuffers), averaged across vertices at the same place. */
|
|
128
|
+
geometrySmoothNormals(vertices: Object, indices: Object): void;
|
|
129
|
+
/** Tessellates a solid recipe; returns independent vertex/index ArrayBuffers, with no mesh registration. */
|
|
130
|
+
geometrySolid(recipe: string): Object;
|
|
131
|
+
/** Cleans, simplifies and optimizes a mesh, preserving normal/color/UV attributes. */
|
|
132
|
+
geometryOptimize(vertices: Object, indices: Object, ratio: number, error: number, lockBorders: boolean): Object;
|
|
133
|
+
/** Flips triangles in place whose winding disagrees with their vertex normals. */
|
|
134
|
+
geometryFaceOutward(vertices: Object, indices: Object): void;
|
|
135
|
+
/**
|
|
136
|
+
* Bakes a part into merged buffers: `placement` = position xyz, rotation quat xyzw, scale xyz, color
|
|
137
|
+
* rgb. Writes at `vertexOffset` floats / `indexOffset` indices, indices offset by `first`.
|
|
138
|
+
*/
|
|
139
|
+
geometryPlace(
|
|
140
|
+
vertices: Object,
|
|
141
|
+
indices: Object,
|
|
142
|
+
placement: Array<number>,
|
|
143
|
+
first: number,
|
|
144
|
+
outVertices: Object,
|
|
145
|
+
vertexOffset: number,
|
|
146
|
+
outIndices: Object,
|
|
147
|
+
indexOffset: number
|
|
148
|
+
): void;
|
|
149
|
+
/** Decodes a PNG/JPEG ArrayBuffer. Returns the texture id, or -1. */
|
|
150
|
+
textureLoad(data: Object): number;
|
|
151
|
+
/** `textureLoad` on a background native thread: resolves to the texture id, or -1. */
|
|
152
|
+
textureLoadAsync(data: Object): Promise<number>;
|
|
153
|
+
/** RGBA8 pixels, top row first; aliases native memory. */
|
|
154
|
+
texturePixels(texture: number): Object;
|
|
155
|
+
/** [width, height]. */
|
|
156
|
+
textureSize(texture: number): Array<number>;
|
|
157
|
+
/** Builds extruded glyph meshes for `chars`. Returns the font id, or -1. */
|
|
158
|
+
fontLoad(data: Object, depth: number, chars: string, weight: number): number;
|
|
159
|
+
/** `fontLoad` (outlines and glyph meshes) on a background native thread: resolves to the font id, or -1. */
|
|
160
|
+
fontLoadAsync(data: Object, depth: number, chars: string, weight: number): Promise<number>;
|
|
161
|
+
/** [codepoint, mesh (-1 = nothing drawn), advance, ...] followed by the cap height. */
|
|
162
|
+
fontGlyphs(font: number): Array<number>;
|
|
163
|
+
/** Why the last model / texture / font / alias load failed ("" after a success). */
|
|
164
|
+
loadError(): string;
|
|
165
|
+
|
|
166
|
+
// Rendering (global; surfaces come from the native EngineSurface view)
|
|
167
|
+
/** Generates and registers all built-in shape meshes (cube, sphere, etc.) in the native renderer. */
|
|
168
|
+
generateBuiltinMeshes(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Builds the GPU device and shader pipelines on a background thread, ahead of the first surface.
|
|
171
|
+
* Returns at once; repeat calls do nothing.
|
|
172
|
+
*/
|
|
173
|
+
renderWarmUp(): void;
|
|
174
|
+
/** Returns a copy of a registered mesh's vertices (11 floats per vertex), or empty if not found. */
|
|
175
|
+
renderMeshVertices(mesh: number): Object;
|
|
176
|
+
/** Returns a copy of a registered mesh's indices (u32 triangle list), or empty if not found. */
|
|
177
|
+
renderMeshIndices(mesh: number): Object;
|
|
178
|
+
/** Geometry (copied) drawn for a mesh id: 11 floats per vertex, u32 indices. `texture` -1 = none. */
|
|
179
|
+
renderMesh(mesh: number, vertices: Object, indices: Object, texture: number, shine: number): void;
|
|
180
|
+
/**
|
|
181
|
+
* Draws a frame into surface `surface`. `frame`: Float64Array buffer (layout in engine_core.h);
|
|
182
|
+
* instance buffers hold the same number of instances; `viewProj` (16 floats) gets the camera used.
|
|
183
|
+
* Returns 1 (drawn), 0 (surface not ready yet / frame skipped) or -1 (see `renderError`).
|
|
184
|
+
*/
|
|
185
|
+
renderFrame(
|
|
186
|
+
surface: number,
|
|
187
|
+
frame: Object,
|
|
188
|
+
matrices: Object,
|
|
189
|
+
colors: Object,
|
|
190
|
+
regions: Object,
|
|
191
|
+
ranges: Object,
|
|
192
|
+
count: number,
|
|
193
|
+
viewProj: Object,
|
|
194
|
+
world: number
|
|
195
|
+
): number;
|
|
196
|
+
/**
|
|
197
|
+
* `renderFrame`'s arguments, but the frame is copied and drawn on the native render thread: returns
|
|
198
|
+
* at once, with `viewProj` written. 1 once the surface has presented a frame, 0 before, -1 if the
|
|
199
|
+
* last frame failed (see `renderError`).
|
|
200
|
+
*/
|
|
201
|
+
publishFrame(
|
|
202
|
+
surface: number,
|
|
203
|
+
frame: Object,
|
|
204
|
+
matrices: Object,
|
|
205
|
+
colors: Object,
|
|
206
|
+
regions: Object,
|
|
207
|
+
ranges: Object,
|
|
208
|
+
count: number,
|
|
209
|
+
viewProj: Object,
|
|
210
|
+
world: number
|
|
211
|
+
): number;
|
|
212
|
+
/** [frames presented, smoothed render milliseconds] for a surface drawn by the render thread. */
|
|
213
|
+
renderStats(surface: number): Array<number>;
|
|
214
|
+
/** True where the platform drives frames from its display clock (`startFrames`); else use requestAnimationFrame. */
|
|
215
|
+
hasFrameClock(): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Calls `onFrame` on the JS thread once per display refresh while the surface is attached and
|
|
218
|
+
* visible, with the frame time in milliseconds. A frame JS hasn't started yet isn't queued again.
|
|
219
|
+
*/
|
|
220
|
+
startFrames(surface: number, onFrame: (timeMs: number) => void): void;
|
|
221
|
+
stopFrames(surface: number): void;
|
|
222
|
+
/**
|
|
223
|
+
* The screen-space overlay drawn over surface `surface` from its next frame on, copied from a world's
|
|
224
|
+
* buffers. In points: x right and y up from the view's top-left (on screen y <= 0), z toward the
|
|
225
|
+
* viewer within -100..100; `width` x `height` is the view in points. Unlit, always in front of the
|
|
226
|
+
* scene. count 0 removes it.
|
|
227
|
+
*/
|
|
228
|
+
renderOverlay(
|
|
229
|
+
surface: number,
|
|
230
|
+
matrices: Object,
|
|
231
|
+
colors: Object,
|
|
232
|
+
regions: Object,
|
|
233
|
+
ranges: Object,
|
|
234
|
+
count: number,
|
|
235
|
+
width: number,
|
|
236
|
+
height: number
|
|
237
|
+
): void;
|
|
238
|
+
renderError(): string;
|
|
239
|
+
/** "vulkan", "gl" or "metal" ("" before the first surface). */
|
|
240
|
+
renderBackend(): string;
|
|
241
|
+
|
|
242
|
+
/** Native 2D drawing documents; commands return owned JSON results. */
|
|
243
|
+
drawingCreate(width: number, height: number, ratio: number): number;
|
|
244
|
+
drawingCommand(document: number, command: string): string;
|
|
245
|
+
drawingDestroy(document: number): void;
|
|
246
|
+
|
|
247
|
+
// Audio (global)
|
|
248
|
+
/** Decodes a WAV ArrayBuffer. Returns a sound id, or -1. */
|
|
249
|
+
audioLoad(data: Object): number;
|
|
250
|
+
/** `audioLoad` on a background native thread: resolves to the sound id, or -1. */
|
|
251
|
+
audioLoadAsync(data: Object): Promise<number>;
|
|
252
|
+
/** Returns a voice id (> 0), or 0 if nothing played. */
|
|
253
|
+
audioPlay(sound: number, volume: number, pan: number, pitch: number, loop: boolean): number;
|
|
254
|
+
audioStop(voice: number): void;
|
|
255
|
+
audioSetVolume(volume: number): void;
|
|
256
|
+
audioSetMuted(muted: boolean): void;
|
|
257
|
+
audioIsRunning(): boolean;
|
|
258
|
+
|
|
259
|
+
// Haptics (global)
|
|
260
|
+
hapticsSupported(): boolean;
|
|
261
|
+
/** Taps as flat [time, intensity, sharpness, ...] triples. */
|
|
262
|
+
hapticsPlay(taps: Array<number>, throttle: boolean): void;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export default TurboModuleRegistry.get<Spec>('NativeNayanEngine');
|