@zephyr3d/scene 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 (236) hide show
  1. package/dist/animation/animation.js +173 -0
  2. package/dist/animation/animation.js.map +1 -0
  3. package/dist/animation/animationset.js +95 -0
  4. package/dist/animation/animationset.js.map +1 -0
  5. package/dist/animation/animationtrack.js +38 -0
  6. package/dist/animation/animationtrack.js.map +1 -0
  7. package/dist/animation/eulerrotationtrack.js +33 -0
  8. package/dist/animation/eulerrotationtrack.js.map +1 -0
  9. package/dist/animation/rotationtrack.js +37 -0
  10. package/dist/animation/rotationtrack.js.map +1 -0
  11. package/dist/animation/scaletrack.js +36 -0
  12. package/dist/animation/scaletrack.js.map +1 -0
  13. package/dist/animation/skeleton.js +97 -0
  14. package/dist/animation/skeleton.js.map +1 -0
  15. package/dist/animation/translationtrack.js +36 -0
  16. package/dist/animation/translationtrack.js.map +1 -0
  17. package/dist/animation/usertrack.js +47 -0
  18. package/dist/animation/usertrack.js.map +1 -0
  19. package/dist/app.js +173 -0
  20. package/dist/app.js.map +1 -0
  21. package/dist/asset/assetmanager.js +476 -0
  22. package/dist/asset/assetmanager.js.map +1 -0
  23. package/dist/asset/builtin.js +373 -0
  24. package/dist/asset/builtin.js.map +1 -0
  25. package/dist/asset/loaders/dds/dds.js +472 -0
  26. package/dist/asset/loaders/dds/dds.js.map +1 -0
  27. package/dist/asset/loaders/dds/dds_loader.js +38 -0
  28. package/dist/asset/loaders/dds/dds_loader.js.map +1 -0
  29. package/dist/asset/loaders/gltf/gltf_loader.js +981 -0
  30. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -0
  31. package/dist/asset/loaders/gltf/helpers.js +314 -0
  32. package/dist/asset/loaders/gltf/helpers.js.map +1 -0
  33. package/dist/asset/loaders/hdr/hdr.js +175 -0
  34. package/dist/asset/loaders/hdr/hdr.js.map +1 -0
  35. package/dist/asset/loaders/image/tga_Loader.js +117 -0
  36. package/dist/asset/loaders/image/tga_Loader.js.map +1 -0
  37. package/dist/asset/loaders/image/webimage_loader.js +50 -0
  38. package/dist/asset/loaders/image/webimage_loader.js.map +1 -0
  39. package/dist/asset/loaders/loader.js +45 -0
  40. package/dist/asset/loaders/loader.js.map +1 -0
  41. package/dist/asset/model.js +264 -0
  42. package/dist/asset/model.js.map +1 -0
  43. package/dist/blitter/blitter.js +389 -0
  44. package/dist/blitter/blitter.js.map +1 -0
  45. package/dist/blitter/box.js +118 -0
  46. package/dist/blitter/box.js.map +1 -0
  47. package/dist/blitter/copy.js +22 -0
  48. package/dist/blitter/copy.js.map +1 -0
  49. package/dist/blitter/depthlimitedgaussion.js +166 -0
  50. package/dist/blitter/depthlimitedgaussion.js.map +1 -0
  51. package/dist/blitter/gaussianblur.js +229 -0
  52. package/dist/blitter/gaussianblur.js.map +1 -0
  53. package/dist/camera/base.js +90 -0
  54. package/dist/camera/base.js.map +1 -0
  55. package/dist/camera/camera.js +358 -0
  56. package/dist/camera/camera.js.map +1 -0
  57. package/dist/camera/fps.js +246 -0
  58. package/dist/camera/fps.js.map +1 -0
  59. package/dist/camera/orbit.js +157 -0
  60. package/dist/camera/orbit.js.map +1 -0
  61. package/dist/camera/orthocamera.js +126 -0
  62. package/dist/camera/orthocamera.js.map +1 -0
  63. package/dist/camera/perspectivecamera.js +133 -0
  64. package/dist/camera/perspectivecamera.js.map +1 -0
  65. package/dist/index.d.ts +8402 -0
  66. package/dist/index.js +87 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/input/inputmgr.js +242 -0
  69. package/dist/input/inputmgr.js.map +1 -0
  70. package/dist/material/blinn.js +75 -0
  71. package/dist/material/blinn.js.map +1 -0
  72. package/dist/material/grassmaterial.js +221 -0
  73. package/dist/material/grassmaterial.js.map +1 -0
  74. package/dist/material/lambert.js +52 -0
  75. package/dist/material/lambert.js.map +1 -0
  76. package/dist/material/lightmodel.js +2074 -0
  77. package/dist/material/lightmodel.js.map +1 -0
  78. package/dist/material/lit.js +578 -0
  79. package/dist/material/lit.js.map +1 -0
  80. package/dist/material/material.js +458 -0
  81. package/dist/material/material.js.map +1 -0
  82. package/dist/material/meshmaterial.js +311 -0
  83. package/dist/material/meshmaterial.js.map +1 -0
  84. package/dist/material/mixins/albedocolor.js +130 -0
  85. package/dist/material/mixins/albedocolor.js.map +1 -0
  86. package/dist/material/mixins/texture.js +110 -0
  87. package/dist/material/mixins/texture.js.map +1 -0
  88. package/dist/material/mixins/vertexcolor.js +45 -0
  89. package/dist/material/mixins/vertexcolor.js.map +1 -0
  90. package/dist/material/pbr.js +27 -0
  91. package/dist/material/pbr.js.map +1 -0
  92. package/dist/material/standard.js +282 -0
  93. package/dist/material/standard.js.map +1 -0
  94. package/dist/material/terrainlightmodel.js +259 -0
  95. package/dist/material/terrainlightmodel.js.map +1 -0
  96. package/dist/material/terrainmaterial.js +139 -0
  97. package/dist/material/terrainmaterial.js.map +1 -0
  98. package/dist/material/unlit.js +29 -0
  99. package/dist/material/unlit.js.map +1 -0
  100. package/dist/posteffect/bloom.js +398 -0
  101. package/dist/posteffect/bloom.js.map +1 -0
  102. package/dist/posteffect/compositor.js +264 -0
  103. package/dist/posteffect/compositor.js.map +1 -0
  104. package/dist/posteffect/fxaa.js +291 -0
  105. package/dist/posteffect/fxaa.js.map +1 -0
  106. package/dist/posteffect/grayscale.js +87 -0
  107. package/dist/posteffect/grayscale.js.map +1 -0
  108. package/dist/posteffect/posteffect.js +165 -0
  109. package/dist/posteffect/posteffect.js.map +1 -0
  110. package/dist/posteffect/sao.js +327 -0
  111. package/dist/posteffect/sao.js.map +1 -0
  112. package/dist/posteffect/tonemap.js +112 -0
  113. package/dist/posteffect/tonemap.js.map +1 -0
  114. package/dist/posteffect/water.js +535 -0
  115. package/dist/posteffect/water.js.map +1 -0
  116. package/dist/render/clipmap.js +462 -0
  117. package/dist/render/clipmap.js.map +1 -0
  118. package/dist/render/cluster_light.js +329 -0
  119. package/dist/render/cluster_light.js.map +1 -0
  120. package/dist/render/cull_visitor.js +124 -0
  121. package/dist/render/cull_visitor.js.map +1 -0
  122. package/dist/render/depth_pass.js +47 -0
  123. package/dist/render/depth_pass.js.map +1 -0
  124. package/dist/render/envlight.js +282 -0
  125. package/dist/render/envlight.js.map +1 -0
  126. package/dist/render/forward.js +186 -0
  127. package/dist/render/forward.js.map +1 -0
  128. package/dist/render/forward_pass.js +137 -0
  129. package/dist/render/forward_pass.js.map +1 -0
  130. package/dist/render/helper.js +38 -0
  131. package/dist/render/helper.js.map +1 -0
  132. package/dist/render/primitive.js +246 -0
  133. package/dist/render/primitive.js.map +1 -0
  134. package/dist/render/render_queue.js +163 -0
  135. package/dist/render/render_queue.js.map +1 -0
  136. package/dist/render/renderpass.js +151 -0
  137. package/dist/render/renderpass.js.map +1 -0
  138. package/dist/render/renderscheme.js +61 -0
  139. package/dist/render/renderscheme.js.map +1 -0
  140. package/dist/render/scatteringlut.js +634 -0
  141. package/dist/render/scatteringlut.js.map +1 -0
  142. package/dist/render/shadowmap_pass.js +70 -0
  143. package/dist/render/shadowmap_pass.js.map +1 -0
  144. package/dist/render/sky.js +881 -0
  145. package/dist/render/sky.js.map +1 -0
  146. package/dist/render/temporalcache.js +222 -0
  147. package/dist/render/temporalcache.js.map +1 -0
  148. package/dist/render/watermesh.js +835 -0
  149. package/dist/render/watermesh.js.map +1 -0
  150. package/dist/scene/environment.js +146 -0
  151. package/dist/scene/environment.js.map +1 -0
  152. package/dist/scene/graph_node.js +69 -0
  153. package/dist/scene/graph_node.js.map +1 -0
  154. package/dist/scene/light.js +436 -0
  155. package/dist/scene/light.js.map +1 -0
  156. package/dist/scene/mesh.js +215 -0
  157. package/dist/scene/mesh.js.map +1 -0
  158. package/dist/scene/model.js +111 -0
  159. package/dist/scene/model.js.map +1 -0
  160. package/dist/scene/octree.js +651 -0
  161. package/dist/scene/octree.js.map +1 -0
  162. package/dist/scene/octree_update_visitor.js +16 -0
  163. package/dist/scene/octree_update_visitor.js.map +1 -0
  164. package/dist/scene/raycast_visitor.js +72 -0
  165. package/dist/scene/raycast_visitor.js.map +1 -0
  166. package/dist/scene/scene.js +225 -0
  167. package/dist/scene/scene.js.map +1 -0
  168. package/dist/scene/scene_node.js +299 -0
  169. package/dist/scene/scene_node.js.map +1 -0
  170. package/dist/scene/terrain/grass.js +277 -0
  171. package/dist/scene/terrain/grass.js.map +1 -0
  172. package/dist/scene/terrain/heightfield.js +391 -0
  173. package/dist/scene/terrain/heightfield.js.map +1 -0
  174. package/dist/scene/terrain/patch.js +530 -0
  175. package/dist/scene/terrain/patch.js.map +1 -0
  176. package/dist/scene/terrain/quadtree.js +430 -0
  177. package/dist/scene/terrain/quadtree.js.map +1 -0
  178. package/dist/scene/terrain/terrain.js +258 -0
  179. package/dist/scene/terrain/terrain.js.map +1 -0
  180. package/dist/scene/xform.js +224 -0
  181. package/dist/scene/xform.js.map +1 -0
  182. package/dist/shaders/builtins.js +110 -0
  183. package/dist/shaders/builtins.js.map +1 -0
  184. package/dist/shaders/framework.js +709 -0
  185. package/dist/shaders/framework.js.map +1 -0
  186. package/dist/shaders/lighting.js +335 -0
  187. package/dist/shaders/lighting.js.map +1 -0
  188. package/dist/shaders/misc.js +405 -0
  189. package/dist/shaders/misc.js.map +1 -0
  190. package/dist/shaders/noise.js +157 -0
  191. package/dist/shaders/noise.js.map +1 -0
  192. package/dist/shaders/pbr.js +132 -0
  193. package/dist/shaders/pbr.js.map +1 -0
  194. package/dist/shaders/shadow.js +642 -0
  195. package/dist/shaders/shadow.js.map +1 -0
  196. package/dist/shaders/water.js +630 -0
  197. package/dist/shaders/water.js.map +1 -0
  198. package/dist/shadow/esm.js +235 -0
  199. package/dist/shadow/esm.js.map +1 -0
  200. package/dist/shadow/pcf_opt.js +182 -0
  201. package/dist/shadow/pcf_opt.js.map +1 -0
  202. package/dist/shadow/pcf_pd.js +190 -0
  203. package/dist/shadow/pcf_pd.js.map +1 -0
  204. package/dist/shadow/shadow_impl.js +15 -0
  205. package/dist/shadow/shadow_impl.js.map +1 -0
  206. package/dist/shadow/shadowmapper.js +709 -0
  207. package/dist/shadow/shadowmapper.js.map +1 -0
  208. package/dist/shadow/ssm.js +194 -0
  209. package/dist/shadow/ssm.js.map +1 -0
  210. package/dist/shadow/vsm.js +298 -0
  211. package/dist/shadow/vsm.js.map +1 -0
  212. package/dist/shapes/box.js +313 -0
  213. package/dist/shapes/box.js.map +1 -0
  214. package/dist/shapes/cylinder.js +74 -0
  215. package/dist/shapes/cylinder.js.map +1 -0
  216. package/dist/shapes/plane.js +48 -0
  217. package/dist/shapes/plane.js.map +1 -0
  218. package/dist/shapes/shape.js +33 -0
  219. package/dist/shapes/shape.js.map +1 -0
  220. package/dist/shapes/sphere.js +91 -0
  221. package/dist/shapes/sphere.js.map +1 -0
  222. package/dist/shapes/torus.js +100 -0
  223. package/dist/shapes/torus.js.map +1 -0
  224. package/dist/utility/aabbtree.js +390 -0
  225. package/dist/utility/aabbtree.js.map +1 -0
  226. package/dist/utility/bounding_volume.js +78 -0
  227. package/dist/utility/bounding_volume.js.map +1 -0
  228. package/dist/utility/panorama.js +163 -0
  229. package/dist/utility/panorama.js.map +1 -0
  230. package/dist/utility/pmrem.js +345 -0
  231. package/dist/utility/pmrem.js.map +1 -0
  232. package/dist/utility/shprojection.js +448 -0
  233. package/dist/utility/shprojection.js.map +1 -0
  234. package/dist/values.js +48 -0
  235. package/dist/values.js.map +1 -0
  236. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gltf_loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,314 @@
