@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,584 +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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _gltools = require("@luma.gl/gltools");
17
-
18
- var _programManager = _interopRequireDefault(require("./program-manager"));
19
-
20
- var _webgl = require("@luma.gl/webgl");
21
-
22
- var _modelUtils = require("./model-utils");
23
-
24
- var LOG_DRAW_PRIORITY = 2;
25
- var LOG_DRAW_TIMEOUT = 10000;
26
- var ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';
27
-
28
- var NOOP = function NOOP() {};
29
-
30
- var DRAW_PARAMS = {};
31
-
32
- var Model = function () {
33
- function Model(gl) {
34
- var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
35
- (0, _classCallCheck2.default)(this, Model);
36
- var _props$id = props.id,
37
- id = _props$id === void 0 ? (0, _webgl.uid)('model') : _props$id;
38
- (0, _webgl.assert)((0, _gltools.isWebGL)(gl));
39
- this.id = id;
40
- this.gl = gl;
41
- this.id = props.id || (0, _webgl.uid)('Model');
42
- this.lastLogTime = 0;
43
- this.animated = false;
44
- this.initialize(props);
45
- }
46
-
47
- (0, _createClass2.default)(Model, [{
48
- key: "initialize",
49
- value: function initialize(props) {
50
- this.props = {};
51
- this.programManager = props.programManager || _programManager.default.getDefaultProgramManager(this.gl);
52
- this._programManagerState = -1;
53
- this._managedProgram = false;
54
- var _props$program = props.program,
55
- program = _props$program === void 0 ? null : _props$program,
56
- vs = props.vs,
57
- fs = props.fs,
58
- modules = props.modules,
59
- defines = props.defines,
60
- inject = props.inject,
61
- varyings = props.varyings,
62
- bufferMode = props.bufferMode,
63
- transpileToGLSL100 = props.transpileToGLSL100;
64
- this.programProps = {
65
- program: program,
66
- vs: vs,
67
- fs: fs,
68
- modules: modules,
69
- defines: defines,
70
- inject: inject,
71
- varyings: varyings,
72
- bufferMode: bufferMode,
73
- transpileToGLSL100: transpileToGLSL100
74
- };
75
- this.program = null;
76
- this.vertexArray = null;
77
- this._programDirty = true;
78
- this.userData = {};
79
- this.needsRedraw = true;
80
- this._attributes = {};
81
- this.attributes = {};
82
- this.uniforms = {};
83
- this.pickable = true;
84
-
85
- this._checkProgram();
86
-
87
- this.setUniforms(Object.assign({}, this.getModuleUniforms(props.moduleSettings)));
88
- this.drawMode = props.drawMode !== undefined ? props.drawMode : 4;
89
- this.vertexCount = props.vertexCount || 0;
90
- this.geometryBuffers = {};
91
- this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;
92
-
93
- this._setModelProps(props);
94
-
95
- this.geometry = {};
96
- (0, _webgl.assert)(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);
97
- }
98
- }, {
99
- key: "setProps",
100
- value: function setProps(props) {
101
- this._setModelProps(props);
102
- }
103
- }, {
104
- key: "delete",
105
- value: function _delete() {
106
- for (var key in this._attributes) {
107
- if (this._attributes[key] !== this.attributes[key]) {
108
- this._attributes[key].delete();
109
- }
110
- }
111
-
112
- if (this._managedProgram) {
113
- this.programManager.release(this.program);
114
- this._managedProgram = false;
115
- }
116
-
117
- this.vertexArray.delete();
118
-
119
- this._deleteGeometryBuffers();
120
- }
121
- }, {
122
- key: "getDrawMode",
123
- value: function getDrawMode() {
124
- return this.drawMode;
125
- }
126
- }, {
127
- key: "getVertexCount",
128
- value: function getVertexCount() {
129
- return this.vertexCount;
130
- }
131
- }, {
132
- key: "getInstanceCount",
133
- value: function getInstanceCount() {
134
- return this.instanceCount;
135
- }
136
- }, {
137
- key: "getAttributes",
138
- value: function getAttributes() {
139
- return this.attributes;
140
- }
141
- }, {
142
- key: "getProgram",
143
- value: function getProgram() {
144
- return this.program;
145
- }
146
- }, {
147
- key: "setProgram",
148
- value: function setProgram(props) {
149
- var program = props.program,
150
- vs = props.vs,
151
- fs = props.fs,
152
- modules = props.modules,
153
- defines = props.defines,
154
- inject = props.inject,
155
- varyings = props.varyings,
156
- bufferMode = props.bufferMode,
157
- transpileToGLSL100 = props.transpileToGLSL100;
158
- this.programProps = {
159
- program: program,
160
- vs: vs,
161
- fs: fs,
162
- modules: modules,
163
- defines: defines,
164
- inject: inject,
165
- varyings: varyings,
166
- bufferMode: bufferMode,
167
- transpileToGLSL100: transpileToGLSL100
168
- };
169
- this._programDirty = true;
170
- }
171
- }, {
172
- key: "getUniforms",
173
- value: function getUniforms() {
174
- return this.uniforms;
175
- }
176
- }, {
177
- key: "setDrawMode",
178
- value: function setDrawMode(drawMode) {
179
- this.drawMode = drawMode;
180
- return this;
181
- }
182
- }, {
183
- key: "setVertexCount",
184
- value: function setVertexCount(vertexCount) {
185
- (0, _webgl.assert)(Number.isFinite(vertexCount));
186
- this.vertexCount = vertexCount;
187
- return this;
188
- }
189
- }, {
190
- key: "setInstanceCount",
191
- value: function setInstanceCount(instanceCount) {
192
- (0, _webgl.assert)(Number.isFinite(instanceCount));
193
- this.instanceCount = instanceCount;
194
- return this;
195
- }
196
- }, {
197
- key: "setGeometry",
198
- value: function setGeometry(geometry) {
199
- this.drawMode = geometry.drawMode;
200
- this.vertexCount = geometry.getVertexCount();
201
-
202
- this._deleteGeometryBuffers();
203
-
204
- this.geometryBuffers = (0, _modelUtils.getBuffersFromGeometry)(this.gl, geometry);
205
- this.vertexArray.setAttributes(this.geometryBuffers);
206
- return this;
207
- }
208
- }, {
209
- key: "setAttributes",
210
- value: function setAttributes() {
211
- var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
212
-
213
- if ((0, _webgl.isObjectEmpty)(attributes)) {
214
- return this;
215
- }
216
-
217
- var normalizedAttributes = {};
218
-
219
- for (var name in attributes) {
220
- var attribute = attributes[name];
221
- normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;
222
- }
223
-
224
- this.vertexArray.setAttributes(normalizedAttributes);
225
- return this;
226
- }
227
- }, {
228
- key: "setUniforms",
229
- value: function setUniforms() {
230
- var uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
231
- Object.assign(this.uniforms, uniforms);
232
- return this;
233
- }
234
- }, {
235
- key: "getModuleUniforms",
236
- value: function getModuleUniforms(opts) {
237
- this._checkProgram();
238
-
239
- var getUniforms = this.programManager.getUniforms(this.program);
240
-
241
- if (getUniforms) {
242
- return getUniforms(opts);
243
- }
244
-
245
- return {};
246
- }
247
- }, {
248
- key: "updateModuleSettings",
249
- value: function updateModuleSettings(opts) {
250
- var uniforms = this.getModuleUniforms(opts || {});
251
- return this.setUniforms(uniforms);
252
- }
253
- }, {
254
- key: "clear",
255
- value: function clear(opts) {
256
- (0, _webgl.clear)(this.program.gl, opts);
257
- return this;
258
- }
259
- }, {
260
- key: "draw",
261
- value: function draw() {
262
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
263
-
264
- this._checkProgram();
265
-
266
- var _opts$moduleSettings = opts.moduleSettings,
267
- moduleSettings = _opts$moduleSettings === void 0 ? null : _opts$moduleSettings,
268
- framebuffer = opts.framebuffer,
269
- _opts$uniforms = opts.uniforms,
270
- uniforms = _opts$uniforms === void 0 ? {} : _opts$uniforms,
271
- _opts$attributes = opts.attributes,
272
- attributes = _opts$attributes === void 0 ? {} : _opts$attributes,
273
- _opts$transformFeedba = opts.transformFeedback,
274
- transformFeedback = _opts$transformFeedba === void 0 ? this.transformFeedback : _opts$transformFeedba,
275
- _opts$parameters = opts.parameters,
276
- parameters = _opts$parameters === void 0 ? {} : _opts$parameters,
277
- _opts$vertexArray = opts.vertexArray,
278
- vertexArray = _opts$vertexArray === void 0 ? this.vertexArray : _opts$vertexArray;
279
- this.setAttributes(attributes);
280
- this.updateModuleSettings(moduleSettings);
281
- this.setUniforms(uniforms);
282
- var logPriority;
283
-
284
- if (_webgl.log.priority >= LOG_DRAW_PRIORITY) {
285
- logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);
286
- }
287
-
288
- var drawParams = this.vertexArray.getDrawParams();
289
- var _this$props = this.props,
290
- _this$props$isIndexed = _this$props.isIndexed,
291
- isIndexed = _this$props$isIndexed === void 0 ? drawParams.isIndexed : _this$props$isIndexed,
292
- _this$props$indexType = _this$props.indexType,
293
- indexType = _this$props$indexType === void 0 ? drawParams.indexType : _this$props$indexType,
294
- _this$props$indexOffs = _this$props.indexOffset,
295
- indexOffset = _this$props$indexOffs === void 0 ? drawParams.indexOffset : _this$props$indexOffs,
296
- _this$props$vertexArr = _this$props.vertexArrayInstanced,
297
- vertexArrayInstanced = _this$props$vertexArr === void 0 ? drawParams.isInstanced : _this$props$vertexArr;
298
-
299
- if (vertexArrayInstanced && !this.isInstanced) {
300
- _webgl.log.warn('Found instanced attributes on non-instanced model', this.id)();
301
- }
302
-
303
- var isInstanced = this.isInstanced,
304
- instanceCount = this.instanceCount;
305
- var _this$props2 = this.props,
306
- _this$props2$onBefore = _this$props2.onBeforeRender,
307
- onBeforeRender = _this$props2$onBefore === void 0 ? NOOP : _this$props2$onBefore,
308
- _this$props2$onAfterR = _this$props2.onAfterRender,
309
- onAfterRender = _this$props2$onAfterR === void 0 ? NOOP : _this$props2$onAfterR;
310
- onBeforeRender();
311
- this.program.setUniforms(this.uniforms);
312
- var didDraw = this.program.draw(Object.assign(DRAW_PARAMS, opts, {
313
- logPriority: logPriority,
314
- uniforms: null,
315
- framebuffer: framebuffer,
316
- parameters: parameters,
317
- drawMode: this.getDrawMode(),
318
- vertexCount: this.getVertexCount(),
319
- vertexArray: vertexArray,
320
- transformFeedback: transformFeedback,
321
- isIndexed: isIndexed,
322
- indexType: indexType,
323
- isInstanced: isInstanced,
324
- instanceCount: instanceCount,
325
- offset: isIndexed ? indexOffset : 0
326
- }));
327
- onAfterRender();
328
-
329
- if (_webgl.log.priority >= LOG_DRAW_PRIORITY) {
330
- this._logDrawCallEnd(logPriority, vertexArray, framebuffer);
331
- }
332
-
333
- return didDraw;
334
- }
335
- }, {
336
- key: "transform",
337
- value: function transform() {
338
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
339
- var _opts$discard = opts.discard,
340
- discard = _opts$discard === void 0 ? true : _opts$discard,
341
- feedbackBuffers = opts.feedbackBuffers,
342
- _opts$unbindModels = opts.unbindModels,
343
- unbindModels = _opts$unbindModels === void 0 ? [] : _opts$unbindModels;
344
- var parameters = opts.parameters;
345
-
346
- if (feedbackBuffers) {
347
- this._setFeedbackBuffers(feedbackBuffers);
348
- }
349
-
350
- if (discard) {
351
- parameters = Object.assign({}, parameters, (0, _defineProperty2.default)({}, 35977, discard));
352
- }
353
-
354
- unbindModels.forEach(function (model) {
355
- return model.vertexArray.unbindBuffers();
356
- });
357
-
358
- try {
359
- this.draw(Object.assign({}, opts, {
360
- parameters: parameters
361
- }));
362
- } finally {
363
- unbindModels.forEach(function (model) {
364
- return model.vertexArray.bindBuffers();
365
- });
366
- }
367
-
368
- return this;
369
- }
370
- }, {
371
- key: "render",
372
- value: function render() {
373
- var uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
374
-
375
- _webgl.log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();
376
-
377
- return this.setUniforms(uniforms).draw();
378
- }
379
- }, {
380
- key: "_setModelProps",
381
- value: function _setModelProps(props) {
382
- Object.assign(this.props, props);
383
-
384
- if ('uniforms' in props) {
385
- this.setUniforms(props.uniforms);
386
- }
387
-
388
- if ('pickable' in props) {
389
- this.pickable = props.pickable;
390
- }
391
-
392
- if ('instanceCount' in props) {
393
- this.instanceCount = props.instanceCount;
394
- }
395
-
396
- if ('geometry' in props) {
397
- this.setGeometry(props.geometry);
398
- }
399
-
400
- if ('attributes' in props) {
401
- this.setAttributes(props.attributes);
402
- }
403
-
404
- if ('_feedbackBuffers' in props) {
405
- this._setFeedbackBuffers(props._feedbackBuffers);
406
- }
407
- }
408
- }, {
409
- key: "_checkProgram",
410
- value: function _checkProgram() {
411
- var needsUpdate = this._programDirty || this.programManager.stateHash !== this._programManagerState;
412
-
413
- if (!needsUpdate) {
414
- return;
415
- }
416
-
417
- var program = this.programProps.program;
418
-
419
- if (program) {
420
- this._managedProgram = false;
421
- } else {
422
- var _this$programProps = this.programProps,
423
- vs = _this$programProps.vs,
424
- fs = _this$programProps.fs,
425
- modules = _this$programProps.modules,
426
- inject = _this$programProps.inject,
427
- defines = _this$programProps.defines,
428
- varyings = _this$programProps.varyings,
429
- bufferMode = _this$programProps.bufferMode,
430
- transpileToGLSL100 = _this$programProps.transpileToGLSL100;
431
- program = this.programManager.get({
432
- vs: vs,
433
- fs: fs,
434
- modules: modules,
435
- inject: inject,
436
- defines: defines,
437
- varyings: varyings,
438
- bufferMode: bufferMode,
439
- transpileToGLSL100: transpileToGLSL100
440
- });
441
-
442
- if (this.program && this._managedProgram) {
443
- this.programManager.release(this.program);
444
- }
445
-
446
- this._programManagerState = this.programManager.stateHash;
447
- this._managedProgram = true;
448
- }
449
-
450
- (0, _webgl.assert)(program instanceof _webgl.Program, 'Model needs a program');
451
- this._programDirty = false;
452
-
453
- if (program === this.program) {
454
- return;
455
- }
456
-
457
- this.program = program;
458
-
459
- if (this.vertexArray) {
460
- this.vertexArray.setProps({
461
- program: this.program,
462
- attributes: this.vertexArray.attributes
463
- });
464
- } else {
465
- this.vertexArray = new _webgl.VertexArray(this.gl, {
466
- program: this.program
467
- });
468
- }
469
-
470
- this.setUniforms(Object.assign({}, this.getModuleUniforms()));
471
- }
472
- }, {
473
- key: "_deleteGeometryBuffers",
474
- value: function _deleteGeometryBuffers() {
475
- for (var name in this.geometryBuffers) {
476
- var buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];
477
-
478
- if (buffer instanceof _webgl.Buffer) {
479
- buffer.delete();
480
- }
481
- }
482
- }
483
- }, {
484
- key: "_setAnimationProps",
485
- value: function _setAnimationProps(animationProps) {
486
- if (this.animated) {
487
- (0, _webgl.assert)(animationProps, 'Model.draw(): animated uniforms but no animationProps');
488
- }
489
- }
490
- }, {
491
- key: "_setFeedbackBuffers",
492
- value: function _setFeedbackBuffers() {
493
- var feedbackBuffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
494
-
495
- if ((0, _webgl.isObjectEmpty)(feedbackBuffers)) {
496
- return this;
497
- }
498
-
499
- var gl = this.program.gl;
500
- this.transformFeedback = this.transformFeedback || new _webgl.TransformFeedback(gl, {
501
- program: this.program
502
- });
503
- this.transformFeedback.setBuffers(feedbackBuffers);
504
- return this;
505
- }
506
- }, {
507
- key: "_logDrawCallStart",
508
- value: function _logDrawCallStart(logLevel) {
509
- var logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;
510
-
511
- if (Date.now() - this.lastLogTime < logDrawTimeout) {
512
- return undefined;
513
- }
514
-
515
- this.lastLogTime = Date.now();
516
-
517
- _webgl.log.group(LOG_DRAW_PRIORITY, ">>> DRAWING MODEL ".concat(this.id), {
518
- collapsed: _webgl.log.level <= 2
519
- })();
520
-
521
- return logLevel;
522
- }
523
- }, {
524
- key: "_logDrawCallEnd",
525
- value: function _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {
526
- if (logLevel === undefined) {
527
- return;
528
- }
529
-
530
- var attributeTable = (0, _webgl.getDebugTableForVertexArray)({
531
- vertexArray: vertexArray,
532
- header: "".concat(this.id, " attributes"),
533
- attributes: this._attributes
534
- });
535
-
536
- var _getDebugTableForUnif = (0, _webgl.getDebugTableForUniforms)({
537
- header: "".concat(this.id, " uniforms"),
538
- program: this.program,
539
- uniforms: Object.assign({}, this.program.uniforms, uniforms)
540
- }),
541
- uniformTable = _getDebugTableForUnif.table,
542
- unusedTable = _getDebugTableForUnif.unusedTable,
543
- unusedCount = _getDebugTableForUnif.unusedCount;
544
-
545
- var _getDebugTableForUnif2 = (0, _webgl.getDebugTableForUniforms)({
546
- header: "".concat(this.id, " uniforms"),
547
- program: this.program,
548
- uniforms: Object.assign({}, this.program.uniforms, uniforms),
549
- undefinedOnly: true
550
- }),
551
- missingTable = _getDebugTableForUnif2.table,
552
- missingCount = _getDebugTableForUnif2.count;
553
-
554
- if (missingCount > 0) {
555
- _webgl.log.log('MISSING UNIFORMS', Object.keys(missingTable))();
556
- }
557
-
558
- if (unusedCount > 0) {
559
- _webgl.log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();
560
- }
561
-
562
- var configTable = (0, _webgl.getDebugTableForProgramConfiguration)(this.vertexArray.configuration);
563
-
564
- _webgl.log.table(logLevel, attributeTable)();
565
-
566
- _webgl.log.table(logLevel, uniformTable)();
567
-
568
- _webgl.log.table(logLevel + 1, configTable)();
569
-
570
- if (framebuffer) {
571
- framebuffer.log({
572
- logLevel: LOG_DRAW_PRIORITY,
573
- message: "Rendered to ".concat(framebuffer.id)
574
- });
575
- }
576
-
577
- _webgl.log.groupEnd(LOG_DRAW_PRIORITY, ">>> DRAWING MODEL ".concat(this.id))();
578
- }
579
- }]);
580
- return Model;
581
- }();
582
-
583
- exports.default = Model;
584
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/lib/model.js"],"names":["LOG_DRAW_PRIORITY","LOG_DRAW_TIMEOUT","ERR_MODEL_PARAMS","NOOP","DRAW_PARAMS","Model","gl","props","id","lastLogTime","animated","initialize","programManager","ProgramManager","getDefaultProgramManager","_programManagerState","_managedProgram","program","vs","fs","modules","defines","inject","varyings","bufferMode","transpileToGLSL100","programProps","vertexArray","_programDirty","userData","needsRedraw","_attributes","attributes","uniforms","pickable","_checkProgram","setUniforms","Object","assign","getModuleUniforms","moduleSettings","drawMode","undefined","vertexCount","geometryBuffers","isInstanced","instanced","instanceCount","_setModelProps","geometry","Number","isFinite","key","delete","release","_deleteGeometryBuffers","getVertexCount","setAttributes","normalizedAttributes","name","attribute","getValue","opts","getUniforms","framebuffer","transformFeedback","parameters","updateModuleSettings","logPriority","log","priority","_logDrawCallStart","drawParams","getDrawParams","isIndexed","indexType","indexOffset","vertexArrayInstanced","warn","onBeforeRender","onAfterRender","didDraw","draw","getDrawMode","offset","_logDrawCallEnd","discard","feedbackBuffers","unbindModels","_setFeedbackBuffers","forEach","model","unbindBuffers","bindBuffers","setGeometry","_feedbackBuffers","needsUpdate","stateHash","get","Program","setProps","VertexArray","buffer","Buffer","animationProps","TransformFeedback","setBuffers","logLevel","logDrawTimeout","Date","now","group","collapsed","level","attributeTable","header","uniformTable","table","unusedTable","unusedCount","undefinedOnly","missingTable","missingCount","count","keys","configTable","configuration","message","groupEnd"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL} from '@luma.gl/gltools';\nimport ProgramManager from './program-manager';\nimport {\n Program,\n VertexArray,\n clear,\n TransformFeedback,\n Buffer,\n log,\n isObjectEmpty,\n uid,\n assert\n} from '@luma.gl/webgl';\nimport {\n getDebugTableForUniforms,\n getDebugTableForVertexArray,\n getDebugTableForProgramConfiguration\n} from '@luma.gl/webgl';\nimport {getBuffersFromGeometry} from './model-utils';\n\nconst LOG_DRAW_PRIORITY = 2;\nconst LOG_DRAW_TIMEOUT = 10000;\n\nconst ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';\n\nconst NOOP = () => {};\nconst DRAW_PARAMS = {};\n\nexport default class Model {\n constructor(gl, props = {}) {\n // Deduce a helpful id\n const {id = uid('model')} = props;\n assert(isWebGL(gl));\n this.id = id;\n this.gl = gl;\n this.id = props.id || uid('Model');\n this.lastLogTime = 0; // TODO - move to probe.gl\n this.animated = false;\n this.initialize(props);\n }\n\n initialize(props) {\n this.props = {};\n\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);\n this._programManagerState = -1;\n this._managedProgram = false;\n\n const {\n program = null,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this.program = null;\n this.vertexArray = null;\n this._programDirty = true;\n\n // Initialize state\n this.userData = {};\n this.needsRedraw = true;\n\n // Attributes and buffers\n // Model manages auto Buffer creation from typed arrays\n this._attributes = {}; // All attributes\n this.attributes = {}; // User defined attributes\n\n // Model manages uniform animation\n this.uniforms = {};\n\n // picking options\n this.pickable = true;\n\n this._checkProgram();\n\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms(props.moduleSettings) // Get unforms for supplied parameters\n )\n );\n\n this.drawMode = props.drawMode !== undefined ? props.drawMode : GL.TRIANGLES;\n this.vertexCount = props.vertexCount || 0;\n\n // Track buffers created by setGeometry\n this.geometryBuffers = {};\n\n // geometry might have set drawMode and vertexCount\n this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;\n\n this._setModelProps(props);\n\n // TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated\n this.geometry = {};\n\n // assert(program || program instanceof Program);\n assert(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);\n }\n\n setProps(props) {\n this._setModelProps(props);\n }\n\n delete() {\n // delete all attributes created by this model\n // TODO - should buffer deletes be handled by vertex array?\n for (const key in this._attributes) {\n if (this._attributes[key] !== this.attributes[key]) {\n this._attributes[key].delete();\n }\n }\n\n if (this._managedProgram) {\n this.programManager.release(this.program);\n this._managedProgram = false;\n }\n\n this.vertexArray.delete();\n\n this._deleteGeometryBuffers();\n }\n\n // GETTERS\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getInstanceCount() {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram() {\n return this.program;\n }\n\n setProgram(props) {\n const {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this._programDirty = true;\n }\n\n getUniforms() {\n return this.uniforms;\n }\n\n // SETTERS\n\n setDrawMode(drawMode) {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount) {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount) {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry) {\n this.drawMode = geometry.drawMode;\n this.vertexCount = geometry.getVertexCount();\n\n this._deleteGeometryBuffers();\n\n this.geometryBuffers = getBuffersFromGeometry(this.gl, geometry);\n this.vertexArray.setAttributes(this.geometryBuffers);\n return this;\n }\n\n setAttributes(attributes = {}) {\n // Avoid setting needsRedraw if no attributes\n if (isObjectEmpty(attributes)) {\n return this;\n }\n\n const normalizedAttributes = {};\n for (const name in attributes) {\n const attribute = attributes[name];\n // The `getValue` call provides support for deck.gl `Attribute` class\n // TODO - remove once deck refactoring completes\n normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;\n }\n\n this.vertexArray.setAttributes(normalizedAttributes);\n return this;\n }\n\n // TODO - should actually set the uniforms\n setUniforms(uniforms = {}) {\n Object.assign(this.uniforms, uniforms);\n\n return this;\n }\n\n getModuleUniforms(opts) {\n this._checkProgram();\n\n const getUniforms = this.programManager.getUniforms(this.program);\n\n if (getUniforms) {\n return getUniforms(opts);\n }\n\n return {};\n }\n\n updateModuleSettings(opts) {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n // DRAW CALLS\n\n clear(opts) {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw(opts = {}) {\n // Lazy update program and vertex array\n this._checkProgram();\n\n const {\n moduleSettings = null,\n framebuffer,\n uniforms = {},\n attributes = {},\n transformFeedback = this.transformFeedback,\n parameters = {},\n vertexArray = this.vertexArray\n } = opts;\n\n // Update model with any just provided attributes, settings or uniforms\n this.setAttributes(attributes);\n this.updateModuleSettings(moduleSettings);\n this.setUniforms(uniforms);\n\n let logPriority;\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);\n }\n\n const drawParams = this.vertexArray.getDrawParams();\n const {\n isIndexed = drawParams.isIndexed,\n indexType = drawParams.indexType,\n indexOffset = drawParams.indexOffset,\n vertexArrayInstanced = drawParams.isInstanced\n } = this.props;\n\n if (vertexArrayInstanced && !this.isInstanced) {\n log.warn('Found instanced attributes on non-instanced model', this.id)();\n }\n\n const {isInstanced, instanceCount} = this;\n\n const {onBeforeRender = NOOP, onAfterRender = NOOP} = this.props;\n\n onBeforeRender();\n\n this.program.setUniforms(this.uniforms);\n\n const didDraw = this.program.draw(\n Object.assign(DRAW_PARAMS, opts, {\n logPriority,\n uniforms: null, // Already set (may contain \"function values\" not understood by Program)\n framebuffer,\n parameters,\n drawMode: this.getDrawMode(),\n vertexCount: this.getVertexCount(),\n vertexArray,\n transformFeedback,\n isIndexed,\n indexType,\n isInstanced,\n instanceCount,\n offset: isIndexed ? indexOffset : 0\n })\n );\n\n onAfterRender();\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n this._logDrawCallEnd(logPriority, vertexArray, framebuffer);\n }\n\n return didDraw;\n }\n\n // Draw call for transform feedback\n transform(opts = {}) {\n const {discard = true, feedbackBuffers, unbindModels = []} = opts;\n\n let {parameters} = opts;\n\n if (feedbackBuffers) {\n this._setFeedbackBuffers(feedbackBuffers);\n }\n\n if (discard) {\n parameters = Object.assign({}, parameters, {[GL.RASTERIZER_DISCARD]: discard});\n }\n\n unbindModels.forEach(model => model.vertexArray.unbindBuffers());\n try {\n this.draw(Object.assign({}, opts, {parameters}));\n } finally {\n unbindModels.forEach(model => model.vertexArray.bindBuffers());\n }\n\n return this;\n }\n\n // DEPRECATED METHODS\n\n render(uniforms = {}) {\n log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();\n return this.setUniforms(uniforms).draw();\n }\n\n // PRIVATE METHODS\n\n _setModelProps(props) {\n Object.assign(this.props, props);\n\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n\n if ('pickable' in props) {\n this.pickable = props.pickable;\n }\n\n if ('instanceCount' in props) {\n this.instanceCount = props.instanceCount;\n }\n if ('geometry' in props) {\n this.setGeometry(props.geometry);\n }\n\n // webgl settings\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('_feedbackBuffers' in props) {\n this._setFeedbackBuffers(props._feedbackBuffers);\n }\n }\n\n _checkProgram() {\n const needsUpdate =\n this._programDirty || this.programManager.stateHash !== this._programManagerState;\n\n if (!needsUpdate) {\n return;\n }\n\n let {program} = this.programProps;\n\n if (program) {\n this._managedProgram = false;\n } else {\n const {\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = this.programProps;\n program = this.programManager.get({\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n });\n if (this.program && this._managedProgram) {\n this.programManager.release(this.program);\n }\n this._programManagerState = this.programManager.stateHash;\n this._managedProgram = true;\n }\n\n assert(program instanceof Program, 'Model needs a program');\n\n this._programDirty = false;\n\n if (program === this.program) {\n return;\n }\n\n this.program = program;\n\n if (this.vertexArray) {\n // @ts-ignore TODO\n this.vertexArray.setProps({program: this.program, attributes: this.vertexArray.attributes});\n } else {\n this.vertexArray = new VertexArray(this.gl, {program: this.program});\n }\n\n // Make sure we have some reasonable default uniforms in place\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms() // Get all default uniforms,\n )\n );\n }\n\n _deleteGeometryBuffers() {\n for (const name in this.geometryBuffers) {\n // Buffer is raw value (for indices) or first element of [buffer, accessor] pair\n const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];\n if (buffer instanceof Buffer) {\n buffer.delete();\n }\n }\n }\n\n // Updates (evaluates) all function valued uniforms based on a new set of animationProps\n // experimental\n _setAnimationProps(animationProps) {\n if (this.animated) {\n assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');\n // const animatedUniforms = this._evaluateAnimateUniforms(animationProps);\n // Object.assign(this.uniforms, animatedUniforms);\n }\n }\n\n // Transform Feedback\n\n _setFeedbackBuffers(feedbackBuffers = {}) {\n // Avoid setting needsRedraw if no feedbackBuffers\n if (isObjectEmpty(feedbackBuffers)) {\n return this;\n }\n\n const {gl} = this.program;\n this.transformFeedback =\n this.transformFeedback ||\n new TransformFeedback(gl, {\n program: this.program\n });\n\n this.transformFeedback.setBuffers(feedbackBuffers);\n return this;\n }\n\n _logDrawCallStart(logLevel) {\n const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;\n if (Date.now() - this.lastLogTime < logDrawTimeout) {\n return undefined;\n }\n\n this.lastLogTime = Date.now();\n\n log.group(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`, {collapsed: log.level <= 2})();\n\n return logLevel;\n }\n\n _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {\n // HACK: logLevel === undefined means logDrawCallStart didn't run\n if (logLevel === undefined) {\n return;\n }\n\n const attributeTable = getDebugTableForVertexArray({\n vertexArray,\n header: `${this.id} attributes`,\n // @ts-ignore\n attributes: this._attributes\n });\n\n const {table: uniformTable, unusedTable, unusedCount} = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms)\n });\n\n // log missing uniforms\n const {table: missingTable, count: missingCount} = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms),\n undefinedOnly: true\n });\n\n if (missingCount > 0) {\n log.log('MISSING UNIFORMS', Object.keys(missingTable))();\n // log.table(logLevel, missingTable)();\n }\n if (unusedCount > 0) {\n log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();\n // log.log(logLevel, 'Unused uniforms ', unusedTable)();\n }\n\n const configTable = getDebugTableForProgramConfiguration(this.vertexArray.configuration);\n\n log.table(logLevel, attributeTable)();\n\n log.table(logLevel, uniformTable)();\n\n log.table(logLevel + 1, configTable)();\n\n if (framebuffer) {\n framebuffer.log({logLevel: LOG_DRAW_PRIORITY, message: `Rendered to ${framebuffer.id}`});\n }\n\n log.groupEnd(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`)();\n }\n}\n"],"file":"model.js"}