@carbonenginejs/runtime-utils 0.1.0

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.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +23 -0
  3. package/README.md +56 -0
  4. package/THIRD-PARTY-NOTICES.md +38 -0
  5. package/docs/README.md +81 -0
  6. package/docs/architecture.md +101 -0
  7. package/docs/concepts/foundation-consolidation.md +86 -0
  8. package/docs/const-kb.md +92 -0
  9. package/docs/core-types/DECORATOR-TODOS.md +25 -0
  10. package/docs/core-types/README.md +203 -0
  11. package/docs/reference/api.md +70 -0
  12. package/docs/reference/classes/README.md +115 -0
  13. package/package.json +132 -0
  14. package/src/arrays.js +5 -0
  15. package/src/audio/audioFormats.js +34 -0
  16. package/src/audio/index.js +1 -0
  17. package/src/box3.js +1385 -0
  18. package/src/bytes.js +56 -0
  19. package/src/compression.js +56 -0
  20. package/src/constants/index.js +6 -0
  21. package/src/constants.js +15 -0
  22. package/src/curve.js +419 -0
  23. package/src/d3d/dxgiFormats.js +46 -0
  24. package/src/d3d/index.js +2 -0
  25. package/src/d3d/primitiveTopology.js +11 -0
  26. package/src/document/CjsCarbonDocument.js +212 -0
  27. package/src/document/CjsClassRegistry.js +373 -0
  28. package/src/document/CjsDocumentDehydrator.js +142 -0
  29. package/src/document/CjsDocumentHydrator.js +156 -0
  30. package/src/document/CjsStructRegistry.js +348 -0
  31. package/src/document/hydrationAdapter.js +129 -0
  32. package/src/document/index.js +6 -0
  33. package/src/geometry/box.js +137 -0
  34. package/src/geometry/cylinder.js +244 -0
  35. package/src/geometry/helpers/LICENSE +15 -0
  36. package/src/geometry/helpers/earcut.js +766 -0
  37. package/src/geometry/helpers/misc.js +103 -0
  38. package/src/geometry/index.js +8 -0
  39. package/src/geometry/json.js +165 -0
  40. package/src/geometry/lathe.js +172 -0
  41. package/src/geometry/octahedron.js +0 -0
  42. package/src/geometry/plane.js +81 -0
  43. package/src/geometry/shape.js +95 -0
  44. package/src/geometry/sphere.js +123 -0
  45. package/src/geometry/torus.js +96 -0
  46. package/src/graphics/colorSpaces.js +22 -0
  47. package/src/graphics/index.js +4 -0
  48. package/src/graphics/pixelFormats.js +158 -0
  49. package/src/graphics/textureDimensions.js +22 -0
  50. package/src/graphics/trinityEnums.js +87 -0
  51. package/src/index.js +58 -0
  52. package/src/is.js +524 -0
  53. package/src/json.js +23 -0
  54. package/src/lifecycle/CjsLifecycleState.js +77 -0
  55. package/src/lifecycle/index.js +1 -0
  56. package/src/lne3.js +497 -0
  57. package/src/lookup.js +48 -0
  58. package/src/mat3.js +131 -0
  59. package/src/mat4.js +699 -0
  60. package/src/math/index.js +25 -0
  61. package/src/math/scalar.js +63 -0
  62. package/src/media/index.js +1 -0
  63. package/src/media/mediaTypes.js +50 -0
  64. package/src/mesh.js +394 -0
  65. package/src/model/CjsEventEmitter.js +333 -0
  66. package/src/model/CjsModel.js +1544 -0
  67. package/src/model/CjsModelState.js +72 -0
  68. package/src/model/index.js +4 -0
  69. package/src/model/sourceRecordUtils.js +54 -0
  70. package/src/noise.js +310 -0
  71. package/src/num.js +827 -0
  72. package/src/path.js +21 -0
  73. package/src/pln.js +762 -0
  74. package/src/pool.js +160 -0
  75. package/src/quat.js +144 -0
  76. package/src/ray3.js +1085 -0
  77. package/src/renderContext/formats.js +145 -0
  78. package/src/renderContext/index.js +5 -0
  79. package/src/renderContext/presentation.js +125 -0
  80. package/src/renderContext/resources.js +27 -0
  81. package/src/renderContext/upscaling.js +22 -0
  82. package/src/renderContext/window.js +20 -0
  83. package/src/runtime/CjsRuntimeState.js +50 -0
  84. package/src/schema/CjsSchema.js +1009 -0
  85. package/src/schema/index.js +17 -0
  86. package/src/shader/index.js +1 -0
  87. package/src/shader/shaderStages.js +37 -0
  88. package/src/sph3.js +754 -0
  89. package/src/tangent.js +288 -0
  90. package/src/text.js +40 -0
  91. package/src/tri3.js +650 -0
  92. package/src/types/carbonTypes.js +635 -0
  93. package/src/types/index.js +2 -0
  94. package/src/utils.js +58 -0
  95. package/src/validation.js +46 -0
  96. package/src/vec2.js +229 -0
  97. package/src/vec3.js +1172 -0
  98. package/src/vec4.js +347 -0
  99. package/src/vertex.js +108 -0
  100. package/src/webgpu/index.js +1 -0
  101. package/src/webgpu/textureFormats.js +121 -0
