sdl-mcp 0.12.2 → 0.12.3

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 (276) hide show
  1. package/README.md +10 -0
  2. package/config/sdlmcp.config.example.json +53 -8
  3. package/config/sdlmcp.config.schema.json +530 -106
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/benchmark/external-manifest.d.ts +162 -0
  6. package/dist/benchmark/external-manifest.d.ts.map +1 -0
  7. package/dist/benchmark/external-manifest.js +336 -0
  8. package/dist/benchmark/external-manifest.js.map +1 -0
  9. package/dist/benchmark/external-runner.d.ts +100 -0
  10. package/dist/benchmark/external-runner.d.ts.map +1 -0
  11. package/dist/benchmark/external-runner.js +1171 -0
  12. package/dist/benchmark/external-runner.js.map +1 -0
  13. package/dist/benchmark/output-file.d.ts +3 -0
  14. package/dist/benchmark/output-file.d.ts.map +1 -0
  15. package/dist/benchmark/output-file.js +8 -0
  16. package/dist/benchmark/output-file.js.map +1 -0
  17. package/dist/cli/argParsing.d.ts.map +1 -1
  18. package/dist/cli/argParsing.js +6 -0
  19. package/dist/cli/argParsing.js.map +1 -1
  20. package/dist/cli/commands/benchmark.d.ts.map +1 -1
  21. package/dist/cli/commands/benchmark.js +3 -2
  22. package/dist/cli/commands/benchmark.js.map +1 -1
  23. package/dist/cli/commands/index.d.ts +1 -0
  24. package/dist/cli/commands/index.d.ts.map +1 -1
  25. package/dist/cli/commands/index.js +13 -7
  26. package/dist/cli/commands/index.js.map +1 -1
  27. package/dist/cli/commands/init.d.ts +5 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +73 -3
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/serve.d.ts.map +1 -1
  32. package/dist/cli/commands/serve.js +2 -0
  33. package/dist/cli/commands/serve.js.map +1 -1
  34. package/dist/cli/index.js +2 -0
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/transport/http.d.ts +1 -35
  37. package/dist/cli/transport/http.d.ts.map +1 -1
  38. package/dist/cli/transport/http.js +151 -175
  39. package/dist/cli/transport/http.js.map +1 -1
  40. package/dist/cli/types.d.ts +1 -0
  41. package/dist/cli/types.d.ts.map +1 -1
  42. package/dist/config/constants.d.ts +30 -0
  43. package/dist/config/constants.d.ts.map +1 -1
  44. package/dist/config/constants.js +30 -0
  45. package/dist/config/constants.js.map +1 -1
  46. package/dist/config/types.d.ts +53 -1
  47. package/dist/config/types.d.ts.map +1 -1
  48. package/dist/config/types.js +62 -14
  49. package/dist/config/types.js.map +1 -1
  50. package/dist/db/ladybug-batching.d.ts +1 -0
  51. package/dist/db/ladybug-batching.d.ts.map +1 -1
  52. package/dist/db/ladybug-batching.js +1 -0
  53. package/dist/db/ladybug-batching.js.map +1 -1
  54. package/dist/db/ladybug-core.d.ts +3 -0
  55. package/dist/db/ladybug-core.d.ts.map +1 -1
  56. package/dist/db/ladybug-core.js +72 -2
  57. package/dist/db/ladybug-core.js.map +1 -1
  58. package/dist/db/ladybug-embeddings.d.ts +6 -1
  59. package/dist/db/ladybug-embeddings.d.ts.map +1 -1
  60. package/dist/db/ladybug-embeddings.js +6 -1
  61. package/dist/db/ladybug-embeddings.js.map +1 -1
  62. package/dist/db/ladybug-file-summaries.d.ts.map +1 -1
  63. package/dist/db/ladybug-file-summaries.js +23 -0
  64. package/dist/db/ladybug-file-summaries.js.map +1 -1
  65. package/dist/db/ladybug-queries.js +1 -1
  66. package/dist/db/ladybug-queries.js.map +1 -1
  67. package/dist/db/migrations/index.d.ts.map +1 -1
  68. package/dist/db/migrations/index.js +2 -0
  69. package/dist/db/migrations/index.js.map +1 -1
  70. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts +5 -9
  71. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts.map +1 -1
  72. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js +24 -126
  73. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js.map +1 -1
  74. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts +5 -0
  75. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts.map +1 -0
  76. package/dist/db/migrations/m021-remediate-symbol-embeddings.js +7 -0
  77. package/dist/db/migrations/m021-remediate-symbol-embeddings.js.map +1 -0
  78. package/dist/db/migrations/symbol-embedding-remediation.d.ts +57 -0
  79. package/dist/db/migrations/symbol-embedding-remediation.d.ts.map +1 -0
  80. package/dist/db/migrations/symbol-embedding-remediation.js +335 -0
  81. package/dist/db/migrations/symbol-embedding-remediation.js.map +1 -0
  82. package/dist/graph/layout/force-layout.d.ts +4 -0
  83. package/dist/graph/layout/force-layout.d.ts.map +1 -0
  84. package/dist/graph/layout/force-layout.js +127 -0
  85. package/dist/graph/layout/force-layout.js.map +1 -0
  86. package/dist/graph/layout/layout-service.d.ts +37 -0
  87. package/dist/graph/layout/layout-service.d.ts.map +1 -0
  88. package/dist/graph/layout/layout-service.js +172 -0
  89. package/dist/graph/layout/layout-service.js.map +1 -0
  90. package/dist/graph/layout/native-engine.d.ts +9 -0
  91. package/dist/graph/layout/native-engine.d.ts.map +1 -0
  92. package/dist/graph/layout/native-engine.js +59 -0
  93. package/dist/graph/layout/native-engine.js.map +1 -0
  94. package/dist/graph/layout/prng.d.ts +3 -0
  95. package/dist/graph/layout/prng.d.ts.map +1 -0
  96. package/dist/graph/layout/prng.js +19 -0
  97. package/dist/graph/layout/prng.js.map +1 -0
  98. package/dist/graph/layout/serializer.d.ts +3 -0
  99. package/dist/graph/layout/serializer.d.ts.map +1 -0
  100. package/dist/graph/layout/serializer.js +20 -0
  101. package/dist/graph/layout/serializer.js.map +1 -0
  102. package/dist/graph/layout/types.d.ts +30 -0
  103. package/dist/graph/layout/types.d.ts.map +1 -0
  104. package/dist/graph/layout/types.js +2 -0
  105. package/dist/graph/layout/types.js.map +1 -0
  106. package/dist/indexer/embeddings.d.ts +7 -0
  107. package/dist/indexer/embeddings.d.ts.map +1 -1
  108. package/dist/indexer/embeddings.js +44 -4
  109. package/dist/indexer/embeddings.js.map +1 -1
  110. package/dist/indexer/file-summary-embeddings.d.ts +12 -0
  111. package/dist/indexer/file-summary-embeddings.d.ts.map +1 -1
  112. package/dist/indexer/file-summary-embeddings.js +83 -21
  113. package/dist/indexer/file-summary-embeddings.js.map +1 -1
  114. package/dist/indexer/fileWalker.d.ts.map +1 -1
  115. package/dist/indexer/fileWalker.js +2 -1
  116. package/dist/indexer/fileWalker.js.map +1 -1
  117. package/dist/indexer/metrics-updater.d.ts.map +1 -1
  118. package/dist/indexer/metrics-updater.js +27 -4
  119. package/dist/indexer/metrics-updater.js.map +1 -1
  120. package/dist/indexer/watcher.d.ts.map +1 -1
  121. package/dist/indexer/watcher.js +2 -1
  122. package/dist/indexer/watcher.js.map +1 -1
  123. package/dist/mcp/context-response-projection.d.ts.map +1 -1
  124. package/dist/mcp/context-response-projection.js +49 -13
  125. package/dist/mcp/context-response-projection.js.map +1 -1
  126. package/dist/mcp/tools/search-edit/planner.d.ts.map +1 -1
  127. package/dist/mcp/tools/search-edit/planner.js +10 -3
  128. package/dist/mcp/tools/search-edit/planner.js.map +1 -1
  129. package/dist/observability/event-tap.d.ts +2 -1
  130. package/dist/observability/event-tap.d.ts.map +1 -1
  131. package/dist/observability/event-tap.js.map +1 -1
  132. package/dist/observability/service.d.ts +11 -4
  133. package/dist/observability/service.d.ts.map +1 -1
  134. package/dist/observability/service.js +83 -13
  135. package/dist/observability/service.js.map +1 -1
  136. package/dist/observability/types.d.ts +48 -2
  137. package/dist/observability/types.d.ts.map +1 -1
  138. package/dist/ui/.tsbuildinfo +1 -0
  139. package/dist/ui/vendor/fflate.js +2692 -0
  140. package/dist/ui/vendor/jsm/controls/ArcballControls.js +3543 -0
  141. package/dist/ui/vendor/jsm/controls/DragControls.js +452 -0
  142. package/dist/ui/vendor/jsm/controls/FirstPersonControls.js +488 -0
  143. package/dist/ui/vendor/jsm/controls/FlyControls.js +384 -0
  144. package/dist/ui/vendor/jsm/controls/MapControls.js +116 -0
  145. package/dist/ui/vendor/jsm/controls/OrbitControls.js +1963 -0
  146. package/dist/ui/vendor/jsm/controls/PointerLockControls.js +264 -0
  147. package/dist/ui/vendor/jsm/controls/TrackballControls.js +1001 -0
  148. package/dist/ui/vendor/jsm/controls/TransformControls.js +2003 -0
  149. package/dist/ui/vendor/jsm/loaders/3DMLoader.js +1836 -0
  150. package/dist/ui/vendor/jsm/loaders/3MFLoader.js +1621 -0
  151. package/dist/ui/vendor/jsm/loaders/AMFLoader.js +541 -0
  152. package/dist/ui/vendor/jsm/loaders/BVHLoader.js +484 -0
  153. package/dist/ui/vendor/jsm/loaders/ColladaLoader.js +153 -0
  154. package/dist/ui/vendor/jsm/loaders/DDSLoader.js +385 -0
  155. package/dist/ui/vendor/jsm/loaders/DRACOLoader.js +772 -0
  156. package/dist/ui/vendor/jsm/loaders/EXRLoader.js +3395 -0
  157. package/dist/ui/vendor/jsm/loaders/FBXLoader.js +4580 -0
  158. package/dist/ui/vendor/jsm/loaders/FontLoader.js +260 -0
  159. package/dist/ui/vendor/jsm/loaders/GCodeLoader.js +318 -0
  160. package/dist/ui/vendor/jsm/loaders/GLTFLoader.js +4860 -0
  161. package/dist/ui/vendor/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  162. package/dist/ui/vendor/jsm/loaders/HDRLoader.js +463 -0
  163. package/dist/ui/vendor/jsm/loaders/IESLoader.js +379 -0
  164. package/dist/ui/vendor/jsm/loaders/KMZLoader.js +163 -0
  165. package/dist/ui/vendor/jsm/loaders/KTX2Loader.js +1276 -0
  166. package/dist/ui/vendor/jsm/loaders/KTXLoader.js +197 -0
  167. package/dist/ui/vendor/jsm/loaders/LDrawLoader.js +2510 -0
  168. package/dist/ui/vendor/jsm/loaders/LUT3dlLoader.js +205 -0
  169. package/dist/ui/vendor/jsm/loaders/LUTCubeLoader.js +190 -0
  170. package/dist/ui/vendor/jsm/loaders/LUTImageLoader.js +190 -0
  171. package/dist/ui/vendor/jsm/loaders/LWOLoader.js +1051 -0
  172. package/dist/ui/vendor/jsm/loaders/LottieLoader.js +130 -0
  173. package/dist/ui/vendor/jsm/loaders/MD2Loader.js +435 -0
  174. package/dist/ui/vendor/jsm/loaders/MDDLoader.js +147 -0
  175. package/dist/ui/vendor/jsm/loaders/MTLLoader.js +593 -0
  176. package/dist/ui/vendor/jsm/loaders/MaterialXLoader.js +1126 -0
  177. package/dist/ui/vendor/jsm/loaders/NRRDLoader.js +718 -0
  178. package/dist/ui/vendor/jsm/loaders/OBJLoader.js +955 -0
  179. package/dist/ui/vendor/jsm/loaders/PCDLoader.js +620 -0
  180. package/dist/ui/vendor/jsm/loaders/PDBLoader.js +272 -0
  181. package/dist/ui/vendor/jsm/loaders/PLYLoader.js +968 -0
  182. package/dist/ui/vendor/jsm/loaders/PVRLoader.js +270 -0
  183. package/dist/ui/vendor/jsm/loaders/RGBELoader.js +18 -0
  184. package/dist/ui/vendor/jsm/loaders/STLLoader.js +421 -0
  185. package/dist/ui/vendor/jsm/loaders/SVGLoader.js +3319 -0
  186. package/dist/ui/vendor/jsm/loaders/TDSLoader.js +1142 -0
  187. package/dist/ui/vendor/jsm/loaders/TGALoader.js +538 -0
  188. package/dist/ui/vendor/jsm/loaders/TIFFLoader.js +59 -0
  189. package/dist/ui/vendor/jsm/loaders/TTFLoader.js +261 -0
  190. package/dist/ui/vendor/jsm/loaders/USDLoader.js +303 -0
  191. package/dist/ui/vendor/jsm/loaders/USDZLoader.js +16 -0
  192. package/dist/ui/vendor/jsm/loaders/UltraHDRLoader.js +755 -0
  193. package/dist/ui/vendor/jsm/loaders/VOXLoader.js +919 -0
  194. package/dist/ui/vendor/jsm/loaders/VRMLLoader.js +3646 -0
  195. package/dist/ui/vendor/jsm/loaders/VTKLoader.js +1293 -0
  196. package/dist/ui/vendor/jsm/loaders/XYZLoader.js +143 -0
  197. package/dist/ui/vendor/jsm/loaders/collada/ColladaComposer.js +3044 -0
  198. package/dist/ui/vendor/jsm/loaders/collada/ColladaParser.js +1977 -0
  199. package/dist/ui/vendor/jsm/loaders/lwo/IFFParser.js +1217 -0
  200. package/dist/ui/vendor/jsm/loaders/lwo/LWO2Parser.js +414 -0
  201. package/dist/ui/vendor/jsm/loaders/lwo/LWO3Parser.js +373 -0
  202. package/dist/ui/vendor/jsm/loaders/usd/USDAParser.js +901 -0
  203. package/dist/ui/vendor/jsm/loaders/usd/USDCParser.js +1878 -0
  204. package/dist/ui/vendor/jsm/loaders/usd/USDComposer.js +4627 -0
  205. package/dist/ui/vendor/jsm/utils/BufferGeometryUtils.js +1501 -0
  206. package/dist/ui/vendor/jsm/utils/CameraUtils.js +82 -0
  207. package/dist/ui/vendor/jsm/utils/ColorUtils.js +76 -0
  208. package/dist/ui/vendor/jsm/utils/GeometryCompressionUtils.js +547 -0
  209. package/dist/ui/vendor/jsm/utils/GeometryUtils.js +226 -0
  210. package/dist/ui/vendor/jsm/utils/LDrawUtils.js +211 -0
  211. package/dist/ui/vendor/jsm/utils/SceneOptimizer.js +458 -0
  212. package/dist/ui/vendor/jsm/utils/SceneUtils.js +363 -0
  213. package/dist/ui/vendor/jsm/utils/ShadowMapViewer.js +244 -0
  214. package/dist/ui/vendor/jsm/utils/ShadowMapViewerGPU.js +233 -0
  215. package/dist/ui/vendor/jsm/utils/SkeletonUtils.js +496 -0
  216. package/dist/ui/vendor/jsm/utils/SortUtils.js +175 -0
  217. package/dist/ui/vendor/jsm/utils/UVsDebug.js +173 -0
  218. package/dist/ui/vendor/jsm/utils/WebGLTextureUtils.js +115 -0
  219. package/dist/ui/vendor/jsm/utils/WebGPUTextureUtils.js +81 -0
  220. package/dist/ui/vendor/jsm/utils/WorkerPool.js +167 -0
  221. package/dist/ui/vendor/three.core.min.js +6 -0
  222. package/dist/ui/vendor/three.module.min.js +6 -0
  223. package/dist/ui/viewer/ambient.js +39 -0
  224. package/dist/ui/viewer/api.js +93 -0
  225. package/dist/ui/viewer/chrome.js +36 -0
  226. package/dist/ui/viewer/edges.js +33 -0
  227. package/dist/ui/viewer/index.html +32 -0
  228. package/dist/ui/viewer/inspector.js +23 -0
  229. package/dist/ui/viewer/lenses/activity.js +24 -0
  230. package/dist/ui/viewer/lenses/community.js +5 -0
  231. package/dist/ui/viewer/lenses/edges.js +4 -0
  232. package/dist/ui/viewer/lenses/impact.js +6 -0
  233. package/dist/ui/viewer/lenses/search.js +69 -0
  234. package/dist/ui/viewer/lod.js +100 -0
  235. package/dist/ui/viewer/main.js +92 -0
  236. package/dist/ui/viewer/picking.js +45 -0
  237. package/dist/ui/viewer/scene.js +85 -0
  238. package/dist/ui/viewer/skins/default-skin.js +15 -0
  239. package/dist/ui/viewer/skins/loader.js +44 -0
  240. package/dist/ui/viewer/skins/manifest-schema.js +30 -0
  241. package/dist/ui/viewer/state.js +44 -0
  242. package/dist/ui/viewer/theme.js +23 -0
  243. package/dist/ui/viewer/universe.js +151 -0
  244. package/dist/ui/viewer/viewer.css +85 -0
  245. package/dist/util/safeRegex.d.ts.map +1 -1
  246. package/dist/util/safeRegex.js +221 -68
  247. package/dist/util/safeRegex.js.map +1 -1
  248. package/dist/viewer/legacy-graph.d.ts +40 -0
  249. package/dist/viewer/legacy-graph.d.ts.map +1 -0
  250. package/dist/viewer/legacy-graph.js +152 -0
  251. package/dist/viewer/legacy-graph.js.map +1 -0
  252. package/dist/viewer/routes.d.ts +10 -0
  253. package/dist/viewer/routes.d.ts.map +1 -0
  254. package/dist/viewer/routes.js +221 -0
  255. package/dist/viewer/routes.js.map +1 -0
  256. package/dist/viewer/service.d.ts +44 -0
  257. package/dist/viewer/service.d.ts.map +1 -0
  258. package/dist/viewer/service.js +160 -0
  259. package/dist/viewer/service.js.map +1 -0
  260. package/dist/viewer/types.d.ts +63 -0
  261. package/dist/viewer/types.d.ts.map +1 -0
  262. package/dist/viewer/types.js +2 -0
  263. package/dist/viewer/types.js.map +1 -0
  264. package/dist/viewer/viewer-config.d.ts +12 -0
  265. package/dist/viewer/viewer-config.d.ts.map +1 -0
  266. package/dist/viewer/viewer-config.js +36 -0
  267. package/dist/viewer/viewer-config.js.map +1 -0
  268. package/package.json +18 -9
  269. package/templates/SDL.md +19 -0
  270. package/templates/claude-code.json +8 -43
  271. package/dist/ui/graph.css +0 -108
  272. package/dist/ui/graph.d.ts +0 -2
  273. package/dist/ui/graph.d.ts.map +0 -1
  274. package/dist/ui/graph.html +0 -52
  275. package/dist/ui/graph.js +0 -259
  276. package/dist/ui/graph.js.map +0 -1
