three-nebula 10.0.3 → 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.
- package/.claude/rules/no-coauthor.md +4 -0
- package/CHANGELOG.md +33 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2968 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +32 -56
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -791
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -100
- package/build/cjs/initializer/types.js +0 -35
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -350
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -364
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -53
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -43
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -63
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -14
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -701
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -11
- package/build/esm/initializer/types.js +0 -15
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -331
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -349
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -20
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -27
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -24
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -94
- package/build/esm/renderer/SpriteRenderer.js +0 -26
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -1,349 +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
|
-
scale,
|
|
145
|
-
radius,
|
|
146
|
-
color,
|
|
147
|
-
alpha,
|
|
148
|
-
body,
|
|
149
|
-
id
|
|
150
|
-
} = particle;
|
|
151
|
-
const {
|
|
152
|
-
r,
|
|
153
|
-
g,
|
|
154
|
-
b
|
|
155
|
-
} = color;
|
|
156
|
-
particle.target.position.copy(position);
|
|
157
|
-
particle.target.size = scale * radius;
|
|
158
|
-
particle.target.color.setRGB(r, g, b);
|
|
159
|
-
particle.target.alpha = alpha;
|
|
160
|
-
particle.target.index = this.uniqueList.find(id);
|
|
161
|
-
|
|
162
|
-
if (body && body instanceof THREE.Sprite) {
|
|
163
|
-
const {
|
|
164
|
-
map
|
|
165
|
-
} = body.material;
|
|
166
|
-
particle.target.texture = map;
|
|
167
|
-
particle.target.textureIndex = this.getTextureID(map, this.shouldDebugTextureAtlas);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return this;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Entry point for mapping particle properties to buffer geometry points.
|
|
174
|
-
*
|
|
175
|
-
* @param {Particle} particle - The particle containing the properties to map
|
|
176
|
-
* @return {GPURenderer}
|
|
177
|
-
*/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
mapParticleTargetPropsToPoint(particle) {
|
|
181
|
-
this.updatePointPosition(particle).updatePointSize(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
|
|
182
|
-
return this;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Updates the point's position according to the particle's target position.
|
|
186
|
-
*
|
|
187
|
-
* @param {Particle} particle - The particle containing the target position.
|
|
188
|
-
* @return {GPURenderer}
|
|
189
|
-
*/
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
updatePointPosition(particle) {
|
|
193
|
-
const attribute = 'position';
|
|
194
|
-
const {
|
|
195
|
-
geometry,
|
|
196
|
-
stride,
|
|
197
|
-
buffer
|
|
198
|
-
} = this;
|
|
199
|
-
const {
|
|
200
|
-
target
|
|
201
|
-
} = particle;
|
|
202
|
-
const {
|
|
203
|
-
offset
|
|
204
|
-
} = geometry.attributes[attribute];
|
|
205
|
-
buffer.array[target.index * stride + offset + 0] = target.position.x;
|
|
206
|
-
buffer.array[target.index * stride + offset + 1] = target.position.y;
|
|
207
|
-
buffer.array[target.index * stride + offset + 2] = target.position.z;
|
|
208
|
-
return this;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Updates the point's size relative to the particle's target scale and radius.
|
|
212
|
-
*
|
|
213
|
-
* @param {Particle} particle - The particle containing the target scale.
|
|
214
|
-
* @return {GPURenderer}
|
|
215
|
-
*/
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
updatePointSize(particle) {
|
|
219
|
-
const attribute = 'size';
|
|
220
|
-
const {
|
|
221
|
-
geometry,
|
|
222
|
-
stride,
|
|
223
|
-
buffer
|
|
224
|
-
} = this;
|
|
225
|
-
const {
|
|
226
|
-
target
|
|
227
|
-
} = particle;
|
|
228
|
-
const {
|
|
229
|
-
offset
|
|
230
|
-
} = geometry.attributes[attribute];
|
|
231
|
-
buffer.array[target.index * stride + offset + 0] = target.size;
|
|
232
|
-
return this;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Updates the point's color attribute according with the particle's target color.
|
|
236
|
-
*
|
|
237
|
-
* @param {Particle} particle - The particle containing the target color and alpha.
|
|
238
|
-
* @return {GPURenderer}
|
|
239
|
-
*/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
updatePointColor(particle) {
|
|
243
|
-
const attribute = 'color';
|
|
244
|
-
const {
|
|
245
|
-
geometry,
|
|
246
|
-
stride,
|
|
247
|
-
buffer
|
|
248
|
-
} = this;
|
|
249
|
-
const {
|
|
250
|
-
target
|
|
251
|
-
} = particle;
|
|
252
|
-
const {
|
|
253
|
-
offset
|
|
254
|
-
} = geometry.attributes[attribute];
|
|
255
|
-
buffer.array[target.index * stride + offset + 0] = target.color.r;
|
|
256
|
-
buffer.array[target.index * stride + offset + 1] = target.color.g;
|
|
257
|
-
buffer.array[target.index * stride + offset + 2] = target.color.b;
|
|
258
|
-
return this;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Updates the point alpha attribute with the particle's target alpha.
|
|
262
|
-
*
|
|
263
|
-
* @param {Particle} particle - The particle containing the target alpha.
|
|
264
|
-
* @return {GPURenderer}
|
|
265
|
-
*/
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
updatePointAlpha(particle) {
|
|
269
|
-
const attribute = 'alpha';
|
|
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.alpha;
|
|
282
|
-
return this;
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Updates the point texture attribute with the particle's target texture.
|
|
286
|
-
*
|
|
287
|
-
* @param {Particle} particle - The particle containing the target texture.
|
|
288
|
-
* @return {GPURenderer}
|
|
289
|
-
*/
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
updatePointTextureIndex(particle) {
|
|
293
|
-
const attribute = 'texID';
|
|
294
|
-
const {
|
|
295
|
-
geometry,
|
|
296
|
-
stride,
|
|
297
|
-
buffer
|
|
298
|
-
} = this;
|
|
299
|
-
const {
|
|
300
|
-
target
|
|
301
|
-
} = particle;
|
|
302
|
-
const {
|
|
303
|
-
offset
|
|
304
|
-
} = geometry.attributes[attribute];
|
|
305
|
-
const id = target.index * stride + offset + 0; // eslint-disable-next-line
|
|
306
|
-
|
|
307
|
-
if (false) {
|
|
308
|
-
buffer.array[id] = target.textureIndex;
|
|
309
|
-
} else {
|
|
310
|
-
let ti = target.textureIndex * 4;
|
|
311
|
-
const ta = this.textureAtlas;
|
|
312
|
-
const ida = ta.indexData;
|
|
313
|
-
const nx = ida[ti++];
|
|
314
|
-
const ny = ida[ti++];
|
|
315
|
-
const px = ida[ti++];
|
|
316
|
-
const py = ida[ti++];
|
|
317
|
-
buffer.array[id] = (nx * ta.atlasTexture.image.width | 0) + px;
|
|
318
|
-
buffer.array[id + 1] = (ny * ta.atlasTexture.image.height | 0) + py;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return this;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
getTextureID(texture, debug) {
|
|
325
|
-
if (texture.textureIndex === undefined) {
|
|
326
|
-
if (!this.textureAtlas) {
|
|
327
|
-
this.textureAtlas = new TextureAtlas(this, debug);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
this.textureAtlas.addTexture(texture);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
return texture.textureIndex;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
destroy() {
|
|
337
|
-
const {
|
|
338
|
-
container,
|
|
339
|
-
points,
|
|
340
|
-
textureAtlas,
|
|
341
|
-
uniqueList
|
|
342
|
-
} = this;
|
|
343
|
-
container.remove(points);
|
|
344
|
-
uniqueList.destroy();
|
|
345
|
-
textureAtlas && textureAtlas.destroy();
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
}
|
|
349
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvaW5kZXguanMiXSwibmFtZXMiOlsiUGFydGljbGVCdWZmZXIiLCJUYXJnZXQiLCJUZXh0dXJlQXRsYXMiLCJVbmlxdWVMaXN0IiwiZnJhZ21lbnRTaGFkZXIiLCJ2ZXJ0ZXhTaGFkZXIiLCJCYXNlUmVuZGVyZXIiLCJERUZBVUxUX1JFTkRFUkVSX09QVElPTlMiLCJQb29sIiwiUkVOREVSRVJfVFlQRV9HUFVfTU9CSUxFIiwiVEhSRUUiLCJNb2JpbGVHUFVSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwiY29udGFpbmVyIiwidGhyZWUiLCJvcHRpb25zIiwicHJvcHMiLCJjYW1lcmEiLCJtYXhQYXJ0aWNsZXMiLCJiYXNlQ29sb3IiLCJibGVuZGluZyIsImRlcHRoVGVzdCIsImRlcHRoV3JpdGUiLCJ0cmFuc3BhcmVudCIsInNob3VsZERlYnVnVGV4dHVyZUF0bGFzIiwicGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJGRmF0bGFzSW5kZXgiLCJhdGxhc0RpbSIsIlZlY3RvcjIiLCJ0YXJnZXRQb29sIiwidW5pcXVlTGlzdCIsImJ1ZmZlciIsInN0cmlkZSIsImdlb21ldHJ5IiwicG9pbnRzIiwiUG9pbnRzIiwiZnJ1c3R1bUN1bGxlZCIsImFkZCIsIm9uU3lzdGVtVXBkYXRlIiwic3lzdGVtIiwibmVlZHNVcGRhdGUiLCJ0ZXh0dXJlQXRsYXMiLCJ1cGRhdGUiLCJzZXQiLCJhdGxhc1RleHR1cmUiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0Iiwib25QYXJ0aWNsZUNyZWF0ZWQiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJvblBhcnRpY2xlVXBkYXRlIiwib25QYXJ0aWNsZURlYWQiLCJyZXNldCIsInBvc2l0aW9uIiwic2NhbGUiLCJyYWRpdXMiLCJjb2xvciIsImFscGhhIiwiYm9keSIsInIiLCJnIiwiYiIsImNvcHkiLCJzaXplIiwic2V0UkdCIiwiaW5kZXgiLCJmaW5kIiwiU3ByaXRlIiwibWFwIiwidGV4dHVyZSIsInRleHR1cmVJbmRleCIsImdldFRleHR1cmVJRCIsInVwZGF0ZVBvaW50UG9zaXRpb24iLCJ1cGRhdGVQb2ludFNpemUiLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwidGkiLCJ0YSIsImlkYSIsImluZGV4RGF0YSIsIm54IiwibnkiLCJweCIsInB5IiwiZGVidWciLCJ1bmRlZmluZWQiLCJhZGRUZXh0dXJlIiwiZGVzdHJveSIsInJlbW92ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsY0FBVCxFQUF5QkMsTUFBekIsRUFBaUNDLFlBQWpDLEVBQStDQyxVQUEvQyxRQUFpRSxXQUFqRTtBQUNBLFNBQVNDLGNBQVQsRUFBeUJDLFlBQXpCLFFBQTZDLFdBQTdDO0FBRUEsT0FBT0MsWUFBUCxNQUF5QixvQkFBekI7QUFDQSxTQUFTQyx3QkFBVCxRQUF5QyxxQkFBekM7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGVBQXJCO0FBQ0EsU0FBU0Msd0JBQVQsUUFBeUMsYUFBekM7QUFFQSxJQUFJQyxLQUFKO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLGVBQWUsTUFBTUMsaUJBQU4sU0FBZ0NMLFlBQWhDLENBQTZDO0FBQzFETSxFQUFBQSxXQUFXLENBQUNDLFNBQUQsRUFBWUMsS0FBWixFQUFtQkMsT0FBTyxHQUFHUix3QkFBN0IsRUFBdUQ7QUFDaEUsVUFBTUUsd0JBQU47QUFFQUMsSUFBQUEsS0FBSyxHQUFHLEtBQUtJLEtBQUwsR0FBYUEsS0FBckI7O0FBQ0EsVUFB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QUFFRHlCLEVBQUFBLE9BQU8sR0FBRztBQUNSLFVBQU07QUFBRTdGLE1BQUFBLFNBQUY7QUFBYTJCLE1BQUFBLE1BQWI7QUFBcUJPLE1BQUFBLFlBQXJCO0FBQW1DWCxNQUFBQTtBQUFuQyxRQUFrRCxJQUF4RDtBQUVBdkIsSUFBQUEsU0FBUyxDQUFDOEYsTUFBVixDQUFpQm5FLE1BQWpCO0FBQ0FKLElBQUFBLFVBQVUsQ0FBQ3NFLE9BQVg7QUFDQTNELElBQUFBLFlBQVksSUFBSUEsWUFBWSxDQUFDMkQsT0FBYixFQUFoQjtBQUNEOztBQWxSeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJ0aWNsZUJ1ZmZlciwgVGFyZ2V0LCBUZXh0dXJlQXRsYXMsIFVuaXF1ZUxpc3QgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciB9IGZyb20gJy4vc2hhZGVycyc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi4vLi4vQmFzZVJlbmRlcmVyJztcbmltcG9ydCB7IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9vbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9HUFVfTU9CSUxFIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5sZXQgVEhSRUU7XG5cbi8qKlxuICogR1BVUmVuZGVyZXIgZm9yIG1vYmlsZSBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuXG4gKlxuICogQGF1dGhvciB0aHJheCA8bWFudGhyYXhAZ21haWwuY29tPlxuICogQGF1dGhvciByb2hhbi1kZXNocGFuZGUgPHJvaGFuQGNyZWF0aXZlbGlmZWZvcm0uY29tPlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVHUFVSZW5kZXJlciBleHRlbmRzIEJhc2VSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgdGhyZWUsIG9wdGlvbnMgPSBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMpIHtcbiAgICBzdXBlcihSRU5ERVJFUl9UWVBFX0dQVV9NT0JJTEUpO1xuXG4gICAgVEhSRUUgPSB0aGlzLnRocmVlID0gdGhyZWU7XG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLkRFRkFVTFRfUkVOREVSRVJfT1BUSU9OUywgLi4ub3B0aW9ucyB9O1xuICAgIGNvbnN0IHtcbiAgICAgIGNhbWVyYSxcbiAgICAgIG1heFBhcnRpY2xlcyxcbiAgICAgIGJhc2VDb2xvcixcbiAgICAgIGJsZW5kaW5nLFxuICAgICAgZGVwdGhUZXN0LFxuICAgICAgZGVwdGhXcml0ZSxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgICAgc2hvdWxkRGVidWdUZXh0dXJlQXRsYXMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcnRpY2xlQnVmZmVyID0gbmV3IFBhcnRpY2xlQnVmZmVyKG1heFBhcnRpY2xlcywgVEhSRUUpO1xuICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHtcbiAgICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIGJhc2VDb2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKGJhc2VDb2xvcikgfSxcbiAgICAgICAgdVRleHR1cmU6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgRkZhdGxhc0luZGV4OiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgIGF0bGFzRGltOiB7IHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMigpIH0sXG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlcigpLFxuICAgICAgYmxlbmRpbmc6IFRIUkVFW2JsZW5kaW5nXSxcbiAgICAgIGRlcHRoVGVzdCxcbiAgICAgIGRlcHRoV3JpdGUsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuICAgIHRoaXMudGFyZ2V0UG9vbCA9IG5ldyBQb29sKCk7XG4gICAgdGhpcy51bmlxdWVMaXN0ID0gbmV3IFVuaXF1ZUxpc3QobWF4UGFydGljbGVzKTtcbiAgICB0aGlzLnBhcnRpY2xlQnVmZmVyID0gcGFydGljbGVCdWZmZXI7XG4gICAgdGhpcy5idWZmZXIgPSBwYXJ0aWNsZUJ1ZmZlci5idWZmZXI7XG4gICAgdGhpcy5zdHJpZGUgPSBwYXJ0aWNsZUJ1ZmZlci5zdHJpZGU7XG4gICAgdGhpcy5nZW9tZXRyeSA9IHBhcnRpY2xlQnVmZmVyLmdlb21ldHJ5O1xuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICB0aGlzLnBvaW50cyA9IG5ldyBUSFJFRS5Qb2ludHModGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCk7XG4gICAgdGhpcy5wb2ludHMuZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkRGVidWdUZXh0dXJlQXRsYXMgPSBzaG91bGREZWJ1Z1RleHR1cmVBdGxhcztcblxuICAgIGNvbnRhaW5lci5hZGQodGhpcy5wb2ludHMpO1xuICB9XG5cbiAgb25TeXN0ZW1VcGRhdGUoc3lzdGVtKSB7XG4gICAgc3VwZXIub25TeXN0ZW1VcGRhdGUoc3lzdGVtKTtcblxuICAgIHRoaXMuYnVmZmVyLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHsgdGV4dHVyZUF0bGFzIH0gPSB0aGlzO1xuXG4gICAgaWYgKHRleHR1cmVBdGxhcykge1xuICAgICAgdGV4dHVyZUF0bGFzLnVwZGF0ZSgpO1xuICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5hdGxhc0RpbS52YWx1ZS5zZXQoXG4gICAgICAgIHRleHR1cmVBdGxhcy5hdGxhc1RleHR1cmUuaW1hZ2Uud2lkdGgsXG4gICAgICAgIHRleHR1cmVBdGxhcy5hdGxhc1RleHR1cmUuaW1hZ2UuaGVpZ2h0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb29scyB0aGUgcGFydGljbGUgdGFyZ2V0IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKiBVcGRhdGVzIHRoZSB0YXJnZXQgYW5kIG1hcHMgcGFydGljbGUgcHJvcGVydGllcyB0byB0aGUgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlQ3JlYXRlZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICBwYXJ0aWNsZS50YXJnZXQgPSB0aGlzLnRhcmdldFBvb2wuZ2V0KFRhcmdldCwgVEhSRUUpO1xuICAgICAgdGhpcy51bmlxdWVMaXN0LmFkZChwYXJ0aWNsZS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYXJnZXQocGFydGljbGUpLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gdGhlIHBvaW50IGlmIHRoZSBwYXJ0aWNsZSBoYXMgYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlVXBkYXRlKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldChwYXJ0aWNsZSkubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbmQgY2xlYXJzIHRoZSBwYXJ0aWNsZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlRGVhZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFydGljbGUudGFyZ2V0LnJlc2V0KCk7XG4gICAgdGhpcy5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIG11dGFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBwYXJ0aWNsZSB0byB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVRhcmdldChwYXJ0aWNsZSkge1xuICAgIGNvbnN0IHsgcG9zaXRpb24sIHNjYWxlLCByYWRpdXMsIGNvbG9yLCBhbHBoYSwgYm9keSwgaWQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgciwgZywgYiB9ID0gY29sb3I7XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQucG9zaXRpb24uY29weShwb3NpdGlvbik7XG4gICAgcGFydGljbGUudGFyZ2V0LnNpemUgPSBzY2FsZSAqIHJhZGl1cztcbiAgICBwYXJ0aWNsZS50YXJnZXQuY29sb3Iuc2V0UkdCKHIsIGcsIGIpO1xuICAgIHBhcnRpY2xlLnRhcmdldC5hbHBoYSA9IGFscGhhO1xuICAgIHBhcnRpY2xlLnRhcmdldC5pbmRleCA9IHRoaXMudW5pcXVlTGlzdC5maW5kKGlkKTtcblxuICAgIGlmIChib2R5ICYmIGJvZHkgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGUpIHtcbiAgICAgIGNvbnN0IHsgbWFwIH0gPSBib2R5Lm1hdGVyaWFsO1xuXG4gICAgICBwYXJ0aWNsZS50YXJnZXQudGV4dHVyZSA9IG1hcDtcbiAgICAgIHBhcnRpY2xlLnRhcmdldC50ZXh0dXJlSW5kZXggPSB0aGlzLmdldFRleHR1cmVJRChcbiAgICAgICAgbWFwLFxuICAgICAgICB0aGlzLnNob3VsZERlYnVnVGV4dHVyZUF0bGFzXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudHJ5IHBvaW50IGZvciBtYXBwaW5nIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gYnVmZmVyIGdlb21ldHJ5IHBvaW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyB0byBtYXBcbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICBtYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSkge1xuICAgIHRoaXMudXBkYXRlUG9pbnRQb3NpdGlvbihwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludFNpemUocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRDb2xvcihwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludEFscGhhKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50VGV4dHVyZUluZGV4KHBhcnRpY2xlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3MgcG9zaXRpb24gYWNjb3JkaW5nIHRvIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHBvc2l0aW9uLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50UG9zaXRpb24ocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAncG9zaXRpb24nO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnBvc2l0aW9uLng7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDFdID0gdGFyZ2V0LnBvc2l0aW9uLnk7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDJdID0gdGFyZ2V0LnBvc2l0aW9uLno7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIHNpemUgcmVsYXRpdmUgdG8gdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHNjYWxlIGFuZCByYWRpdXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBzY2FsZS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFNpemUocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAnc2l6ZSc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQuc2l6ZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3MgY29sb3IgYXR0cmlidXRlIGFjY29yZGluZyB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBjb2xvci5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IGNvbG9yIGFuZCBhbHBoYS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ2NvbG9yJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5jb2xvci5yO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAxXSA9IHRhcmdldC5jb2xvci5nO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAyXSA9IHRhcmdldC5jb2xvci5iO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQgYWxwaGEgYXR0cmlidXRlIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IGFscGhhLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgYWxwaGEuXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRBbHBoYShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdhbHBoYSc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQuYWxwaGE7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCB0ZXh0dXJlIGF0dHJpYnV0ZSB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCB0ZXh0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgdGV4dHVyZS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFRleHR1cmVJbmRleChwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICd0ZXhJRCc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG4gICAgY29uc3QgaWQgPSB0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICBidWZmZXIuYXJyYXlbaWRdID0gdGFyZ2V0LnRleHR1cmVJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRpID0gdGFyZ2V0LnRleHR1cmVJbmRleCAqIDQ7XG4gICAgICBjb25zdCB0YSA9IHRoaXMudGV4dHVyZUF0bGFzO1xuICAgICAgY29uc3QgaWRhID0gdGEuaW5kZXhEYXRhO1xuICAgICAgY29uc3QgbnggPSBpZGFbdGkrK107XG4gICAgICBjb25zdCBueSA9IGlkYVt0aSsrXTtcbiAgICAgIGNvbnN0IHB4ID0gaWRhW3RpKytdO1xuICAgICAgY29uc3QgcHkgPSBpZGFbdGkrK107XG5cbiAgICAgIGJ1ZmZlci5hcnJheVtpZF0gPSAoKG54ICogdGEuYXRsYXNUZXh0dXJlLmltYWdlLndpZHRoKSB8IDApICsgcHg7XG4gICAgICBidWZmZXIuYXJyYXlbaWQgKyAxXSA9ICgobnkgKiB0YS5hdGxhc1RleHR1cmUuaW1hZ2UuaGVpZ2h0KSB8IDApICsgcHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRUZXh0dXJlSUQodGV4dHVyZSwgZGVidWcpIHtcbiAgICBpZiAodGV4dHVyZS50ZXh0dXJlSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCF0aGlzLnRleHR1cmVBdGxhcykge1xuICAgICAgICB0aGlzLnRleHR1cmVBdGxhcyA9IG5ldyBUZXh0dXJlQXRsYXModGhpcywgZGVidWcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRleHR1cmVBdGxhcy5hZGRUZXh0dXJlKHRleHR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0dXJlLnRleHR1cmVJbmRleDtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIHBvaW50cywgdGV4dHVyZUF0bGFzLCB1bmlxdWVMaXN0IH0gPSB0aGlzO1xuXG4gICAgY29udGFpbmVyLnJlbW92ZShwb2ludHMpO1xuICAgIHVuaXF1ZUxpc3QuZGVzdHJveSgpO1xuICAgIHRleHR1cmVBdGxhcyAmJiB0ZXh0dXJlQXRsYXMuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export const fragmentShader = () => {
|
|
2
|
-
return `
|
|
3
|
-
uniform vec3 baseColor;
|
|
4
|
-
uniform sampler2D uTexture;
|
|
5
|
-
|
|
6
|
-
varying vec3 targetColor;
|
|
7
|
-
varying float targetAlpha;
|
|
8
|
-
varying vec4 tileRect;
|
|
9
|
-
|
|
10
|
-
void main() {
|
|
11
|
-
gl_FragColor = vec4(baseColor * targetColor, targetAlpha);
|
|
12
|
-
|
|
13
|
-
vec2 uv = gl_PointCoord;
|
|
14
|
-
uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);
|
|
15
|
-
|
|
16
|
-
gl_FragColor = gl_FragColor * texture2D(uTexture, uv);
|
|
17
|
-
}
|
|
18
|
-
`;
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9mcmFnbWVudFNoYWRlci5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxjQUFjLEdBQUcsTUFBTTtBQUNsQyxTQUFRO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FoQkU7QUFpQkQsQ0FsQk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSAoKSA9PiB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGJhc2VDb2xvcjtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcblxuICAgIHZhcnlpbmcgdmVjMyB0YXJnZXRDb2xvcjtcbiAgICB2YXJ5aW5nIGZsb2F0IHRhcmdldEFscGhhO1xuICAgIHZhcnlpbmcgdmVjNCB0aWxlUmVjdDtcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoYmFzZUNvbG9yICogdGFyZ2V0Q29sb3IsIHRhcmdldEFscGhhKTtcblxuICAgICAgdmVjMiB1diA9IGdsX1BvaW50Q29vcmQ7XG4gICAgICB1diA9IG1peCh0aWxlUmVjdC54eSwgdGlsZVJlY3QuencsIGdsX1BvaW50Q29vcmQpO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSBnbF9GcmFnQ29sb3IgKiB0ZXh0dXJlMkQodVRleHR1cmUsIHV2KTtcbiAgICB9XG5gO1xufTtcbiJdfQ==
|
|
@@ -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,30 +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
|
-
|
|
12
|
-
varying vec3 targetColor;
|
|
13
|
-
varying float targetAlpha;
|
|
14
|
-
varying vec4 tileRect;
|
|
15
|
-
|
|
16
|
-
void main() {
|
|
17
|
-
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
|
|
18
|
-
targetColor = color;
|
|
19
|
-
targetAlpha = alpha;
|
|
20
|
-
|
|
21
|
-
vec2 tmin = floor(texID) / atlasDim;
|
|
22
|
-
vec2 tmax = fract(texID);
|
|
23
|
-
tileRect = vec4(tmin,tmax);
|
|
24
|
-
|
|
25
|
-
gl_PointSize = ((size * ${SIZE_ATTENUATION_FACTOR}) / -mvPosition.z);
|
|
26
|
-
gl_Position = projectionMatrix * mvPosition;
|
|
27
|
-
}
|
|
28
|
-
`;
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy92ZXJ0ZXhTaGFkZXIuanMiXSwibmFtZXMiOlsiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiLCJ2ZXJ0ZXhTaGFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLHVCQUFULFFBQXdDLGdDQUF4QztBQUVBLE9BQU8sTUFBTUMsWUFBWSxHQUFHLE1BQU07QUFDaEMsU0FBUTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQ0QsdUJBQXdCO0FBQ3hEO0FBQ0E7QUFDQSxDQXpCRTtBQTBCRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNJWkVfQVRURU5VQVRJT05fRkFDVE9SIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NoYWRlcnMvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHZlcnRleFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHZlYzIgYXRsYXNEaW07XG5cbiAgICBhdHRyaWJ1dGUgZmxvYXQgc2l6ZTtcbiAgICBhdHRyaWJ1dGUgdmVjMyBjb2xvcjtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgYWxwaGE7XG4gICAgYXR0cmlidXRlIHZlYzIgdGV4SUQ7XG5cbiAgICB2YXJ5aW5nIHZlYzMgdGFyZ2V0Q29sb3I7XG4gICAgdmFyeWluZyBmbG9hdCB0YXJnZXRBbHBoYTtcbiAgICB2YXJ5aW5nIHZlYzQgdGlsZVJlY3Q7XG5cbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgICAgdGFyZ2V0Q29sb3IgPSBjb2xvcjtcbiAgICAgIHRhcmdldEFscGhhID0gYWxwaGE7XG5cbiAgICAgIHZlYzIgdG1pbiA9IGZsb29yKHRleElEKSAvIGF0bGFzRGltO1xuICAgICAgdmVjMiB0bWF4ID0gZnJhY3QodGV4SUQpO1xuICAgICAgdGlsZVJlY3QgPSB2ZWM0KHRtaW4sdG1heCk7XG5cbiAgICAgIGdsX1BvaW50U2l6ZSA9ICgoc2l6ZSAqICR7U0laRV9BVFRFTlVBVElPTl9GQUNUT1J9KSAvIC1tdlBvc2l0aW9uLnopO1xuICAgICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiAgICB9XG5gO1xufTtcbiJdfQ==
|
|
@@ -1,27 +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 SIZE_BYTE_SIZE = FLOAT_BYTE_SIZE;
|
|
9
|
-
export const RGBA_BYTE_SIZE = RGBA_SIZE * FLOAT_BYTE_SIZE;
|
|
10
|
-
export const ALL_BYTE_SIZES = [POSITION_BYTE_SIZE, SIZE_BYTE_SIZE, RGBA_BYTE_SIZE];
|
|
11
|
-
export const PARTICLE_BYTE_SIZE = ALL_BYTE_SIZES.reduce((cur, acc) => cur + acc); // Attributes
|
|
12
|
-
|
|
13
|
-
export const POSITION_ATTRIBUTE_BUFFER_SIZE = VECTOR_3_SIZE;
|
|
14
|
-
export const SIZE_ATTRIBUTE_BUFFER_SIZE = 1;
|
|
15
|
-
export const RGBA_ATTRIBUTE_BUFFER_SIZE = RGBA_SIZE;
|
|
16
|
-
export const ALPHA_ATTRIBUTE_BUFFER_SIZE = 1;
|
|
17
|
-
export const TEXID_ATTRIBUTE_BUFFER_SIZE = 2;
|
|
18
|
-
export const ATTRIBUTE_TO_SIZE_MAP = {
|
|
19
|
-
position: POSITION_ATTRIBUTE_BUFFER_SIZE,
|
|
20
|
-
size: SIZE_ATTRIBUTE_BUFFER_SIZE,
|
|
21
|
-
// THREE.Color does not contain alpha, so we will have separate attributes for these
|
|
22
|
-
color: RGBA_ATTRIBUTE_BUFFER_SIZE,
|
|
23
|
-
alpha: ALPHA_ATTRIBUTE_BUFFER_SIZE,
|
|
24
|
-
texID: TEXID_ATTRIBUTE_BUFFER_SIZE
|
|
25
|
-
};
|
|
26
|
-
export const PARTICLE_STRIDE = [POSITION_ATTRIBUTE_BUFFER_SIZE, SIZE_ATTRIBUTE_BUFFER_SIZE, RGBA_ATTRIBUTE_BUFFER_SIZE, ALPHA_ATTRIBUTE_BUFFER_SIZE, TEXID_ATTRIBUTE_BUFFER_SIZE].reduce((cur, acc) => cur + acc);
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIlZFQ1RPUl8zX1NJWkUiLCJsZW5ndGgiLCJSR0JBX1NJWkUiLCJGTE9BVF9CWVRFX1NJWkUiLCJQT1NJVElPTl9CWVRFX1NJWkUiLCJTSVpFX0JZVEVfU0laRSIsIlJHQkFfQllURV9TSVpFIiwiQUxMX0JZVEVfU0laRVMiLCJQQVJUSUNMRV9CWVRFX1NJWkUiLCJyZWR1Y2UiLCJjdXIiLCJhY2MiLCJQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSIsIlJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwicG9zaXRpb24iLCJzaXplIiwiY29sb3IiLCJhbHBoYSIsInRleElEIiwiUEFSVElDTEVfU1RSSURFIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE9BQU8sTUFBTUEscUJBQXFCLEdBQUcsS0FBOUI7QUFDUCxPQUFPLE1BQU1DLGFBQWEsR0FBRyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQkMsTUFBdEM7QUFDUCxPQUFPLE1BQU1DLFNBQVMsR0FBRyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixHQUFoQixFQUFxQkQsTUFBdkM7QUFDUCxPQUFPLE1BQU1FLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7O0FBQ0EsT0FBTyxNQUFNQyxrQkFBa0IsR0FBR0osYUFBYSxHQUFHRyxlQUEzQztBQUNQLE9BQU8sTUFBTUUsY0FBYyxHQUFHRixlQUF2QjtBQUNQLE9BQU8sTUFBTUcsY0FBYyxHQUFHSixTQUFTLEdBQUdDLGVBQW5DO0FBQ1AsT0FBTyxNQUFNSSxjQUFjLEdBQUcsQ0FDNUJILGtCQUQ0QixFQUU1QkMsY0FGNEIsRUFHNUJDLGNBSDRCLENBQXZCO0FBS1AsT0FBTyxNQUFNRSxrQkFBa0IsR0FBR0QsY0FBYyxDQUFDRSxNQUFmLENBQ2hDLENBQUNDLEdBQUQsRUFBTUMsR0FBTixLQUFjRCxHQUFHLEdBQUdDLEdBRFksQ0FBM0IsQyxDQUlQOztBQUNBLE9BQU8sTUFBTUMsOEJBQThCLEdBQUdaLGFBQXZDO0FBQ1AsT0FBTyxNQUFNYSwwQkFBMEIsR0FBRyxDQUFuQztBQUNQLE9BQU8sTUFBTUMsMEJBQTBCLEdBQUdaLFNBQW5DO0FBQ1AsT0FBTyxNQUFNYSwyQkFBMkIsR0FBRyxDQUFwQztBQUNQLE9BQU8sTUFBTUMsMkJBQTJCLEdBQUcsQ0FBcEM7QUFFUCxPQUFPLE1BQU1DLHFCQUFxQixHQUFHO0FBQ25DQyxFQUFBQSxRQUFRLEVBQUVOLDhCQUR5QjtBQUVuQ08sRUFBQUEsSUFBSSxFQUFFTiwwQkFGNkI7QUFHbkM7QUFDQU8sRUFBQUEsS0FBSyxFQUFFTiwwQkFKNEI7QUFLbkNPLEVBQUFBLEtBQUssRUFBRU4sMkJBTDRCO0FBTW5DTyxFQUFBQSxLQUFLLEVBQUVOO0FBTjRCLENBQTlCO0FBU1AsT0FBTyxNQUFNTyxlQUFlLEdBQUcsQ0FDN0JYLDhCQUQ2QixFQUU3QkMsMEJBRjZCLEVBRzdCQywwQkFINkIsRUFJN0JDLDJCQUo2QixFQUs3QkMsMkJBTDZCLEVBTTdCUCxNQU42QixDQU10QixDQUFDQyxHQUFELEVBQU1DLEdBQU4sS0FBY0QsR0FBRyxHQUFHQyxHQU5FLENBQXhCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUHJpbWl0aXZlc1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX1BBUlRJQ0xFUyA9IDEwMDAwO1xuZXhwb3J0IGNvbnN0IFZFQ1RPUl8zX1NJWkUgPSBbJ3gnLCAneScsICd6J10ubGVuZ3RoO1xuZXhwb3J0IGNvbnN0IFJHQkFfU0laRSA9IFsncicsICdnJywgJ2InLCAnYSddLmxlbmd0aDtcbmV4cG9ydCBjb25zdCBGTE9BVF9CWVRFX1NJWkUgPSA0O1xuXG4vLyBCeXRlIHNpemVzXG5leHBvcnQgY29uc3QgUE9TSVRJT05fQllURV9TSVpFID0gVkVDVE9SXzNfU0laRSAqIEZMT0FUX0JZVEVfU0laRTtcbmV4cG9ydCBjb25zdCBTSVpFX0JZVEVfU0laRSA9IEZMT0FUX0JZVEVfU0laRTtcbmV4cG9ydCBjb25zdCBSR0JBX0JZVEVfU0laRSA9IFJHQkFfU0laRSAqIEZMT0FUX0JZVEVfU0laRTtcbmV4cG9ydCBjb25zdCBBTExfQllURV9TSVpFUyA9IFtcbiAgUE9TSVRJT05fQllURV9TSVpFLFxuICBTSVpFX0JZVEVfU0laRSxcbiAgUkdCQV9CWVRFX1NJWkUsXG5dO1xuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX0JZVEVfU0laRSA9IEFMTF9CWVRFX1NJWkVTLnJlZHVjZShcbiAgKGN1ciwgYWNjKSA9PiBjdXIgKyBhY2Ncbik7XG5cbi8vIEF0dHJpYnV0ZXNcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSBWRUNUT1JfM19TSVpFO1xuZXhwb3J0IGNvbnN0IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gMTtcbmV4cG9ydCBjb25zdCBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IFJHQkFfU0laRTtcbmV4cG9ydCBjb25zdCBBTFBIQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFRFWElEX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IDI7XG5cbmV4cG9ydCBjb25zdCBBVFRSSUJVVEVfVE9fU0laRV9NQVAgPSB7XG4gIHBvc2l0aW9uOiBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHNpemU6IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICAvLyBUSFJFRS5Db2xvciBkb2VzIG5vdCBjb250YWluIGFscGhhLCBzbyB3ZSB3aWxsIGhhdmUgc2VwYXJhdGUgYXR0cmlidXRlcyBmb3IgdGhlc2VcbiAgY29sb3I6IFJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBhbHBoYTogQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICB0ZXhJRDogVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxufTtcblxuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX1NUUklERSA9IFtcbiAgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgUkdCQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIEFMUEhBX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuXS5yZWR1Y2UoKGN1ciwgYWNjKSA9PiBjdXIgKyBhY2MpO1xuIl19
|
|
@@ -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==
|