three-nebula 11.0.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/three-nebula.cjs +109 -0
  3. package/dist/three-nebula.cjs.map +1 -0
  4. package/dist/three-nebula.mjs +2968 -0
  5. package/dist/three-nebula.mjs.map +1 -0
  6. package/dist/three-nebula.umd.js +109 -0
  7. package/dist/three-nebula.umd.js.map +1 -0
  8. package/package.json +23 -47
  9. package/specs/01-emitter-hierarchy.md +200 -0
  10. package/specs/02-determinism-scrubbing.md +188 -0
  11. package/specs/03-sound-renderer.md +183 -0
  12. package/specs/04-schema-versioning.md +140 -0
  13. package/specs/05-content-addressed-assets.md +288 -0
  14. package/specs/README.md +80 -0
  15. package/build/cjs/behaviour/Alpha.js +0 -189
  16. package/build/cjs/behaviour/Attraction.js +0 -189
  17. package/build/cjs/behaviour/Behaviour.js +0 -253
  18. package/build/cjs/behaviour/Collision.js +0 -146
  19. package/build/cjs/behaviour/Color.js +0 -148
  20. package/build/cjs/behaviour/CrossZone.js +0 -141
  21. package/build/cjs/behaviour/Force.js +0 -126
  22. package/build/cjs/behaviour/Gravity.js +0 -78
  23. package/build/cjs/behaviour/RandomDrift.js +0 -153
  24. package/build/cjs/behaviour/Repulsion.js +0 -123
  25. package/build/cjs/behaviour/Rotate.js +0 -265
  26. package/build/cjs/behaviour/Scale.js +0 -177
  27. package/build/cjs/behaviour/Spring.js +0 -133
  28. package/build/cjs/behaviour/constants.js +0 -28
  29. package/build/cjs/behaviour/index.js +0 -112
  30. package/build/cjs/behaviour/types.js +0 -33
  31. package/build/cjs/constants/index.js +0 -61
  32. package/build/cjs/core/Particle.js +0 -390
  33. package/build/cjs/core/Pool.js +0 -203
  34. package/build/cjs/core/System.js +0 -366
  35. package/build/cjs/core/constants.js +0 -163
  36. package/build/cjs/core/fromJSON.js +0 -128
  37. package/build/cjs/core/fromJSONAsync.js +0 -239
  38. package/build/cjs/core/index.js +0 -32
  39. package/build/cjs/core/three/Euler.js +0 -233
  40. package/build/cjs/core/three/Math.js +0 -91
  41. package/build/cjs/core/three/Matrix4.js +0 -745
  42. package/build/cjs/core/three/Quaternion.js +0 -451
  43. package/build/cjs/core/three/Vector3.js +0 -464
  44. package/build/cjs/core/three/constants.js +0 -298
  45. package/build/cjs/core/three/index.js +0 -48
  46. package/build/cjs/core/types.js +0 -13
  47. package/build/cjs/debug/Debug.js +0 -209
  48. package/build/cjs/debug/constants.js +0 -19
  49. package/build/cjs/debug/index.js +0 -24
  50. package/build/cjs/debug/log.js +0 -38
  51. package/build/cjs/ease/index.js +0 -149
  52. package/build/cjs/emitter/Emitter.js +0 -798
  53. package/build/cjs/emitter/FollowEmitter.js +0 -146
  54. package/build/cjs/emitter/constants.js +0 -20
  55. package/build/cjs/emitter/index.js +0 -24
  56. package/build/cjs/emitter/types.js +0 -11
  57. package/build/cjs/events/EventDispatcher.js +0 -105
  58. package/build/cjs/events/constants.js +0 -23
  59. package/build/cjs/events/index.js +0 -27
  60. package/build/cjs/index.js +0 -151
  61. package/build/cjs/initializer/Body.js +0 -122
  62. package/build/cjs/initializer/BodySprite.js +0 -146
  63. package/build/cjs/initializer/Initializer.js +0 -109
  64. package/build/cjs/initializer/InitializerUtil.js +0 -54
  65. package/build/cjs/initializer/Life.js +0 -106
  66. package/build/cjs/initializer/Mass.js +0 -101
  67. package/build/cjs/initializer/Position.js +0 -152
  68. package/build/cjs/initializer/Radius.js +0 -118
  69. package/build/cjs/initializer/Rate.js +0 -150
  70. package/build/cjs/initializer/Rotation.js +0 -95
  71. package/build/cjs/initializer/Texture.js +0 -139
  72. package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
  73. package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
  74. package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
  75. package/build/cjs/initializer/Velocity/Velocity.js +0 -94
  76. package/build/cjs/initializer/Velocity/index.js +0 -32
  77. package/build/cjs/initializer/constants.js +0 -43
  78. package/build/cjs/initializer/index.js +0 -108
  79. package/build/cjs/initializer/types.js +0 -37
  80. package/build/cjs/math/ArraySpan.js +0 -103
  81. package/build/cjs/math/Box.js +0 -46
  82. package/build/cjs/math/ColorSpan.js +0 -113
  83. package/build/cjs/math/MathUtils.js +0 -57
  84. package/build/cjs/math/Polar3D.js +0 -115
  85. package/build/cjs/math/Span.js +0 -88
  86. package/build/cjs/math/Vector3D.js +0 -76
  87. package/build/cjs/math/constants.js +0 -35
  88. package/build/cjs/math/index.js +0 -122
  89. package/build/cjs/math/integration.js +0 -59
  90. package/build/cjs/math/types.js +0 -19
  91. package/build/cjs/renderer/BaseRenderer.js +0 -108
  92. package/build/cjs/renderer/CustomRenderer.js +0 -65
  93. package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -371
  94. package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
  95. package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
  96. package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
  97. package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -385
  98. package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
  99. package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
  100. package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
  101. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -58
  102. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
  103. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
  104. package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
  105. package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
  106. package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
  107. package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
  108. package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -45
  109. package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
  110. package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
  111. package/build/cjs/renderer/GPURenderer/index.js +0 -97
  112. package/build/cjs/renderer/MeshRenderer.js +0 -136
  113. package/build/cjs/renderer/SpriteRenderer.js +0 -68
  114. package/build/cjs/renderer/index.js +0 -40
  115. package/build/cjs/renderer/types.js +0 -21
  116. package/build/cjs/utils/ColorUtil.js +0 -39
  117. package/build/cjs/utils/PUID.js +0 -26
  118. package/build/cjs/utils/THREEUtil.js +0 -40
  119. package/build/cjs/utils/Util.js +0 -69
  120. package/build/cjs/utils/index.js +0 -61
  121. package/build/cjs/utils/uid.js +0 -12
  122. package/build/cjs/zone/BoxZone.js +0 -178
  123. package/build/cjs/zone/LineZone.js +0 -101
  124. package/build/cjs/zone/MeshZone.js +0 -101
  125. package/build/cjs/zone/PointZone.js +0 -99
  126. package/build/cjs/zone/ScreenZone.js +0 -164
  127. package/build/cjs/zone/SphereZone.js +0 -155
  128. package/build/cjs/zone/Zone.js +0 -172
  129. package/build/cjs/zone/index.js +0 -56
  130. package/build/cjs/zone/types.js +0 -21
  131. package/build/esm/behaviour/Alpha.js +0 -134
  132. package/build/esm/behaviour/Attraction.js +0 -135
  133. package/build/esm/behaviour/Behaviour.js +0 -215
  134. package/build/esm/behaviour/Collision.js +0 -100
  135. package/build/esm/behaviour/Color.js +0 -101
  136. package/build/esm/behaviour/CrossZone.js +0 -82
  137. package/build/esm/behaviour/Force.js +0 -83
  138. package/build/esm/behaviour/Gravity.js +0 -40
  139. package/build/esm/behaviour/RandomDrift.js +0 -97
  140. package/build/esm/behaviour/Repulsion.js +0 -81
  141. package/build/esm/behaviour/Rotate.js +0 -214
  142. package/build/esm/behaviour/Scale.js +0 -131
  143. package/build/esm/behaviour/Spring.js +0 -90
  144. package/build/esm/behaviour/constants.js +0 -11
  145. package/build/esm/behaviour/index.js +0 -14
  146. package/build/esm/behaviour/types.js +0 -14
  147. package/build/esm/constants/index.js +0 -42
  148. package/build/esm/core/Particle.js +0 -357
  149. package/build/esm/core/Pool.js +0 -161
  150. package/build/esm/core/System.js +0 -320
  151. package/build/esm/core/constants.js +0 -127
  152. package/build/esm/core/fromJSON.js +0 -107
  153. package/build/esm/core/fromJSONAsync.js +0 -210
  154. package/build/esm/core/index.js +0 -4
  155. package/build/esm/core/three/Euler.js +0 -224
  156. package/build/esm/core/three/Math.js +0 -84
  157. package/build/esm/core/three/Matrix4.js +0 -739
  158. package/build/esm/core/three/Quaternion.js +0 -445
  159. package/build/esm/core/three/Vector3.js +0 -457
  160. package/build/esm/core/three/constants.js +0 -148
  161. package/build/esm/core/three/index.js +0 -5
  162. package/build/esm/core/types.js +0 -4
  163. package/build/esm/debug/Debug.js +0 -195
  164. package/build/esm/debug/constants.js +0 -7
  165. package/build/esm/debug/index.js +0 -3
  166. package/build/esm/debug/log.js +0 -31
  167. package/build/esm/ease/index.js +0 -113
  168. package/build/esm/emitter/Emitter.js +0 -708
  169. package/build/esm/emitter/FollowEmitter.js +0 -97
  170. package/build/esm/emitter/constants.js +0 -7
  171. package/build/esm/emitter/index.js +0 -3
  172. package/build/esm/emitter/types.js +0 -3
  173. package/build/esm/events/EventDispatcher.js +0 -82
  174. package/build/esm/events/constants.js +0 -9
  175. package/build/esm/events/index.js +0 -4
  176. package/build/esm/index.js +0 -13
  177. package/build/esm/initializer/Body.js +0 -83
  178. package/build/esm/initializer/BodySprite.js +0 -108
  179. package/build/esm/initializer/Initializer.js +0 -84
  180. package/build/esm/initializer/InitializerUtil.js +0 -48
  181. package/build/esm/initializer/Life.js +0 -66
  182. package/build/esm/initializer/Mass.js +0 -60
  183. package/build/esm/initializer/Position.js +0 -98
  184. package/build/esm/initializer/Radius.js +0 -75
  185. package/build/esm/initializer/Rate.js +0 -107
  186. package/build/esm/initializer/Rotation.js +0 -54
  187. package/build/esm/initializer/Texture.js +0 -101
  188. package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
  189. package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
  190. package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
  191. package/build/esm/initializer/Velocity/Velocity.js +0 -52
  192. package/build/esm/initializer/Velocity/index.js +0 -4
  193. package/build/esm/initializer/constants.js +0 -26
  194. package/build/esm/initializer/index.js +0 -12
  195. package/build/esm/initializer/types.js +0 -16
  196. package/build/esm/math/ArraySpan.js +0 -62
  197. package/build/esm/math/Box.js +0 -25
  198. package/build/esm/math/ColorSpan.js +0 -71
  199. package/build/esm/math/MathUtils.js +0 -48
  200. package/build/esm/math/Polar3D.js +0 -81
  201. package/build/esm/math/Span.js +0 -63
  202. package/build/esm/math/Vector3D.js +0 -34
  203. package/build/esm/math/constants.js +0 -24
  204. package/build/esm/math/index.js +0 -10
  205. package/build/esm/math/integration.js +0 -47
  206. package/build/esm/math/types.js +0 -7
  207. package/build/esm/renderer/BaseRenderer.js +0 -78
  208. package/build/esm/renderer/CustomRenderer.js +0 -23
  209. package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -357
  210. package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -30
  211. package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
  212. package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -36
  213. package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -375
  214. package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -27
  215. package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
  216. package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -33
  217. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -30
  218. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
  219. package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
  220. package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
  221. package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
  222. package/build/esm/renderer/GPURenderer/common/index.js +0 -4
  223. package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
  224. package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -26
  225. package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
  226. package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
  227. package/build/esm/renderer/GPURenderer/index.js +0 -57
  228. package/build/esm/renderer/MeshRenderer.js +0 -93
  229. package/build/esm/renderer/SpriteRenderer.js +0 -30
  230. package/build/esm/renderer/index.js +0 -5
  231. package/build/esm/renderer/types.js +0 -8
  232. package/build/esm/utils/ColorUtil.js +0 -32
  233. package/build/esm/utils/PUID.js +0 -19
  234. package/build/esm/utils/THREEUtil.js +0 -31
  235. package/build/esm/utils/Util.js +0 -60
  236. package/build/esm/utils/index.js +0 -13
  237. package/build/esm/utils/uid.js +0 -3
  238. package/build/esm/zone/BoxZone.js +0 -133
  239. package/build/esm/zone/LineZone.js +0 -61
  240. package/build/esm/zone/MeshZone.js +0 -60
  241. package/build/esm/zone/PointZone.js +0 -59
  242. package/build/esm/zone/ScreenZone.js +0 -116
  243. package/build/esm/zone/SphereZone.js +0 -113
  244. package/build/esm/zone/Zone.js +0 -141
  245. package/build/esm/zone/index.js +0 -7
  246. package/build/esm/zone/types.js +0 -8
  247. package/build/three-nebula.js +0 -2
  248. package/build/three-nebula.js.map +0 -1
