three-stdlib 2.13.0 → 2.14.1
Sign up to get free protection for your applications and to get access to all the features.
- package/{Nodes-607e9ed8.js → Nodes-4f766d71.js} +0 -0
- package/{Nodes-627a8bdf.js → Nodes-9aa16d74.js} +0 -0
- package/geometries/ConvexGeometry.cjs.js +1 -1
- package/geometries/ConvexGeometry.js +1 -1
- package/geometries/TextGeometry.cjs.js +1 -1
- package/geometries/TextGeometry.d.ts +2 -0
- package/geometries/TextGeometry.js +6 -1
- package/index.cjs.js +1 -1
- package/loaders/FontLoader.cjs.js +1 -1
- package/loaders/FontLoader.d.ts +5 -1
- package/loaders/FontLoader.js +10 -5
- package/loaders/KTX2Loader.cjs.js +1 -1
- package/loaders/KTX2Loader.js +493 -102
- package/loaders/NodeMaterialLoader.cjs.js +1 -1
- package/loaders/RGBMLoader.js +248 -177
- package/misc/ProgressiveLightmap.cjs.js +1 -1
- package/misc/ProgressiveLightmap.js +2 -2
- package/nodes/Nodes.cjs.js +1 -1
- package/nodes/core/NodeBuilder.js +5 -1
- package/nodes/loaders/NodeLoader.cjs.js +1 -1
- package/nodes/loaders/NodeObjectLoader.cjs.js +1 -1
- package/package.json +2 -2
- package/utils/WorkerPool.cjs.js +1 -0
- package/utils/WorkerPool.js +82 -0
package/nodes/Nodes.cjs.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./core/ArrayUniformNode.cjs.js"),r=require("./core/AttributeNode.cjs.js"),o=require("./core/BypassNode.cjs.js"),s=require("./core/CodeNode.cjs.js"),t=require("./core/ConstNode.cjs.js"),i=require("./core/ContextNode.cjs.js"),p=require("./core/ExpressionNode.cjs.js"),a=require("./core/FunctionCallNode.cjs.js"),d=require("./core/FunctionNode.cjs.js"),c=require("./core/Node.cjs.js"),x=require("./core/NodeAttribute.cjs.js"),n=require("./core/NodeBuilder.cjs.js"),N=require("./core/NodeCode.cjs.js"),u=require("./core/NodeFrame.cjs.js"),j=require("./core/NodeFunctionInput.cjs.js"),l=require("./core/NodeKeywords.cjs.js"),m=require("./core/NodeUniform.cjs.js"),q=require("./core/NodeVar.cjs.js"),h=require("./core/NodeVary.cjs.js"),f=require("./core/PropertyNode.cjs.js"),g=require("./core/TempNode.cjs.js"),b=require("./core/UniformNode.cjs.js"),v=require("./core/VarNode.cjs.js"),M=require("./core/VaryNode.cjs.js"),y=require("./accessors/BufferNode.cjs.js"),C=require("./accessors/CameraNode.cjs.js"),T=require("./accessors/CubeTextureNode.cjs.js"),V=require("./accessors/MaterialNode.cjs.js"),L=require("./accessors/MaterialReferenceNode.cjs.js"),S=require("./accessors/ModelNode.cjs.js"),F=require("./accessors/ModelViewProjectionNode.cjs.js"),w=require("./accessors/NormalNode.cjs.js"),P=require("./accessors/Object3DNode.cjs.js"),_=require("./accessors/PointUVNode.cjs.js"),D=require("./accessors/PositionNode.cjs.js"),U=require("./accessors/ReferenceNode.cjs.js"),R=require("./accessors/ReflectNode.cjs.js"),B=require("./accessors/SkinningNode.cjs.js"),O=require("./accessors/TextureNode.cjs.js"),G=require("./accessors/UVNode.cjs.js"),A=require("./display/ColorSpaceNode.cjs.js"),E=require("./display/NormalMapNode.cjs.js"),I=require("./math/MathNode.cjs.js"),X=require("./math/OperatorNode.cjs.js"),k=require("./math/CondNode.cjs.js"),W=require("./lights/LightContextNode.cjs.js"),z=require("./lights/LightNode.cjs.js"),J=require("./lights/LightsNode.cjs.js"),K=require("./utils/ArrayElementNode.cjs.js"),Y=require("./utils/ConvertNode.cjs.js"),H=require("./utils/JoinNode.cjs.js"),Q=require("./utils/SplitNode.cjs.js"),Z=require("./utils/SpriteSheetUVNode.cjs.js"),$=require("./utils/MatcapUVNode.cjs.js"),ee=require("./utils/OscNode.cjs.js"),re=require("./utils/TimerNode.cjs.js"),oe=require("../Nodes-
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./core/ArrayUniformNode.cjs.js"),r=require("./core/AttributeNode.cjs.js"),o=require("./core/BypassNode.cjs.js"),s=require("./core/CodeNode.cjs.js"),t=require("./core/ConstNode.cjs.js"),i=require("./core/ContextNode.cjs.js"),p=require("./core/ExpressionNode.cjs.js"),a=require("./core/FunctionCallNode.cjs.js"),d=require("./core/FunctionNode.cjs.js"),c=require("./core/Node.cjs.js"),x=require("./core/NodeAttribute.cjs.js"),n=require("./core/NodeBuilder.cjs.js"),N=require("./core/NodeCode.cjs.js"),u=require("./core/NodeFrame.cjs.js"),j=require("./core/NodeFunctionInput.cjs.js"),l=require("./core/NodeKeywords.cjs.js"),m=require("./core/NodeUniform.cjs.js"),q=require("./core/NodeVar.cjs.js"),h=require("./core/NodeVary.cjs.js"),f=require("./core/PropertyNode.cjs.js"),g=require("./core/TempNode.cjs.js"),b=require("./core/UniformNode.cjs.js"),v=require("./core/VarNode.cjs.js"),M=require("./core/VaryNode.cjs.js"),y=require("./accessors/BufferNode.cjs.js"),C=require("./accessors/CameraNode.cjs.js"),T=require("./accessors/CubeTextureNode.cjs.js"),V=require("./accessors/MaterialNode.cjs.js"),L=require("./accessors/MaterialReferenceNode.cjs.js"),S=require("./accessors/ModelNode.cjs.js"),F=require("./accessors/ModelViewProjectionNode.cjs.js"),w=require("./accessors/NormalNode.cjs.js"),P=require("./accessors/Object3DNode.cjs.js"),_=require("./accessors/PointUVNode.cjs.js"),D=require("./accessors/PositionNode.cjs.js"),U=require("./accessors/ReferenceNode.cjs.js"),R=require("./accessors/ReflectNode.cjs.js"),B=require("./accessors/SkinningNode.cjs.js"),O=require("./accessors/TextureNode.cjs.js"),G=require("./accessors/UVNode.cjs.js"),A=require("./display/ColorSpaceNode.cjs.js"),E=require("./display/NormalMapNode.cjs.js"),I=require("./math/MathNode.cjs.js"),X=require("./math/OperatorNode.cjs.js"),k=require("./math/CondNode.cjs.js"),W=require("./lights/LightContextNode.cjs.js"),z=require("./lights/LightNode.cjs.js"),J=require("./lights/LightsNode.cjs.js"),K=require("./utils/ArrayElementNode.cjs.js"),Y=require("./utils/ConvertNode.cjs.js"),H=require("./utils/JoinNode.cjs.js"),Q=require("./utils/SplitNode.cjs.js"),Z=require("./utils/SpriteSheetUVNode.cjs.js"),$=require("./utils/MatcapUVNode.cjs.js"),ee=require("./utils/OscNode.cjs.js"),re=require("./utils/TimerNode.cjs.js"),oe=require("../Nodes-9aa16d74.js"),se=require("./loaders/NodeMaterialLoader.cjs.js"),te=require("./procedural/CheckerNode.cjs.js"),ie=require("./fog/FogNode.cjs.js"),pe=require("./fog/FogRangeNode.cjs.js"),ae=require("./core/constants.cjs.js"),de=require("./functions/BSDFs.cjs.js"),ce=require("./ShaderNode.cjs.js"),xe=require("./materials/LineBasicNodeMaterial.cjs.js"),ne=require("./materials/MeshBasicNodeMaterial.cjs.js"),Ne=require("./materials/MeshStandardNodeMaterial.cjs.js"),ue=require("./materials/PointsNodeMaterial.cjs.js");require("./core/InputNode.cjs.js"),require("./core/NodeUtils.cjs.js"),require("three"),require("@babel/runtime/helpers/defineProperty"),require("./materials/NodeMaterial.cjs.js"),exports.ArrayUniformNode=e,exports.AttributeNode=r,exports.BypassNode=o,exports.CodeNode=s,exports.ConstNode=t,exports.ContextNode=i,exports.ExpressionNode=p,exports.FunctionCallNode=a,exports.FunctionNode=d,exports.Node=c,exports.NodeAttribute=x,exports.NodeBuilder=n.default,exports.NodeCode=N,exports.NodeFrame=u,exports.NodeFunctionInput=j,exports.NodeKeywords=l,exports.NodeUniform=m,exports.NodeVar=q,exports.NodeVary=h,exports.PropertyNode=f,exports.TempNode=g,exports.UniformNode=b,exports.VarNode=v,exports.VaryNode=M,exports.BufferNode=y,exports.CameraNode=C,exports.CubeTextureNode=T,exports.MaterialNode=V,exports.MaterialReferenceNode=L,exports.ModelNode=S,exports.ModelViewProjectionNode=F,exports.NormalNode=w,exports.Object3DNode=P,exports.PointUVNode=_,exports.PositionNode=D,exports.ReferenceNode=U,exports.ReflectNode=R,exports.SkinningNode=B,exports.TextureNode=O,exports.UVNode=G,exports.ColorSpaceNode=A.default,exports.NormalMapNode=E,exports.MathNode=I,exports.OperatorNode=X,exports.CondNode=k,exports.LightContextNode=W,exports.LightNode=z,exports.LightsNode=J,exports.ArrayElementNode=K,exports.ConvertNode=Y,exports.JoinNode=H,exports.SplitNode=Q,exports.SpriteSheetUVNode=Z,exports.MatcapUVNode=$,exports.OscNode=ee,exports.TimerNode=re,exports.NodeLoader=oe.NodeLoader,exports.NodeObjectLoader=oe.NodeObjectLoader,exports.fromType=oe.fromType,exports.NodeMaterialLoader=se,exports.CheckerNode=te,exports.FogNode=ie,exports.FogRangeNode=pe,exports.NodeShaderStage=ae.NodeShaderStage,exports.NodeType=ae.NodeType,exports.NodeUpdateType=ae.NodeUpdateType,exports.BRDF_GGX=de.BRDF_GGX,exports.BRDF_Lambert=de.BRDF_Lambert,exports.D_GGX=de.D_GGX,exports.F_Schlick=de.F_Schlick,exports.PhysicalLightingModel=de.PhysicalLightingModel,exports.RE_Direct_Physical=de.RE_Direct_Physical,exports.V_GGX_SmithCorrelated=de.V_GGX_SmithCorrelated,exports.getDistanceAttenuation=de.getDistanceAttenuation,exports.EPSILON=ce.EPSILON,exports.INFINITY=ce.INFINITY,exports.ShaderNode=ce.ShaderNode,exports.abs=ce.abs,exports.acos=ce.acos,exports.add=ce.add,exports.addTo=ce.addTo,exports.alphaTest=ce.alphaTest,exports.and=ce.and,exports.asin=ce.asin,exports.assign=ce.assign,exports.atan=ce.atan,exports.attribute=ce.attribute,exports.bitAnd=ce.bitAnd,exports.bitOr=ce.bitOr,exports.bitXor=ce.bitXor,exports.bmat3=ce.bmat3,exports.bmat4=ce.bmat4,exports.bool=ce.bool,exports.buffer=ce.buffer,exports.bvec2=ce.bvec2,exports.bvec3=ce.bvec3,exports.bvec4=ce.bvec4,exports.cameraPosition=ce.cameraPosition,exports.ceil=ce.ceil,exports.clamp=ce.clamp,exports.color=ce.color,exports.cond=ce.cond,exports.cos=ce.cos,exports.cross=ce.cross,exports.dFdx=ce.dFdx,exports.dFdy=ce.dFdy,exports.degrees=ce.degrees,exports.diffuseColor=ce.diffuseColor,exports.distance=ce.distance,exports.div=ce.div,exports.dot=ce.dot,exports.element=ce.element,exports.equal=ce.equal,exports.exp=ce.exp,exports.exp2=ce.exp2,exports.faceforward=ce.faceforward,exports.float=ce.float,exports.floor=ce.floor,exports.fract=ce.fract,exports.greaterThan=ce.greaterThan,exports.greaterThanEqual=ce.greaterThanEqual,exports.imat3=ce.imat3,exports.imat4=ce.imat4,exports.int=ce.int,exports.inversesqrt=ce.inversesqrt,exports.invert=ce.invert,exports.ivec2=ce.ivec2,exports.ivec3=ce.ivec3,exports.ivec4=ce.ivec4,exports.join=ce.join,exports.label=ce.label,exports.length=ce.length,exports.lessThan=ce.lessThan,exports.lessThanEqual=ce.lessThanEqual,exports.log=ce.log,exports.log2=ce.log2,exports.mat3=ce.mat3,exports.mat4=ce.mat4,exports.max=ce.max,exports.metalness=ce.metalness,exports.min=ce.min,exports.mix=ce.mix,exports.mod=ce.mod,exports.mul=ce.mul,exports.negate=ce.negate,exports.nodeObject=ce.nodeObject,exports.normalGeometry=ce.normalGeometry,exports.normalLocal=ce.normalLocal,exports.normalView=ce.normalView,exports.normalWorld=ce.normalWorld,exports.normalize=ce.normalize,exports.or=ce.or,exports.positionLocal=ce.positionLocal,exports.positionView=ce.positionView,exports.positionViewDirection=ce.positionViewDirection,exports.positionWorld=ce.positionWorld,exports.pow=ce.pow,exports.pow2=ce.pow2,exports.pow3=ce.pow3,exports.pow4=ce.pow4,exports.radians=ce.radians,exports.reflect=ce.reflect,exports.refract=ce.refract,exports.remainder=ce.remainder,exports.roughness=ce.roughness,exports.round=ce.round,exports.sampler=ce.sampler,exports.saturate=ce.saturate,exports.shiftLeft=ce.shiftLeft,exports.shiftRight=ce.shiftRight,exports.sign=ce.sign,exports.sin=ce.sin,exports.smoothstep=ce.smoothstep,exports.specularColor=ce.specularColor,exports.sqrt=ce.sqrt,exports.step=ce.step,exports.sub=ce.sub,exports.tan=ce.tan,exports.temp=ce.temp,exports.texture=ce.texture,exports.transformDirection=ce.transformDirection,exports.transformedNormalView=ce.transformedNormalView,exports.uint=ce.uint,exports.umat3=ce.umat3,exports.umat4=ce.umat4,exports.uniform=ce.uniform,exports.uv=ce.uv,exports.uvec2=ce.uvec2,exports.uvec3=ce.uvec3,exports.uvec4=ce.uvec4,exports.vec2=ce.vec2,exports.vec3=ce.vec3,exports.vec4=ce.vec4,exports.viewMatrix=ce.viewMatrix,exports.xor=ce.xor,exports.LineBasicNodeMaterial=xe,exports.MeshBasicNodeMaterial=ne,exports.MeshStandardNodeMaterial=Ne,exports.PointsNodeMaterial=ue;
|
@@ -140,7 +140,11 @@ class NodeBuilder {
|
|
140
140
|
if (type === 'int') return `${Math.round(value)}`;
|
141
141
|
if (type === 'uint') return value >= 0 ? `${Math.round(value)}u` : '0u';
|
142
142
|
if (type === 'bool') return value ? 'true' : 'false';
|
143
|
-
|
143
|
+
|
144
|
+
if (type === 'color') {
|
145
|
+
return `${this.getType('vec3')}( ${toFloat(value.r)}, ${toFloat(value.g)}, ${toFloat(value.b)} )`;
|
146
|
+
}
|
147
|
+
|
144
148
|
const typeLength = this.getTypeLength(type);
|
145
149
|
const componentType = this.getComponentType(type);
|
146
150
|
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";var e=require("../../Nodes-
|
1
|
+
"use strict";var e=require("../../Nodes-9aa16d74.js");require("three"),require("../core/ArrayUniformNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/BypassNode.cjs.js"),require("../core/CodeNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/FunctionCallNode.cjs.js"),require("../core/FunctionNode.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../core/NodeFrame.cjs.js"),require("../core/NodeFunctionInput.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/Object3DNode.cjs.js"),require("../accessors/CubeTextureNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../accessors/ReflectNode.cjs.js"),require("../ShaderNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("../accessors/ModelNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js"),require("../accessors/MaterialNode.cjs.js"),require("../accessors/MaterialReferenceNode.cjs.js"),require("../accessors/ReferenceNode.cjs.js"),require("../accessors/ModelViewProjectionNode.cjs.js"),require("../accessors/PointUVNode.cjs.js"),require("../accessors/SkinningNode.cjs.js"),require("../display/ColorSpaceNode.cjs.js"),require("../display/NormalMapNode.cjs.js"),require("../lights/LightContextNode.cjs.js"),require("../functions/BSDFs.cjs.js"),require("../lights/LightNode.cjs.js"),require("../lights/LightsNode.cjs.js"),require("../utils/SpriteSheetUVNode.cjs.js"),require("../utils/MatcapUVNode.cjs.js"),require("../utils/OscNode.cjs.js"),require("../utils/TimerNode.cjs.js"),require("./NodeMaterialLoader.cjs.js"),require("../procedural/CheckerNode.cjs.js"),require("../fog/FogNode.cjs.js"),require("../fog/FogRangeNode.cjs.js"),require("../materials/LineBasicNodeMaterial.cjs.js"),require("../materials/NodeMaterial.cjs.js"),require("../materials/MeshBasicNodeMaterial.cjs.js"),require("../materials/MeshStandardNodeMaterial.cjs.js"),require("../materials/PointsNodeMaterial.cjs.js"),module.exports=e.NodeLoader;
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";var e=require("../../Nodes-
|
1
|
+
"use strict";var e=require("../../Nodes-9aa16d74.js");require("./NodeMaterialLoader.cjs.js"),require("three"),require("../core/ArrayUniformNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/BypassNode.cjs.js"),require("../core/CodeNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/FunctionCallNode.cjs.js"),require("../core/FunctionNode.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../core/NodeFrame.cjs.js"),require("../core/NodeFunctionInput.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/Object3DNode.cjs.js"),require("../accessors/CubeTextureNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../accessors/ReflectNode.cjs.js"),require("../ShaderNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("../accessors/ModelNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js"),require("../accessors/MaterialNode.cjs.js"),require("../accessors/MaterialReferenceNode.cjs.js"),require("../accessors/ReferenceNode.cjs.js"),require("../accessors/ModelViewProjectionNode.cjs.js"),require("../accessors/PointUVNode.cjs.js"),require("../accessors/SkinningNode.cjs.js"),require("../display/ColorSpaceNode.cjs.js"),require("../display/NormalMapNode.cjs.js"),require("../lights/LightContextNode.cjs.js"),require("../functions/BSDFs.cjs.js"),require("../lights/LightNode.cjs.js"),require("../lights/LightsNode.cjs.js"),require("../utils/SpriteSheetUVNode.cjs.js"),require("../utils/MatcapUVNode.cjs.js"),require("../utils/OscNode.cjs.js"),require("../utils/TimerNode.cjs.js"),require("../procedural/CheckerNode.cjs.js"),require("../fog/FogNode.cjs.js"),require("../fog/FogRangeNode.cjs.js"),require("../materials/LineBasicNodeMaterial.cjs.js"),require("../materials/NodeMaterial.cjs.js"),require("../materials/MeshBasicNodeMaterial.cjs.js"),require("../materials/MeshStandardNodeMaterial.cjs.js"),require("../materials/PointsNodeMaterial.cjs.js"),module.exports=e.NodeObjectLoader;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "three-stdlib",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.14.1",
|
4
4
|
"private": false,
|
5
5
|
"description": "stand-alone library of threejs examples",
|
6
6
|
"main": "index.cjs.js",
|
@@ -25,7 +25,7 @@
|
|
25
25
|
"chevrotain": "^10.1.2",
|
26
26
|
"draco3d": "^1.4.1",
|
27
27
|
"fflate": "^0.6.9",
|
28
|
-
"ktx-parse": "^0.
|
28
|
+
"ktx-parse": "^0.4.5",
|
29
29
|
"mmd-parser": "^1.0.4",
|
30
30
|
"opentype.js": "^1.3.3",
|
31
31
|
"potpack": "^1.0.1",
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.WorkerPool=class{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(e){if(!this.workers[e]){const s=this.workerCreator();s.addEventListener("message",this._onMessage.bind(this,e)),this.workers[e]=s}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,s){const r=this.workersResolve[e];if(r&&r(s),this.queue.length){const{resolve:s,msg:r,transfer:t}=this.queue.shift();this.workersResolve[e]=s,this.workers[e].postMessage(r,t)}else this.workerStatus^=1<<e}setWorkerCreator(e){this.workerCreator=e}setWorkerLimit(e){this.pool=e}postMessage(e,s){return new Promise((r=>{const t=this._getIdleWorker();-1!==t?(this._initWorker(t),this.workerStatus|=1<<t,this.workersResolve[t]=r,this.workers[t].postMessage(e,s)):this.queue.push({resolve:r,msg:e,transfer:s})}))}dispose(){this.workers.forEach((e=>e.terminate())),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}};
|
@@ -0,0 +1,82 @@
|
|
1
|
+
/**
|
2
|
+
* @author Deepkolos / https://github.com/deepkolos
|
3
|
+
*/
|
4
|
+
class WorkerPool {
|
5
|
+
constructor(pool = 4) {
|
6
|
+
this.pool = pool;
|
7
|
+
this.queue = [];
|
8
|
+
this.workers = [];
|
9
|
+
this.workersResolve = [];
|
10
|
+
this.workerStatus = 0;
|
11
|
+
}
|
12
|
+
|
13
|
+
_initWorker(workerId) {
|
14
|
+
if (!this.workers[workerId]) {
|
15
|
+
const worker = this.workerCreator();
|
16
|
+
worker.addEventListener('message', this._onMessage.bind(this, workerId));
|
17
|
+
this.workers[workerId] = worker;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
_getIdleWorker() {
|
22
|
+
for (let i = 0; i < this.pool; i++) if (!(this.workerStatus & 1 << i)) return i;
|
23
|
+
|
24
|
+
return -1;
|
25
|
+
}
|
26
|
+
|
27
|
+
_onMessage(workerId, msg) {
|
28
|
+
const resolve = this.workersResolve[workerId];
|
29
|
+
resolve && resolve(msg);
|
30
|
+
|
31
|
+
if (this.queue.length) {
|
32
|
+
const {
|
33
|
+
resolve,
|
34
|
+
msg,
|
35
|
+
transfer
|
36
|
+
} = this.queue.shift();
|
37
|
+
this.workersResolve[workerId] = resolve;
|
38
|
+
this.workers[workerId].postMessage(msg, transfer);
|
39
|
+
} else {
|
40
|
+
this.workerStatus ^= 1 << workerId;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
setWorkerCreator(workerCreator) {
|
45
|
+
this.workerCreator = workerCreator;
|
46
|
+
}
|
47
|
+
|
48
|
+
setWorkerLimit(pool) {
|
49
|
+
this.pool = pool;
|
50
|
+
}
|
51
|
+
|
52
|
+
postMessage(msg, transfer) {
|
53
|
+
return new Promise(resolve => {
|
54
|
+
const workerId = this._getIdleWorker();
|
55
|
+
|
56
|
+
if (workerId !== -1) {
|
57
|
+
this._initWorker(workerId);
|
58
|
+
|
59
|
+
this.workerStatus |= 1 << workerId;
|
60
|
+
this.workersResolve[workerId] = resolve;
|
61
|
+
this.workers[workerId].postMessage(msg, transfer);
|
62
|
+
} else {
|
63
|
+
this.queue.push({
|
64
|
+
resolve,
|
65
|
+
msg,
|
66
|
+
transfer
|
67
|
+
});
|
68
|
+
}
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
dispose() {
|
73
|
+
this.workers.forEach(worker => worker.terminate());
|
74
|
+
this.workersResolve.length = 0;
|
75
|
+
this.workers.length = 0;
|
76
|
+
this.queue.length = 0;
|
77
|
+
this.workerStatus = 0;
|
78
|
+
}
|
79
|
+
|
80
|
+
}
|
81
|
+
|
82
|
+
export { WorkerPool };
|