@@ -0,0 +1,385 @@
1
+ import {
2
+ CompressedTextureLoader,
3
+ RGBAFormat,
4
+ RGBA_S3TC_DXT3_Format,
5
+ RGBA_S3TC_DXT5_Format,
6
+ RGB_ETC1_Format,
7
+ RGB_S3TC_DXT1_Format,
8
+ RGB_BPTC_SIGNED_Format,
9
+ RGB_BPTC_UNSIGNED_Format
10
+ } from 'three';
11
+
12
+ /**
13
+ * A loader for the S3TC texture compression format.
14
+ *
15
+ * ```js
16
+ * const loader = new DDSLoader();
17
+ *
18
+ * const map = loader.load( 'textures/compressed/disturb_dxt1_nomip.dds' );
19
+ * map.colorSpace = THREE.SRGBColorSpace; // only for color textures
20
+ * ```
21
+ *
22
+ * @augments CompressedTextureLoader
23
+ * @three_import import { DDSLoader } from 'three/addons/loaders/DDSLoader.js';
24
+ */
25
+ class DDSLoader extends CompressedTextureLoader {
26
+
27
+ /**
28
+ * Constructs a new DDS loader.
29
+ *
30
+ * @param {LoadingManager} [manager] - The loading manager.
31
+ */
32
+ constructor( manager ) {
33
+
34
+ super( manager );
35
+
36
+ }
37
+
38
+ /**
39
+ * Parses the given S3TC texture data.
40
+ *
41
+ * @param {ArrayBuffer} buffer - The raw texture data.
42
+ * @param {boolean} loadMipmaps - Whether to load mipmaps or not.
43
+ * @return {CompressedTextureLoader~TexData} An object representing the parsed texture data.
44
+ */
45
+ parse( buffer, loadMipmaps ) {
46
+
47
+ const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1, isCubemap: false };
48
+
49
+ // Adapted from @toji's DDS utils
50
+ // https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js
51
+
52
+ // All values and structures referenced from:
53
+ // http://msdn.microsoft.com/en-us/library/bb943991.aspx/
54
+
55
+ const DDS_MAGIC = 0x20534444;
56
+
57
+ // const DDSD_CAPS = 0x1;
58
+ // const DDSD_HEIGHT = 0x2;
59
+ // const DDSD_WIDTH = 0x4;
60
+ // const DDSD_PITCH = 0x8;
61
+ // const DDSD_PIXELFORMAT = 0x1000;
62
+ const DDSD_MIPMAPCOUNT = 0x20000;
63
+ // const DDSD_LINEARSIZE = 0x80000;
64
+ // const DDSD_DEPTH = 0x800000;
65
+
66
+ // const DDSCAPS_COMPLEX = 0x8;
67
+ // const DDSCAPS_MIPMAP = 0x400000;
68
+ // const DDSCAPS_TEXTURE = 0x1000;
69
+
70
+ const DDSCAPS2_CUBEMAP = 0x200;
71
+ const DDSCAPS2_CUBEMAP_POSITIVEX = 0x400;
72
+ const DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800;
73
+ const DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000;
74
+ const DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000;
75
+ const DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000;
76
+ const DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000;
77
+ // const DDSCAPS2_VOLUME = 0x200000;
78
+
79
+ // const DDPF_ALPHAPIXELS = 0x1;
80
+ // const DDPF_ALPHA = 0x2;
81
+ // const DDPF_FOURCC = 0x4;
82
+ // const DDPF_RGB = 0x40;
83
+ // const DDPF_YUV = 0x200;
84
+ // const DDPF_LUMINANCE = 0x20000;
85
+
86
+ const DXGI_FORMAT_BC6H_UF16 = 95;
87
+ const DXGI_FORMAT_BC6H_SF16 = 96;
88
+
89
+ function fourCCToInt32( value ) {
90
+
91
+ return value.charCodeAt( 0 ) +
92
+ ( value.charCodeAt( 1 ) << 8 ) +
93
+ ( value.charCodeAt( 2 ) << 16 ) +
94
+ ( value.charCodeAt( 3 ) << 24 );
95
+
96
+ }
97
+
98
+ function int32ToFourCC( value ) {
99
+
100
+ return String.fromCharCode(
101
+ value & 0xff,
102
+ ( value >> 8 ) & 0xff,
103
+ ( value >> 16 ) & 0xff,
104
+ ( value >> 24 ) & 0xff
105
+ );
106
+
107
+ }
108
+
109
+ function loadARGBMip( buffer, dataOffset, width, height ) {
110
+
111
+ const dataLength = width * height * 4;
112
+ const srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );
113
+ const byteArray = new Uint8Array( dataLength );
114
+ let dst = 0;
115
+ let src = 0;
116
+ for ( let y = 0; y < height; y ++ ) {
117
+
118
+ for ( let x = 0; x < width; x ++ ) {
119
+
120
+ const b = srcBuffer[ src ]; src ++;
121
+ const g = srcBuffer[ src ]; src ++;
122
+ const r = srcBuffer[ src ]; src ++;
123
+ const a = srcBuffer[ src ]; src ++;
124
+ byteArray[ dst ] = r; dst ++; //r
125
+ byteArray[ dst ] = g; dst ++; //g
126
+ byteArray[ dst ] = b; dst ++; //b
127
+ byteArray[ dst ] = a; dst ++; //a
128
+
129
+ }
130
+
131
+ }
132
+
133
+ return byteArray;
134
+
135
+ }
136
+
137
+ function loadRGBMip( buffer, dataOffset, width, height ) {
138
+
139
+ const dataLength = width * height * 3;
140
+ const srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );
141
+ const byteArray = new Uint8Array( width * height * 4 );
142
+ let dst = 0;
143
+ let src = 0;
144
+ for ( let y = 0; y < height; y ++ ) {
145
+
146
+ for ( let x = 0; x < width; x ++ ) {
147
+
148
+ const b = srcBuffer[ src ]; src ++;
149
+ const g = srcBuffer[ src ]; src ++;
150
+ const r = srcBuffer[ src ]; src ++;
151
+ byteArray[ dst ] = r; dst ++; //r
152
+ byteArray[ dst ] = g; dst ++; //g
153
+ byteArray[ dst ] = b; dst ++; //b
154
+ byteArray[ dst ] = 255; dst ++; //a
155
+
156
+ }
157
+
158
+ }
159
+
160
+ return byteArray;
161
+
162
+ }
163
+
164
+ const FOURCC_DXT1 = fourCCToInt32( 'DXT1' );
165
+ const FOURCC_DXT3 = fourCCToInt32( 'DXT3' );
166
+ const FOURCC_DXT5 = fourCCToInt32( 'DXT5' );
167
+ const FOURCC_ETC1 = fourCCToInt32( 'ETC1' );
168
+ const FOURCC_DX10 = fourCCToInt32( 'DX10' );
169
+
170
+ const headerLengthInt = 31; // The header length in 32 bit ints
171
+ const extendedHeaderLengthInt = 5; // The extended header length in 32 bit ints
172
+
173
+ // Offsets into the header array
174
+
175
+ const off_magic = 0;
176
+
177
+ const off_size = 1;
178
+ const off_flags = 2;
179
+ const off_height = 3;
180
+ const off_width = 4;
181
+
182
+ const off_mipmapCount = 7;
183
+
184
+ // const off_pfFlags = 20;
185
+ const off_pfFourCC = 21;
186
+ const off_RGBBitCount = 22;
187
+ const off_RBitMask = 23;
188
+ const off_GBitMask = 24;
189
+ const off_BBitMask = 25;
190
+ const off_ABitMask = 26;
191
+
192
+ // const off_caps = 27;
193
+ const off_caps2 = 28;
194
+ // const off_caps3 = 29;
195
+ // const off_caps4 = 30;
196
+
197
+ // If fourCC = DX10, the extended header starts after 32
198
+ const off_dxgiFormat = 0;
199
+
200
+ // Parse header
201
+
202
+ const header = new Int32Array( buffer, 0, headerLengthInt );
203
+
204
+ if ( header[ off_magic ] !== DDS_MAGIC ) {
205
+
206
+ console.error( 'THREE.DDSLoader.parse: Invalid magic number in DDS header.' );
207
+ return dds;
208
+
209
+ }
210
+
211
+ let blockBytes;
212
+
213
+ const fourCC = header[ off_pfFourCC ];
214
+
215
+ let isRGBAUncompressed = false;
216
+ let isRGBUncompressed = false;
217
+
218
+ let dataOffset = header[ off_size ] + 4;
219
+
220
+ switch ( fourCC ) {
221
+
222
+ case FOURCC_DXT1:
223
+
224
+ blockBytes = 8;
225
+ dds.format = RGB_S3TC_DXT1_Format;
226
+ break;
227
+
228
+ case FOURCC_DXT3:
229
+
230
+ blockBytes = 16;
231
+ dds.format = RGBA_S3TC_DXT3_Format;
232
+ break;
233
+
234
+ case FOURCC_DXT5:
235
+
236
+ blockBytes = 16;
237
+ dds.format = RGBA_S3TC_DXT5_Format;
238
+ break;
239
+
240
+ case FOURCC_ETC1:
241
+
242
+ blockBytes = 8;
243
+ dds.format = RGB_ETC1_Format;
244
+ break;
245
+
246
+ case FOURCC_DX10:
247
+
248
+ dataOffset += extendedHeaderLengthInt * 4;
249
+ const extendedHeader = new Int32Array( buffer, ( headerLengthInt + 1 ) * 4, extendedHeaderLengthInt );
250
+ const dxgiFormat = extendedHeader[ off_dxgiFormat ];
251
+ switch ( dxgiFormat ) {
252
+
253
+ case DXGI_FORMAT_BC6H_SF16: {
254
+
255
+ blockBytes = 16;
256
+ dds.format = RGB_BPTC_SIGNED_Format;
257
+ break;
258
+
259
+ }
260
+
261
+ case DXGI_FORMAT_BC6H_UF16: {
262
+
263
+ blockBytes = 16;
264
+ dds.format = RGB_BPTC_UNSIGNED_Format;
265
+ break;
266
+
267
+ }
268
+
269
+ default: {
270
+
271
+ console.error( 'THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ', dxgiFormat );
272
+ return dds;
273
+
274
+ }
275
+
276
+ }
277
+
278
+ break;
279
+
280
+ default:
281
+
282
+ if ( header[ off_RGBBitCount ] === 32
283
+ && header[ off_RBitMask ] & 0xff0000
284
+ && header[ off_GBitMask ] & 0xff00
285
+ && header[ off_BBitMask ] & 0xff
286
+ && header[ off_ABitMask ] & 0xff000000 ) {
287
+
288
+ isRGBAUncompressed = true;
289
+ blockBytes = 64;
290
+ dds.format = RGBAFormat;
291
+
292
+ } else if ( header[ off_RGBBitCount ] === 24
293
+ && header[ off_RBitMask ] & 0xff0000
294
+ && header[ off_GBitMask ] & 0xff00
295
+ && header[ off_BBitMask ] & 0xff ) {
296
+
297
+ isRGBUncompressed = true;
298
+ blockBytes = 64;
299
+ dds.format = RGBAFormat;
300
+
301
+ } else {
302
+
303
+ console.error( 'THREE.DDSLoader.parse: Unsupported FourCC code ', int32ToFourCC( fourCC ) );
304
+ return dds;
305
+
306
+ }
307
+
308
+ }
309
+
310
+ dds.mipmapCount = 1;
311
+
312
+ if ( header[ off_flags ] & DDSD_MIPMAPCOUNT && loadMipmaps !== false ) {
313
+
314
+ dds.mipmapCount = Math.max( 1, header[ off_mipmapCount ] );
315
+
316
+ }
317
+
318
+ const caps2 = header[ off_caps2 ];
319
+ dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;
320
+ if ( dds.isCubemap && (
321
+ ! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEX ) ||
322
+ ! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX ) ||
323
+ ! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEY ) ||
324
+ ! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY ) ||
325
+ ! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ ) ||
326
+ ! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ )
327
+ ) ) {
328
+
329
+ console.error( 'THREE.DDSLoader.parse: Incomplete cubemap faces' );
330
+ return dds;
331
+
332
+ }
333
+
334
+ dds.width = header[ off_width ];
335
+ dds.height = header[ off_height ];
336
+
337
+ // Extract mipmaps buffers
338
+
339
+ const faces = dds.isCubemap ? 6 : 1;
340
+
341
+ for ( let face = 0; face < faces; face ++ ) {
342
+
343
+ let width = dds.width;
344
+ let height = dds.height;
345
+
346
+ for ( let i = 0; i < dds.mipmapCount; i ++ ) {
347
+
348
+ let byteArray, dataLength;
349
+
350
+ if ( isRGBAUncompressed ) {
351
+
352
+ byteArray = loadARGBMip( buffer, dataOffset, width, height );
353
+ dataLength = byteArray.length;
354
+
355
+ } else if ( isRGBUncompressed ) {
356
+
357
+ byteArray = loadRGBMip( buffer, dataOffset, width, height );
358
+ dataLength = width * height * 3;
359
+
360
+ } else {
361
+
362
+ dataLength = Math.max( 4, width ) / 4 * Math.max( 4, height ) / 4 * blockBytes;
363
+ byteArray = new Uint8Array( buffer, dataOffset, dataLength );
364
+
365
+ }
366
+
367
+ const mipmap = { 'data': byteArray, 'width': width, 'height': height };
368
+ dds.mipmaps.push( mipmap );
369
+
370
+ dataOffset += dataLength;
371
+
372
+ width = Math.max( width >> 1, 1 );
373
+ height = Math.max( height >> 1, 1 );
374
+
375
+ }
376
+
377
+ }
378
+
379
+ return dds;
380
+
381
+ }
382
+
383
+ }
384
+
385
+ export { DDSLoader };