@@ -1,375 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
-
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
-
7
- import { ParticleBuffer, Target, TextureAtlas, UniqueList } from '../common';
8
- import { fragmentShader, vertexShader } from './shaders';
9
- import BaseRenderer from '../../BaseRenderer';
10
- import { DEFAULT_RENDERER_OPTIONS } from '../common/constants';
11
- import { Pool } from '../../../core';
12
- import { RENDERER_TYPE_GPU_MOBILE } from '../../types';
13
- let THREE;
14
- /**
15
- * GPURenderer for mobile devices that do not support floating point textures.
16
- *
17
- * @author thrax <manthrax@gmail.com>
18
- * @author rohan-deshpande <rohan@creativelifeform.com>
19
- */
20
-
21
- export default class MobileGPURenderer extends BaseRenderer {
22
- constructor(container, three, options = DEFAULT_RENDERER_OPTIONS) {
23
- super(RENDERER_TYPE_GPU_MOBILE);
24
- THREE = this.three = three;
25
-
26
- const props = _objectSpread(_objectSpread({}, DEFAULT_RENDERER_OPTIONS), options);
27
-
28
- const {
29
- camera,
30
- maxParticles,
31
- baseColor,
32
- blending,
33
- depthTest,
34
- depthWrite,
35
- transparent,
36
- shouldDebugTextureAtlas
37
- } = props;
38
- const particleBuffer = new ParticleBuffer(maxParticles, THREE);
39
- const material = new THREE.ShaderMaterial({
40
- uniforms: {
41
- baseColor: {
42
- value: new THREE.Color(baseColor)
43
- },
44
- uTexture: {
45
- value: null
46
- },
47
- FFatlasIndex: {
48
- value: null
49
- },
50
- atlasDim: {
51
- value: new THREE.Vector2()
52
- }
53
- },
54
- vertexShader: vertexShader(),
55
- fragmentShader: fragmentShader(),
56
- blending: THREE[blending],
57
- depthTest,
58
- depthWrite,
59
- transparent
60
- });
61
- this.camera = camera;
62
- this.targetPool = new Pool();
63
- this.uniqueList = new UniqueList(maxParticles);
64
- this.particleBuffer = particleBuffer;
65
- this.buffer = particleBuffer.buffer;
66
- this.stride = particleBuffer.stride;
67
- this.geometry = particleBuffer.geometry;
68
- this.material = material;
69
- this.points = new THREE.Points(this.geometry, this.material);
70
- this.points.frustumCulled = false;
71
- this.shouldDebugTextureAtlas = shouldDebugTextureAtlas;
72
- container.add(this.points);
73
- }
74
-
75
- onSystemUpdate(system) {
76
- super.onSystemUpdate(system);
77
- this.buffer.needsUpdate = true;
78
- const {
79
- textureAtlas
80
- } = this;
81
-
82
- if (textureAtlas) {
83
- textureAtlas.update();
84
- this.material.uniforms.atlasDim.value.set(textureAtlas.atlasTexture.image.width, textureAtlas.atlasTexture.image.height);
85
- }
86
- }
87
- /**
88
- * Pools the particle target if it does not exist.
89
- * Updates the target and maps particle properties to the point.
90
- *
91
- * @param {Particle}
92
- */
93
-
94
-
95
- onParticleCreated(particle) {
96
- if (!particle.target) {
97
- particle.target = this.targetPool.get(Target, THREE);
98
- this.uniqueList.add(particle.id);
99
- }
100
-
101
- this.updateTarget(particle).mapParticleTargetPropsToPoint(particle);
102
- }
103
- /**
104
- * Maps particle properties to the point if the particle has a target.
105
- *
106
- * @param {Particle}
107
- */
108
-
109
-
110
- onParticleUpdate(particle) {
111
- if (!particle.target) {
112
- return;
113
- }
114
-
115
- this.updateTarget(particle).mapParticleTargetPropsToPoint(particle);
116
- }
117
- /**
118
- * Resets and clears the particle target.
119
- *
120
- * @param {Particle}
121
- */
122
-
123
-
124
- onParticleDead(particle) {
125
- if (!particle.target) {
126
- return;
127
- }
128
-
129
- particle.target.reset();
130
- this.mapParticleTargetPropsToPoint(particle);
131
- particle.target = null;
132
- }
133
- /**
134
- * Maps all mutable properties from the particle to the target.
135
- *
136
- * @param {Particle}
137
- * @return {GPURenderer}
138
- */
139
-
140
-
141
- updateTarget(particle) {
142
- const {
143
- position,
144
- rotation,
145
- scale,
146
- radius,
147
- color,
148
- alpha,
149
- body,
150
- id
151
- } = particle;
152
- const {
153
- r,
154
- g,
155
- b
156
- } = color;
157
- particle.target.position.copy(position);
158
- particle.target.rotation.copy(rotation);
159
- particle.target.size = scale * radius;
160
- particle.target.color.setRGB(r, g, b);
161
- particle.target.alpha = alpha;
162
- particle.target.index = this.uniqueList.find(id);
163
-
164
- if (body && body instanceof THREE.Sprite) {
165
- const {
166
- map
167
- } = body.material;
168
- particle.target.texture = map;
169
- particle.target.textureIndex = this.getTextureID(map, this.shouldDebugTextureAtlas);
170
- }
171
-
172
- return this;
173
- }
174
- /**
175
- * Entry point for mapping particle properties to buffer geometry points.
176
- *
177
- * @param {Particle} particle - The particle containing the properties to map
178
- * @return {GPURenderer}
179
- */
180
-
181
-
182
- mapParticleTargetPropsToPoint(particle) {
183
- this.updatePointPosition(particle).updatePointSize(particle).updatePointRotation(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
184
- return this;
185
- }
186
- /**
187
- * Updates the point's position according to the particle's target position.
188
- *
189
- * @param {Particle} particle - The particle containing the target position.
190
- * @return {GPURenderer}
191
- */
192
-
193
-
194
- updatePointPosition(particle) {
195
- const attribute = 'position';
196
- const {
197
- geometry,
198
- stride,
199
- buffer
200
- } = this;
201
- const {
202
- target
203
- } = particle;
204
- const {
205
- offset
206
- } = geometry.attributes[attribute];
207
- buffer.array[target.index * stride + offset + 0] = target.position.x;
208
- buffer.array[target.index * stride + offset + 1] = target.position.y;
209
- buffer.array[target.index * stride + offset + 2] = target.position.z;
210
- return this;
211
- }
212
- /**
213
- * Updates the point's size relative to the particle's target scale and radius.
214
- *
215
- * @param {Particle} particle - The particle containing the target scale.
216
- * @return {GPURenderer}
217
- */
218
-
219
-
220
- updatePointSize(particle) {
221
- const attribute = 'size';
222
- const {
223
- geometry,
224
- stride,
225
- buffer
226
- } = this;
227
- const {
228
- target
229
- } = particle;
230
- const {
231
- offset
232
- } = geometry.attributes[attribute];
233
- buffer.array[target.index * stride + offset + 0] = target.size;
234
- return this;
235
- }
236
- /**
237
- * Updates the point's rotation.
238
- *
239
- * @param {Particle} particle - The particle containing the target rotation.
240
- * @return {GPURenderer}
241
- */
242
-
243
-
244
- updatePointRotation(particle) {
245
- const attribute = 'rotation';
246
- const {
247
- geometry,
248
- stride,
249
- buffer
250
- } = this;
251
- const {
252
- target
253
- } = particle;
254
- const {
255
- offset
256
- } = geometry.attributes[attribute];
257
- buffer.array[target.index * stride + offset + 0] = target.rotation.z;
258
- return this;
259
- }
260
- /**
261
- * Updates the point's color attribute according with the particle's target color.
262
- *
263
- * @param {Particle} particle - The particle containing the target color and alpha.
264
- * @return {GPURenderer}
265
- */
266
-
267
-
268
- updatePointColor(particle) {
269
- const attribute = 'color';
270
- const {
271
- geometry,
272
- stride,
273
- buffer
274
- } = this;
275
- const {
276
- target
277
- } = particle;
278
- const {
279
- offset
280
- } = geometry.attributes[attribute];
281
- buffer.array[target.index * stride + offset + 0] = target.color.r;
282
- buffer.array[target.index * stride + offset + 1] = target.color.g;
283
- buffer.array[target.index * stride + offset + 2] = target.color.b;
284
- return this;
285
- }
286
- /**
287
- * Updates the point alpha attribute with the particle's target alpha.
288
- *
289
- * @param {Particle} particle - The particle containing the target alpha.
290
- * @return {GPURenderer}
291
- */
292
-
293
-
294
- updatePointAlpha(particle) {
295
- const attribute = 'alpha';
296
- const {
297
- geometry,
298
- stride,
299
- buffer
300
- } = this;
301
- const {
302
- target
303
- } = particle;
304
- const {
305
- offset
306
- } = geometry.attributes[attribute];
307
- buffer.array[target.index * stride + offset + 0] = target.alpha;
308
- return this;
309
- }
310
- /**
311
- * Updates the point texture attribute with the particle's target texture.
312
- *
313
- * @param {Particle} particle - The particle containing the target texture.
314
- * @return {GPURenderer}
315
- */
316
-
317
-
318
- updatePointTextureIndex(particle) {
319
- const attribute = 'texID';
320
- const {
321
- geometry,
322
- stride,
323
- buffer
324
- } = this;
325
- const {
326
- target
327
- } = particle;
328
- const {
329
- offset
330
- } = geometry.attributes[attribute];
331
- const id = target.index * stride + offset + 0; // eslint-disable-next-line
332
-
333
- if (false) {
334
- buffer.array[id] = target.textureIndex;
335
- } else {
336
- let ti = target.textureIndex * 4;
337
- const ta = this.textureAtlas;
338
- const ida = ta.indexData;
339
- const nx = ida[ti++];
340
- const ny = ida[ti++];
341
- const px = ida[ti++];
342
- const py = ida[ti++];
343
- buffer.array[id] = (nx * ta.atlasTexture.image.width | 0) + px;
344
- buffer.array[id + 1] = (ny * ta.atlasTexture.image.height | 0) + py;
345
- }
346
-
347
- return this;
348
- }
349
-
350
- getTextureID(texture, debug) {
351
- if (texture.textureIndex === undefined) {
352
- if (!this.textureAtlas) {
353
- this.textureAtlas = new TextureAtlas(this, debug);
354
- }
355
-
356
- this.textureAtlas.addTexture(texture);
357
- }
358
-
359
- return texture.textureIndex;
360
- }
361
-
362
- destroy() {
363
- const {
364
- container,
365
- points,
366
- textureAtlas,
367
- uniqueList
368
- } = this;
369
- container.remove(points);
370
- uniqueList.destroy();
371
- textureAtlas && textureAtlas.destroy();
372
- }
373
-
374
- }
375
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvaW5kZXguanMiXSwibmFtZXMiOlsiUGFydGljbGVCdWZmZXIiLCJUYXJnZXQiLCJUZXh0dXJlQXRsYXMiLCJVbmlxdWVMaXN0IiwiZnJhZ21lbnRTaGFkZXIiLCJ2ZXJ0ZXhTaGFkZXIiLCJCYXNlUmVuZGVyZXIiLCJERUZBVUxUX1JFTkRFUkVSX09QVElPTlMiLCJQb29sIiwiUkVOREVSRVJfVFlQRV9HUFVfTU9CSUxFIiwiVEhSRUUiLCJNb2JpbGVHUFVSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwiY29udGFpbmVyIiwidGhyZWUiLCJvcHRpb25zIiwicHJvcHMiLCJjYW1lcmEiLCJtYXhQYXJ0aWNsZXMiLCJiYXNlQ29sb3IiLCJibGVuZGluZyIsImRlcHRoVGVzdCIsImRlcHRoV3JpdGUiLCJ0cmFuc3BhcmVudCIsInNob3VsZERlYnVnVGV4dHVyZUF0bGFzIiwicGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJGRmF0bGFzSW5kZXgiLCJhdGxhc0RpbSIsIlZlY3RvcjIiLCJ0YXJnZXRQb29sIiwidW5pcXVlTGlzdCIsImJ1ZmZlciIsInN0cmlkZSIsImdlb21ldHJ5IiwicG9pbnRzIiwiUG9pbnRzIiwiZnJ1c3R1bUN1bGxlZCIsImFkZCIsIm9uU3lzdGVtVXBkYXRlIiwic3lzdGVtIiwibmVlZHNVcGRhdGUiLCJ0ZXh0dXJlQXRsYXMiLCJ1cGRhdGUiLCJzZXQiLCJhdGxhc1RleHR1cmUiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0Iiwib25QYXJ0aWNsZUNyZWF0ZWQiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJvblBhcnRpY2xlVXBkYXRlIiwib25QYXJ0aWNsZURlYWQiLCJyZXNldCIsInBvc2l0aW9uIiwicm90YXRpb24iLCJzY2FsZSIsInJhZGl1cyIsImNvbG9yIiwiYWxwaGEiLCJib2R5IiwiciIsImciLCJiIiwiY29weSIsInNpemUiLCJzZXRSR0IiLCJpbmRleCIsImZpbmQiLCJTcHJpdGUiLCJtYXAiLCJ0ZXh0dXJlIiwidGV4dHVyZUluZGV4IiwiZ2V0VGV4dHVyZUlEIiwidXBkYXRlUG9pbnRQb3NpdGlvbiIsInVwZGF0ZVBvaW50U2l6ZSIsInVwZGF0ZVBvaW50Um90YXRpb24iLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwidGkiLCJ0YSIsImlkYSIsImluZGV4RGF0YSIsIm54IiwibnkiLCJweCIsInB5IiwiZGVidWciLCJ1bmRlZmluZWQiLCJhZGRUZXh0dXJlIiwiZGVzdHJveSIsInJlbW92ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsY0FBVCxFQUF5QkMsTUFBekIsRUFBaUNDLFlBQWpDLEVBQStDQyxVQUEvQyxRQUFpRSxXQUFqRTtBQUNBLFNBQVNDLGNBQVQsRUFBeUJDLFlBQXpCLFFBQTZDLFdBQTdDO0FBRUEsT0FBT0MsWUFBUCxNQUF5QixvQkFBekI7QUFDQSxTQUFTQyx3QkFBVCxRQUF5QyxxQkFBekM7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGVBQXJCO0FBQ0EsU0FBU0Msd0JBQVQsUUFBeUMsYUFBekM7QUFFQSxJQUFJQyxLQUFKO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsaUJBQU4sU0FBZ0NMLFlBQWhDLENBQTZDO0FBQzFETSxFQUFBQSxXQUFXLENBQUNDLFNBQUQsRUFBWUMsS0FBWixFQUFtQkMsT0FBTyxHQUFHUix3QkFBN0IsRUFBdUQ7QUFDaEUsVUFBTUUsd0JBQU47QUFFQUMsSUFBQUEsS0FBSyxHQUFH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IFVuaXF1ZUxpc3QgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciB9IGZyb20gJy4vc2hhZGVycyc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi4vLi4vQmFzZVJlbmRlcmVyJztcbmltcG9ydCB7IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9vbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9HUFVfTU9CSUxFIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5sZXQgVEhSRUU7XG5cbi8qKlxuICogR1BVUmVuZGVyZXIgZm9yIG1vYmlsZSBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuXG4gKlxuICogQGF1dGhvciB0aHJheCA8bWFudGhyYXhAZ21haWwuY29tPlxuICogQGF1dGhvciByb2hhbi1kZXNocGFuZGUgPHJvaGFuQGNyZWF0aXZlbGlmZWZvcm0uY29tPlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVHUFVSZW5kZXJlciBleHRlbmRzIEJhc2VSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgdGhyZWUsIG9wdGlvbnMgPSBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMpIHtcbiAgICBzdXBlcihSRU5ERVJFUl9UWVBFX0dQVV9NT0JJTEUpO1xuXG4gICAgVEhSRUUgPSB0aGlzLnRocmVlID0gdGhyZWU7XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLkRFRkFVTFRfUkVOREVSRVJfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuICAgIGNvbnN0IHtcbiAgICAgIGNhbWVyYSxcbiAgICAgIG1heFBhcnRpY2xlcyxcbiAgICAgIGJhc2VDb2xvcixcbiAgICAgIGJsZW5kaW5nLFxuICAgICAgZGVwdGhUZXN0LFxuICAgICAgZGVwdGhXcml0ZSxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgICAgc2hvdWxkRGVidWdUZXh0dXJlQXRsYXMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcnRpY2xlQnVmZmVyID0gbmV3IFBhcnRpY2xlQnVmZmVyKG1heFBhcnRpY2xlcywgVEhSRUUpO1xuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcbiAgICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIGJhc2VDb2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKGJhc2VDb2xvcikgfSxcbiAgICAgICAgdVRleHR1cmU6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgRkZhdGxhc0luZGV4OiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgIGF0bGFzRGltOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigpIH0sXG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlcigpLFxuICAgICAgYmxlbmRpbmc6IFRIUkVFW2JsZW5kaW5nXSxcbiAgICAgIGRlcHRoVGVzdCxcbiAgICAgIGRlcHRoV3JpdGUsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuICAgIHRoaXMudGFyZ2V0UG9vbCA9IG5ldyBQb29sKCk7XG4gICAgdGhpcy51bmlxdWVMaXN0ID0gbmV3IFVuaXF1ZUxpc3QobWF4UGFydGljbGVzKTtcbiAgICB0aGlzLnBhcnRpY2xlQnVmZmVyID0gcGFydGljbGVCdWZmZXI7XG4gICAgdGhpcy5idWZmZXIgPSBwYXJ0aWNsZUJ1ZmZlci5idWZmZXI7XG4gICAgdGhpcy5zdHJpZGUgPSBwYXJ0aWNsZUJ1ZmZlci5zdHJpZGU7XG4gICAgdGhpcy5nZW9tZXRyeSA9IHBhcnRpY2xlQnVmZmVyLmdlb21ldHJ5O1xuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICB0aGlzLnBvaW50cyA9IG5ldyBUSFJFRS5Qb2ludHModGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCk7XG4gICAgdGhpcy5wb2ludHMuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkRGVidWdUZXh0dXJlQXRsYXMgPSBzaG91bGREZWJ1Z1RleHR1cmVBdGxhcztcblxuICAgIGNvbnRhaW5lci5hZGQodGhpcy5wb2ludHMpO1xuICB9XG5cbiAgb25TeXN0ZW1VcGRhdGUoc3lzdGVtKSB7XG4gICAgc3VwZXIub25TeXN0ZW1VcGRhdGUoc3lzdGVtKTtcblxuICAgIHRoaXMuYnVmZmVyLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHsgdGV4dHVyZUF0bGFzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRleHR1cmVBdGxhcykge1xuICAgICAgdGV4dHVyZUF0bGFzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5hdGxhc0RpbS52YWx1ZS5zZXQoXG4gICAgICAgIHRleHR1cmVBdGxhcy5hdGxhc1RleHR1cmUuaW1hZ2Uud2lkdGgsXG4gICAgICAgIHRleHR1cmVBdGxhcy5hdGxhc1RleHR1cmUuaW1hZ2UuaGVpZ2h0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb29scyB0aGUgcGFydGljbGUgdGFyZ2V0IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKiBVcGRhdGVzIHRoZSB0YXJnZXQgYW5kIG1hcHMgcGFydGljbGUgcHJvcGVydGllcyB0byB0aGUgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlQ3JlYXRlZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICBwYXJ0aWNsZS50YXJnZXQgPSB0aGlzLnRhcmdldFBvb2wuZ2V0KFRhcmdldCwgVEhSRUUpO1xuICAgICAgdGhpcy51bmlxdWVMaXN0LmFkZChwYXJ0aWNsZS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYXJnZXQocGFydGljbGUpLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gdGhlIHBvaW50IGlmIHRoZSBwYXJ0aWNsZSBoYXMgYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlVXBkYXRlKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldChwYXJ0aWNsZSkubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbmQgY2xlYXJzIHRoZSBwYXJ0aWNsZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlRGVhZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFydGljbGUudGFyZ2V0LnJlc2V0KCk7XG4gICAgdGhpcy5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIG11dGFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBwYXJ0aWNsZSB0byB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVRhcmdldChwYXJ0aWNsZSkge1xuICAgIGNvbnN0IHsgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSwgcmFkaXVzLCBjb2xvciwgYWxwaGEsIGJvZHksIGlkIH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IHIsIGcsIGIgfSA9IGNvbG9yO1xuXG4gICAgcGFydGljbGUudGFyZ2V0LnBvc2l0aW9uLmNvcHkocG9zaXRpb24pO1xuICAgIHBhcnRpY2xlLnRhcmdldC5yb3RhdGlvbi5jb3B5KHJvdGF0aW9uKTtcbiAgICBwYXJ0aWNsZS50YXJnZXQuc2l6ZSA9IHNjYWxlICogcmFkaXVzO1xuICAgIHBhcnRpY2xlLnRhcmdldC5jb2xvci5zZXRSR0IociwgZywgYik7XG4gICAgcGFydGljbGUudGFyZ2V0LmFscGhhID0gYWxwaGE7XG4gICAgcGFydGljbGUudGFyZ2V0LmluZGV4ID0gdGhpcy51bmlxdWVMaXN0LmZpbmQoaWQpO1xuXG4gICAgaWYgKGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIFRIUkVFLlNwcml0ZSkge1xuICAgICAgY29uc3QgeyBtYXAgfSA9IGJvZHkubWF0ZXJpYWw7XG5cbiAgICAgIHBhcnRpY2xlLnRhcmdldC50ZXh0dXJlID0gbWFwO1xuICAgICAgcGFydGljbGUudGFyZ2V0LnRleHR1cmVJbmRleCA9IHRoaXMuZ2V0VGV4dHVyZUlEKFxuICAgICAgICBtYXAsXG4gICAgICAgIHRoaXMuc2hvdWxkRGVidWdUZXh0dXJlQXRsYXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW50cnkgcG9pbnQgZm9yIG1hcHBpbmcgcGFydGljbGUgcHJvcGVydGllcyB0byBidWZmZXIgZ2VvbWV0cnkgcG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIHRvIG1hcFxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIG1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKSB7XG4gICAgdGhpcy51cGRhdGVQb2ludFBvc2l0aW9uKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludFJvdGF0aW9uKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50Q29sb3IocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRBbHBoYShwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludFRleHR1cmVJbmRleChwYXJ0aWNsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIHBvc2l0aW9uIGFjY29yZGluZyB0byB0aGUgcGFydGljbGUncyB0YXJnZXQgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBwb3NpdGlvbi5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFBvc2l0aW9uKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3Bvc2l0aW9uJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5wb3NpdGlvbi54O1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAxXSA9IHRhcmdldC5wb3NpdGlvbi55O1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAyXSA9IHRhcmdldC5wb3NpdGlvbi56O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBzaXplIHJlbGF0aXZlIHRvIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBzY2FsZSBhbmQgcmFkaXVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgc2NhbGUuXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRTaXplKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3NpemUnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnNpemU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIHJvdGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgcm90YXRpb24uXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRSb3RhdGlvbihwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdyb3RhdGlvbic7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQucm90YXRpb24uejtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3MgY29sb3IgYXR0cmlidXRlIGFjY29yZGluZyB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBjb2xvci5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IGNvbG9yIGFuZCBhbHBoYS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ2NvbG9yJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5jb2xvci5yO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAxXSA9IHRhcmdldC5jb2xvci5nO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAyXSA9IHRhcmdldC5jb2xvci5iO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQgYWxwaGEgYXR0cmlidXRlIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IGFscGhhLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgYWxwaGEuXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRBbHBoYShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdhbHBoYSc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQuYWxwaGE7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCB0ZXh0dXJlIGF0dHJpYnV0ZSB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCB0ZXh0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgdGV4dHVyZS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFRleHR1cmVJbmRleChwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICd0ZXhJRCc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG4gICAgY29uc3QgaWQgPSB0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBidWZmZXIuYXJyYXlbaWRdID0gdGFyZ2V0LnRleHR1cmVJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRpID0gdGFyZ2V0LnRleHR1cmVJbmRleCAqIDQ7XG4gICAgICBjb25zdCB0YSA9IHRoaXMudGV4dHVyZUF0bGFzO1xuICAgICAgY29uc3QgaWRhID0gdGEuaW5kZXhEYXRhO1xuICAgICAgY29uc3QgbnggPSBpZGFbdGkrK107XG4gICAgICBjb25zdCBueSA9IGlkYVt0aSsrXTtcbiAgICAgIGNvbnN0IHB4ID0gaWRhW3RpKytdO1xuICAgICAgY29uc3QgcHkgPSBpZGFbdGkrK107XG5cbiAgICAgIGJ1ZmZlci5hcnJheVtpZF0gPSAoKG54ICogdGEuYXRsYXNUZXh0dXJlLmltYWdlLndpZHRoKSB8IDApICsgcHg7XG4gICAgICBidWZmZXIuYXJyYXlbaWQgKyAxXSA9ICgobnkgKiB0YS5hdGxhc1RleHR1cmUuaW1hZ2UuaGVpZ2h0KSB8IDApICsgcHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRUZXh0dXJlSUQodGV4dHVyZSwgZGVidWcpIHtcbiAgICBpZiAodGV4dHVyZS50ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCF0aGlzLnRleHR1cmVBdGxhcykge1xuICAgICAgICB0aGlzLnRleHR1cmVBdGxhcyA9IG5ldyBUZXh0dXJlQXRsYXModGhpcywgZGVidWcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRleHR1cmVBdGxhcy5hZGRUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlLnRleHR1cmVJbmRleDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIHBvaW50cywgdGV4dHVyZUF0bGFzLCB1bmlxdWVMaXN0IH0gPSB0aGlzO1xuXG4gICAgY29udGFpbmVyLnJlbW92ZShwb2ludHMpO1xuICAgIHVuaXF1ZUxpc3QuZGVzdHJveSgpO1xuICAgIHRleHR1cmVBdGxhcyAmJiB0ZXh0dXJlQXRsYXMuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- export const fragmentShader = () => {
2
- return `
3
- uniform vec3 baseColor;
4
- uniform sampler2D uTexture;
5
-
6
- varying float vRotation;
7
- varying vec3 targetColor;
8
- varying float targetAlpha;
9
- varying vec4 tileRect;
10
-
11
- void main() {
12
- gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
13
-
14
- vec2 uv = gl_PointCoord;
15
- uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
16
-
17
- float mid = 0.5;
18
- uv = vec2(
19
- cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,
20
- cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid
21
- );
22
-
23
- gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
24
- }
25
- `;
26
- };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9mcmFnbWVudFNoYWRlci5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxjQUFjLEdBQUcsTUFBTTtBQUNsQyxTQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQXZCRTtBQXdCRCxDQXpCTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBmcmFnbWVudFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHZlYzMgYmFzZUNvbG9yO1xuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGZsb2F0IG1pZCA9IDAuNTtcbiAgICAgIHV2ID0gdmVjMihcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueCAtIG1pZCkgLSBzaW4odlJvdGF0aW9uKSAqICh1di55IC0gbWlkKSArIG1pZCxcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueSAtIG1pZCkgKyBzaW4odlJvdGF0aW9uKSAqICh1di54IC0gbWlkKSArIG1pZFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0NvbG9yICogdGV4dHVyZTJEKHVUZXh0dXJlLCB1dik7XG4gICAgfVxuYDtcbn07XG4iXX0=
@@ -1,3 +0,0 @@
1
- export { fragmentShader } from './fragmentShader';
2
- export { vertexShader } from './vertexShader';
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciIsInZlcnRleFNoYWRlciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBVCxRQUErQixrQkFBL0I7QUFDQSxTQUFTQyxZQUFULFFBQTZCLGdCQUE3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGZyYWdtZW50U2hhZGVyIH0gZnJvbSAnLi9mcmFnbWVudFNoYWRlcic7XG5leHBvcnQgeyB2ZXJ0ZXhTaGFkZXIgfSBmcm9tICcuL3ZlcnRleFNoYWRlcic7XG4iXX0=
@@ -1,33 +0,0 @@
1
- import { SIZE_ATTENUATION_FACTOR } from '../../common/shaders/constants';
2
- export const vertexShader = () => {
3
- return `
4
- uniform sampler2D uTexture;
5
- uniform vec2 atlasDim;
6
-
7
- attribute float size;
8
- attribute vec3 color;
9
- attribute float alpha;
10
- attribute vec2 texID;
11
- attribute float rotation;
12
-
13
- varying float vRotation;
14
- varying vec3 targetColor;
15
- varying float targetAlpha;
16
- varying vec4 tileRect;
17
-
18
- void main() {
19
- vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
20
- targetColor = color;
21
- targetAlpha = alpha;
22
- vRotation = rotation;
23
-
24
- vec2 tmin = floor(texID) / atlasDim;
25
- vec2 tmax = fract(texID);
26
- tileRect = vec4(tmin,tmax);
27
-
28
- gl_PointSize = ((size * ${SIZE_ATTENUATION_FACTOR}) / -mvPosition.z);
29
- gl_Position = projectionMatrix * mvPosition;
30
- }
31
- `;
32
- };
33
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy92ZXJ0ZXhTaGFkZXIuanMiXSwibmFtZXMiOlsiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiLCJ2ZXJ0ZXhTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHVCQUFULFFBQXdDLGdDQUF4QztBQUVBLE9BQU8sTUFBTUMsWUFBWSxHQUFHLE1BQU07QUFDaEMsU0FBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQ0QsdUJBQXdCO0FBQ3hEO0FBQ0E7QUFDQSxDQTVCRTtBQTZCRCxDQTlCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNJWkVfQVRURU5VQVRJT05fRkFDVE9SIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NoYWRlcnMvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHZlcnRleFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHZlYzIgYXRsYXNEaW07XG5cbiAgICBhdHRyaWJ1dGUgZmxvYXQgc2l6ZTtcbiAgICBhdHRyaWJ1dGUgdmVjMyBjb2xvcjtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgYWxwaGE7XG4gICAgYXR0cmlidXRlIHZlYzIgdGV4SUQ7XG4gICAgYXR0cmlidXRlIGZsb2F0IHJvdGF0aW9uO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgIHRhcmdldENvbG9yID0gY29sb3I7XG4gICAgICB0YXJnZXRBbHBoYSA9IGFscGhhO1xuICAgICAgdlJvdGF0aW9uID0gcm90YXRpb247XG5cbiAgICAgIHZlYzIgdG1pbiA9IGZsb29yKHRleElEKSAvIGF0bGFzRGltO1xuICAgICAgdmVjMiB0bWF4ID0gZnJhY3QodGV4SUQpO1xuICAgICAgdGlsZVJlY3QgPSB2ZWM0KHRtaW4sdG1heCk7XG5cbiAgICAgIGdsX1BvaW50U2l6ZSA9ICgoc2l6ZSAqICR7U0laRV9BVFRFTlVBVElPTl9GQUNUT1J9KSAvIC1tdlBvc2l0aW9uLnopO1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiAgICB9XG5gO1xufTtcbiJdfQ==
@@ -1,30 +0,0 @@
1
- // Primitives
2
- export const DEFAULT_MAX_PARTICLES = 10000;
3
- export const VECTOR_3_SIZE = ['x', 'y', 'z'].length;
4
- export const RGBA_SIZE = ['r', 'g', 'b', 'a'].length;
5
- export const FLOAT_BYTE_SIZE = 4; // Byte sizes
6
-
7
- export const POSITION_BYTE_SIZE = VECTOR_3_SIZE * FLOAT_BYTE_SIZE;
8
- export const ROTATION_BYTE_SIZE = FLOAT_BYTE_SIZE;
9
- export const SIZE_BYTE_SIZE = FLOAT_BYTE_SIZE;
10
- export const RGBA_BYTE_SIZE = RGBA_SIZE * FLOAT_BYTE_SIZE;
11
- export const ALL_BYTE_SIZES = [POSITION_BYTE_SIZE, ROTATION_BYTE_SIZE, SIZE_BYTE_SIZE, RGBA_BYTE_SIZE];
12
- export const PARTICLE_BYTE_SIZE = ALL_BYTE_SIZES.reduce((cur, acc) => cur + acc); // Attributes
13
-
14
- export const POSITION_ATTRIBUTE_BUFFER_SIZE = VECTOR_3_SIZE;
15
- export const ROTATION_ATTRIBUTE_BUFFER_SIZE = 1;
16
- export const SIZE_ATTRIBUTE_BUFFER_SIZE = 1;
17
- export const RGBA_ATTRIBUTE_BUFFER_SIZE = RGBA_SIZE;
18
- export const ALPHA_ATTRIBUTE_BUFFER_SIZE = 1;
19
- export const TEXID_ATTRIBUTE_BUFFER_SIZE = 2;
20
- export const ATTRIBUTE_TO_SIZE_MAP = {
21
- position: POSITION_ATTRIBUTE_BUFFER_SIZE,
22
- rotation: ROTATION_ATTRIBUTE_BUFFER_SIZE,
23
- size: SIZE_ATTRIBUTE_BUFFER_SIZE,
24
- // THREE.Color does not contain alpha, so we will have separate attributes for these
25
- color: RGBA_ATTRIBUTE_BUFFER_SIZE,
26
- alpha: ALPHA_ATTRIBUTE_BUFFER_SIZE,
27
- texID: TEXID_ATTRIBUTE_BUFFER_SIZE
28
- };
29
- export const PARTICLE_STRIDE = [POSITION_ATTRIBUTE_BUFFER_SIZE, ROTATION_ATTRIBUTE_BUFFER_SIZE, SIZE_ATTRIBUTE_BUFFER_SIZE, RGBA_ATTRIBUTE_BUFFER_SIZE, ALPHA_ATTRIBUTE_BUFFER_SIZE, TEXID_ATTRIBUTE_BUFFER_SIZE].reduce((cur, acc) => cur + acc);
30
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIlZFQ1RPUl8zX1NJWkUiLCJsZW5ndGgiLCJSR0JBX1NJWkUiLCJGTE9BVF9CWVRFX1NJWkUiLCJQT1NJVElPTl9CWVRFX1NJWkUiLCJST1RBVElPTl9CWVRFX1NJWkUiLCJTSVpFX0JZVEVfU0laRSIsIlJHQkFfQllURV9TSVpFIiwiQUxMX0JZVEVfU0laRVMiLCJQQVJUSUNMRV9CWVRFX1NJWkUiLCJyZWR1Y2UiLCJjdXIiLCJhY2MiLCJQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSIsIlJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInNpemUiLCJjb2xvciIsImFscGhhIiwidGV4SUQiLCJQQVJUSUNMRV9TVFJJREUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsT0FBTyxNQUFNQSxxQkFBcUIsR0FBRyxLQUE5QjtBQUNQLE9BQU8sTUFBTUMsYUFBYSxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCQyxNQUF0QztBQUNQLE9BQU8sTUFBTUMsU0FBUyxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCRCxNQUF2QztBQUNQLE9BQU8sTUFBTUUsZUFBZSxHQUFHLENBQXhCLEMsQ0FFUDs7QUFDQSxPQUFPLE1BQU1DLGtCQUFrQixHQUFHSixhQUFhLEdBQUdHLGVBQTNDO0FBQ1AsT0FBTyxNQUFNRSxrQkFBa0IsR0FBR0YsZUFBM0I7QUFDUCxPQUFPLE1BQU1HLGNBQWMsR0FBR0gsZUFBdkI7QUFDUCxPQUFPLE1BQU1JLGNBQWMsR0FBR0wsU0FBUyxHQUFHQyxlQUFuQztBQUNQLE9BQU8sTUFBTUssY0FBYyxHQUFHLENBQzVCSixrQkFENEIsRUFFNUJDLGtCQUY0QixFQUc1QkMsY0FINEIsRUFJNUJDLGNBSjRCLENBQXZCO0FBTVAsT0FBTyxNQUFNRSxrQkFBa0IsR0FBR0QsY0FBYyxDQUFDRSxNQUFmLENBQ2hDLENBQUNDLEdBQUQsRUFBTUMsR0FBTixLQUFjRCxHQUFHLEdBQUdDLEdBRFksQ0FBM0IsQyxDQUlQOztBQUNBLE9BQU8sTUFBTUMsOEJBQThCLEdBQUdiLGFBQXZDO0FBQ1AsT0FBTyxNQUFNYyw4QkFBOEIsR0FBRyxDQUF2QztBQUNQLE9BQU8sTUFBTUMsMEJBQTBCLEdBQUcsQ0FBbkM7QUFDUCxPQUFPLE1BQU1DLDBCQUEwQixHQUFHZCxTQUFuQztBQUNQLE9BQU8sTUFBTWUsMkJBQTJCLEdBQUcsQ0FBcEM7QUFDUCxPQUFPLE1BQU1DLDJCQUEyQixHQUFHLENBQXBDO0FBRVAsT0FBTyxNQUFNQyxxQkFBcUIsR0FBRztBQUNuQ0MsRUFBQUEsUUFBUSxFQUFFUCw4QkFEeUI7QUFFbkNRLEVBQUFBLFFBQVEsRUFBRVAsOEJBRnlCO0FBR25DUSxFQUFBQSxJQUFJLEVBQUVQLDBCQUg2QjtBQUluQztBQUNBUSxFQUFBQSxLQUFLLEVBQUVQLDBCQUw0QjtBQU1uQ1EsRUFBQUEsS0FBSyxFQUFFUCwyQkFONEI7QUFPbkNRLEVBQUFBLEtBQUssRUFBRVA7QUFQNEIsQ0FBOUI7QUFVUCxPQUFPLE1BQU1RLGVBQWUsR0FBRyxDQUM3QmIsOEJBRDZCLEVBRTdCQyw4QkFGNkIsRUFHN0JDLDBCQUg2QixFQUk3QkMsMEJBSjZCLEVBSzdCQywyQkFMNkIsRUFNN0JDLDJCQU42QixFQU83QlIsTUFQNkIsQ0FPdEIsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEtBQWNELEdBQUcsR0FBR0MsR0FQRSxDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFByaW1pdGl2ZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9QQVJUSUNMRVMgPSAxMDAwMDtcbmV4cG9ydCBjb25zdCBWRUNUT1JfM19TSVpFID0gWyd4JywgJ3knLCAneiddLmxlbmd0aDtcbmV4cG9ydCBjb25zdCBSR0JBX1NJWkUgPSBbJ3InLCAnZycsICdiJywgJ2EnXS5sZW5ndGg7XG5leHBvcnQgY29uc3QgRkxPQVRfQllURV9TSVpFID0gNDtcblxuLy8gQnl0ZSBzaXplc1xuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0JZVEVfU0laRSA9IFZFQ1RPUl8zX1NJWkUgKiBGTE9BVF9CWVRFX1NJWkU7XG5leHBvcnQgY29uc3QgUk9UQVRJT05fQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFNJWkVfQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFJHQkFfQllURV9TSVpFID0gUkdCQV9TSVpFICogRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IEFMTF9CWVRFX1NJWkVTID0gW1xuICBQT1NJVElPTl9CWVRFX1NJWkUsXG4gIFJPVEFUSU9OX0JZVEVfU0laRSxcbiAgU0laRV9CWVRFX1NJWkUsXG4gIFJHQkFfQllURV9TSVpFLFxuXTtcbmV4cG9ydCBjb25zdCBQQVJUSUNMRV9CWVRFX1NJWkUgPSBBTExfQllURV9TSVpFUy5yZWR1Y2UoXG4gIChjdXIsIGFjYykgPT4gY3VyICsgYWNjXG4pO1xuXG4vLyBBdHRyaWJ1dGVzXG5leHBvcnQgY29uc3QgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gVkVDVE9SXzNfU0laRTtcbmV4cG9ydCBjb25zdCBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gMTtcbmV4cG9ydCBjb25zdCBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IFJHQkFfU0laRTtcbmV4cG9ydCBjb25zdCBBTFBIQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFRFWElEX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IDI7XG5cbmV4cG9ydCBjb25zdCBBVFRSSUJVVEVfVE9fU0laRV9NQVAgPSB7XG4gIHBvc2l0aW9uOiBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHJvdGF0aW9uOiBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHNpemU6IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICAvLyBUSFJFRS5Db2xvciBkb2VzIG5vdCBjb250YWluIGFscGhhLCBzbyB3ZSB3aWxsIGhhdmUgc2VwYXJhdGUgYXR0cmlidXRlcyBmb3IgdGhlc2VcbiAgY29sb3I6IFJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBhbHBoYTogQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICB0ZXhJRDogVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxufTtcblxuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX1NUUklERSA9IFtcbiAgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBURVhJRF9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG5dLnJlZHVjZSgoY3VyLCBhY2MpID0+IGN1ciArIGFjYyk7XG4iXX0=
@@ -1,70 +0,0 @@
1
- import { ATTRIBUTE_TO_SIZE_MAP, DEFAULT_MAX_PARTICLES, PARTICLE_BYTE_SIZE } from './constants';
2
- let THREE;
3
- /**
4
- * Creates and provides performant buffers for mapping particle properties to geometry vertices.
5
- *
6
- * @author thrax <manthrax@gmail.com>
7
- * @author rohan-deshpande <rohan@creativelifeform.com>
8
- * @see https://threejs.org/examples/?q=buffe#webgl_buffergeometry_points_interleaved
9
- * @see https://threejs.org/examples/?q=points#webgl_custom_attributes_points
10
- */
11
-
12
- export default class ParticleBuffer {
13
- constructor(maxParticles = DEFAULT_MAX_PARTICLES, three) {
14
- THREE = three;
15
- this.maxParticles = maxParticles;
16
- this.createInterleavedBuffer().createBufferGeometry();
17
- }
18
- /**
19
- * Creates the interleaved buffer that will be used to write data to the GPU.
20
- *
21
- * @return {ParticleBuffer}
22
- */
23
-
24
-
25
- createInterleavedBuffer() {
26
- const arrayBuffer = new ArrayBuffer(this.maxParticles * PARTICLE_BYTE_SIZE);
27
- this.interleavedBuffer = new THREE.InterleavedBuffer(new Float32Array(arrayBuffer), PARTICLE_BYTE_SIZE); // this.interleavedBuffer.usage = THREE.DynamicDrawUsage;
28
-
29
- return this;
30
- }
31
- /**
32
- * Sets the geometry's buffer attributes.
33
- *
34
- * NOTE Each attribute needs to be set at the right index in the buffer right after the previous
35
- * attribute that occupies a set amount of size in the buffer.
36
- *
37
- * @return {ParticleBufferGeometry}
38
- */
39
-
40
-
41
- createBufferGeometry() {
42
- this.geometry = new THREE.BufferGeometry();
43
- const {
44
- interleavedBuffer,
45
- geometry
46
- } = this;
47
- Object.keys(ATTRIBUTE_TO_SIZE_MAP).reduce((offset, attribute) => {
48
- const size = ATTRIBUTE_TO_SIZE_MAP[attribute];
49
- geometry.setAttribute(attribute, new THREE.InterleavedBufferAttribute(interleavedBuffer, size, offset));
50
- return offset += size;
51
- }, 0);
52
- return this;
53
- }
54
- /**
55
- * Gets the publicly accessible interleaved buffer.
56
- *
57
- * @return {THREE.InterleavedBuffer} buffers - The interleaved buffer
58
- */
59
-
60
-
61
- get buffer() {
62
- return this.interleavedBuffer;
63
- }
64
-
65
- get stride() {
66
- return PARTICLE_BYTE_SIZE;
67
- }
68
-
69
- }
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvaW5kZXguanMiXSwibmFtZXMiOlsiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwiREVGQVVMVF9NQVhfUEFSVElDTEVTIiwiUEFSVElDTEVfQllURV9TSVpFIiwiVEhSRUUiLCJQYXJ0aWNsZUJ1ZmZlciIsImNvbnN0cnVjdG9yIiwibWF4UGFydGljbGVzIiwidGhyZWUiLCJjcmVhdGVJbnRlcmxlYXZlZEJ1ZmZlciIsImNyZWF0ZUJ1ZmZlckdlb21ldHJ5IiwiYXJyYXlCdWZmZXIiLCJBcnJheUJ1ZmZlciIsImludGVybGVhdmVkQnVmZmVyIiwiSW50ZXJsZWF2ZWRCdWZmZXIiLCJGbG9hdDMyQXJyYXkiLCJnZW9tZXRyeSIsIkJ1ZmZlckdlb21ldHJ5IiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsIm9mZnNldCIsImF0dHJpYnV0ZSIsInNpemUiLCJzZXRBdHRyaWJ1dGUiLCJJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSIsImJ1ZmZlciIsInN0cmlkZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEscUJBREYsRUFFRUMscUJBRkYsRUFHRUMsa0JBSEYsUUFJTyxhQUpQO0FBTUEsSUFBSUMsS0FBSjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsZUFBZSxNQUFNQyxjQUFOLENBQXFCO0FBQ2xDQyxFQUFBQSxXQUFXLENBQUNDLFlBQVksR0FBR0wscUJBQWhCLEVBQXVDTSxLQUF2QyxFQUE4QztBQUN2REosSUFBQUEsS0FBSyxHQUFHSSxLQUFSO0FBQ0EsU0FBS0QsWUFBTCxHQUFvQkEsWUFBcEI7QUFFQSxTQUFLRSx1QkFBTCxHQUErQkMsb0JBQS9CO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUQsRUFBQUEsdUJBQXVCLEdBQUc7QUFDeEIsVUFBTUUsV0FBVyxHQUFHLElBQUlDLFdBQUosQ0FBZ0IsS0FBS0wsWUFBTCxHQUFvQkosa0JBQXBDLENBQXBCO0FBRUEsU0FBS1UsaUJBQUwsR0FBeUIsSUFBSVQsS0FBSyxDQUFDVSxpQkFBVixDQUN2QixJQUFJQyxZQUFKLENBQWlCSixXQUFqQixDQUR1QixFQUV2QlIsa0JBRnVCLENBQXpCLENBSHdCLENBT3hCOztBQUVBLFdBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VPLEVBQUFBLG9CQUFvQixHQUFHO0FBQ3JCLFNBQUtNLFFBQUwsR0FBZ0IsSUFBSVosS0FBSyxDQUFDYSxjQUFWLEVBQWhCO0FBRUEsVUFBTTtBQUFFSixNQUFBQSxpQkFBRjtBQUFxQkcsTUFBQUE7QUFBckIsUUFBa0MsSUFBeEM7QUFFQUUsSUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlsQixxQkFBWixFQUFtQ21CLE1BQW5DLENBQTBDLENBQUNDLE1BQUQsRUFBU0MsU0FBVCxLQUF1QjtBQUMvRCxZQUFNQyxJQUFJLEdBQUd0QixxQkFBcUIsQ0FBQ3FCLFNBQUQsQ0FBbEM7QUFFQU4sTUFBQUEsUUFBUSxDQUFDUSxZQUFULENBQ0VGLFNBREYsRUFFRSxJQUFJbEIsS0FBSyxDQUFDcUIsMEJBQVYsQ0FBcUNaLGlCQUFyQyxFQUF3RFUsSUFBeEQsRUFBOERGLE1BQTlELENBRkY7QUFLQSxhQUFRQSxNQUFNLElBQUlFLElBQWxCO0FBQ0QsS0FURCxFQVNHLENBVEg7QUFXQSxXQUFPLElBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUNZLE1BQU5HLE1BQU0sR0FBRztBQUNYLFdBQU8sS0FBS2IsaUJBQVo7QUFDRDs7QUFFUyxNQUFOYyxNQUFNLEdBQUc7QUFDWCxXQUFPeEIsa0JBQVA7QUFDRDs7QUEvRGlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVRUUklCVVRFX1RPX1NJWkVfTUFQLFxuICBERUZBVUxUX01BWF9QQVJUSUNMRVMsXG4gIFBBUlRJQ0xFX0JZVEVfU0laRSxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5sZXQgVEhSRUU7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcHJvdmlkZXMgcGVyZm9ybWFudCBidWZmZXJzIGZvciBtYXBwaW5nIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gZ2VvbWV0cnkgdmVydGljZXMuXG4gKlxuICogQGF1dGhvciB0aHJheCA8bWFudGhyYXhAZ21haWwuY29tPlxuICogQGF1dGhvciByb2hhbi1kZXNocGFuZGUgPHJvaGFuQGNyZWF0aXZlbGlmZWZvcm0uY29tPlxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2V4YW1wbGVzLz9xPWJ1ZmZlI3dlYmdsX2J1ZmZlcmdlb21ldHJ5X3BvaW50c19pbnRlcmxlYXZlZFxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2V4YW1wbGVzLz9xPXBvaW50cyN3ZWJnbF9jdXN0b21fYXR0cmlidXRlc19wb2ludHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydGljbGVCdWZmZXIge1xuICBjb25zdHJ1Y3RvcihtYXhQYXJ0aWNsZXMgPSBERUZBVUxUX01BWF9QQVJUSUNMRVMsIHRocmVlKSB7XG4gICAgVEhSRUUgPSB0aHJlZTtcbiAgICB0aGlzLm1heFBhcnRpY2xlcyA9IG1heFBhcnRpY2xlcztcblxuICAgIHRoaXMuY3JlYXRlSW50ZXJsZWF2ZWRCdWZmZXIoKS5jcmVhdGVCdWZmZXJHZW9tZXRyeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGludGVybGVhdmVkIGJ1ZmZlciB0aGF0IHdpbGwgYmUgdXNlZCB0byB3cml0ZSBkYXRhIHRvIHRoZSBHUFUuXG4gICAqXG4gICAqIEByZXR1cm4ge1BhcnRpY2xlQnVmZmVyfVxuICAgKi9cbiAgY3JlYXRlSW50ZXJsZWF2ZWRCdWZmZXIoKSB7XG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5tYXhQYXJ0aWNsZXMgKiBQQVJUSUNMRV9CWVRFX1NJWkUpO1xuXG4gICAgdGhpcy5pbnRlcmxlYXZlZEJ1ZmZlciA9IG5ldyBUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcihcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIpLFxuICAgICAgUEFSVElDTEVfQllURV9TSVpFXG4gICAgKTtcbiAgICAvLyB0aGlzLmludGVybGVhdmVkQnVmZmVyLnVzYWdlID0gVEhSRUUuRHluYW1pY0RyYXdVc2FnZTtcbiAgICBcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZW9tZXRyeSdzIGJ1ZmZlciBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBOT1RFIEVhY2ggYXR0cmlidXRlIG5lZWRzIHRvIGJlIHNldCBhdCB0aGUgcmlnaHQgaW5kZXggaW4gdGhlIGJ1ZmZlciByaWdodCBhZnRlciB0aGUgcHJldmlvdXNcbiAgICogYXR0cmlidXRlIHRoYXQgb2NjdXBpZXMgYSBzZXQgYW1vdW50IG9mIHNpemUgaW4gdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogQHJldHVybiB7UGFydGljbGVCdWZmZXJHZW9tZXRyeX1cbiAgICovXG4gIGNyZWF0ZUJ1ZmZlckdlb21ldHJ5KCkge1xuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTtcblxuICAgIGNvbnN0IHsgaW50ZXJsZWF2ZWRCdWZmZXIsIGdlb21ldHJ5IH0gPSB0aGlzO1xuXG4gICAgT2JqZWN0LmtleXMoQVRUUklCVVRFX1RPX1NJWkVfTUFQKS5yZWR1Y2UoKG9mZnNldCwgYXR0cmlidXRlKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gQVRUUklCVVRFX1RPX1NJWkVfTUFQW2F0dHJpYnV0ZV07XG5cbiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcbiAgICAgICAgYXR0cmlidXRlLFxuICAgICAgICBuZXcgVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUoaW50ZXJsZWF2ZWRCdWZmZXIsIHNpemUsIG9mZnNldClcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiAob2Zmc2V0ICs9IHNpemUpO1xuICAgIH0sIDApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBpbnRlcmxlYXZlZCBidWZmZXIuXG4gICAqXG4gICAqIEByZXR1cm4ge1RIUkVFLkludGVybGVhdmVkQnVmZmVyfSBidWZmZXJzIC0gVGhlIGludGVybGVhdmVkIGJ1ZmZlclxuICAgKi9cbiAgZ2V0IGJ1ZmZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcmxlYXZlZEJ1ZmZlcjtcbiAgfVxuXG4gIGdldCBzdHJpZGUoKSB7XG4gICAgcmV0dXJuIFBBUlRJQ0xFX0JZVEVfU0laRTtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export const DATA_TEXTURE_SIZE = 256;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vVGV4dHVyZUF0bGFzL2NvbnN0YW50cy5qcyJdLCJuYW1lcyI6WyJEQVRBX1RFWFRVUkVfU0laRSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxpQkFBaUIsR0FBRyxHQUExQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBEQVRBX1RFWFRVUkVfU0laRSA9IDI1NjtcbiJdfQ==