@luma.gl/engine 8.5.8 → 8.6.0-alpha.2

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 (270) hide show
  1. package/dist/animation/key-frames.d.ts +18 -0
  2. package/dist/animation/key-frames.d.ts.map +1 -0
  3. package/dist/{esm/animation → animation}/key-frames.js +13 -6
  4. package/dist/animation/key-frames.js.map +1 -0
  5. package/dist/animation/timeline.d.ts +51 -0
  6. package/dist/animation/timeline.d.ts.map +1 -0
  7. package/dist/{esm/animation → animation}/timeline.js +10 -5
  8. package/dist/animation/timeline.js.map +1 -0
  9. package/dist/bundle.d.ts +2 -0
  10. package/dist/bundle.d.ts.map +1 -0
  11. package/dist/bundle.js +5 -0
  12. package/dist/bundle.js.map +1 -0
  13. package/dist/geometries/cone-geometry.d.ts +10 -0
  14. package/dist/geometries/cone-geometry.d.ts.map +1 -0
  15. package/dist/{esm/geometries → geometries}/cone-geometry.js +2 -2
  16. package/dist/geometries/cone-geometry.js.map +1 -0
  17. package/dist/geometries/cube-geometry.d.ts +9 -0
  18. package/dist/geometries/cube-geometry.d.ts.map +1 -0
  19. package/dist/{esm/geometries → geometries}/cube-geometry.js +18 -18
  20. package/dist/geometries/cube-geometry.js.map +1 -0
  21. package/dist/geometries/cylinder-geometry.d.ts +10 -0
  22. package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
  23. package/dist/{esm/geometries → geometries}/cylinder-geometry.js +2 -2
  24. package/dist/geometries/cylinder-geometry.js.map +1 -0
  25. package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
  26. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
  27. package/dist/{esm/geometries → geometries}/ico-sphere-geometry.js +2 -2
  28. package/dist/geometries/ico-sphere-geometry.js.map +1 -0
  29. package/dist/geometries/plane-geometry.d.ts +10 -0
  30. package/dist/geometries/plane-geometry.d.ts.map +1 -0
  31. package/dist/{esm/geometries → geometries}/plane-geometry.js +5 -5
  32. package/dist/geometries/plane-geometry.js.map +1 -0
  33. package/dist/geometries/sphere-geometry.d.ts +12 -0
  34. package/dist/geometries/sphere-geometry.d.ts.map +1 -0
  35. package/dist/{esm/geometries → geometries}/sphere-geometry.js +2 -9
  36. package/dist/geometries/sphere-geometry.js.map +1 -0
  37. package/dist/geometries/truncated-cone-geometry.d.ts +13 -0
  38. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
  39. package/dist/{esm/geometries → geometries}/truncated-cone-geometry.js +1 -1
  40. package/dist/geometries/truncated-cone-geometry.js.map +1 -0
  41. package/dist/geometry/geometry-utils.d.ts +2 -0
  42. package/dist/geometry/geometry-utils.d.ts.map +1 -0
  43. package/dist/{esm/geometry → geometry}/geometry-utils.js +0 -0
  44. package/dist/geometry/geometry-utils.js.map +1 -0
  45. package/dist/geometry/geometry.d.ts +44 -0
  46. package/dist/geometry/geometry.d.ts.map +1 -0
  47. package/dist/{esm/geometry → geometry}/geometry.js +28 -19
  48. package/dist/geometry/geometry.js.map +1 -0
  49. package/dist/index.d.ts +26 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +17 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/lib/animation-loop.d.ts +149 -0
  54. package/dist/lib/animation-loop.d.ts.map +1 -0
  55. package/dist/{esm/lib → lib}/animation-loop.js +190 -143
  56. package/dist/lib/animation-loop.js.map +1 -0
  57. package/dist/lib/model-utils.d.ts +4 -0
  58. package/dist/lib/model-utils.d.ts.map +1 -0
  59. package/dist/{esm/lib → lib}/model-utils.js +3 -2
  60. package/dist/lib/model-utils.js.map +1 -0
  61. package/dist/lib/model.d.ts +109 -0
  62. package/dist/lib/model.d.ts.map +1 -0
  63. package/dist/{esm/lib → lib}/model.js +76 -20
  64. package/dist/lib/model.js.map +1 -0
  65. package/dist/lib/program-manager.d.ts +39 -0
  66. package/dist/lib/program-manager.d.ts.map +1 -0
  67. package/dist/{esm/lib → lib}/program-manager.js +29 -18
  68. package/dist/lib/program-manager.js.map +1 -0
  69. package/dist/lib/render-loop.d.ts +27 -0
  70. package/dist/lib/render-loop.d.ts.map +1 -0
  71. package/dist/lib/render-loop.js +56 -0
  72. package/dist/lib/render-loop.js.map +1 -0
  73. package/dist/transform/buffer-transform.d.ts +36 -0
  74. package/dist/transform/buffer-transform.d.ts.map +1 -0
  75. package/dist/{esm/transform → transform}/buffer-transform.js +15 -8
  76. package/dist/transform/buffer-transform.js.map +1 -0
  77. package/dist/transform/texture-transform.d.ts +57 -0
  78. package/dist/transform/texture-transform.d.ts.map +1 -0
  79. package/dist/{esm/transform → transform}/texture-transform.js +48 -16
  80. package/dist/transform/texture-transform.js.map +1 -0
  81. package/dist/transform/transform-shader-utils.d.ts +26 -0
  82. package/dist/transform/transform-shader-utils.d.ts.map +1 -0
  83. package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
  84. package/dist/transform/transform-shader-utils.js.map +1 -0
  85. package/dist/transform/transform-types.d.ts +44 -0
  86. package/dist/transform/transform-types.d.ts.map +1 -0
  87. package/dist/transform/transform-types.js +2 -0
  88. package/dist/transform/transform-types.js.map +1 -0
  89. package/dist/transform/transform.d.ts +47 -0
  90. package/dist/transform/transform.d.ts.map +1 -0
  91. package/dist/{esm/transform → transform}/transform.js +63 -43
  92. package/dist/transform/transform.js.map +1 -0
  93. package/dist/utils/clip-space.d.ts +5 -0
  94. package/dist/utils/clip-space.d.ts.map +1 -0
  95. package/dist/{esm/utils → utils}/clip-space.js +3 -17
  96. package/dist/utils/clip-space.js.map +1 -0
  97. package/package.json +11 -11
  98. package/src/animation/{key-frames.js → key-frames.ts} +18 -16
  99. package/src/animation/{timeline.js → timeline.ts} +54 -18
  100. package/src/bundle.ts +4 -0
  101. package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
  102. package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
  103. package/src/geometries/cylinder-geometry.ts +20 -0
  104. package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
  105. package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
  106. package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
  107. package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
  108. package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
  109. package/src/geometry/{geometry.js → geometry.ts} +47 -34
  110. package/src/index.ts +35 -0
  111. package/src/lib/animation-loop.ts +724 -0
  112. package/src/lib/{model-utils.js → model-utils.ts} +2 -2
  113. package/src/lib/{model.js → model.ts} +184 -66
  114. package/src/lib/{program-manager.js → program-manager.ts} +53 -34
  115. package/src/lib/render-loop.ts +56 -0
  116. package/src/transform/{buffer-transform.js → buffer-transform.ts} +42 -27
  117. package/src/transform/{texture-transform.js → texture-transform.ts} +35 -25
  118. package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
  119. package/src/transform/transform-types.ts +42 -0
  120. package/src/transform/transform.ts +189 -0
  121. package/src/utils/{clip-space.js → clip-space.ts} +4 -3
  122. package/dist/dist.js +0 -32403
  123. package/dist/dist.min.js +0 -1
  124. package/dist/es5/animation/key-frames.d.ts +0 -19
  125. package/dist/es5/animation/key-frames.js +0 -95
  126. package/dist/es5/animation/key-frames.js.map +0 -1
  127. package/dist/es5/animation/timeline.d.ts +0 -39
  128. package/dist/es5/animation/timeline.js +0 -211
  129. package/dist/es5/animation/timeline.js.map +0 -1
  130. package/dist/es5/bundle.js +0 -9
  131. package/dist/es5/bundle.js.map +0 -1
  132. package/dist/es5/geometries/cone-geometry.d.ts +0 -5
  133. package/dist/es5/geometries/cone-geometry.js +0 -59
  134. package/dist/es5/geometries/cone-geometry.js.map +0 -1
  135. package/dist/es5/geometries/cube-geometry.d.ts +0 -5
  136. package/dist/es5/geometries/cube-geometry.js +0 -75
  137. package/dist/es5/geometries/cube-geometry.js.map +0 -1
  138. package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
  139. package/dist/es5/geometries/cylinder-geometry.js +0 -55
  140. package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
  141. package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
  142. package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
  143. package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
  144. package/dist/es5/geometries/index.d.ts +0 -7
  145. package/dist/es5/geometries/index.js +0 -64
  146. package/dist/es5/geometries/index.js.map +0 -1
  147. package/dist/es5/geometries/plane-geometry.d.ts +0 -5
  148. package/dist/es5/geometries/plane-geometry.js +0 -168
  149. package/dist/es5/geometries/plane-geometry.js.map +0 -1
  150. package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
  151. package/dist/es5/geometries/sphere-geometry.js +0 -152
  152. package/dist/es5/geometries/sphere-geometry.js.map +0 -1
  153. package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
  154. package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
  155. package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
  156. package/dist/es5/geometry/geometry-utils.d.ts +0 -1
  157. package/dist/es5/geometry/geometry-utils.js +0 -49
  158. package/dist/es5/geometry/geometry-utils.js.map +0 -1
  159. package/dist/es5/geometry/geometry.d.ts +0 -25
  160. package/dist/es5/geometry/geometry.js +0 -150
  161. package/dist/es5/geometry/geometry.js.map +0 -1
  162. package/dist/es5/index.d.ts +0 -19
  163. package/dist/es5/index.js +0 -128
  164. package/dist/es5/index.js.map +0 -1
  165. package/dist/es5/lib/animation-loop.d.ts +0 -158
  166. package/dist/es5/lib/animation-loop.js +0 -642
  167. package/dist/es5/lib/animation-loop.js.map +0 -1
  168. package/dist/es5/lib/model-utils.d.ts +0 -3
  169. package/dist/es5/lib/model-utils.js +0 -110
  170. package/dist/es5/lib/model-utils.js.map +0 -1
  171. package/dist/es5/lib/model.d.ts +0 -214
  172. package/dist/es5/lib/model.js +0 -584
  173. package/dist/es5/lib/model.js.map +0 -1
  174. package/dist/es5/lib/program-manager.d.ts +0 -79
  175. package/dist/es5/lib/program-manager.js +0 -238
  176. package/dist/es5/lib/program-manager.js.map +0 -1
  177. package/dist/es5/transform/buffer-transform.d.ts +0 -13
  178. package/dist/es5/transform/buffer-transform.js +0 -294
  179. package/dist/es5/transform/buffer-transform.js.map +0 -1
  180. package/dist/es5/transform/resource-transform.d.ts +0 -16
  181. package/dist/es5/transform/texture-transform.d.ts +0 -16
  182. package/dist/es5/transform/texture-transform.js +0 -405
  183. package/dist/es5/transform/texture-transform.js.map +0 -1
  184. package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
  185. package/dist/es5/transform/transform-shader-utils.js +0 -160
  186. package/dist/es5/transform/transform-shader-utils.js.map +0 -1
  187. package/dist/es5/transform/transform.d.ts +0 -33
  188. package/dist/es5/transform/transform.js +0 -274
  189. package/dist/es5/transform/transform.js.map +0 -1
  190. package/dist/es5/utils/clip-space.d.ts +0 -5
  191. package/dist/es5/utils/clip-space.js +0 -72
  192. package/dist/es5/utils/clip-space.js.map +0 -1
  193. package/dist/esm/animation/key-frames.d.ts +0 -19
  194. package/dist/esm/animation/key-frames.js.map +0 -1
  195. package/dist/esm/animation/timeline.d.ts +0 -39
  196. package/dist/esm/animation/timeline.js.map +0 -1
  197. package/dist/esm/bundle.js +0 -7
  198. package/dist/esm/bundle.js.map +0 -1
  199. package/dist/esm/geometries/cone-geometry.d.ts +0 -5
  200. package/dist/esm/geometries/cone-geometry.js.map +0 -1
  201. package/dist/esm/geometries/cube-geometry.d.ts +0 -5
  202. package/dist/esm/geometries/cube-geometry.js.map +0 -1
  203. package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
  204. package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
  205. package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
  206. package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
  207. package/dist/esm/geometries/index.d.ts +0 -7
  208. package/dist/esm/geometries/index.js +0 -8
  209. package/dist/esm/geometries/index.js.map +0 -1
  210. package/dist/esm/geometries/plane-geometry.d.ts +0 -5
  211. package/dist/esm/geometries/plane-geometry.js.map +0 -1
  212. package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
  213. package/dist/esm/geometries/sphere-geometry.js.map +0 -1
  214. package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
  215. package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
  216. package/dist/esm/geometry/geometry-utils.d.ts +0 -1
  217. package/dist/esm/geometry/geometry-utils.js.map +0 -1
  218. package/dist/esm/geometry/geometry.d.ts +0 -25
  219. package/dist/esm/geometry/geometry.js.map +0 -1
  220. package/dist/esm/index.d.ts +0 -19
  221. package/dist/esm/index.js +0 -16
  222. package/dist/esm/index.js.map +0 -1
  223. package/dist/esm/lib/animation-loop.d.ts +0 -158
  224. package/dist/esm/lib/animation-loop.js.map +0 -1
  225. package/dist/esm/lib/model-utils.d.ts +0 -3
  226. package/dist/esm/lib/model-utils.js.map +0 -1
  227. package/dist/esm/lib/model.d.ts +0 -214
  228. package/dist/esm/lib/model.js.map +0 -1
  229. package/dist/esm/lib/program-manager.d.ts +0 -79
  230. package/dist/esm/lib/program-manager.js.map +0 -1
  231. package/dist/esm/transform/buffer-transform.d.ts +0 -13
  232. package/dist/esm/transform/buffer-transform.js.map +0 -1
  233. package/dist/esm/transform/resource-transform.d.ts +0 -16
  234. package/dist/esm/transform/texture-transform.d.ts +0 -16
  235. package/dist/esm/transform/texture-transform.js.map +0 -1
  236. package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
  237. package/dist/esm/transform/transform-shader-utils.js.map +0 -1
  238. package/dist/esm/transform/transform.d.ts +0 -33
  239. package/dist/esm/transform/transform.js.map +0 -1
  240. package/dist/esm/utils/clip-space.d.ts +0 -5
  241. package/dist/esm/utils/clip-space.js.map +0 -1
  242. package/src/animation/key-frames.d.ts +0 -19
  243. package/src/animation/timeline.d.ts +0 -39
  244. package/src/bundle.js +0 -7
  245. package/src/geometries/cone-geometry.d.ts +0 -5
  246. package/src/geometries/cube-geometry.d.ts +0 -5
  247. package/src/geometries/cylinder-geometry.d.ts +0 -5
  248. package/src/geometries/cylinder-geometry.js +0 -14
  249. package/src/geometries/ico-sphere-geometry.d.ts +0 -5
  250. package/src/geometries/index.d.ts +0 -7
  251. package/src/geometries/index.js +0 -7
  252. package/src/geometries/plane-geometry.d.ts +0 -5
  253. package/src/geometries/sphere-geometry.d.ts +0 -5
  254. package/src/geometries/truncated-cone-geometry.d.ts +0 -5
  255. package/src/geometry/geometry-utils.d.ts +0 -1
  256. package/src/geometry/geometry.d.ts +0 -25
  257. package/src/index.d.ts +0 -19
  258. package/src/index.js +0 -22
  259. package/src/lib/animation-loop.d.ts +0 -158
  260. package/src/lib/animation-loop.js +0 -601
  261. package/src/lib/model-utils.d.ts +0 -3
  262. package/src/lib/model.d.ts +0 -214
  263. package/src/lib/program-manager.d.ts +0 -79
  264. package/src/transform/buffer-transform.d.ts +0 -13
  265. package/src/transform/resource-transform.d.ts +0 -16
  266. package/src/transform/texture-transform.d.ts +0 -16
  267. package/src/transform/transform-shader-utils.d.ts +0 -31
  268. package/src/transform/transform.d.ts +0 -33
  269. package/src/transform/transform.js +0 -177
  270. package/src/utils/clip-space.d.ts +0 -5