1
+ var ComponentType;
2
+ (function(ComponentType) {
3
+ ComponentType[ComponentType["UNKNOWN"] = 0] = "UNKNOWN";
4
+ ComponentType[ComponentType["BYTE"] = 5120] = "BYTE";
5
+ ComponentType[ComponentType["UBYTE"] = 5121] = "UBYTE";
6
+ ComponentType[ComponentType["SHORT"] = 5122] = "SHORT";
7
+ ComponentType[ComponentType["USHORT"] = 5123] = "USHORT";
8
+ ComponentType[ComponentType["INT"] = 5124] = "INT";
9
+ ComponentType[ComponentType["UINT"] = 5125] = "UINT";
10
+ ComponentType[ComponentType["FLOAT"] = 5126 // GL.FLOAT
11
+ ] = "FLOAT";
12
+ })(ComponentType || (ComponentType = {}));
13
+ /** @internal */ class GLTFAccessor {
14
+ bufferView;
15
+ byteOffset;
16
+ componentType;
17
+ normalized;
18
+ count;
19
+ type;
20
+ max;
21
+ min;
22
+ sparse;
23
+ name;
24
+ _typedView;
25
+ _filteredView;
26
+ _normalizedFilteredView;
27
+ _normalizedTypedView;
28
+ constructor(accessorInfo){
29
+ this.bufferView = accessorInfo.bufferView;
30
+ this.byteOffset = accessorInfo.byteOffset ?? 0;
31
+ this.componentType = accessorInfo.componentType;
32
+ this.normalized = !!accessorInfo.normalized;
33
+ this.count = accessorInfo.count;
34
+ this.type = accessorInfo.type;
35
+ this.max = accessorInfo.max;
36
+ this.min = accessorInfo.min;
37
+ this.sparse = accessorInfo.sparse;
38
+ this.name = accessorInfo.name;
39
+ this._typedView = null;
40
+ this._filteredView = null;
41
+ this._normalizedFilteredView = null;
42
+ this._normalizedTypedView = null;
43
+ }
44
+ getTypedView(gltf) {
45
+ if (this._typedView) {
46
+ return this._typedView;
47
+ }
48
+ if (this.bufferView !== undefined) {
49
+ const bufferView = gltf.bufferViews[this.bufferView];
50
+ const buffer = gltf._loadedBuffers[bufferView.buffer];
51
+ const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);
52
+ const componentSize = this.getComponentSize(this.componentType);
53
+ const componentCount = this.getComponentCount(this.type);
54
+ let arrayLength = 0;
55
+ if (bufferView.byteStride !== undefined && bufferView.byteStride !== 0) {
56
+ if (componentSize !== 0) {
57
+ arrayLength = bufferView.byteStride / componentSize * (this.count - 1) + componentCount;
58
+ } else {
59
+ console.warn("Invalid component type in accessor '" + (this.name ? this.name : '') + "'");
60
+ }
61
+ } else {
62
+ arrayLength = this.count * componentCount;
63
+ }
64
+ if (arrayLength * componentSize > buffer.byteLength - byteOffset) {
65
+ arrayLength = (buffer.byteLength - byteOffset) / componentSize;
66
+ console.warn("Count in accessor '" + (this.name ? this.name : '') + "' is too large.");
67
+ }
68
+ switch(this.componentType){
69
+ case 5120:
70
+ this._typedView = new Int8Array(buffer, byteOffset, arrayLength);
71
+ break;
72
+ case 5121:
73
+ this._typedView = new Uint8Array(buffer, byteOffset, arrayLength);
74
+ break;
75
+ case 5122:
76
+ this._typedView = new Int16Array(buffer, byteOffset, arrayLength);
77
+ break;
78
+ case 5123:
79
+ this._typedView = new Uint16Array(buffer, byteOffset, arrayLength);
80
+ break;
81
+ case 5124:
82
+ this._typedView = new Int32Array(buffer, byteOffset, arrayLength);
83
+ break;
84
+ case 5125:
85
+ this._typedView = new Uint32Array(buffer, byteOffset, arrayLength);
86
+ break;
87
+ case 5126:
88
+ this._typedView = new Float32Array(buffer, byteOffset, arrayLength);
89
+ break;
90
+ }
91
+ } else if (this.sparse !== undefined) {
92
+ this._typedView = this.createView();
93
+ }
94
+ if (!this._typedView) {
95
+ console.warn('Failed to convert buffer view to typed view!: ' + this.bufferView);
96
+ } else if (this.sparse !== undefined) {
97
+ this.applySparse(gltf, this._typedView);
98
+ }
99
+ return this._typedView;
100
+ }
101
+ // getNormalizedTypedView provides an alternative view to the accessors data,
102
+ // where quantized data is already normalized. This is useful if the data is not passed
103
+ // to vertexAttribPointer but used immediately (like e.g. animations)
104
+ getNormalizedTypedView(gltf) {
105
+ if (this._normalizedTypedView) {
106
+ return this._normalizedTypedView;
107
+ }
108
+ const typedView = this.getTypedView(gltf);
109
+ this._normalizedTypedView = this.normalized ? GLTFAccessor.dequantize(typedView, this.componentType) : typedView;
110
+ return this._normalizedTypedView;
111
+ }
112
+ // getDeinterlacedView provides a view to the accessors data in form of
113
+ // a TypedArray. In contrast to getTypedView, getDeinterlacedView deinterlaces
114
+ // data, i.e. stripping padding and unrelated components from the array. It then
115
+ // only contains the data of the accessor
116
+ getDeinterlacedView(gltf) {
117
+ if (this._filteredView) {
118
+ return this._filteredView;
119
+ }
120
+ const componentSize = this.getComponentSize(this.componentType);
121
+ const componentCount = this.getComponentCount(this.type);
122
+ const arrayLength = this.count * componentCount;
123
+ let func = 'getFloat32';
124
+ switch(this.componentType){
125
+ case 5120:
126
+ this._filteredView = new Int8Array(arrayLength);
127
+ func = 'getInt8';
128
+ break;
129
+ case 5121:
130
+ this._filteredView = new Uint8Array(arrayLength);
131
+ func = 'getUint8';
132
+ break;
133
+ case 5122:
134
+ this._filteredView = new Int16Array(arrayLength);
135
+ func = 'getInt16';
136
+ break;
137
+ case 5123:
138
+ this._filteredView = new Uint16Array(arrayLength);
139
+ func = 'getUint16';
140
+ break;
141
+ case 5124:
142
+ this._filteredView = new Int32Array(arrayLength);
143
+ func = 'getInt32';
144
+ break;
145
+ case 5125:
146
+ this._filteredView = new Uint32Array(arrayLength);
147
+ func = 'getUint32';
148
+ break;
149
+ case 5126:
150
+ this._filteredView = new Float32Array(arrayLength);
151
+ func = 'getFloat32';
152
+ break;
153
+ default:
154
+ return;
155
+ }
156
+ if (this.bufferView !== undefined) {
157
+ const bufferView = gltf.bufferViews[this.bufferView];
158
+ const buffer = gltf._loadedBuffers[bufferView.buffer];
159
+ const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);
160
+ const stride = bufferView.byteStride !== undefined && bufferView.byteStride !== 0 ? bufferView.byteStride : componentCount * componentSize;
161
+ const dataView = new DataView(buffer, byteOffset, this.count * stride);
162
+ for(let i = 0; i < arrayLength; ++i){
163
+ const offset = Math.floor(i / componentCount) * stride + i % componentCount * componentSize;
164
+ this._filteredView[i] = dataView[func](offset, true);
165
+ }
166
+ } else if (this.sparse !== undefined) {
167
+ this._filteredView = this.createView();
168
+ }
169
+ if (this.sparse !== undefined) {
170
+ this.applySparse(gltf, this._filteredView);
171
+ }
172
+ return this._filteredView;
173
+ }
174
+ createView() {
175
+ const size = this.count * this.getComponentCount(this.type);
176
+ if (this.componentType == 5120) return new Int8Array(size);
177
+ if (this.componentType == 5121) return new Uint8Array(size);
178
+ if (this.componentType == 5122) return new Int16Array(size);
179
+ if (this.componentType == 5123) return new Uint16Array(size);
180
+ if (this.componentType == 5124) return new Int32Array(size);
181
+ if (this.componentType == 5125) return new Uint32Array(size);
182
+ if (this.componentType == 5126) return new Float32Array(size);
183
+ return undefined;
184
+ }
185
+ // getNormalizedDeinterlacedView provides an alternative view to the accessors data,
186
+ // where quantized data is already normalized. This is useful if the data is not passed
187
+ // to vertexAttribPointer but used immediately (like e.g. animations)
188
+ getNormalizedDeinterlacedView(gltf) {
189
+ if (this._normalizedFilteredView) {
190
+ return this._normalizedFilteredView;
191
+ }
192
+ const filteredView = this.getDeinterlacedView(gltf);
193
+ this._normalizedFilteredView = this.normalized ? GLTFAccessor.dequantize(filteredView, this.componentType) : filteredView;
194
+ return this._normalizedFilteredView;
195
+ }
196
+ applySparse(gltf, view) {
197
+ // Gather indices.
198
+ const indicesBufferView = gltf.bufferViews[this.sparse.indices.bufferView];
199
+ const indicesBuffer = gltf._loadedBuffers[indicesBufferView.buffer];
200
+ const indicesByteOffset = this.sparse.indices.byteOffset + (indicesBufferView.byteOffset ?? 0);
201
+ const indicesComponentSize = this.getComponentSize(this.sparse.indices.componentType);
202
+ let indicesComponentCount = 1;
203
+ if (indicesBufferView.byteStride !== undefined && indicesBufferView.byteStride !== 0) {
204
+ indicesComponentCount = indicesBufferView.byteStride / indicesComponentSize;
205
+ }
206
+ const indicesArrayLength = this.sparse.count * indicesComponentCount;
207
+ let indicesTypedView;
208
+ switch(this.sparse.indices.componentType){
209
+ case 5121:
210
+ indicesTypedView = new Uint8Array(indicesBuffer, indicesByteOffset, indicesArrayLength);
211
+ break;
212
+ case 5123:
213
+ indicesTypedView = new Uint16Array(indicesBuffer, indicesByteOffset, indicesArrayLength);
214
+ break;
215
+ case 5125:
216
+ indicesTypedView = new Uint32Array(indicesBuffer, indicesByteOffset, indicesArrayLength);
217
+ break;
218
+ }
219
+ // Gather values.
220
+ const valuesBufferView = gltf.bufferViews[this.sparse.values.bufferView];
221
+ const valuesBuffer = gltf._loadedBuffers[valuesBufferView.buffer];
222
+ const valuesByteOffset = this.sparse.values.byteOffset + (valuesBufferView.byteOffset ?? 0);
223
+ const valuesComponentSize = this.getComponentSize(this.componentType);
224
+ let valuesComponentCount = this.getComponentCount(this.type);
225
+ if (valuesBufferView.byteStride !== undefined && valuesBufferView.byteStride !== 0) {
226
+ valuesComponentCount = valuesBufferView.byteStride / valuesComponentSize;
227
+ }
228
+ const valuesArrayLength = this.sparse.count * valuesComponentCount;
229
+ let valuesTypedView;
230
+ switch(this.componentType){
231
+ case 5120:
232
+ valuesTypedView = new Int8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
233
+ break;
234
+ case 5121:
235
+ valuesTypedView = new Uint8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
236
+ break;
237
+ case 5122:
238
+ valuesTypedView = new Int16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
239
+ break;
240
+ case 5123:
241
+ valuesTypedView = new Uint16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
242
+ break;
243
+ case 5124:
244
+ valuesTypedView = new Int32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
245
+ break;
246
+ case 5125:
247
+ valuesTypedView = new Uint32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
248
+ break;
249
+ case 5126:
250
+ valuesTypedView = new Float32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);
251
+ break;
252
+ }
253
+ // Overwrite values.
254
+ for(let i = 0; i < this.sparse.count; ++i){
255
+ for(let k = 0; k < valuesComponentCount; ++k){
256
+ view[indicesTypedView[i] * valuesComponentCount + k] = valuesTypedView[i * valuesComponentCount + k];
257
+ }
258
+ }
259
+ }
260
+ // dequantize can be used to perform the normalization from WebGL2 vertexAttribPointer explicitly
261
+ static dequantize(typedArray, componentType) {
262
+ switch(componentType){
263
+ case 5120:
264
+ return new Float32Array(typedArray).map((c)=>Math.max(c / 127.0, -1.0));
265
+ case 5121:
266
+ return new Float32Array(typedArray).map((c)=>c / 255.0);
267
+ case 5122:
268
+ return new Float32Array(typedArray).map((c)=>Math.max(c / 32767.0, -1.0));
269
+ case 5123:
270
+ return new Float32Array(typedArray).map((c)=>c / 65535.0);
271
+ default:
272
+ return typedArray;
273
+ }
274
+ }
275
+ getComponentCount(type) {
276
+ switch(type){
277
+ case 'SCALAR':
278
+ return 1;
279
+ case 'VEC2':
280
+ return 2;
281
+ case 'VEC3':
282
+ return 3;
283
+ case 'VEC4':
284
+ return 4;
285
+ case 'MAT2':
286
+ return 4;
287
+ case 'MAT3':
288
+ return 9;
289
+ case 'MAT4':
290
+ return 16;
291
+ default:
292
+ return 0;
293
+ }
294
+ }
295
+ getComponentSize(componentType) {
296
+ switch(componentType){
297
+ case 5120:
298
+ case 5121:
299
+ return 1;
300
+ case 5122:
301
+ case 5123:
302
+ return 2;
303
+ case 5124:
304
+ case 5125:
305
+ case 5126:
306
+ return 4;
307
+ default:
308
+ return 0;
309
+ }
310
+ }
311
+ }
312
+
313
+ export { ComponentType, GLTFAccessor };
314
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,175 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { floatToHalf, packFloat3 } from '@zephyr3d/base';
3
+ import { Application } from '../../../app.js';
4
+
5
+ const _f16one = floatToHalf(1);
6
+ /**
7
+ * The HDR texture loader
8
+ * @internal
9
+ */ class HDRLoader extends AbstractTextureLoader {
10
+ supportExtension(ext) {
11
+ return ext === '.hdr';
12
+ }
13
+ supportMIMEType(mimeType) {
14
+ return mimeType === 'image/hdr';
15
+ }
16
+ async load(assetManager, url, mimeType, data, srgb, samplerOptions, texture) {
17
+ let format;
18
+ for (const fmt of [
19
+ 'rg11b10uf',
20
+ 'rgba16f',
21
+ 'rgba32f',
22
+ 'rgba8unorm'
23
+ ]){
24
+ const info = Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(fmt);
25
+ if (info && info.filterable && info.renderable) {
26
+ format = fmt;
27
+ break;
28
+ }
29
+ }
30
+ const textureData = await this.loadHDR(new Uint8Array(data), format);
31
+ const options = {
32
+ texture: texture,
33
+ samplerOptions
34
+ };
35
+ const tex = Application.instance.device.createTexture2D(format, textureData.width, textureData.height, options);
36
+ tex.update(textureData.dataFloat, 0, 0, textureData.width, textureData.height);
37
+ return tex;
38
+ }
39
+ _rgbeToFloat32(buffer) {
40
+ const length = buffer.byteLength >> 2;
41
+ const result = new Float32Array(length * 4);
42
+ for(let i = 0; i < length; i++){
43
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
44
+ result[i * 4] = buffer[i * 4] * s;
45
+ result[i * 4 + 1] = buffer[i * 4 + 1] * s;
46
+ result[i * 4 + 2] = buffer[i * 4 + 2] * s;
47
+ result[i * 4 + 3] = 1;
48
+ }
49
+ return result;
50
+ }
51
+ _rgbeToFloat16(buffer) {
52
+ const length = buffer.byteLength >> 2;
53
+ const result = new Uint16Array(length * 4);
54
+ for(let i = 0; i < length; i++){
55
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
56
+ result[i * 4 + 0] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4] * s, 65504)));
57
+ result[i * 4 + 1] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 1] * s, 65504)));
58
+ result[i * 4 + 2] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 2] * s, 65504)));
59
+ result[i * 4 + 3] = _f16one;
60
+ }
61
+ return result;
62
+ }
63
+ _rgbeToR11G11B10(buffer) {
64
+ const length = buffer.byteLength >> 2;
65
+ const result = new Uint32Array(length);
66
+ for(let i = 0; i < length; i++){
67
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
68
+ const r = buffer[i * 4] * s;
69
+ const g = buffer[i * 4 + 1] * s;
70
+ const b = buffer[i * 4 + 2] * s;
71
+ result[i] = packFloat3(r, g, b);
72
+ }
73
+ return result;
74
+ }
75
+ /*
76
+ Decode: rgb = pow(6 * rgbm.rgb * rgbm.a, 2.2);
77
+ */ _rgbeToRGBM(buffer) {
78
+ const length = buffer.byteLength >> 2;
79
+ const result = new Uint8Array(length * 4);
80
+ for(let i = 0; i < length; i++){
81
+ const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
82
+ const r = Math.pow(buffer[i * 4] * s, 1 / 2.2);
83
+ const g = Math.pow(buffer[i * 4 + 1] * s, 1 / 2.2);
84
+ const b = Math.pow(buffer[i * 4 + 2] * s, 1 / 2.2);
85
+ const rgbMax = Math.max(r, g, b);
86
+ const M = Math.ceil(255 * rgbMax / 6) / 255;
87
+ const t = M * 6;
88
+ result[i * 4] = Math.ceil(255 * r / t);
89
+ result[i * 4 + 1] = Math.ceil(255 * g / t);
90
+ result[i * 4 + 2] = Math.ceil(255 * b / t);
91
+ result[i * 4 + 3] = Math.ceil(255 * Math.min(M, 1));
92
+ }
93
+ return result;
94
+ }
95
+ async loadHDR(buffer, dstFormat) {
96
+ let header = '';
97
+ let pos = 0;
98
+ const d8 = buffer;
99
+ let format = undefined;
100
+ // read header.
101
+ while(!header.match(/\n\n[^\n]+\n/g))header += String.fromCharCode(d8[pos++]);
102
+ // check format.
103
+ format = header.match(/FORMAT=(.*)$/m);
104
+ if (format.length < 2) {
105
+ return undefined;
106
+ }
107
+ format = format[1];
108
+ if (format != '32-bit_rle_rgbe') {
109
+ console.warn('unknown format : ' + format);
110
+ return null;
111
+ }
112
+ // parse resolution
113
+ let rez = header.split(/\n/).reverse();
114
+ if (rez.length < 2) {
115
+ return undefined;
116
+ }
117
+ rez = rez[1].split(' ');
118
+ if (rez.length < 4) {
119
+ return undefined;
120
+ }
121
+ const width = Number(rez[3]) * 1, height = Number(rez[1]) * 1;
122
+ // Create image.
123
+ const img = new Uint8Array(width * height * 4);
124
+ let ipos = 0;
125
+ // Read all scanlines
126
+ for(let j = 0; j < height; j++){
127
+ const scanline = [];
128
+ let rgbe = d8.slice(pos, pos += 4);
129
+ const isNewRLE = rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == (width >> 8 & 0xFF) && rgbe[3] == (width & 0xFF);
130
+ if (isNewRLE && width >= 8 && width < 32768) {
131
+ for(let i = 0; i < 4; i++){
132
+ let ptr = i * width;
133
+ const ptr_end = (i + 1) * width;
134
+ let buf = undefined;
135
+ let count = undefined;
136
+ while(ptr < ptr_end){
137
+ buf = d8.slice(pos, pos += 2);
138
+ if (buf[0] > 128) {
139
+ count = buf[0] - 128;
140
+ while(count-- > 0)scanline[ptr++] = buf[1];
141
+ } else {
142
+ count = buf[0] - 1;
143
+ scanline[ptr++] = buf[1];
144
+ while(count-- > 0)scanline[ptr++] = d8[pos++];
145
+ }
146
+ }
147
+ }
148
+ for(let i = 0; i < width; i++){
149
+ img[ipos++] = scanline[i + 0 * width];
150
+ img[ipos++] = scanline[i + 1 * width];
151
+ img[ipos++] = scanline[i + 2 * width];
152
+ img[ipos++] = scanline[i + 3 * width];
153
+ }
154
+ } else {
155
+ pos -= 4;
156
+ for(let i = 0; i < width; i++){
157
+ rgbe = d8.slice(pos, pos += 4);
158
+ img[ipos++] = rgbe[0];
159
+ img[ipos++] = rgbe[1];
160
+ img[ipos++] = rgbe[2];
161
+ img[ipos++] = rgbe[3];
162
+ }
163
+ }
164
+ }
165
+ const imageFloatBuffer = dstFormat === 'rgba32f' ? this._rgbeToFloat32(img) : dstFormat === 'rgba16f' ? this._rgbeToFloat16(img) : dstFormat === 'rg11b10uf' ? this._rgbeToR11G11B10(img) : this._rgbeToRGBM(img);
166
+ return {
167
+ dataFloat: imageFloatBuffer,
168
+ width: width,
169
+ height: height
170
+ };
171
+ }
172
+ }
173
+
174
+ export { HDRLoader };
175
+ //# sourceMappingURL=hdr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hdr.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,117 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { Application } from '../../../app.js';
3
+
4
+ /**
5
+ * TGA image loader
6
+ * @internal
7
+ */ class TGALoader extends AbstractTextureLoader {
8
+ supportExtension(ext) {
9
+ return ext === '.tga';
10
+ }
11
+ supportMIMEType(mimeType) {
12
+ return mimeType === 'image/tga';
13
+ }
14
+ parseTGA(content, sRGB, noMipmap, texture) {
15
+ const dataView = new DataView(content);
16
+ const p = [
17
+ 0,
18
+ 0,
19
+ 0,
20
+ 0
21
+ ];
22
+ do {
23
+ let skip = 0;
24
+ const idLength = dataView.getUint8(0);
25
+ skip += idLength;
26
+ const colorMapType = dataView.getUint8(1);
27
+ if (colorMapType !== 0 && colorMapType !== 1) {
28
+ break;
29
+ }
30
+ const dataTypeCode = dataView.getUint8(2);
31
+ if (dataTypeCode !== 2 && dataTypeCode !== 10) {
32
+ break;
33
+ }
34
+ const colorMapLength = dataView.getUint16(5, true);
35
+ skip += colorMapLength * colorMapType;
36
+ const width = dataView.getUint16(12, true);
37
+ const height = dataView.getUint16(14, true);
38
+ const bpp = dataView.getUint8(16);
39
+ if (bpp !== 16 && bpp !== 24 && bpp !== 32) {
40
+ break;
41
+ }
42
+ let dataOffset = 18 + skip;
43
+ const bytesPerPixel = bpp / 8;
44
+ const pixels = new Uint8Array(width * height * 4);
45
+ let n = 0;
46
+ while(n < width * height){
47
+ if (dataTypeCode === 2) {
48
+ for(let i = 0; i < bytesPerPixel; i++){
49
+ p[i] = dataView.getUint8(dataOffset++);
50
+ }
51
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
52
+ n++;
53
+ } else {
54
+ const t = dataView.getUint8(dataOffset++);
55
+ for(let i = 0; i < bytesPerPixel; i++){
56
+ p[i] = dataView.getUint8(dataOffset++);
57
+ }
58
+ const j = t & 0x7f;
59
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
60
+ n++;
61
+ if (t & 0x80) {
62
+ for(let i = 0; i < j; i++){
63
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
64
+ n++;
65
+ }
66
+ } else {
67
+ for(let i = 0; i < j; i++){
68
+ for(let k = 0; k < bytesPerPixel; k++){
69
+ p[i] = dataView.getUint8(dataOffset++);
70
+ }
71
+ this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
72
+ n++;
73
+ }
74
+ }
75
+ }
76
+ }
77
+ const opt = {
78
+ texture
79
+ };
80
+ if (noMipmap) {
81
+ opt.samplerOptions = {
82
+ mipFilter: 'none'
83
+ };
84
+ }
85
+ const tex = Application.instance.device.createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);
86
+ tex.update(pixels, 0, 0, width, height);
87
+ return tex;
88
+ }while (false)
89
+ throw new Error(`Unsupported TGA file format`);
90
+ }
91
+ mergeBytes(dest, offset, pixel, numBytes) {
92
+ if (numBytes === 4) {
93
+ dest[offset + 0] = pixel[2];
94
+ dest[offset + 1] = pixel[1];
95
+ dest[offset + 2] = pixel[0];
96
+ dest[offset + 3] = pixel[3];
97
+ } else if (numBytes === 3) {
98
+ dest[offset + 0] = pixel[2];
99
+ dest[offset + 1] = pixel[1];
100
+ dest[offset + 2] = pixel[0];
101
+ dest[offset + 3] = 255;
102
+ } else if (numBytes === 2) {
103
+ dest[offset + 0] = (pixel[1] & 0x7c) << 1;
104
+ dest[offset + 1] = (pixel[1] & 0x03) << 6 | (pixel[0] & 0xe0) >> 2;
105
+ dest[offset + 2] = (pixel[0] & 0x1f) << 3;
106
+ dest[offset + 3] = pixel[1] & 0x80;
107
+ }
108
+ }
109
+ async load(assetManager, filename, mimeType, data, srgb, samplerOptions, texture) {
110
+ return new Promise((resolve, reject)=>{
111
+ resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));
112
+ });
113
+ }
114
+ }
115
+
116
+ export { TGALoader };
117
+ //# sourceMappingURL=tga_Loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tga_Loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,50 @@
1
+ import { AbstractTextureLoader } from '../loader.js';
2
+ import { Application } from '../../../app.js';
3
+
4
+ /**
5
+ * Web image loader
6
+ * @internal
7
+ */ class WebImageLoader extends AbstractTextureLoader {
8
+ supportExtension(ext) {
9
+ return ext === '.jpg' || ext === '.jpeg' || ext === '.png';
10
+ }
11
+ supportMIMEType(mimeType) {
12
+ return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';
13
+ }
14
+ async load(assetManager, filename, mimeType, data, srgb, samplerOptions, texture) {
15
+ return new Promise((resolve, reject)=>{
16
+ if (!mimeType) {
17
+ reject('unknown image file type');
18
+ }
19
+ const src = URL.createObjectURL(new Blob([
20
+ data
21
+ ], {
22
+ type: mimeType
23
+ }));
24
+ const img = document.createElement('img');
25
+ img.src = src;
26
+ img.onload = function() {
27
+ createImageBitmap(img, {
28
+ premultiplyAlpha: 'none'
29
+ }).then((bm)=>{
30
+ const options = {
31
+ texture: texture,
32
+ samplerOptions
33
+ };
34
+ const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);
35
+ if (tex) {
36
+ resolve(tex);
37
+ } else {
38
+ reject('create texture from image element failed');
39
+ }
40
+ });
41
+ };
42
+ img.onerror = (err)=>{
43
+ reject(err);
44
+ };
45
+ });
46
+ }
47
+ }
48
+
49
+ export { WebImageLoader };
50
+ //# sourceMappingURL=webimage_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webimage_loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}