@headless-three/renderer 0.1.7 → 0.1.8

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 (58) hide show
  1. package/README.md +227 -52
  2. package/dist/attributes.d.ts +7 -5
  3. package/dist/attributes.d.ts.map +1 -1
  4. package/dist/attributes.js +112 -36
  5. package/dist/attributes.js.map +1 -1
  6. package/dist/camera.d.ts +1 -0
  7. package/dist/camera.d.ts.map +1 -1
  8. package/dist/camera.js +52 -13
  9. package/dist/camera.js.map +1 -1
  10. package/dist/clipping.d.ts +6 -0
  11. package/dist/clipping.d.ts.map +1 -0
  12. package/dist/clipping.js +84 -0
  13. package/dist/clipping.js.map +1 -0
  14. package/dist/color.d.ts +8 -3
  15. package/dist/color.d.ts.map +1 -1
  16. package/dist/color.js +136 -11
  17. package/dist/color.js.map +1 -1
  18. package/dist/index.d.ts +770 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +6208 -46
  21. package/dist/index.js.map +1 -1
  22. package/dist/layers.d.ts +3 -0
  23. package/dist/layers.d.ts.map +1 -0
  24. package/dist/layers.js +33 -0
  25. package/dist/layers.js.map +1 -0
  26. package/dist/lights.d.ts +5 -4
  27. package/dist/lights.d.ts.map +1 -1
  28. package/dist/lights.js +473 -77
  29. package/dist/lights.js.map +1 -1
  30. package/dist/loaders.d.ts +92 -0
  31. package/dist/loaders.d.ts.map +1 -0
  32. package/dist/loaders.js +858 -0
  33. package/dist/loaders.js.map +1 -0
  34. package/dist/materials.d.ts +38 -6
  35. package/dist/materials.d.ts.map +1 -1
  36. package/dist/materials.js +4236 -162
  37. package/dist/materials.js.map +1 -1
  38. package/dist/math.js +2 -2
  39. package/dist/math.js.map +1 -1
  40. package/dist/morphs.d.ts.map +1 -1
  41. package/dist/morphs.js +50 -15
  42. package/dist/morphs.js.map +1 -1
  43. package/dist/objects.d.ts +4 -0
  44. package/dist/objects.d.ts.map +1 -0
  45. package/dist/objects.js +25 -0
  46. package/dist/objects.js.map +1 -0
  47. package/dist/scene.d.ts +251 -2
  48. package/dist/scene.d.ts.map +1 -1
  49. package/dist/scene.js +3679 -105
  50. package/dist/scene.js.map +1 -1
  51. package/dist/skinning.d.ts.map +1 -1
  52. package/dist/skinning.js +37 -18
  53. package/dist/skinning.js.map +1 -1
  54. package/dist/types.d.ts +1261 -12
  55. package/dist/types.d.ts.map +1 -1
  56. package/native.d.ts +761 -3
  57. package/native.js +54 -52
  58. package/package.json +20 -9
@@ -1,63 +1,89 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAttribute = getAttribute;
4
+ exports.geometryAttributes = geometryAttributes;
4
5
  exports.readVec3Attribute = readVec3Attribute;
5
6
  exports.readVec2Attribute = readVec2Attribute;
6
7
  exports.readColorAttribute = readColorAttribute;
7
8
  exports.readIndexAttribute = readIndexAttribute;
9
+ exports.attributeCount = attributeCount;
8
10
  exports.attributeComponent = attributeComponent;
9
11
  const math_1 = require("./math");
12
+ const COMPONENT_LABELS = ['x', 'y', 'z', 'w'];
10
13
  function getAttribute(geometry, name) {
14
+ const attributes = geometryAttributes(geometry);
11
15
  if (typeof geometry.getAttribute === 'function') {
12
16
  return geometry.getAttribute(name);
13
17
  }
14
- return geometry.attributes?.[name];
18
+ return attributes[name];
15
19
  }