@@ -1,79 +0,0 @@
1
- export default class ProgramManager {
2
- static getDefaultProgramManager(gl: WebGLRenderingContext): any;
3
- constructor(gl: WebGLRenderingContext);
4
- addDefaultModule(module: any): void;
5
- removeDefaultModule(module: any): void;
6
- addShaderHook(hook: any, opts: any): void;
7
- get(props?: {}): any;
8
- getUniforms(program: any): any;
9
- release(program: any): void;
10
- }
11
-
12
- /*
13
- import {
14
- VertexShader,
15
- FragmentShader,
16
- Program
17
- } from '@luma.gl/webgl';
18
-
19
- import {
20
- Uniforms,
21
- UniformsOptions
22
- } from '@luma.gl/webgl/src/classes/uniforms'
23
-
24
- import {
25
- ShaderModule,
26
- ShaderModuleObject,
27
- InjectionMap
28
- } from '@luma.gl/shadertools/src/lib/shader-module'
29
-
30
- import {
31
- DefineMap
32
- } from '@luma.gl/shadertools/src/lib/assemble-shaders'
33
-
34
- interface ProgramManagerProps {
35
- vs?: VertexShader | string
36
- fs?: FragmentShader | string
37
- modules?: Array<ShaderModuleObject | string>
38
- defines?: DefineMap
39
- inject?: InjectionMap
40
- varyings?: Array<string>
41
- bufferMode?: number
42
- transpileToGLSL100?: boolean
43
- }
44
-
45
- export default class ProgramManager {
46
- stateHash: number
47
- gl: WebGLRenderingContext
48
- _programCache: {
49
- [programHash: string]: Program
50
- }
51
- _getUniforms: {
52
- [programHash: string]: (opts: UniformsOptions, context: Uniforms) => Uniforms
53
- }
54
- _registeredModules: {} // TODO: Remove? This isn't used anywhere in luma.gl
55
- _hookFunctions: Array<{
56
- hook: string
57
- header?: string
58
- footer?: string
59
- }>
60
- _defaultModules: Array<ShaderModuleObject | ShaderModule>
61
- _hashes: {
62
- [key: string]: number
63
- }
64
- _hashCounter: number
65
- _useCounts: {
66
- [programHash: string]: number
67
- }
68
- static getDefaultProgramManager(gl: WebGLRenderingContext): ProgramManager;
69
- constructor(gl: WebGLRenderingContext);
70
- addDefaultModule(module: ShaderModuleObject | ShaderModule): void;
71
- removeDefaultModule(module: ShaderModuleObject | ShaderModule | string): void;
72
- addShaderHook(hook: string, opts?: {header?: string, footer?: string}): void;
73
- get(props?: ProgramManagerProps): Program;
74
- getUniforms(program: Program): ((opts: UniformsOptions, context: Uniforms) => Uniforms) | null;
75
- release(program: Program): void;
76
- _getHash(key: string): number;
77
- _getModuleList(appModules?: Array<ShaderModuleObject | ShaderModule>): Array<ShaderModuleObject | ShaderModule>;
78
- }
79
- */
@@ -1,238 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _shadertools = require("@luma.gl/shadertools");
15
-
16
- var _webgl = require("@luma.gl/webgl");
17
-
18
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
-
20
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
-
22
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
-
24
- var ProgramManager = function () {
25
- (0, _createClass2.default)(ProgramManager, null, [{
26
- key: "getDefaultProgramManager",
27
- value: function getDefaultProgramManager(gl) {
28
- gl.luma = gl.luma || {};
29
- gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);
30
- return gl.luma.defaultProgramManager;
31
- }
32
- }]);
33
-
34
- function ProgramManager(gl) {
35
- (0, _classCallCheck2.default)(this, ProgramManager);
36
- this.gl = gl;
37
- this._programCache = {};
38
- this._getUniforms = {};
39
- this._registeredModules = {};
40
- this._hookFunctions = [];
41
- this._defaultModules = [];
42
- this._hashes = {};
43
- this._hashCounter = 0;
44
- this.stateHash = 0;
45
- this._useCounts = {};
46
- }
47
-
48
- (0, _createClass2.default)(ProgramManager, [{
49
- key: "addDefaultModule",
50
- value: function addDefaultModule(module) {
51
- if (!this._defaultModules.find(function (m) {
52
- return m.name === module.name;
53
- })) {
54
- this._defaultModules.push(module);
55
- }
56
-
57
- this.stateHash++;
58
- }
59
- }, {
60
- key: "removeDefaultModule",
61
- value: function removeDefaultModule(module) {
62
- var moduleName = typeof module === 'string' ? module : module.name;
63
- this._defaultModules = this._defaultModules.filter(function (m) {
64
- return m.name !== moduleName;
65
- });
66
- this.stateHash++;
67
- }
68
- }, {
69
- key: "addShaderHook",
70
- value: function addShaderHook(hook, opts) {
71
- if (opts) {
72
- hook = Object.assign(opts, {
73
- hook: hook
74
- });
75
- }
76
-
77
- this._hookFunctions.push(hook);
78
-
79
- this.stateHash++;
80
- }
81
- }, {
82
- key: "get",
83
- value: function get() {
84
- var _this = this;
85
-
86
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
87
- var _props$vs = props.vs,
88
- vs = _props$vs === void 0 ? '' : _props$vs,
89
- _props$fs = props.fs,
90
- fs = _props$fs === void 0 ? '' : _props$fs,
91
- _props$defines = props.defines,
92
- defines = _props$defines === void 0 ? {} : _props$defines,
93
- _props$inject = props.inject,
94
- inject = _props$inject === void 0 ? {} : _props$inject,
95
- _props$varyings = props.varyings,
96
- varyings = _props$varyings === void 0 ? [] : _props$varyings,
97
- _props$bufferMode = props.bufferMode,
98
- bufferMode = _props$bufferMode === void 0 ? 0x8c8d : _props$bufferMode,
99
- _props$transpileToGLS = props.transpileToGLSL100,
100
- transpileToGLSL100 = _props$transpileToGLS === void 0 ? false : _props$transpileToGLS;
101
-
102
- var modules = this._getModuleList(props.modules);
103
-
104
- var vsHash = this._getHash(vs);
105
-
106
- var fsHash = this._getHash(fs);
107
-
108
- var moduleHashes = modules.map(function (m) {
109
- return _this._getHash(m.name);
110
- }).sort();
111
- var varyingHashes = varyings.map(function (v) {
112
- return _this._getHash(v);
113
- });
114
- var defineKeys = Object.keys(defines).sort();
115
- var injectKeys = Object.keys(inject).sort();
116
- var defineHashes = [];
117
- var injectHashes = [];
118
-
119
- var _iterator = _createForOfIteratorHelper(defineKeys),
120
- _step;
121
-
122
- try {
123
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
124
- var key = _step.value;
125
- defineHashes.push(this._getHash(key));
126
- defineHashes.push(this._getHash(defines[key]));
127
- }
128
- } catch (err) {
129
- _iterator.e(err);
130
- } finally {
131
- _iterator.f();
132
- }
133
-
134
- var _iterator2 = _createForOfIteratorHelper(injectKeys),
135
- _step2;
136
-
137
- try {
138
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
139
- var _key = _step2.value;
140
- injectHashes.push(this._getHash(_key));
141
- injectHashes.push(this._getHash(inject[_key]));
142
- }
143
- } catch (err) {
144
- _iterator2.e(err);
145
- } finally {
146
- _iterator2.f();
147
- }
148
-
149
- var hash = "".concat(vsHash, "/").concat(fsHash, "D").concat(defineHashes.join('/'), "M").concat(moduleHashes.join('/'), "I").concat(injectHashes.join('/'), "V").concat(varyingHashes.join('/'), "H").concat(this.stateHash, "B").concat(bufferMode).concat(transpileToGLSL100 ? 'T' : '');
150
-
151
- if (!this._programCache[hash]) {
152
- var assembled = (0, _shadertools.assembleShaders)(this.gl, {
153
- vs: vs,
154
- fs: fs,
155
- modules: modules,
156
- inject: inject,
157
- defines: defines,
158
- hookFunctions: this._hookFunctions,
159
- transpileToGLSL100: transpileToGLSL100
160
- });
161
- this._programCache[hash] = new _webgl.Program(this.gl, {
162
- hash: hash,
163
- vs: assembled.vs,
164
- fs: assembled.fs,
165
- varyings: varyings,
166
- bufferMode: bufferMode
167
- });
168
-
169
- this._getUniforms[hash] = assembled.getUniforms || function (x) {};
170
-
171
- this._useCounts[hash] = 0;
172
- }
173
-
174
- this._useCounts[hash]++;
175
- return this._programCache[hash];
176
- }
177
- }, {
178
- key: "getUniforms",
179
- value: function getUniforms(program) {
180
- return this._getUniforms[program.hash] || null;
181
- }
182
- }, {
183
- key: "release",
184
- value: function release(program) {
185
- var hash = program.hash;
186
- this._useCounts[hash]--;
187
-
188
- if (this._useCounts[hash] === 0) {
189
- this._programCache[hash].delete();
190
-
191
- delete this._programCache[hash];
192
- delete this._getUniforms[hash];
193
- delete this._useCounts[hash];
194
- }
195
- }
196
- }, {
197
- key: "_getHash",
198
- value: function _getHash(key) {
199
- if (this._hashes[key] === undefined) {
200
- this._hashes[key] = this._hashCounter++;
201
- }
202
-
203
- return this._hashes[key];
204
- }
205
- }, {
206
- key: "_getModuleList",
207
- value: function _getModuleList() {
208
- var appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
209
- var modules = new Array(this._defaultModules.length + appModules.length);
210
- var seen = {};
211
- var count = 0;
212
-
213
- for (var i = 0, len = this._defaultModules.length; i < len; ++i) {
214
- var module = this._defaultModules[i];
215
- var name = module.name;
216
- modules[count++] = module;
217
- seen[name] = true;
218
- }
219
-
220
- for (var _i = 0, _len = appModules.length; _i < _len; ++_i) {
221
- var _module = appModules[_i];
222
- var _name = _module.name;
223
-
224
- if (!seen[_name]) {
225
- modules[count++] = _module;
226
- seen[_name] = true;
227
- }
228
- }
229
-
230
- modules.length = count;
231
- return modules;
232
- }
233
- }]);
234
- return ProgramManager;
235
- }();
236
-
237
- exports.default = ProgramManager;
238
- //# sourceMappingURL=program-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/program-manager.js"],"names":["ProgramManager","gl","luma","defaultProgramManager","_programCache","_getUniforms","_registeredModules","_hookFunctions","_defaultModules","_hashes","_hashCounter","stateHash","_useCounts","module","find","m","name","push","moduleName","filter","hook","opts","Object","assign","props","vs","fs","defines","inject","varyings","bufferMode","transpileToGLSL100","modules","_getModuleList","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","hash","join","assembled","hookFunctions","Program","getUniforms","x","program","delete","undefined","appModules","Array","length","seen","count","i","len"],"mappings":"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","sourcesContent":["import {assembleShaders} from '@luma.gl/shadertools';\nimport {Program} from '@luma.gl/webgl';\n\nexport default class ProgramManager {\n static getDefaultProgramManager(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);\n\n return gl.luma.defaultProgramManager;\n }\n\n constructor(gl) {\n this.gl = gl;\n\n this._programCache = {};\n this._getUniforms = {};\n this._registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n this._hookFunctions = [];\n this._defaultModules = [];\n\n this._hashes = {};\n this._hashCounter = 0;\n this.stateHash = 0; // Used change hashing if hooks are modified\n this._useCounts = {};\n }\n\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === module.name)) {\n this._defaultModules.push(module);\n }\n\n this.stateHash++;\n }\n\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n\n this._hookFunctions.push(hook);\n\n this.stateHash++;\n }\n\n get(props = {}) {\n const {\n vs = '',\n fs = '',\n defines = {},\n inject = {},\n varyings = [],\n bufferMode = 0x8c8d,\n transpileToGLSL100 = false\n } = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const vsHash = this._getHash(vs);\n const fsHash = this._getHash(fs);\n const moduleHashes = modules.map(m => this._getHash(m.name)).sort();\n const varyingHashes = varyings.map(v => this._getHash(v));\n\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(defines[key]));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${\n transpileToGLSL100 ? 'T' : ''\n }`;\n\n if (!this._programCache[hash]) {\n const assembled = assembleShaders(this.gl, {\n vs,\n fs,\n modules,\n inject,\n defines,\n hookFunctions: this._hookFunctions,\n transpileToGLSL100\n });\n\n this._programCache[hash] = new Program(this.gl, {\n hash,\n vs: assembled.vs,\n fs: assembled.fs,\n varyings,\n bufferMode\n });\n\n this._getUniforms[hash] = assembled.getUniforms || (x => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return this._programCache[hash];\n }\n\n getUniforms(program) {\n return this._getUniforms[program.hash] || null;\n }\n\n release(program) {\n const hash = program.hash;\n this._useCounts[hash]--;\n\n if (this._useCounts[hash] === 0) {\n this._programCache[hash].delete();\n delete this._programCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n\n return this._hashes[key];\n }\n\n // Dedup and combine with default modules\n _getModuleList(appModules = []) {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n"],"file":"program-manager.js"}
@@ -1,13 +0,0 @@
1
- import {TransformDrawOptions, TransformModelProps} from './resource-transform';
2
-
3
- export default class BufferTransform {
4
- constructor(gl: WebGLRenderingContext, props?: {});
5
- setupResources(opts: any): void;
6
- updateModelProps(props?: {}): TransformModelProps;
7
- getDrawOptions(opts?: {}): TransformDrawOptions;
8
- swap(): boolean;
9
- update(opts?: {}): void;
10
- getBuffer(varyingName: any): any;
11
- getData(options?: {varyingName: string}): any;
12
- delete(): void;
13
- }
@@ -1,294 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _gltools = require("@luma.gl/gltools");
15
-
16
- var _webgl = require("@luma.gl/webgl");
17
-
18
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
-
20
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
-
22
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
-
24
- var BufferTransform = function () {
25
- function BufferTransform(gl) {
26
- var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27
- (0, _classCallCheck2.default)(this, BufferTransform);
28
- this.gl = gl;
29
- this.currentIndex = 0;
30
- this.feedbackMap = {};
31
- this.varyings = null;
32
- this.bindings = [];
33
- this.resources = {};
34
-
35
- this._initialize(props);
36
-
37
- Object.seal(this);
38
- }
39
-
40
- (0, _createClass2.default)(BufferTransform, [{
41
- key: "setupResources",
42
- value: function setupResources(opts) {
43
- var _iterator = _createForOfIteratorHelper(this.bindings),
44
- _step;
45
-
46
- try {
47
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
48
- var binding = _step.value;
49
-
50
- this._setupTransformFeedback(binding, opts);
51
- }
52
- } catch (err) {
53
- _iterator.e(err);
54
- } finally {
55
- _iterator.f();
56
- }
57
- }
58
- }, {
59
- key: "updateModelProps",
60
- value: function updateModelProps() {
61
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
62
- var varyings = this.varyings;
63
-
64
- if (varyings.length > 0) {
65
- props = Object.assign({}, props, {
66
- varyings: varyings
67
- });
68
- }
69
-
70
- return props;
71
- }
72
- }, {
73
- key: "getDrawOptions",
74
- value: function getDrawOptions() {
75
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
76
- var binding = this.bindings[this.currentIndex];
77
- var sourceBuffers = binding.sourceBuffers,
78
- transformFeedback = binding.transformFeedback;
79
- var attributes = Object.assign({}, sourceBuffers, opts.attributes);
80
- return {
81
- attributes: attributes,
82
- transformFeedback: transformFeedback
83
- };
84
- }
85
- }, {
86
- key: "swap",
87
- value: function swap() {
88
- if (this.feedbackMap) {
89
- this.currentIndex = this._getNextIndex();
90
- return true;
91
- }
92
-
93
- return false;
94
- }
95
- }, {
96
- key: "update",
97
- value: function update() {
98
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
99
-
100
- this._setupBuffers(opts);
101
- }
102
- }, {
103
- key: "getBuffer",
104
- value: function getBuffer(varyingName) {
105
- var feedbackBuffers = this.bindings[this.currentIndex].feedbackBuffers;
106
- var bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;
107
-
108
- if (!bufferOrParams) {
109
- return null;
110
- }
111
-
112
- return bufferOrParams instanceof _webgl.Buffer ? bufferOrParams : bufferOrParams.buffer;
113
- }
114
- }, {
115
- key: "getData",
116
- value: function getData() {
117
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
118
- var varyingName = options.varyingName;
119
- var buffer = this.getBuffer(varyingName);
120
-
121
- if (buffer) {
122
- return buffer.getData();
123
- }
124
-
125
- return null;
126
- }
127
- }, {
128
- key: "delete",
129
- value: function _delete() {
130
- for (var name in this.resources) {
131
- this.resources[name].delete();
132
- }
133
- }
134
- }, {
135
- key: "_initialize",
136
- value: function _initialize() {
137
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
138
-
139
- this._setupBuffers(props);
140
-
141
- this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);
142
-
143
- if (this.varyings.length > 0) {
144
- (0, _webgl.assert)((0, _gltools.isWebGL2)(this.gl));
145
- }
146
- }
147
- }, {
148
- key: "_getFeedbackBuffers",
149
- value: function _getFeedbackBuffers(props) {
150
- var _props$sourceBuffers = props.sourceBuffers,
151
- sourceBuffers = _props$sourceBuffers === void 0 ? {} : _props$sourceBuffers;
152
- var feedbackBuffers = {};
153
-
154
- if (this.bindings[this.currentIndex]) {
155
- Object.assign(feedbackBuffers, this.bindings[this.currentIndex].feedbackBuffers);
156
- }
157
-
158
- if (this.feedbackMap) {
159
- for (var sourceName in this.feedbackMap) {
160
- var feedbackName = this.feedbackMap[sourceName];
161
-
162
- if (sourceName in sourceBuffers) {
163
- feedbackBuffers[feedbackName] = sourceName;
164
- }
165
- }
166
- }
167
-
168
- Object.assign(feedbackBuffers, props.feedbackBuffers);
169
-
170
- for (var bufferName in feedbackBuffers) {
171
- var bufferOrRef = feedbackBuffers[bufferName];
172
-
173
- if (typeof bufferOrRef === 'string') {
174
- var sourceBuffer = sourceBuffers[bufferOrRef];
175
- var byteLength = sourceBuffer.byteLength,
176
- usage = sourceBuffer.usage,
177
- accessor = sourceBuffer.accessor;
178
- feedbackBuffers[bufferName] = this._createNewBuffer(bufferName, {
179
- byteLength: byteLength,
180
- usage: usage,
181
- accessor: accessor
182
- });
183
- }
184
- }
185
-
186
- return feedbackBuffers;
187
- }
188
- }, {
189
- key: "_setupBuffers",
190
- value: function _setupBuffers() {
191
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
192
- var _props$sourceBuffers2 = props.sourceBuffers,
193
- sourceBuffers = _props$sourceBuffers2 === void 0 ? null : _props$sourceBuffers2;
194
- Object.assign(this.feedbackMap, props.feedbackMap);
195
-
196
- var feedbackBuffers = this._getFeedbackBuffers(props);
197
-
198
- this._updateBindings({
199
- sourceBuffers: sourceBuffers,
200
- feedbackBuffers: feedbackBuffers
201
- });
202
- }
203
- }, {
204
- key: "_setupTransformFeedback",
205
- value: function _setupTransformFeedback(binding, _ref) {
206
- var model = _ref.model;
207
- var program = model.program;
208
- binding.transformFeedback = new _webgl.TransformFeedback(this.gl, {
209
- program: program,
210
- buffers: binding.feedbackBuffers
211
- });
212
- }
213
- }, {
214
- key: "_updateBindings",
215
- value: function _updateBindings(opts) {
216
- this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);
217
-
218
- if (this.feedbackMap) {
219
- var _this$_swapBuffers = this._swapBuffers(this.bindings[this.currentIndex]),
220
- sourceBuffers = _this$_swapBuffers.sourceBuffers,
221
- feedbackBuffers = _this$_swapBuffers.feedbackBuffers;
222
-
223
- var nextIndex = this._getNextIndex();
224
-
225
- this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {
226
- sourceBuffers: sourceBuffers,
227
- feedbackBuffers: feedbackBuffers
228
- });
229
- }
230
- }
231
- }, {
232
- key: "_updateBinding",
233
- value: function _updateBinding(binding, opts) {
234
- if (!binding) {
235
- return {
236
- sourceBuffers: Object.assign({}, opts.sourceBuffers),
237
- feedbackBuffers: Object.assign({}, opts.feedbackBuffers)
238
- };
239
- }
240
-
241
- Object.assign(binding.sourceBuffers, opts.sourceBuffers);
242
- Object.assign(binding.feedbackBuffers, opts.feedbackBuffers);
243
-
244
- if (binding.transformFeedback) {
245
- binding.transformFeedback.setBuffers(binding.feedbackBuffers);
246
- }
247
-
248
- return binding;
249
- }
250
- }, {
251
- key: "_swapBuffers",
252
- value: function _swapBuffers(opts) {
253
- if (!this.feedbackMap) {
254
- return null;
255
- }
256
-
257
- var sourceBuffers = Object.assign({}, opts.sourceBuffers);
258
- var feedbackBuffers = Object.assign({}, opts.feedbackBuffers);
259
-
260
- for (var srcName in this.feedbackMap) {
261
- var dstName = this.feedbackMap[srcName];
262
- sourceBuffers[srcName] = opts.feedbackBuffers[dstName];
263
- feedbackBuffers[dstName] = opts.sourceBuffers[srcName];
264
- (0, _webgl.assert)(feedbackBuffers[dstName] instanceof _webgl.Buffer);
265
- }
266
-
267
- return {
268
- sourceBuffers: sourceBuffers,
269
- feedbackBuffers: feedbackBuffers
270
- };
271
- }
272
- }, {
273
- key: "_createNewBuffer",
274
- value: function _createNewBuffer(name, opts) {
275
- var buffer = new _webgl.Buffer(this.gl, opts);
276
-
277
- if (this.resources[name]) {
278
- this.resources[name].delete();
279
- }
280
-
281
- this.resources[name] = buffer;
282
- return buffer;
283
- }
284
- }, {
285
- key: "_getNextIndex",
286
- value: function _getNextIndex() {
287
- return (this.currentIndex + 1) % 2;
288
- }
289
- }]);
290
- return BufferTransform;
291
- }();
292
-
293
- exports.default = BufferTransform;
294
- //# sourceMappingURL=buffer-transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/transform/buffer-transform.js"],"names":["BufferTransform","gl","props","currentIndex","feedbackMap","varyings","bindings","resources","_initialize","Object","seal","opts","binding","_setupTransformFeedback","length","assign","sourceBuffers","transformFeedback","attributes","_getNextIndex","_setupBuffers","varyingName","feedbackBuffers","bufferOrParams","Buffer","buffer","options","getBuffer","getData","name","delete","keys","sourceName","feedbackName","bufferName","bufferOrRef","sourceBuffer","byteLength","usage","accessor","_createNewBuffer","_getFeedbackBuffers","_updateBindings","model","program","TransformFeedback","buffers","_updateBinding","_swapBuffers","nextIndex","setBuffers","srcName","dstName"],"mappings":"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","sourcesContent":["import {isWebGL2} from '@luma.gl/gltools';\nimport {Buffer, TransformFeedback} from '@luma.gl/webgl';\nimport {assert} from '@luma.gl/webgl';\n\nexport default class BufferTransform {\n constructor(gl, props = {}) {\n this.gl = gl;\n this.currentIndex = 0;\n this.feedbackMap = {};\n this.varyings = null; // varyings array\n this.bindings = []; // each element is an object : {sourceBuffers, feedbackBuffers, transformFeedback}\n\n this.resources = {}; // resources to be deleted\n\n this._initialize(props);\n Object.seal(this);\n }\n\n setupResources(opts) {\n for (const binding of this.bindings) {\n this._setupTransformFeedback(binding, opts);\n }\n }\n\n updateModelProps(props = {}) {\n const {varyings} = this;\n if (varyings.length > 0) {\n props = Object.assign({}, props, {varyings});\n }\n return props;\n }\n\n getDrawOptions(opts = {}) {\n const binding = this.bindings[this.currentIndex];\n const {sourceBuffers, transformFeedback} = binding;\n const attributes = Object.assign({}, sourceBuffers, opts.attributes);\n\n return {attributes, transformFeedback};\n }\n\n swap() {\n if (this.feedbackMap) {\n this.currentIndex = this._getNextIndex();\n return true;\n }\n return false;\n }\n\n // update source and/or feedbackBuffers\n update(opts = {}) {\n this._setupBuffers(opts);\n }\n\n // returns current feedbackBuffer of given name\n getBuffer(varyingName) {\n const {feedbackBuffers} = this.bindings[this.currentIndex];\n const bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;\n if (!bufferOrParams) {\n return null;\n }\n return bufferOrParams instanceof Buffer ? bufferOrParams : bufferOrParams.buffer;\n }\n\n getData(options = {}) {\n const {varyingName} = options;\n const buffer = this.getBuffer(varyingName);\n if (buffer) {\n return buffer.getData();\n }\n return null;\n }\n\n // Delete owned resources.\n delete() {\n for (const name in this.resources) {\n this.resources[name].delete();\n }\n }\n\n // Private\n\n _initialize(props = {}) {\n this._setupBuffers(props);\n this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);\n if (this.varyings.length > 0) {\n // if writting to buffers make sure it is WebGL2\n assert(isWebGL2(this.gl));\n }\n }\n\n // auto create feedback buffers if requested\n _getFeedbackBuffers(props) {\n const {sourceBuffers = {}} = props;\n const feedbackBuffers = {};\n if (this.bindings[this.currentIndex]) {\n // this gurantees a partial feedback buffer set doesn't update\n // previously set buffers during auto creation mode.\n Object.assign(feedbackBuffers, this.bindings[this.currentIndex].feedbackBuffers);\n }\n if (this.feedbackMap) {\n // feedbackMap is defined as sourceBuffer as key and feedbackBuffer name as object\n for (const sourceName in this.feedbackMap) {\n const feedbackName = this.feedbackMap[sourceName];\n if (sourceName in sourceBuffers) {\n feedbackBuffers[feedbackName] = sourceName;\n }\n }\n }\n Object.assign(feedbackBuffers, props.feedbackBuffers);\n for (const bufferName in feedbackBuffers) {\n const bufferOrRef = feedbackBuffers[bufferName];\n if (typeof bufferOrRef === 'string') {\n // Create new buffer with same layout and settings as source buffer\n const sourceBuffer = sourceBuffers[bufferOrRef];\n const {byteLength, usage, accessor} = sourceBuffer;\n feedbackBuffers[bufferName] = this._createNewBuffer(bufferName, {\n byteLength,\n usage,\n accessor\n });\n }\n }\n\n return feedbackBuffers;\n }\n\n _setupBuffers(props = {}) {\n const {sourceBuffers = null} = props;\n Object.assign(this.feedbackMap, props.feedbackMap);\n const feedbackBuffers = this._getFeedbackBuffers(props);\n this._updateBindings({sourceBuffers, feedbackBuffers});\n }\n\n _setupTransformFeedback(binding, {model}) {\n const {program} = model;\n binding.transformFeedback = new TransformFeedback(this.gl, {\n program,\n buffers: binding.feedbackBuffers\n });\n }\n\n _updateBindings(opts) {\n this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);\n if (this.feedbackMap) {\n const {sourceBuffers, feedbackBuffers} = this._swapBuffers(this.bindings[this.currentIndex]);\n const nextIndex = this._getNextIndex();\n this.bindings[nextIndex] = this._updateBinding(this.bindings[nextIndex], {\n sourceBuffers,\n feedbackBuffers\n });\n }\n }\n\n _updateBinding(binding, opts) {\n if (!binding) {\n return {\n sourceBuffers: Object.assign({}, opts.sourceBuffers),\n feedbackBuffers: Object.assign({}, opts.feedbackBuffers)\n };\n }\n Object.assign(binding.sourceBuffers, opts.sourceBuffers);\n Object.assign(binding.feedbackBuffers, opts.feedbackBuffers);\n if (binding.transformFeedback) {\n binding.transformFeedback.setBuffers(binding.feedbackBuffers);\n }\n return binding;\n }\n\n _swapBuffers(opts) {\n if (!this.feedbackMap) {\n return null;\n }\n const sourceBuffers = Object.assign({}, opts.sourceBuffers);\n const feedbackBuffers = Object.assign({}, opts.feedbackBuffers);\n for (const srcName in this.feedbackMap) {\n const dstName = this.feedbackMap[srcName];\n sourceBuffers[srcName] = opts.feedbackBuffers[dstName];\n feedbackBuffers[dstName] = opts.sourceBuffers[srcName];\n\n // make sure the new destination buffer is a Buffer object\n assert(feedbackBuffers[dstName] instanceof Buffer);\n }\n return {sourceBuffers, feedbackBuffers};\n }\n\n // Create a buffer and add to list of buffers to be deleted.\n _createNewBuffer(name, opts) {\n const buffer = new Buffer(this.gl, opts);\n if (this.resources[name]) {\n this.resources[name].delete();\n }\n this.resources[name] = buffer;\n return buffer;\n }\n\n _getNextIndex() {\n return (this.currentIndex + 1) % 2;\n }\n}\n"],"file":"buffer-transform.js"}