package/src/pool.js ADDED
@@ -0,0 +1,160 @@
1
+ import {
2
+ GL_BYTE,
3
+ GL_UNSIGNED_BYTE,
4
+ GL_SHORT,
5
+ GL_UNSIGNED_SHORT,
6
+ GL_INT,
7
+ GL_UNSIGNED_INT,
8
+ GL_FLOAT
9
+ } from "./constants.js";
10
+
11
+
12
+ function loop(n, f)
13
+ {
14
+ const result = Array(n);
15
+ for (let i = 0; i < n; ++i) result[i] = f(i);
16
+ return result;
17
+ }
18
+
19
+ function nextPow16(v)
20
+ {
21
+ for (let i = 16; i <= (1 << 28); i *= 16)
22
+ {
23
+ if (v <= i) return i;
24
+ }
25
+ return 0;
26
+ }
27
+
28
+ function log2(v)
29
+ {
30
+ let r, shift;
31
+ r = (v > 0xFFFF) << 4;
32
+ v >>>= r;
33
+ shift = (v > 0xFF) << 3;
34
+ v >>>= shift;
35
+ r |= shift;
36
+ shift = (v > 0xF) << 2;
37
+ v >>>= shift;
38
+ r |= shift;
39
+ shift = (v > 0x3) << 1;
40
+ v >>>= shift;
41
+ r |= shift;
42
+ return r | (v >> 1);
43
+ }
44
+
45
+ export function createPool()
46
+ {
47
+
48
+ const bufferPool = loop(8, function ()
49
+ {
50
+ return [];
51
+ });
52
+
53
+ function free(buf)
54
+ {
55
+ bufferPool[log2(buf.byteLength) >> 2].push(buf);
56
+ }
57
+
58
+ function alloc(n)
59
+ {
60
+ let sz = nextPow16(n),
61
+ bin = bufferPool[log2(sz) >> 2];
62
+
63
+ if (bin.length > 0) return bin.pop();
64
+
65
+ return new ArrayBuffer(sz);
66
+ }
67
+
68
+ /**
69
+ * Shortcut to allocating a float 32 array
70
+ * @param {Number} length
71
+ * @returns {Float32Array}
72
+ */
73
+ function allocF32(length)
74
+ {
75
+ const result = new Float32Array(alloc(4 * length), 0, length);
76
+ return result.length !== length ? result.subarray(0, length) : result;
77
+ }
78
+
79
+ /**
80
+ * Allocated a typed array of a given size
81
+ * @param {Number|Function}type
82
+ * @param {Number} n
83
+ * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|null}
84
+ */
85
+ function allocType(type, n)
86
+ {
87
+ let result = null;
88
+ switch (type)
89
+ {
90
+ case GL_BYTE:
91
+ case Int8Array:
92
+ result = new Int8Array(alloc(n), 0, n);
93
+ break;
94
+
95
+ case GL_UNSIGNED_BYTE:
96
+ case Uint8Array:
97
+ result = new Uint8Array(alloc(n), 0, n);
98
+ break;
99
+
100
+ case GL_SHORT:
101
+ case Int16Array:
102
+ result = new Int16Array(alloc(2 * n), 0, n);
103
+ break;
104
+
105
+ case GL_UNSIGNED_SHORT:
106
+ case Uint16Array:
107
+ result = new Uint16Array(alloc(2 * n), 0, n);
108
+ break;
109
+
110
+ case GL_INT:
111
+ case Int32Array:
112
+ result = new Int32Array(alloc(4 * n), 0, n);
113
+ break;
114
+
115
+ case GL_UNSIGNED_INT:
116
+ case Uint32Array:
117
+ result = new Uint32Array(alloc(4 * n), 0, n);
118
+ break;
119
+
120
+ case GL_FLOAT:
121
+ case Float32Array:
122
+ result = new Float32Array(alloc(4 * n), 0, n);
123
+ break;
124
+
125
+ default:
126
+ return null;
127
+ }
128
+
129
+ if (result.length !== n)
130
+ {
131
+ return result.subarray(0, n);
132
+ }
133
+
134
+ return result;
135
+ }
136
+
137
+ function freeType(array)
138
+ {
139
+ free(array.buffer);
140
+ }
141
+
142
+ return {
143
+ allocF32,
144
+ allocType,
145
+ unalloc: freeType,
146
+ freeType,
147
+ free
148
+ };
149
+
150
+ }
151
+
152
+ export const pool = createPool();
153
+
154
+ export const {
155
+ allocF32,
156
+ allocType,
157
+ unalloc,
158
+ freeType,
159
+ free
160
+ } = pool;
package/src/quat.js ADDED
@@ -0,0 +1,144 @@
1
+ import * as glQuat from "gl-matrix/esm/quat.js";
2
+ import { EPSILON } from "./num.js";
3
+ import { pool } from "./pool.js";
4
+
5
+ const quat = { ...glQuat };
6
+
7
+ export { quat };
8
+
9
+ /**
10
+ * Allocates a pooled vec4
11
+ * @returns {Float32Array|quat}
12
+ */
13
+ quat.alloc = function()
14
+ {
15
+ return pool.allocF32(4);
16
+ };
17
+
18
+ /**
19
+ * Unallocates a pooled vec4
20
+ * @param {Float32Array|quat} a
21
+ */
22
+ quat.unalloc = function(a)
23
+ {
24
+ pool.freeType(a);
25
+ };
26
+
27
+ /**
28
+ * Creates a quat from unit vectors
29
+ *
30
+ * @param {quat} out
31
+ * @param {vec3} from
32
+ * @param {vec3} to
33
+ * @returns {quat}
34
+ */
35
+ quat.fromUnitVectors = function(out, from, to)
36
+ {
37
+ const
38
+ fromX = from[0],
39
+ fromY = from[1],
40
+ fromZ = from[2],
41
+ toX = to[0],
42
+ toY = to[1],
43
+ toZ = to[2];
44
+
45
+ let r = fromX * toX + fromY * toY + fromZ * toZ + 1;
46
+ if (r < EPSILON)
47
+ {
48
+ r = 0;
49
+ if (Math.abs(fromX) > Math.abs(fromZ))
50
+ {
51
+ out[0] = -fromY;
52
+ out[1] = fromX;
53
+ out[2] = 0;
54
+ out[3] = r;
55
+ }
56
+ else
57
+ {
58
+ out[0] = 0;
59
+ out[1] = -fromZ;
60
+ out[2] = fromY;
61
+ out[3] = r;
62
+ }
63
+ }
64
+ else
65
+ {
66
+ out[0] = fromY * toZ - fromZ * toY;
67
+ out[1] = fromZ * toX - fromX * toZ;
68
+ out[2] = fromX * toY - fromY * toX;
69
+ out[3] = r;
70
+ }
71
+ return quat.normalize(out, out);
72
+ };
73
+
74
+ /**
75
+ * Creates a Carbon yaw/pitch/roll quaternion.
76
+ *
77
+ * @param {quat} out
78
+ * @param {number} yaw
79
+ * @param {number} pitch
80
+ * @param {number} roll
81
+ * @returns {quat}
82
+ */
83
+ quat.fromYawPitchRoll = function(out, yaw, pitch, roll)
84
+ {
85
+ const
86
+ sinYaw = Math.sin(yaw / 2),
87
+ cosYaw = Math.cos(yaw / 2),
88
+ sinPitch = Math.sin(pitch / 2),
89
+ cosPitch = Math.cos(pitch / 2),
90
+ sinRoll = Math.sin(roll / 2),
91
+ cosRoll = Math.cos(roll / 2);
92
+
93
+ out[0] = sinYaw * cosPitch * sinRoll + cosYaw * sinPitch * cosRoll;
94
+ out[1] = sinYaw * cosPitch * cosRoll - cosYaw * sinPitch * sinRoll;
95
+ out[2] = cosYaw * cosPitch * sinRoll - sinYaw * sinPitch * cosRoll;
96
+ out[3] = cosYaw * cosPitch * cosRoll + sinYaw * sinPitch * sinRoll;
97
+ return out;
98
+ };
99
+
100
+ export const {
101
+ add,
102
+ calculateW,
103
+ clone,
104
+ conjugate,
105
+ copy,
106
+ create,
107
+ dot,
108
+ equals,
109
+ exactEquals,
110
+ exp,
111
+ fromEuler,
112
+ fromMat3,
113
+ fromValues,
114
+ getAngle,
115
+ getAxisAngle,
116
+ identity,
117
+ invert,
118
+ len,
119
+ length,
120
+ lerp,
121
+ ln,
122
+ mul,
123
+ multiply,
124
+ normalize,
125
+ pow,
126
+ random,
127
+ rotateX,
128
+ rotateY,
129
+ rotateZ,
130
+ rotationTo,
131
+ scale,
132
+ set,
133
+ setAxes,
134
+ setAxisAngle,
135
+ slerp,
136
+ sqlerp,
137
+ sqrLen,
138
+ squaredLength,
139
+ str,
140
+ alloc,
141
+ unalloc,
142
+ fromUnitVectors,
143
+ fromYawPitchRoll
144
+ } = quat;