16
- function readVec3Attribute(attribute) {
17
- if (attribute.count == null) {
18
- throw new TypeError('THREE.BufferGeometry position attribute must have count');
20
+ function geometryAttributes(geometry) {
21
+ const attributes = geometry.attributes;
22
+ if (attributes == null)
23
+ return {};
24
+ if (typeof attributes !== 'object' || Array.isArray(attributes)) {
25
+ throw new TypeError('geometry.attributes must be an object.');
19
26
  }
20
- const values = new Array(attribute.count * 3);
21
- for (let i = 0; i < attribute.count; i += 1) {
22
- values[i * 3] = attributeComponent(attribute, i, 0);
23
- values[i * 3 + 1] = attributeComponent(attribute, i, 1);
24
- values[i * 3 + 2] = attributeComponent(attribute, i, 2);
27
+ return attributes;
28
+ }
29
+ function readVec3Attribute(attribute, label = 'THREE.BufferAttribute') {
30
+ const count = attributeCount(attribute, label);
31
+ const values = new Array(count * 3);
32
+ for (let i = 0; i < count; i += 1) {
33
+ values[i * 3] = attributeComponent(attribute, i, 0, label);
34
+ values[i * 3 + 1] = attributeComponent(attribute, i, 1, label);
35
+ values[i * 3 + 2] = attributeComponent(attribute, i, 2, label);
25
36
  }
26
37
  return values;
27
38
  }
28
- function readVec2Attribute(attribute) {
29
- if (attribute.count == null) {
30
- throw new TypeError('THREE.BufferGeometry UV attribute must have count');
31
- }
32
- const values = new Array(attribute.count * 2);
33
- for (let i = 0; i < attribute.count; i += 1) {
34
- values[i * 2] = attributeComponent(attribute, i, 0);
35
- values[i * 2 + 1] = attributeComponent(attribute, i, 1);
39
+ function readVec2Attribute(attribute, label = 'THREE.BufferAttribute') {
40
+ const count = attributeCount(attribute, label);
41
+ const values = new Array(count * 2);
42
+ for (let i = 0; i < count; i += 1) {
43
+ values[i * 2] = attributeComponent(attribute, i, 0, label);
44
+ values[i * 2 + 1] = attributeComponent(attribute, i, 1, label);
36
45
  }
37
46
  return values;
38
47
  }
39
- function readColorAttribute(attribute, materialColor) {
40
- const itemSize = attribute.itemSize ?? 3;
41
- const values = new Array(attribute.count * 4);
42
- for (let i = 0; i < attribute.count; i += 1) {
43
- values[i * 4] = (0, math_1.clamp01)(attributeComponent(attribute, i, 0) * materialColor[0]);
44
- values[i * 4 + 1] = (0, math_1.clamp01)(attributeComponent(attribute, i, 1) * materialColor[1]);
45
- values[i * 4 + 2] = (0, math_1.clamp01)(attributeComponent(attribute, i, 2) * materialColor[2]);
46
- values[i * 4 + 3] = (0, math_1.clamp01)((itemSize >= 4 ? attributeComponent(attribute, i, 3) : 1) * materialColor[3]);
48
+ function readColorAttribute(attribute, _materialColor, label = 'THREE.BufferAttribute') {
49
+ const count = attributeCount(attribute, label);
50
+ const itemSize = attributeItemSize(attribute, label) ?? 3;
51
+ const values = new Array(count * 4);
52
+ for (let i = 0; i < count; i += 1) {
53
+ values[i * 4] = (0, math_1.clamp01)(attributeComponent(attribute, i, 0, label));
54
+ values[i * 4 + 1] = (0, math_1.clamp01)(attributeComponent(attribute, i, 1, label));
55
+ values[i * 4 + 2] = (0, math_1.clamp01)(attributeComponent(attribute, i, 2, label));
56
+ values[i * 4 + 3] = (0, math_1.clamp01)(itemSize >= 4 ? attributeComponent(attribute, i, 3, label) : 1);
47
57
  }
48
58
  return values;
49
59
  }
50
- function readIndexAttribute(attribute) {
51
- const values = new Array(attribute.count);
52
- for (let i = 0; i < attribute.count; i += 1) {
53
- values[i] = attributeComponent(attribute, i, 0);
60
+ function readIndexAttribute(attribute, label = 'THREE.BufferAttribute', vertexCount) {
61
+ const count = attributeCount(attribute, label);
62
+ const values = new Array(count);
63
+ for (let i = 0; i < count; i += 1) {
64
+ const value = attributeComponent(attribute, i, 0, label);
65
+ if (!Number.isInteger(value) || value < 0) {
66
+ throw new TypeError(`${label}[${i}].x must be a non-negative integer.`);
67
+ }
68
+ if (vertexCount !== undefined && value >= vertexCount) {
69
+ throw new RangeError(`${label}[${i}].x must reference a vertex below geometry.attributes.position.count (${vertexCount}).`);
70
+ }
71
+ values[i] = value;
54
72
  }
55
73
  return values;
56
74
  }
57
- function attributeComponent(attribute, index, component) {
58
- if (component >= (attribute.itemSize ?? 1))
75
+ function attributeCount(attribute, label) {
76
+ if (Number.isInteger(attribute.count) && attribute.count >= 0)
77
+ return attribute.count;
78
+ throw new TypeError(`${label}.count must be a non-negative integer.`);
79
+ }
80
+ function attributeComponent(attribute, index, component, label = 'THREE.BufferAttribute') {
81
+ rejectPackedAttribute(attribute, label);
82
+ const itemSize = attributeItemSize(attribute, label) ?? 1;
83
+ if (component >= itemSize)
59
84
  return 0;
60
85
  let value;
86
+ let readFromRawArray = false;
61
87
  if (component === 0 && typeof attribute.getX === 'function')
62
88
  value = attribute.getX(index);
63
89
  else if (component === 1 && typeof attribute.getY === 'function')
@@ -67,15 +93,57 @@ function attributeComponent(attribute, index, component) {
67
93
  else if (component === 3 && typeof attribute.getW === 'function')
68
94
  value = attribute.getW(index);
69
95
  else {
70
- const array = attribute.array ?? attribute.data?.array;
71
- const stride = attribute.data?.stride ?? attribute.itemSize ?? 1;
72
- const offset = attribute.offset ?? 0;
96
+ const data = attributeData(attribute, label);
97
+ const array = attribute.array ?? data?.array;
98
+ const stride = attributeStride(attribute, label) ?? itemSize;
99
+ const offset = attributeOffset(attribute, label);
73
100
  value = array?.[index * stride + offset + component];
101
+ readFromRawArray = true;
74
102
  }
75
103
  if (!Number.isFinite(value)) {
76
- throw new TypeError('THREE.BufferAttribute contains a non-finite value');
104
+ throw new TypeError(`${label}[${index}].${COMPONENT_LABELS[component] ?? component} must be a finite number.`);
77
105
  }
78
- return attribute.normalized ? normalizeAttributeValue(value, attribute.array ?? attribute.data?.array) : value;
106
+ return attributeNormalized(attribute, label) && readFromRawArray
107
+ ? normalizeAttributeValue(value, attribute.array ?? attributeData(attribute, label)?.array)
108
+ : value;
109
+ }
110
+ function attributeItemSize(attribute, label) {
111
+ if (attribute.itemSize == null)
112
+ return undefined;
113
+ if (Number.isInteger(attribute.itemSize) && attribute.itemSize > 0)
114
+ return attribute.itemSize;
115
+ throw new TypeError(`${label}.itemSize must be a positive integer.`);
116
+ }
117
+ function attributeStride(attribute, label) {
118
+ const stride = attributeData(attribute, label)?.stride;
119
+ if (stride == null)
120
+ return undefined;
121
+ if (Number.isInteger(stride) && stride > 0)
122
+ return stride;
123
+ throw new TypeError(`${label}.data.stride must be a positive integer.`);
124
+ }
125
+ function attributeData(attribute, label) {
126
+ const data = attribute.data;
127
+ if (data == null)
128
+ return undefined;
129
+ if (typeof data !== 'object' || Array.isArray(data)) {
130
+ throw new TypeError(`${label}.data must be an object.`);
131
+ }
132
+ return data;
133
+ }
134
+ function attributeOffset(attribute, label) {
135
+ if (attribute.offset == null)
136
+ return 0;
137
+ if (Number.isInteger(attribute.offset) && attribute.offset >= 0)
138
+ return attribute.offset;
139
+ throw new TypeError(`${label}.offset must be a non-negative integer.`);
140
+ }
141
+ function attributeNormalized(attribute, label) {
142
+ if (attribute.normalized == null)
143
+ return false;
144
+ if (typeof attribute.normalized === 'boolean')
145
+ return attribute.normalized;
146
+ throw new TypeError(`${label}.normalized must be a boolean.`);
79
147
  }
80
148
  function normalizeAttributeValue(value, array) {
81
149
  if (array instanceof Uint8Array || array instanceof Uint8ClampedArray)
@@ -88,4 +156,12 @@ function normalizeAttributeValue(value, array) {
88
156
  return Math.max(value / 32767, -1);
89
157
  return value;
90
158
  }
159
+ function rejectPackedAttribute(attribute, label) {
160
+ if (attribute.isPacked !== true)
161
+ return;
162
+ const method = typeof attribute.packingMethod === 'string' && attribute.packingMethod.length > 0
163
+ ? ` (${attribute.packingMethod})`
164
+ : '';
165
+ throw new Error(`${label} uses packed GeometryCompressionUtils data${method}, which is not supported by @headless-three/renderer. Decode packed position, normal, or UV attributes before rendering, or provide an explicit custom WGSL material path that performs the required attribute decode.`);
166
+ }
91
167
  //# sourceMappingURL=attributes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../api/attributes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../api/attributes.ts"],"names":[],"mappings":"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"}
package/dist/camera.d.ts CHANGED
@@ -4,5 +4,6 @@ export declare function resolveSize(camera: ThreeCameraLike, options: RenderOpti
4
4
  height: number;
5
5
  };
6
6
  export declare function cameraViewProjection(camera: ThreeCameraLike): Mat4;
7
+ export declare function cameraViewMatrix(camera: ThreeCameraLike): Mat4;
7
8
  export declare function cameraWorldPosition(camera: ThreeCameraLike): number[];
8
9
  //# sourceMappingURL=camera.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAMnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0B9G;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAerE"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAMnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmC9G;AA6BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAIlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAerE"}
package/dist/camera.js CHANGED
@@ -2,45 +2,84 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveSize = resolveSize;
4
4
  exports.cameraViewProjection = cameraViewProjection;
5
+ exports.cameraViewMatrix = cameraViewMatrix;
5
6
  exports.cameraWorldPosition = cameraWorldPosition;
6
7
  const math_1 = require("./math");
7
8
  const DEFAULT_WIDTH = 512;
8
9
  const DEFAULT_HEIGHT = 512;
9
10
  function resolveSize(camera, options) {
10
- let width = (0, math_1.numberOrUndefined)(options.width);
11
- let height = (0, math_1.numberOrUndefined)(options.height);
11
+ let width = optionalDimension(options.width, 'options.width') ?? optionalDimension(options.target?.width, 'target.width');
12
+ let height = optionalDimension(options.height, 'options.height') ?? optionalDimension(options.target?.height, 'target.height');
13
+ let widthLabel = options.width != null ? 'options.width' : options.target?.width != null ? 'target.width' : 'output width';
14
+ let heightLabel = options.height != null ? 'options.height' : options.target?.height != null ? 'target.height' : 'output height';
12
15
  if (width == null && height == null) {
13
- width = (0, math_1.numberOrUndefined)(camera.userData?.width) ?? DEFAULT_WIDTH;
14
- height = (0, math_1.numberOrUndefined)(camera.userData?.height);
16
+ const userData = cameraUserData(camera);
17
+ width = optionalDimension(userData?.width, 'camera.userData.width') ?? DEFAULT_WIDTH;
18
+ height = optionalDimension(userData?.height, 'camera.userData.height');
19
+ widthLabel = userData?.width != null ? 'camera.userData.width' : 'output width';
20
+ heightLabel = userData?.height != null ? 'camera.userData.height' : 'output height';
15
21
  }
16
- if (height == null && width != null && (0, math_1.isFinitePositive)(camera.aspect)) {
17
- height = Math.round(width / camera.aspect);
22
+ if (height == null && width != null && camera.aspect != null) {
23
+ const aspect = requiredPositiveFiniteNumber(camera.aspect, 'camera.aspect');
24
+ height = Math.round(width / aspect);
25
+ heightLabel = 'camera.aspect-derived height';
18
26
  }
19
- if (width == null && height != null && (0, math_1.isFinitePositive)(camera.aspect)) {
20
- width = Math.round(height * camera.aspect);
27
+ if (width == null && height != null && camera.aspect != null) {
28
+ const aspect = requiredPositiveFiniteNumber(camera.aspect, 'camera.aspect');
29
+ width = Math.round(height * aspect);
30
+ widthLabel = 'camera.aspect-derived width';
21
31
  }
22
32
  width ?? (width = DEFAULT_WIDTH);
23
33
  height ?? (height = DEFAULT_HEIGHT);
24
34
  if (!Number.isInteger(width) || width <= 0) {
25
- throw new TypeError('render options width must be a positive integer');
35
+ throw new TypeError(`${widthLabel} must be a positive integer.`);
26
36
  }
27
37
  if (!Number.isInteger(height) || height <= 0) {
28
- throw new TypeError('render options height must be a positive integer');
38
+ throw new TypeError(`${heightLabel} must be a positive integer.`);
29
39
  }
30
40
  return { width, height };
31
41
  }
42
+ function cameraUserData(camera) {
43
+ const userData = camera.userData;
44
+ if (userData == null)
45
+ return undefined;
46
+ if (typeof userData !== 'object' || Array.isArray(userData)) {
47
+ throw new TypeError('camera.userData must be an object.');
48
+ }
49
+ return userData;
50
+ }
51
+ function optionalDimension(value, label) {
52
+ if (value == null)
53
+ return undefined;
54
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
55
+ throw new TypeError(`${label} must be a finite number.`);
56
+ }
57
+ return value;
58
+ }
59
+ function requiredPositiveFiniteNumber(value, label) {
60
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
61
+ throw new TypeError(`${label} must be a finite number.`);
62
+ }
63
+ if (value <= 0) {
64
+ throw new TypeError(`${label} must be positive.`);
65
+ }
66
+ return value;
67
+ }
32
68
  function cameraViewProjection(camera) {
33
69
  const projection = (0, math_1.matrixElements)(camera.projectionMatrix, 'camera.projectionMatrix');
34
70
  const view = (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
35
71
  return (0, math_1.multiplyMatrices)(math_1.OPENGL_TO_WGPU_CLIP, (0, math_1.multiplyMatrices)(projection, view));
36
72
  }
73
+ function cameraViewMatrix(camera) {
74
+ return (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
75
+ }
37
76
  function cameraWorldPosition(camera) {
38
- if (camera.matrixWorld?.elements) {
39
- const e = camera.matrixWorld.elements;
77
+ if (camera.matrixWorld != null) {
78
+ const e = (0, math_1.matrixElements)(camera.matrixWorld, 'camera.matrixWorld');
40
79
  return [e[12], e[13], e[14]];
41
80
  }
42
81
  if (camera.matrixWorldInverse?.elements) {
43
- const e = camera.matrixWorldInverse.elements;
82
+ const e = (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
44
83
  const tx = e[12], ty = e[13], tz = e[14];
45
84
  return [
46
85
  -(e[0] * tx + e[1] * ty + e[2] * tz),
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ThreePlaneLike } from './types';
2
+ export declare const MAX_CLIPPING_PLANES = 8;
3
+ export type NativeClippingPlane = [number, number, number, number];
4
+ export declare function extractClippingPlanes(input: readonly ThreePlaneLike[] | null | undefined, label?: string, maxPlanes?: number): NativeClippingPlane[];
5
+ export declare function flattenClippingPlanes(planes: readonly NativeClippingPlane[]): number[] | undefined;
6
+ //# sourceMappingURL=clipping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipping.d.ts","sourceRoot":"","sources":["../api/clipping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAElE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,EACnD,KAAK,SAAmB,EACxB,SAAS,SAAsB,GAC9B,mBAAmB,EAAE,CAmBvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAGlG"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_CLIPPING_PLANES = void 0;
4
+ exports.extractClippingPlanes = extractClippingPlanes;
5
+ exports.flattenClippingPlanes = flattenClippingPlanes;
6
+ exports.MAX_CLIPPING_PLANES = 8;
7
+ function extractClippingPlanes(input, label = 'clippingPlanes', maxPlanes = exports.MAX_CLIPPING_PLANES) {
8
+ if (input == null)
9
+ return [];
10
+ if (!Array.isArray(input)) {
11
+ throw new TypeError(`${label} must be an array of clipping planes.`);
12
+ }
13
+ if (input.length === 0)
14
+ return [];
15
+ const planes = [];
16
+ for (let i = 0; i < input.length; i += 1) {
17
+ const parsed = parseClippingPlane(input[i], `${label}[${i}]`);
18
+ if (!parsed)
19
+ continue;
20
+ if (planes.length >= maxPlanes) {
21
+ throw new Error(`${label} exceeds the remaining native clipping plane budget (${maxPlanes} of ${exports.MAX_CLIPPING_PLANES} remaining). @headless-three/renderer supports at most ${exports.MAX_CLIPPING_PLANES} active global, group, and material clipping planes; reduce the active planes or render separate passes.`);
22
+ }
23
+ planes.push(parsed);
24
+ }
25
+ return planes;
26
+ }
27
+ function flattenClippingPlanes(planes) {
28
+ if (planes.length === 0)
29
+ return undefined;
30
+ return planes.flatMap((plane) => plane);
31
+ }
32
+ function parseClippingPlane(plane, label) {
33
+ if (!plane)
34
+ return null;
35
+ if (isArrayLike(plane)) {
36
+ if (plane.length < 4) {
37
+ throw new TypeError(`${label} must contain four finite numbers.`);
38
+ }
39
+ return normalizedPlane([
40
+ requiredFiniteNumber(plane[0], `${label}[0]`),
41
+ requiredFiniteNumber(plane[1], `${label}[1]`),
42
+ requiredFiniteNumber(plane[2], `${label}[2]`),
43
+ requiredFiniteNumber(plane[3], `${label}[3]`),
44
+ ], label);
45
+ }
46
+ const normal = plane.normal;
47
+ const constant = plane.constant;
48
+ const finiteConstant = requiredFiniteNumber(constant, `${label}.constant`);
49
+ if (isArrayLike(normal)) {
50
+ if (normal.length < 3) {
51
+ throw new TypeError(`${label}.normal must contain three finite numbers.`);
52
+ }
53
+ return normalizedPlane([
54
+ requiredFiniteNumber(normal[0], `${label}.normal[0]`),
55
+ requiredFiniteNumber(normal[1], `${label}.normal[1]`),
56
+ requiredFiniteNumber(normal[2], `${label}.normal[2]`),
57
+ finiteConstant,
58
+ ], label);
59
+ }
60
+ const vector = normal;
61
+ return normalizedPlane([
62
+ requiredFiniteNumber(vector?.x, `${label}.normal.x`),
63
+ requiredFiniteNumber(vector?.y, `${label}.normal.y`),
64
+ requiredFiniteNumber(vector?.z, `${label}.normal.z`),
65
+ finiteConstant,
66
+ ], label);
67
+ }
68
+ function normalizedPlane(values, label) {
69
+ const [x, y, z, constant] = values;
70
+ const length = Math.hypot(x, y, z);
71
+ if (length <= 1e-8) {
72
+ throw new TypeError(`${label}.normal must have non-zero finite length.`);
73
+ }
74
+ return [x / length, y / length, z / length, constant / length];
75
+ }
76
+ function isArrayLike(value) {
77
+ return !!value && typeof value.length === 'number';
78
+ }
79
+ function requiredFiniteNumber(value, label) {
80
+ if (typeof value === 'number' && Number.isFinite(value))
81
+ return value;
82
+ throw new TypeError(`${label} must be a finite number.`);
83
+ }
84
+ //# sourceMappingURL=clipping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipping.js","sourceRoot":"","sources":["../api/clipping.ts"],"names":[],"mappings":"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"}
package/dist/color.d.ts CHANGED
@@ -1,5 +1,10 @@
1
- import type { Color4, ThreeSceneLike, RenderOptions } from './types';
1
+ import type { Color4, RenderOutputColorSpace, ThreeSceneRootLike, RenderOptions } from './types';
2
+ export declare const DEFAULT_BACKGROUND_COLOR: Color4;
2
3
  export declare function colorLikeToArray(value: unknown): Color4 | null;
3
- export declare function normalizeColorArray(values: number[]): Color4;
4
- export declare function resolveBackground(scene: ThreeSceneLike, options: RenderOptions): Color4;
4
+ export declare function strictColorLikeToArray(value: unknown, label: string): Color4 | null;
5
+ export declare function validatedColorLikeToArray(value: unknown, label: string): Color4 | null;
6
+ export declare function cssColorStringToArray(value: string, label: string): Color4;
7
+ export declare function cssColorStringToLinearArray(value: string, label: string): Color4;
8
+ export declare function normalizeColorArray(values: number[], label?: string): Color4;
9
+ export declare function resolveBackground(scene: ThreeSceneRootLike, options: RenderOptions, hasBackgroundTexture?: boolean, fallbackBackground?: Color4, outputColorSpace?: RenderOutputColorSpace | undefined): Color4;
5
10
  //# sourceMappingURL=color.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../api/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAU5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAOvF"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../api/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAkB,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAqBhH,eAAO,MAAM,wBAAwB,EAAE,MAA+B,CAAA;AAEtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAenF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhF;AAyBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,aAAa,EACtB,oBAAoB,UAAQ,EAC5B,kBAAkB,GAAE,MAAiC,EACrD,gBAAgB,GAAE,sBAAsB,GAAG,SAAoC,GAC9E,MAAM,CAYR"}