glre 0.39.0 → 0.41.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/README.md +8 -4
- package/dist/addons.cjs +1 -1
- package/dist/addons.cjs.map +1 -1
- package/dist/addons.d.ts +853 -22
- package/dist/addons.js +1 -1
- package/dist/addons.js.map +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +47 -28
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +60 -33
- package/dist/node.cjs +59 -30
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +39 -26
- package/dist/node.js +59 -30
- package/dist/node.js.map +1 -1
- package/dist/react.d.ts +47 -28
- package/dist/solid.d.ts +47 -28
- package/package.json +24 -24
- package/src/addons/animation/easing/backIn.ts +10 -0
- package/src/addons/animation/easing/backInOut.ts +12 -0
- package/src/addons/animation/easing/backOut.ts +10 -0
- package/src/addons/animation/easing/bounceIn.ts +10 -0
- package/src/addons/animation/easing/bounceInOut.ts +13 -0
- package/src/addons/animation/easing/bounceOut.ts +30 -0
- package/src/addons/animation/easing/circularIn.ts +9 -0
- package/src/addons/animation/easing/circularInOut.ts +11 -0
- package/src/addons/animation/easing/circularOut.ts +9 -0
- package/src/addons/animation/easing/cubicIn.ts +9 -0
- package/src/addons/animation/easing/cubicInOut.ts +11 -0
- package/src/addons/animation/easing/cubicOut.ts +10 -0
- package/src/addons/animation/easing/elasticIn.ts +10 -0
- package/src/addons/animation/easing/elasticInOut.ts +21 -0
- package/src/addons/animation/easing/elasticOut.ts +12 -0
- package/src/addons/animation/easing/exponentialIn.ts +9 -0
- package/src/addons/animation/easing/exponentialInOut.ts +13 -0
- package/src/addons/animation/easing/exponentialOut.ts +9 -0
- package/src/addons/animation/easing/index.ts +33 -0
- package/src/addons/animation/easing/linearIn.ts +9 -0
- package/src/addons/animation/easing/linearInOut.ts +9 -0
- package/src/addons/animation/easing/linearOut.ts +9 -0
- package/src/addons/animation/easing/quadraticIn.ts +9 -0
- package/src/addons/animation/easing/quadraticInOut.ts +10 -0
- package/src/addons/animation/easing/quadraticOut.ts +9 -0
- package/src/addons/animation/easing/quarticIn.ts +9 -0
- package/src/addons/animation/easing/quarticInOut.ts +11 -0
- package/src/addons/animation/easing/quarticOut.ts +10 -0
- package/src/addons/animation/easing/quinticIn.ts +9 -0
- package/src/addons/animation/easing/quinticInOut.ts +11 -0
- package/src/addons/animation/easing/quinticOut.ts +9 -0
- package/src/addons/animation/easing/sineIn.ts +10 -0
- package/src/addons/animation/easing/sineInOut.ts +10 -0
- package/src/addons/animation/easing/sineOut.ts +10 -0
- package/src/addons/color/palette/macbeth.ts +42 -0
- package/src/addons/color/space/cmyk2rgb.ts +12 -0
- package/src/addons/color/space/gamma2linear.ts +19 -0
- package/src/addons/color/space/hsl2rgb.ts +20 -0
- package/src/addons/color/space/hsv2rgb.ts +18 -0
- package/src/addons/color/space/hue2rgb.ts +12 -0
- package/src/addons/color/space/index.ts +29 -0
- package/src/addons/color/space/lab2lch.ts +22 -0
- package/src/addons/color/space/lab2rgb.ts +19 -0
- package/src/addons/color/space/lab2xyz.ts +32 -0
- package/src/addons/color/space/lch2lab.ts +21 -0
- package/src/addons/color/space/lch2rgb.ts +22 -0
- package/src/addons/color/space/linear2gamma.ts +19 -0
- package/src/addons/color/space/oklab2rgb.ts +35 -0
- package/src/addons/color/space/rgb2cmyk.ts +13 -0
- package/src/addons/color/space/rgb2hcv.ts +29 -0
- package/src/addons/color/space/rgb2hsl.ts +23 -0
- package/src/addons/color/space/rgb2hsv.ts +36 -0
- package/src/addons/color/space/rgb2hue.ts +29 -0
- package/src/addons/color/space/rgb2lab.ts +19 -0
- package/src/addons/color/space/rgb2lch.ts +22 -0
- package/src/addons/color/space/rgb2oklab.ts +45 -0
- package/src/addons/color/space/rgb2srgb.ts +34 -0
- package/src/addons/color/space/rgb2xyz.ts +20 -0
- package/src/addons/color/space/rgb2yiq.ts +22 -0
- package/src/addons/color/space/rgb2yuv.ts +32 -0
- package/src/addons/color/space/srgb2rgb.ts +34 -0
- package/src/addons/color/space/xyz2lab.ts +27 -0
- package/src/addons/color/space/xyz2rgb.ts +30 -0
- package/src/addons/color/space/yiq2rgb.ts +22 -0
- package/src/addons/color/space/yuv2rgb.ts +32 -0
- package/src/addons/draw/arrows.ts +75 -0
- package/src/addons/draw/axis.ts +57 -0
- package/src/addons/draw/bridge.ts +81 -0
- package/src/addons/draw/char.ts +30 -0
- package/src/addons/draw/circle.ts +29 -0
- package/src/addons/draw/fill.ts +25 -0
- package/src/addons/draw/flip.ts +45 -0
- package/src/addons/draw/hex.ts +29 -0
- package/src/addons/draw/index.ts +13 -0
- package/src/addons/draw/line.ts +16 -0
- package/src/addons/draw/point.ts +30 -0
- package/src/addons/draw/rect.ts +52 -0
- package/src/addons/draw/stroke.ts +31 -0
- package/src/addons/draw/tri.ts +29 -0
- package/src/addons/generative/cnoise.ts +239 -0
- package/src/addons/generative/curl.ts +64 -0
- package/src/addons/generative/fbm.ts +69 -0
- package/src/addons/generative/gerstnerWave.ts +21 -0
- package/src/addons/generative/gnoise.ts +113 -0
- package/src/addons/generative/index.ts +15 -0
- package/src/addons/generative/noised.ts +139 -0
- package/src/addons/generative/pnoise.ts +249 -0
- package/src/addons/generative/psrdnoise.ts +277 -0
- package/src/addons/generative/random.ts +136 -0
- package/src/addons/generative/snoise.ts +199 -0
- package/src/addons/generative/srandom.ts +90 -0
- package/src/addons/generative/voronoi.ts +134 -0
- package/src/addons/generative/voronoise.ts +69 -0
- package/src/addons/generative/wavelet.ts +77 -0
- package/src/addons/generative/worley.ts +99 -0
- package/src/addons/geometry/aabb/aabb.ts +8 -0
- package/src/addons/geometry/aabb/centroid.ts +10 -0
- package/src/addons/geometry/aabb/contain.ts +19 -0
- package/src/addons/geometry/aabb/diagonal.ts +10 -0
- package/src/addons/geometry/aabb/expand.ts +16 -0
- package/src/addons/geometry/aabb/index.ts +7 -0
- package/src/addons/geometry/aabb/intersect.ts +20 -0
- package/src/addons/geometry/aabb/square.ts +17 -0
- package/src/addons/geometry/index.ts +2 -0
- package/src/addons/geometry/triangle/area.ts +10 -0
- package/src/addons/geometry/triangle/barycentric.ts +50 -0
- package/src/addons/geometry/triangle/centroid.ts +10 -0
- package/src/addons/geometry/triangle/closestPoint.ts +85 -0
- package/src/addons/geometry/triangle/contain.ts +19 -0
- package/src/addons/geometry/triangle/distanceSq.ts +38 -0
- package/src/addons/geometry/triangle/index.ts +10 -0
- package/src/addons/geometry/triangle/intersect.ts +49 -0
- package/src/addons/geometry/triangle/normal.ts +12 -0
- package/src/addons/geometry/triangle/signedDistance.ts +31 -0
- package/src/addons/geometry/triangle/triangle.ts +9 -0
- package/src/addons/index.ts +8 -6
- package/src/addons/lighting/ray.ts +8 -0
- package/src/addons/math/aafloor.ts +13 -0
- package/src/addons/math/aafract.ts +38 -0
- package/src/addons/math/aamirror.ts +12 -0
- package/src/addons/math/aastep.ts +14 -0
- package/src/addons/math/absi.ts +9 -0
- package/src/addons/math/adaptiveThreshold.ts +24 -0
- package/src/addons/math/bump.ts +20 -0
- package/src/addons/math/const.ts +19 -0
- package/src/addons/math/cubic.ts +101 -0
- package/src/addons/math/cubicMix.ts +49 -0
- package/src/addons/math/decimate.ts +12 -0
- package/src/addons/math/dist.ts +143 -0
- package/src/addons/math/fcos.ts +11 -0
- package/src/addons/math/frac.ts +9 -0
- package/src/addons/math/gain.ts +14 -0
- package/src/addons/math/gaussian.ts +14 -0
- package/src/addons/math/grad4.ts +19 -0
- package/src/addons/math/hammersley.ts +54 -0
- package/src/addons/math/highPass.ts +12 -0
- package/src/addons/math/index.ts +63 -0
- package/src/addons/math/inside.ts +68 -0
- package/src/addons/math/invCubic.ts +9 -0
- package/src/addons/math/invQuartic.ts +9 -0
- package/src/addons/math/inverse.ts +9 -0
- package/src/addons/math/lengthSq.ts +10 -0
- package/src/addons/math/map.ts +27 -0
- package/src/addons/math/mirror.ts +12 -0
- package/src/addons/math/mmax.ts +27 -0
- package/src/addons/math/mmin.ts +28 -0
- package/src/addons/math/mmix.ts +47 -0
- package/src/addons/math/mod2.ts +44 -0
- package/src/addons/math/mod289.ts +46 -0
- package/src/addons/math/modi.ts +15 -0
- package/src/addons/math/nyquist.ts +15 -0
- package/src/addons/math/pack.ts +15 -0
- package/src/addons/math/parabola.ts +12 -0
- package/src/addons/math/permute.ts +42 -0
- package/src/addons/math/pow2.ts +10 -0
- package/src/addons/math/pow3.ts +9 -0
- package/src/addons/math/pow5.ts +10 -0
- package/src/addons/math/pow7.ts +12 -0
- package/src/addons/math/powFast.ts +18 -0
- package/src/addons/math/quartic.ts +15 -0
- package/src/addons/math/quat/index.ts +14 -0
- package/src/addons/math/quat/quat2mat3.ts +28 -0
- package/src/addons/math/quat/quat2mat4.ts +16 -0
- package/src/addons/math/quat/quatAdd.ts +18 -0
- package/src/addons/math/quat/quatConj.ts +14 -0
- package/src/addons/math/quat/quatDiv.ts +18 -0
- package/src/addons/math/quat/quatIdentity.ts +9 -0
- package/src/addons/math/quat/quatInverse.ts +17 -0
- package/src/addons/math/quat/quatLength.ts +15 -0
- package/src/addons/math/quat/quatLengthSq.ts +14 -0
- package/src/addons/math/quat/quatLerp.ts +40 -0
- package/src/addons/math/quat/quatMul.ts +38 -0
- package/src/addons/math/quat/quatNeg.ts +14 -0
- package/src/addons/math/quat/quatNorm.ts +16 -0
- package/src/addons/math/quat/quatSub.ts +18 -0
- package/src/addons/math/quintic.ts +16 -0
- package/src/addons/math/rotate2d.ts +16 -0
- package/src/addons/math/rotate3d.ts +37 -0
- package/src/addons/math/rotate3dX.ts +20 -0
- package/src/addons/math/rotate3dY.ts +20 -0
- package/src/addons/math/rotate3dZ.ts +20 -0
- package/src/addons/math/rotate4d.ts +41 -0
- package/src/addons/math/rotate4dX.ts +21 -0
- package/src/addons/math/rotate4dY.ts +16 -0
- package/src/addons/math/rotate4dZ.ts +21 -0
- package/src/addons/math/saturateMediump.ts +11 -0
- package/src/addons/math/scale2d.ts +44 -0
- package/src/addons/math/scale3d.ts +17 -0
- package/src/addons/math/scale4d.ts +50 -0
- package/src/addons/math/smootherstep.ts +16 -0
- package/src/addons/math/taylorInvSqrt.ts +9 -0
- package/src/addons/math/toMat3.ts +14 -0
- package/src/addons/math/toMat4.ts +14 -0
- package/src/addons/math/translate4d.ts +31 -0
- package/src/addons/math/unpack.ts +88 -0
- package/src/addons/sdf/boxSDF.ts +24 -0
- package/src/addons/sdf/circleSDF.ts +20 -0
- package/src/addons/sdf/crossSDF.ts +17 -0
- package/src/addons/sdf/hexSDF.ts +18 -0
- package/src/addons/sdf/index.ts +7 -0
- package/src/addons/sdf/lineSDF.ts +33 -0
- package/src/addons/sdf/rectSDF.ts +46 -0
- package/src/addons/sdf/sphereSDF.ts +20 -0
- package/src/addons/sdf/triSDF.ts +14 -0
- package/src/addons/space/aspect.ts +14 -0
- package/src/addons/space/bracketing.ts +44 -0
- package/src/addons/space/brickTile.ts +44 -0
- package/src/addons/space/cart2polar.ts +20 -0
- package/src/addons/space/center.ts +32 -0
- package/src/addons/space/checkerTile.ts +41 -0
- package/src/addons/space/depth2viewZ.ts +43 -0
- package/src/addons/space/displace.ts +55 -0
- package/src/addons/space/equirect2xyz.ts +17 -0
- package/src/addons/space/eulerView.ts +19 -0
- package/src/addons/space/fisheye2xyz.ts +18 -0
- package/src/addons/space/flipY.ts +25 -0
- package/src/addons/space/hexTile.ts +18 -0
- package/src/addons/space/index.ts +38 -0
- package/src/addons/space/kaleidoscope.ts +48 -0
- package/src/addons/space/linearizeDepth.ts +17 -0
- package/src/addons/space/lookAt.ts +49 -0
- package/src/addons/space/lookAtView.ts +40 -0
- package/src/addons/space/mirrorTile.ts +73 -0
- package/src/addons/space/nearest.ts +13 -0
- package/src/addons/space/orthographic.ts +25 -0
- package/src/addons/space/parallaxMapping.ts +149 -0
- package/src/addons/space/perspective.ts +24 -0
- package/src/addons/space/polar2cart.ts +24 -0
- package/src/addons/space/ratio.ts +14 -0
- package/src/addons/space/rotate.ts +37 -0
- package/src/addons/space/rotateX.ts +54 -0
- package/src/addons/space/rotateY.ts +54 -0
- package/src/addons/space/rotateZ.ts +54 -0
- package/src/addons/space/scale.ts +13 -0
- package/src/addons/space/sprite.ts +16 -0
- package/src/addons/space/sqTile.ts +20 -0
- package/src/addons/space/tbn.ts +26 -0
- package/src/addons/space/translate.ts +12 -0
- package/src/addons/space/triTile.ts +32 -0
- package/src/addons/space/uncenter.ts +32 -0
- package/src/addons/space/unratio.ts +12 -0
- package/src/addons/space/viewZ2depth.ts +25 -0
- package/src/addons/space/windmillTile.ts +58 -0
- package/src/addons/space/xyz2equirect.ts +10 -0
- package/src/index.ts +5 -2
- package/src/node/build.ts +62 -52
- package/src/node/create.ts +3 -0
- package/src/node/index.ts +1 -2
- package/src/node/scope.ts +27 -25
- package/src/node/types.ts +16 -12
- package/src/node/utils/const.ts +12 -11
- package/src/node/utils/index.ts +15 -12
- package/src/node/utils/infer.ts +17 -6
- package/src/node/utils/parse.ts +37 -13
- package/src/node/utils/utils.ts +40 -22
- package/src/types.ts +13 -5
- package/src/utils/helpers.ts +80 -7
- package/src/utils/pipeline.ts +21 -5
- package/src/utils/program.ts +68 -42
- package/src/utils/webgl.ts +47 -37
- package/src/utils/webgpu.ts +30 -38
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as refr from 'refr';
|
|
|
2
2
|
import { Queue, Frame } from 'refr';
|
|
3
3
|
import { EventState, Nested } from 'reev';
|
|
4
4
|
|
|
5
|
-
declare const CONVERSIONS: readonly ["toBool", "
|
|
5
|
+
declare const CONVERSIONS: readonly ["toBool", "toUInt", "toInt", "toFloat", "toBVec2", "toIVec2", "toUVec2", "toVec2", "toBVec3", "toIVec3", "toUVec3", "toVec3", "toBVec4", "toIVec4", "toUVec4", "toVec4", "toColor", "toMat2", "toMat3", "toMat4"];
|
|
6
6
|
declare const TYPE_MAPPING: {
|
|
7
7
|
readonly bool: "bool";
|
|
8
8
|
readonly uint: "u32";
|
|
@@ -67,7 +67,7 @@ declare const OPERATOR_TYPE_RULES: readonly [readonly ["float", "vec2", "vec2"],
|
|
|
67
67
|
* 1.2. index.ts functions and
|
|
68
68
|
* 3.2. types.ts _N
|
|
69
69
|
*/
|
|
70
|
-
declare const FUNCTIONS: readonly [...("texture" | "all" | "any" | "determinant" | "distance" | "dot" | "length" | "lengthSq" | "luminance" | "cross" | "cubeTexture" | "texelFetch" | "textureLod")[], "abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", "ceil", "cos", "cosh", "dFdx", "dFdy", "degrees", "exp", "exp2", "floor", "fract", "fwidth", "inverseSqrt", "log", "log2", "negate", "normalize", "oneMinus", "radians", "reciprocal", "round", "
|
|
70
|
+
declare const FUNCTIONS: readonly [...("texture" | "all" | "any" | "determinant" | "distance" | "dot" | "length" | "lengthSq" | "luminance" | "cross" | "cubeTexture" | "texelFetch" | "textureLod")[], "abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", "ceil", "cos", "cosh", "dFdx", "dFdy", "degrees", "exp", "exp2", "floor", "fract", "fwidth", "inverse", "inverseSqrt", "log", "log2", "negate", "normalize", "oneMinus", "radians", "reciprocal", "round", "sign", "sin", "sinh", "sqrt", "tan", "tanh", "trunc", "saturate", "atan2", "clamp", "max", "min", "mix", "pow", "reflect", "refract", "smoothstep", "step"];
|
|
71
71
|
|
|
72
72
|
type Constants = (typeof CONSTANTS)[number] | 'void';
|
|
73
73
|
type Conversions = (typeof CONVERSIONS)[number];
|
|
@@ -81,14 +81,14 @@ interface FnLayout {
|
|
|
81
81
|
type: C | 'auto';
|
|
82
82
|
inputs?: Array<{
|
|
83
83
|
name: string;
|
|
84
|
-
type: C;
|
|
84
|
+
type: C | 'auto';
|
|
85
85
|
}>;
|
|
86
86
|
}
|
|
87
87
|
type StructFields = Record<string, X>;
|
|
88
88
|
/**
|
|
89
89
|
* node
|
|
90
90
|
*/
|
|
91
|
-
type NodeTypes = 'attribute' | 'storage' | 'uniform' | 'constant' | 'variable' | 'varying' | 'ternary' | 'builtin' | 'conversion' | 'operator' | 'function' | 'struct' | 'member' | 'element' | 'gather' | 'scatter' | 'scope' | 'assign' | 'loop' | 'define' | 'if' | 'switch' | 'declare' | 'return' | 'break' | 'continue';
|
|
91
|
+
type NodeTypes = 'attribute' | 'instance' | 'storage' | 'uniform' | 'constant' | 'variable' | 'varying' | 'ternary' | 'builtin' | 'conversion' | 'operator' | 'function' | 'struct' | 'member' | 'element' | 'gather' | 'scatter' | 'scope' | 'assign' | 'loop' | 'define' | 'if' | 'switch' | 'declare' | 'return' | 'break' | 'continue';
|
|
92
92
|
interface NodeProps {
|
|
93
93
|
id?: string;
|
|
94
94
|
args?: any[];
|
|
@@ -154,7 +154,7 @@ type Color = XImpl<'color'>;
|
|
|
154
154
|
type Mat2 = XImpl<'mat2'>;
|
|
155
155
|
type Mat3 = XImpl<'mat3'>;
|
|
156
156
|
type Mat4 = XImpl<'mat4'>;
|
|
157
|
-
type Texture = XImpl<'texture'>;
|
|
157
|
+
type Texture$1 = XImpl<'texture'>;
|
|
158
158
|
type Sampler2D = XImpl<'sampler2D'>;
|
|
159
159
|
type StructBase = XImpl<'struct'>;
|
|
160
160
|
interface ConstantsToType {
|
|
@@ -179,7 +179,7 @@ interface ConstantsToType {
|
|
|
179
179
|
mat2: Mat2;
|
|
180
180
|
mat3: Mat3;
|
|
181
181
|
mat4: Mat4;
|
|
182
|
-
texture: Texture;
|
|
182
|
+
texture: Texture$1;
|
|
183
183
|
sampler2D: Sampler2D;
|
|
184
184
|
struct: StructBase;
|
|
185
185
|
}
|
|
@@ -193,10 +193,11 @@ type XImpl<T extends C> = _X<T> & {
|
|
|
193
193
|
};
|
|
194
194
|
type C = Constants;
|
|
195
195
|
type X<T extends C = C> = T extends keyof ConstantsToType ? ConstantsToType[T] : _X<T>;
|
|
196
|
-
type Methods = Functions | Operators | Conversions | Swizzles | '__nodeType' | 'type' | 'props' | 'isProxy' | 'assign' | 'toVar' | 'toString' | 'element';
|
|
196
|
+
type Methods = Functions | Operators | Conversions | Swizzles | '__nodeType' | 'type' | 'props' | 'isProxy' | 'assign' | 'toVar' | 'toString' | 'element' | 'select';
|
|
197
197
|
interface _X<T extends C> {
|
|
198
198
|
readonly __nodeType?: T;
|
|
199
199
|
assign(x: any): X<T>;
|
|
200
|
+
select(x: number | X<T>, y: X<'bool'>): X<T>;
|
|
200
201
|
fragment(c: NodeContext): string;
|
|
201
202
|
toVar(name?: string): X<T>;
|
|
202
203
|
toString(c?: NodeContext): string;
|
|
@@ -240,20 +241,20 @@ interface _X<T extends C> {
|
|
|
240
241
|
shiftLeftAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>;
|
|
241
242
|
shiftRightAssign<U extends C>(x: ValidateOperator<T, U> extends 0 ? never : number | X<U>): X<T>;
|
|
242
243
|
toBool(): Bool;
|
|
243
|
-
|
|
244
|
+
toUInt(): UInt;
|
|
244
245
|
toInt(): Int;
|
|
245
246
|
toFloat(): Float;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
247
|
+
toBVec2(): BVec2;
|
|
248
|
+
toIVec2(): IVec2;
|
|
249
|
+
toUVec2(): UVec2;
|
|
249
250
|
toVec2(): Vec2;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
toBVec3(): BVec3;
|
|
252
|
+
toIVec3(): IVec3;
|
|
253
|
+
toUVec3(): UVec3;
|
|
253
254
|
toVec3(): Vec3;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
255
|
+
toBVec4(): BVec4;
|
|
256
|
+
toIVec4(): IVec4;
|
|
257
|
+
toUVec4(): UVec4;
|
|
257
258
|
toVec4(): Vec4;
|
|
258
259
|
toColor(): Color;
|
|
259
260
|
toMat2(): Mat2;
|
|
@@ -337,14 +338,17 @@ type GL = EventState<{
|
|
|
337
338
|
isWebGL: boolean;
|
|
338
339
|
isError: boolean;
|
|
339
340
|
isLoop: boolean;
|
|
341
|
+
isDebug: boolean;
|
|
342
|
+
isDepth: boolean;
|
|
340
343
|
isGL: true;
|
|
341
344
|
width?: number;
|
|
342
345
|
height?: number;
|
|
343
346
|
size: [number, number];
|
|
344
347
|
mouse: [number, number];
|
|
345
348
|
count: number;
|
|
349
|
+
instanceCount: number;
|
|
350
|
+
particleCount: number | [number, number] | [number, number, number];
|
|
346
351
|
loading: number;
|
|
347
|
-
particles: 64 | 256 | 576 | 1024 | 1600 | 2304 | 3136 | 4096 | 4096 | 5184 | 6400;
|
|
348
352
|
el: HTMLCanvasElement;
|
|
349
353
|
vs?: string | Vec4;
|
|
350
354
|
cs?: string | Void;
|
|
@@ -371,7 +375,7 @@ type GL = EventState<{
|
|
|
371
375
|
error(e?: string): void;
|
|
372
376
|
render(): void;
|
|
373
377
|
resize(e?: Event): void;
|
|
374
|
-
mousemove(e:
|
|
378
|
+
mousemove(e: MouseEvent): void;
|
|
375
379
|
loop(): void;
|
|
376
380
|
/**
|
|
377
381
|
* setter
|
|
@@ -381,16 +385,21 @@ type GL = EventState<{
|
|
|
381
385
|
uniform(target: {
|
|
382
386
|
[key: string]: Uniform;
|
|
383
387
|
}): GL;
|
|
384
|
-
_texture?(key: string, value:
|
|
385
|
-
texture(key: string, value:
|
|
388
|
+
_texture?(key: string, value: Texture): GL;
|
|
389
|
+
texture(key: string, value: Texture): GL;
|
|
386
390
|
texture(target: {
|
|
387
|
-
[key: string]:
|
|
391
|
+
[key: string]: Texture;
|
|
388
392
|
}): GL;
|
|
389
393
|
_attribute?(key: string, value: Attribute, iboValue?: Attribute): GL;
|
|
390
394
|
attribute(key: string, value: Attribute, iboValue?: Attribute): GL;
|
|
391
395
|
attribute(target: {
|
|
392
396
|
[key: string]: Attribute;
|
|
393
397
|
}): GL;
|
|
398
|
+
_instance?(key: string, value: Attribute, at?: number): GL;
|
|
399
|
+
instance(key: string, value: Attribute, at?: number): GL;
|
|
400
|
+
instance(target: {
|
|
401
|
+
[key: string]: Attribute;
|
|
402
|
+
}): GL;
|
|
394
403
|
_storage?(key: string, value: Storage): GL;
|
|
395
404
|
storage(key: string, value: Storage): GL;
|
|
396
405
|
storage(target: {
|
|
@@ -398,6 +407,7 @@ type GL = EventState<{
|
|
|
398
407
|
}): GL;
|
|
399
408
|
}>;
|
|
400
409
|
type Uniform = number | number[] | Float32Array;
|
|
410
|
+
type Texture = string | HTMLImageElement | HTMLVideoElement;
|
|
401
411
|
type Attribute = number[] | Float32Array;
|
|
402
412
|
type Storage = number[] | Float32Array;
|
|
403
413
|
/**
|
|
@@ -421,6 +431,7 @@ interface AttribData {
|
|
|
421
431
|
buffer: GPUBuffer;
|
|
422
432
|
location: number;
|
|
423
433
|
stride: number;
|
|
434
|
+
isInstance?: boolean;
|
|
424
435
|
}
|
|
425
436
|
interface StorageData {
|
|
426
437
|
array: Float32Array;
|
|
@@ -452,14 +463,17 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
|
|
|
452
463
|
isWebGL: boolean;
|
|
453
464
|
isError: boolean;
|
|
454
465
|
isLoop: boolean;
|
|
466
|
+
isDebug: boolean;
|
|
467
|
+
isDepth: boolean;
|
|
455
468
|
isGL: true;
|
|
456
469
|
width?: number;
|
|
457
470
|
height?: number;
|
|
458
471
|
size: [number, number];
|
|
459
472
|
mouse: [number, number];
|
|
460
473
|
count: number;
|
|
474
|
+
instanceCount: number;
|
|
475
|
+
particleCount: number | [number, number] | [number, number, number];
|
|
461
476
|
loading: number;
|
|
462
|
-
particles: 64 | 256 | 576 | 1024 | 1600 | 2304 | 3136 | 4096 | 4096 | 5184 | 6400;
|
|
463
477
|
el: HTMLCanvasElement;
|
|
464
478
|
vs?: string | Vec4;
|
|
465
479
|
cs?: string | Void;
|
|
@@ -480,23 +494,28 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
|
|
|
480
494
|
error(e?: string): void;
|
|
481
495
|
render(): void;
|
|
482
496
|
resize(e?: Event): void;
|
|
483
|
-
mousemove(e:
|
|
497
|
+
mousemove(e: MouseEvent): void;
|
|
484
498
|
loop(): void;
|
|
485
499
|
_uniform?(key: string, value: number | number[] | Float32Array<ArrayBufferLike>, isMatrix?: boolean): GL;
|
|
486
500
|
uniform(key: string, value: number | number[] | Float32Array<ArrayBufferLike>, isMatrix?: boolean): GL;
|
|
487
501
|
uniform(target: {
|
|
488
502
|
[key: string]: number | number[] | Float32Array<ArrayBufferLike>;
|
|
489
503
|
}): GL;
|
|
490
|
-
_texture?(key: string, value: string): GL;
|
|
491
|
-
texture(key: string, value: string): GL;
|
|
504
|
+
_texture?(key: string, value: string | HTMLImageElement | HTMLVideoElement): GL;
|
|
505
|
+
texture(key: string, value: string | HTMLImageElement | HTMLVideoElement): GL;
|
|
492
506
|
texture(target: {
|
|
493
|
-
[key: string]: string;
|
|
507
|
+
[key: string]: string | HTMLImageElement | HTMLVideoElement;
|
|
494
508
|
}): GL;
|
|
495
509
|
_attribute?(key: string, value: number[] | Float32Array<ArrayBufferLike>, iboValue?: number[] | Float32Array<ArrayBufferLike>): GL;
|
|
496
510
|
attribute(key: string, value: number[] | Float32Array<ArrayBufferLike>, iboValue?: number[] | Float32Array<ArrayBufferLike>): GL;
|
|
497
511
|
attribute(target: {
|
|
498
512
|
[key: string]: number[] | Float32Array<ArrayBufferLike>;
|
|
499
513
|
}): GL;
|
|
514
|
+
_instance?(key: string, value: number[] | Float32Array<ArrayBufferLike>, at?: number): GL;
|
|
515
|
+
instance(key: string, value: number[] | Float32Array<ArrayBufferLike>, at?: number): GL;
|
|
516
|
+
instance(target: {
|
|
517
|
+
[key: string]: number[] | Float32Array<ArrayBufferLike>;
|
|
518
|
+
}): GL;
|
|
500
519
|
_storage?(key: string, value: number[] | Float32Array<ArrayBufferLike>): GL;
|
|
501
520
|
storage(key: string, value: number[] | Float32Array<ArrayBufferLike>): GL;
|
|
502
521
|
storage(target: {
|
|
@@ -504,4 +523,4 @@ declare const createGL: (props?: Partial<GL>) => EventState<{
|
|
|
504
523
|
}): GL;
|
|
505
524
|
}, any[] | unknown[]>;
|
|
506
525
|
|
|
507
|
-
export { AttribData, GL, StorageData, TextureData, UniformData, WebGLState, WebGPUState, createGL, createGL as default, isGL, isServer, isWebGPUSupported };
|
|
526
|
+
export { type AttribData, type GL, type StorageData, type TextureData, type UniformData, type WebGLState, type WebGPUState, createGL, createGL as default, isGL, isServer, isWebGPUSupported };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import{durable as B,event as
|
|
2
|
-
|
|
3
|
-
\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
4
|
-
${t}`)},C=(e,t,r,n)=>{let o=e.createProgram(),a=N(e,t,e.FRAGMENT_SHADER,n.error),s=N(e,r,e.VERTEX_SHADER,n.error);if(!a||!s)return;if(e.attachShader(o,a),e.attachShader(o,s),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let i=e.getProgramInfoLog(o);e.deleteProgram(o),n.error(`Could not link program: ${i}`)},oe=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r},ae=(e,t)=>{let r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r},se=(e,t,r)=>{r&&(e=Math.max(...r)+1);let n=t.length/e;return Math.floor(n)},O=(e,t,r,n,o)=>{let a=oe(e,n),s=ae(e,o),i=se(r,n,o);e.bindBuffer(e.ARRAY_BUFFER,a),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,i,e.FLOAT,!1,0,0),s&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,s)},I=(e,t,r)=>{if(_.num(r))return e.uniform1f(t,r);let n=r.length;if(n<=4)return e[`uniform${n}fv`](t,r);n=Math.sqrt(n)<<0,e[`uniformMatrix${n}fv`](t,!1,r)},V=(e,t,r,n)=>{let o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,o)},k=(e,t,r,n,o,a,s)=>{let i=r*r,f=t.length/i;for(let u=0;u<i;u++)for(let m=0;m<Math.min(f,4);m++)s[4*u+m]=t[u*f+m]||0;e.activeTexture(e.TEXTURE0+a),e.bindTexture(e.TEXTURE_2D,n.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,r,0,e.RGBA,e.FLOAT,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,r,0,e.RGBA,e.FLOAT,s),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)},q=(e,t)=>{for(let{ping:r,pong:n}of t)e.deleteTexture(r.texture),e.deleteTexture(n.texture),e.deleteFramebuffer(r.buffer),e.deleteFramebuffer(n.buffer)},z=(e,t,r,n,o,a)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(n,o),a===0&&e.bindFramebuffer(e.FRAMEBUFFER,r.buffer);let s=e.COLOR_ATTACHMENT0+a;return e.framebufferTexture2D(e.FRAMEBUFFER,s,e.TEXTURE_2D,r.texture,0),s};var ie=`
|
|
1
|
+
import{durable as B,event as Re}from"reev";import{createFrame as _e,createQueue as he}from"refr";var E={arr:Array.isArray,bol:e=>typeof e=="boolean",str:e=>typeof e=="string",num:e=>typeof e=="number",int:e=>Number.isInteger(e),fun:e=>typeof e=="function",und:e=>typeof e>"u",nul:e=>e===null,set:e=>e instanceof Set,map:e=>e instanceof Map,obj:e=>!!e&&e.constructor.name==="Object",nan:e=>typeof e=="number"&&Number.isNaN(e)};var k=e=>e instanceof Float32Array,le=(e,t)=>{let r=new Image;Object.assign(r,{src:e,crossOrigin:"anonymous"}),r.decode().then(()=>t(r))},ge=(e,t)=>{let r=document.createElement("video");r.crossOrigin="anonymous",r.muted=!0,r.loop=!0,r.src=e,r.load(),r.play(),r.addEventListener("canplay",t.bind(null,r),{once:!0})};function M(e,t){if(!E.str(e))return t(e,e instanceof HTMLVideoElement);let r=/\.(mp4|webm|ogg|avi|mov)$/i.test(e);(r?ge:le)(e,o=>{t(o,r)})}var xe=e=>[1,2,3,4,9,16].includes(e),Te=(e,t=3)=>e%t===0?Math.floor(e/t):-1,C=(e,t=1,r=console.warn)=>{let n=Te(e,t);return xe(n)||r(`glre attribute error: Invalid attribute length ${e}. Must divide by vertex count (${t}) with valid stride (1,2,3,4,9,16)`),n},q=`
|
|
5
2
|
#version 300 es
|
|
6
3
|
precision mediump float;
|
|
7
4
|
out vec4 fragColor;
|
|
@@ -9,13 +6,13 @@ uniform vec2 iResolution;
|
|
|
9
6
|
void main() {
|
|
10
7
|
fragColor = vec4(fract((gl_FragCoord.xy / iResolution)), 0.0, 1.0);
|
|
11
8
|
}
|
|
12
|
-
`,
|
|
9
|
+
`,X=`
|
|
13
10
|
#version 300 es
|
|
14
11
|
void main() {
|
|
15
12
|
float x = float(gl_VertexID % 2) * 4.0 - 1.0;
|
|
16
13
|
float y = float(gl_VertexID / 2) * 4.0 - 1.0;
|
|
17
14
|
gl_Position = vec4(x, y, 0.0, 1.0);
|
|
18
|
-
}`,
|
|
15
|
+
}`,H=`
|
|
19
16
|
struct In { @builtin(vertex_index) vertex_index: u32 }
|
|
20
17
|
struct Out { @builtin(position) position: vec4f }
|
|
21
18
|
@vertex
|
|
@@ -26,12 +23,15 @@ fn main(in: In) -> Out {
|
|
|
26
23
|
out.position = vec4f(x, y, 0.0, 1.0);
|
|
27
24
|
return out;
|
|
28
25
|
}
|
|
29
|
-
`.trim()
|
|
26
|
+
`.trim(),$=`
|
|
30
27
|
struct Out { @builtin(position) position: vec4f }
|
|
31
28
|
@group(0) @binding(0) var<uniform> iResolution: vec2f;
|
|
32
29
|
@fragment
|
|
33
30
|
fn main(out: Out) -> @location(0) vec4f {
|
|
34
31
|
return vec4f(fract((out.position.xy / iResolution)), 0.0, 1.0);
|
|
35
32
|
}
|
|
36
|
-
|
|
33
|
+
`;import{nested as D}from"reev";var K=(e,t,r,n=console.warn)=>{let o=e.createShader(r);if(!o)return n("Failed to create shader");if(e.shaderSource(o,t.trim()),e.compileShader(o),e.getShaderParameter(o,e.COMPILE_STATUS))return o;let a=e.getShaderInfoLog(o);e.deleteShader(o),n(`Could not compile shader: ${a}
|
|
34
|
+
|
|
35
|
+
\u2193\u2193\u2193generated\u2193\u2193\u2193
|
|
36
|
+
${t}`)},V=(e,t,r,n)=>{let o=e.createProgram(),a=K(e,t,e.FRAGMENT_SHADER,n.error),s=K(e,r,e.VERTEX_SHADER,n.error);if(!a||!s)return;if(e.attachShader(o,a),e.attachShader(o,s),e.linkProgram(o),e.getProgramParameter(o,e.LINK_STATUS))return o;let i=e.getProgramInfoLog(o);e.deleteProgram(o),n.error(`Could not link program: ${i}`)},Y=(e,t)=>{let r=new Float32Array(t),n=e.createBuffer();return{array:r,buffer:n}},N=(e,t,r,n)=>{t.set(n),e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null)},j=(e,t,r,n)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,r,e.FLOAT,!1,0,0)},Q=(e,t,r,n)=>{e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,r,e.FLOAT,!1,0,0),e.vertexAttribDivisor(t,1)},O=(e,t,r)=>{if(E.num(r))return e.uniform1f(t,r);let n=r.length;if(n<=4)return e[`uniform${n}fv`](t,r);n=Math.sqrt(n)<<0,e[`uniformMatrix${n}fv`](t,!1,r)},J=(e,t,r,n,o=!1)=>{let a=e.createTexture();if(e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),o||e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(r,n),e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,a),o)return()=>{e.activeTexture(e.TEXTURE0+n),e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t)}},Z=(e,t,r,n,o,a,s,i)=>{let m=r*n,u=t.length/m;for(let p=0;p<m;p++)for(let g=0;g<Math.min(u,4);g++)i[4*p+g]=t[p*u+g]||0;e.activeTexture(e.TEXTURE0+s),e.bindTexture(e.TEXTURE_2D,o.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,n,0,e.RGBA,e.FLOAT,i),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,a.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,r,n,0,e.RGBA,e.FLOAT,i),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)},ee=(e,t)=>{for(let{ping:r,pong:n}of t)e.deleteTexture(r.texture),e.deleteTexture(n.texture),e.deleteFramebuffer(r.buffer),e.deleteFramebuffer(n.buffer)},te=(e,t,r,n,o,a)=>{e.activeTexture(e.TEXTURE0+o),e.bindTexture(e.TEXTURE_2D,t.texture),e.uniform1i(n,o),a===0&&e.bindFramebuffer(e.FRAMEBUFFER,r.buffer);let s=e.COLOR_ATTACHMENT0+a;return e.framebufferTexture2D(e.FRAMEBUFFER,s,e.TEXTURE_2D,r.texture,0),s},re=(e=1024)=>{if(E.num(e)){let o=Math.sqrt(e),a=Math.ceil(o);return Number.isInteger(o)||console.warn(`GLRE Storage Warning: particleCount (${e}) is not a square. Using ${a}x${a} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`),{x:a,y:a}}let[t,r,n]=e;if(n!==void 0){let o=r*n;return console.warn(`GLRE Storage Warning: 3D particleCount [${t}, ${r}, ${n}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${r} * depth=${n} = ${o}.`),{x:t,y:o}}return{x:t,y:r}};var Ee=(e,t)=>{if(!e.cs)return null;t.getExtension("EXT_color_buffer_float");let r=0,n=0,o=D(()=>r++),a=E.str(e.cs)?e.cs:e.cs.compute({isWebGL:!0,gl:e,units:o}),s=V(t,a,X,e),i=re(e.particleCount),m=D(b=>t.getUniformLocation(s,b)),u=D(b=>{let R=new Float32Array(i.x*i.y*4),h={texture:t.createTexture(),buffer:t.createFramebuffer()},v={texture:t.createTexture(),buffer:t.createFramebuffer()};return{ping:h,pong:v,array:R,loc:m(b),unit:o(b)}});return{render:()=>{t.useProgram(s);let b=u.map.values().map(({ping:R,pong:h,loc:v,unit:l},x)=>{let[U,_]=n%2?[R,h]:[h,R];return te(t,U,_,v,l,x)});t.drawBuffers(b),t.drawArrays(t.TRIANGLES,0,3),t.bindFramebuffer(t.FRAMEBUFFER,null),n++},clean:()=>{t.deleteProgram(s),ee(t,u.map.values())},_uniform:(b,R)=>{t.useProgram(s),O(t,m(b),R)},_storage:(b,R)=>{let{ping:h,pong:v,unit:l,array:x}=u(b);Z(t,R,i.x,i.y,h,v,l,x)},storages:u}},ne=async e=>{let t={isWebGL:!0,gl:e},r=e.el.getContext("webgl2"),n=Ee(e,r),o=e.fs?E.str(e.fs)?e.fs:e.fs.fragment(t):q,a=e.vs?E.str(e.vs)?e.vs:e.vs.vertex(t):X,s=V(r,o,a,e);r.useProgram(s);let i=0,m=D(()=>i++),u=D(l=>r.getUniformLocation(s,l)),p=D((l,x,U=!1)=>{let _=C(x.length,U?e.instanceCount:e.count,e.error),A=r.getAttribLocation(s,l),{array:w,buffer:f}=Y(r,x);return{array:w,buffer:f,location:A,stride:_}}),g=(l="",x)=>{let{array:U,buffer:_,location:A,stride:w}=p(l,x);N(r,U,_,x),j(r,A,w,_)},y=(l,x)=>{let{array:U,buffer:_,location:A,stride:w}=p(l,x,!0);N(r,U,_,x),Q(r,A,w,_)},L=(l,x)=>{r.useProgram(s),O(r,u(l),x),n?._uniform(l,x)},b=(l,x)=>{e.loading++,r.useProgram(s),M(x,(U,_)=>{let A=m(l),w=J(r,U,u(l),A,_);w&&e({loop:w}),e.loading--})},R=()=>{n?.clean(),r.deleteProgram(s),r.getExtension("WEBGL_lose_context")?.loseContext()},h=()=>{n?.render(),r.useProgram(s),r.viewport(0,0,...e.size),e.instanceCount>1?r.drawArraysInstanced(r.TRIANGLES,0,e.count,e.instanceCount):r.drawArrays(r.TRIANGLES,0,e.count),r.bindFramebuffer(r.FRAMEBUFFER,null)};return e.isDepth&&(r.depthFunc(r.LEQUAL),r.enable(r.CULL_FACE)),{webgl:{context:r,program:s,storages:n?.storages},render:h,clean:R,_attribute:g,_instance:y,_uniform:L,_texture:b,_storage:n?._storage}};import{nested as I}from"reev";var oe=async(e,t=console.log)=>{let r=navigator.gpu,n=r.getPreferredCanvasFormat(),a=await(await r.requestAdapter()).requestDevice();return a.onuncapturederror=s=>t(s.error.message),e.configure({device:a,format:n,alphaMode:"opaque"}),{device:a,format:n}},ae=()=>{let e=0,t=0,r=0,n=0;return{uniform:()=>{let o=Math.floor(e/12),a=e%12;return e++,{group:o,binding:a}},texture:()=>{let a=Math.floor(e/12)+1+Math.floor(t/6),s=t%6*2;return t++,{group:a,binding:s}},storage:()=>{let a=Math.floor(e/12)+Math.floor(t/6)+2+Math.floor(r/12),s=r%12;return r++,{group:a,binding:s}},attrib:()=>{let o=n;return n++,{location:o}}}},Ge=e=>e===2?"float32x2":e===3?"float32x3":e===4?"float32x4":"float32",se=e=>{let t=[],r=[];for(let{buffer:n,location:o,stride:a,isInstance:s}of e){t[o]=n;let i=Math.min(Math.max(Math.floor(a),1),4),m=Math.max(4,Math.ceil(i*4/4)*4);r[o]={arrayStride:m,stepMode:s?"instance":"vertex",attributes:[{shaderLocation:o,offset:0,format:Ge(i)}]}}return{vertexBuffers:t,bufferLayouts:r}},ie=(e,t,r,n=[])=>{let o=new Map,a={bindGroups:[],bindGroupLayouts:[]},s=(i,m,u)=>{o.has(i)||o.set(i,{layouts:[],bindings:[]});let{layouts:p,bindings:g}=o.get(i);p.push(m),g.push(u)};for(let{binding:i,buffer:m,group:u}of t)s(u,{binding:i,visibility:7,buffer:{type:"uniform"}},{binding:i,resource:{buffer:m}});for(let{binding:i,buffer:m,group:u}of n)s(u,{binding:i,visibility:6,buffer:{type:"storage"}},{binding:i,resource:{buffer:m}});for(let{binding:i,group:m,sampler:u,view:p}of r)s(m,{binding:i,visibility:2,sampler:{}},{binding:i,resource:u}),s(m,{binding:i+1,visibility:2,texture:{}},{binding:i+1,resource:p});for(let[i,{layouts:m,bindings:u}]of o)a.bindGroupLayouts[i]=e.createBindGroupLayout({entries:m}),a.bindGroups[i]=e.createBindGroup({layout:a.bindGroupLayouts[i],entries:u});return a},ue=(e,t,r,n,o,a)=>e.createRenderPipeline({vertex:{module:e.createShaderModule({label:"vert",code:o.trim()}),entryPoint:"main",buffers:r},fragment:{module:e.createShaderModule({label:"frag",code:a.trim()}),entryPoint:"main",targets:[{format:t}]},layout:e.createPipelineLayout({bindGroupLayouts:n}),primitive:{topology:"triangle-list"},depthStencil:{depthWriteEnabled:!0,depthCompare:"less",format:"depth24plus"}}),fe=(e,t,r)=>e.createComputePipeline({compute:{module:e.createShaderModule({label:"compute",code:r.trim()}),entryPoint:"main"},layout:e.createPipelineLayout({bindGroupLayouts:t})}),ye=e=>e==="uniform"?72:e==="attrib"?40:140,W=(e,t,r)=>{k(t)||(t=new Float32Array(t));let n=ye(r),o=r==="uniform"?Math.ceil(t.byteLength/256)*256:t.byteLength,a=e.createBuffer({size:o,usage:n});return{array:t,buffer:a}},me=(e,t)=>({colorAttachments:[{view:e.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:t.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}}),ce=(e,t=1280,r=800)=>{let n=e.createTexture({size:[t,r],format:"rgba8unorm",usage:22}),o=e.createSampler({magFilter:"linear",minFilter:"linear"});return{texture:n,sampler:o}},pe=(e,t,r)=>e.createTexture({size:[t,r],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT}),de=(e,t=32)=>{E.num(e)&&(e=[e]);let[r,n=1,o=1]=e;return{x:Math.min(r*n*o/t,65535),y:1,z:1}};var Le=(e,t,r)=>{let n=u=>{},o=I((u,p)=>{let{array:g,buffer:y}=W(t,p,"storage"),{binding:L,group:b}=r.storage();return{array:g,buffer:y,binding:L,group:b}});return{storages:o,_storage:(u,p)=>{let{array:g,buffer:y}=o(u,p);t.queue.writeBuffer(y,0,g)},update:(u,p,g)=>{let y=fe(t,p,g);n=L=>{L.setPipeline(y),u.forEach((v,l)=>L.setBindGroup(l,v));let{x:b,y:R,z:h}=de(e.particleCount);L.dispatchWorkgroups(b,R,h),L.end()}},render:u=>{n(u)},clean:()=>{for(let{buffer:u}of o.map.values())u.destroy()}}},be=async e=>{let t=e.el.getContext("webgpu"),{device:r,format:n}=await oe(t,e.error),o=ae(),a=Le(e,r,o),s,i,m,u=f=>{},p=!0,g,y=I((f,c,d=!1)=>{p=!0;let T=C(c.length,d?e.instanceCount:e.count),{location:P}=o.attrib(),{array:G,buffer:S}=W(r,c,"attrib");return{array:G,buffer:S,location:P,stride:T,isInstance:d}}),L=I((f,c)=>{p=!0;let{binding:d,group:T}=o.uniform(),{array:P,buffer:G}=W(r,c,"uniform");return{array:P,buffer:G,binding:d,group:T}}),b=I((f,c=0,d=0)=>{p=!0;let{binding:T,group:P}=o.texture(),{texture:G,sampler:S}=ce(r,c,d);return{texture:G,sampler:S,binding:T,group:P,view:G.createView()}}),R=(f="",c)=>{let{array:d,buffer:T}=y(f,c);d.set(c),r.queue.writeBuffer(T,0,d)},h=(f,c)=>{let{array:d,buffer:T}=y(f,c,!0);d.set(c),r.queue.writeBuffer(T,0,d)},v=(f,c)=>{E.num(c)&&(c=[c]);let{array:d,buffer:T}=L(f,c);d.set(c),r.queue.writeBuffer(T,0,d)},l=(f,c)=>{e.loading++,M(c,(d,T)=>{let[P,G]=T?[d.videoWidth,d.videoHeight]:[d.width,d.height],{texture:S}=b(f,P,G),F=()=>{r.queue.copyExternalImageToTexture({source:d},{texture:S},{width:P,height:G})};F(),T&&e({loop:F}),e.loading--})},x=()=>{let{vertexBuffers:f,bufferLayouts:c}=se(y.map.values()),{bindGroups:d,bindGroupLayouts:T}=ie(r,L.map.values(),b.map.values(),a.storages.map.values()),P=ue(r,n,c,T,m,s);u=G=>{G.setPipeline(P),d.forEach((S,F)=>G.setBindGroup(F,S)),f.forEach((S,F)=>G.setVertexBuffer(F,S)),G.draw(e.count,e.instanceCount,0,0),G.end()},e.cs&&a.update(d,T,i)},U=()=>{if(!s||!m){let c={isWebGL:!1,gl:e};s=e.fs?E.str(e.fs)?e.fs:e.fs.fragment(c):$,m=e.vs?E.str(e.vs)?e.vs:e.vs.vertex(c):H,i=e.cs?E.str(e.cs)?e.cs:e.cs.compute(c):""}if(e.loading)return;p&&x(),p=!1;let f=r.createCommandEncoder();e.cs&&a.render(f.beginComputePass()),u(f.beginRenderPass(me(t,g))),r.queue.submit([f.finish()])},_=()=>{let f=e.el;g?.destroy(),g=pe(r,f.width,f.height)},A=()=>{r.destroy(),g?.destroy();for(let{texture:f}of b.map.values())f.destroy();for(let{buffer:f}of L.map.values())f.destroy();for(let{buffer:f}of y.map.values())f.destroy();a.clean()};return _(),{webgpu:{device:r,uniforms:L,textures:b,attribs:y,storages:a.storages},render:U,resize:_,clean:A,_attribute:R,_instance:h,_uniform:v,_texture:l,_storage:a._storage}};var $e=e=>E.obj(e)?"isGL"in e:!1,Ue=()=>typeof window>"u",ve=()=>Ue()?!1:"gpu"in navigator,z=performance.now(),Pe=e=>{let t=Re({isNative:!1,isWebGL:!0,isError:!1,isLoop:!0,isDebug:!1,isDepth:!1,isGL:!0,size:[0,0],mouse:[0,0],count:6,instanceCount:1,particleCount:1024,webgl:{},webgpu:{},loading:0,error(){t.isError=!0,t.isLoop=!1,t.clean(),console.warn("GLRE Error:",...arguments)}});return t.queue=he(),t.frame=_e(),t.attribute=B((r,n,o)=>t.queue(()=>t._attribute?.(r,n,o)),t),t.instance=B((r,n,o)=>t.queue(()=>t._instance?.(r,n,o)),t),t.storage=B((r,n)=>t.queue(()=>t._storage?.(r,n)),t),t.uniform=B((r,n)=>t.queue(()=>t._uniform?.(r,n)),t),t.texture=B((r,n)=>t.queue(()=>t._texture?.(r,n)),t),t.uniform({iResolution:t.size,iMouse:[0,0],iTime:z}),t("mount",async()=>{ve()||(t.isWebGL=!0),t.vs=t.vs||t.vert||t.vertex,t.fs=t.fs||t.frag||t.fragment,t.cs=t.cs||t.comp||t.compute,t.isWebGL?t(await ne(t)):t(await be(t)),!t.isError&&(t.resize(),t.frame(()=>(t.loop(),t.queue.flush(),t.loading?!0:(t.render(),t.isLoop))),!t.isNative&&(window.addEventListener("resize",t.resize),t.el.addEventListener("mousemove",t.mousemove)))}),t("clean",()=>{t.frame.stop(),!t.isNative&&(window.removeEventListener("resize",t.resize),t.el.removeEventListener("mousemove",t.mousemove))}),t("resize",()=>{let r=t.width||window.innerWidth,n=t.height||window.innerHeight;t.size[0]=t.el.width=r,t.size[1]=t.el.height=n,t.uniform("iResolution",t.size)}),t("mousemove",(r,n=r.clientX,o=r.clientY)=>{let[a,s]=t.size,{top:i,left:m}=t.el.getBoundingClientRect();t.mouse[0]=(n-i-a/2)/(a/2),t.mouse[1]=-(o-m-s/2)/(s/2),t.uniform("iMouse",t.mouse)}),t("loop",()=>{z=performance.now()/1e3,t.uniform("iTime",z)}),t(e)},Ke=Pe;export{Pe as createGL,Ke as default,$e as isGL,Ue as isServer,ve as isWebGPUSupported};
|
|
37
37
|
//# sourceMappingURL=index.js.map
|