glre 0.43.0 → 0.44.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/dist/addons.cjs +1 -1
- package/dist/addons.cjs.map +1 -1
- package/dist/addons.d.ts +60 -9
- package/dist/addons.js +1 -1
- package/dist/addons.js.map +1 -1
- package/dist/index.cjs +6 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +59 -7
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +60 -7
- package/dist/node.cjs +15 -19
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +58 -7
- package/dist/node.js +14 -18
- package/dist/node.js.map +1 -1
- package/dist/react.d.ts +59 -7
- package/dist/solid.d.ts +59 -7
- package/package.json +1 -1
- package/src/addons/generative/cnoise.ts +5 -13
- package/src/addons/generative/gerstnerWave.ts +1 -1
- package/src/addons/generative/snoise.ts +0 -1
- package/src/addons/math/mod2.ts +1 -1
- package/src/addons/math/taylorInvSqrt.ts +2 -2
- package/src/index.ts +1 -0
- package/src/node/build.ts +42 -8
- package/src/node/types.ts +47 -37
- package/src/node/utils/const.ts +4 -36
- package/src/types.ts +3 -2
- package/src/utils/helpers.ts +2 -1
- package/src/utils/program.ts +7 -43
- package/src/utils/webgl.ts +6 -20
package/src/utils/program.ts
CHANGED
|
@@ -32,12 +32,7 @@ export const createArrayBuffer = (c: WebGL2RenderingContext, data: number[]) =>
|
|
|
32
32
|
return { array, buffer }
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export const setArrayBuffer = (
|
|
36
|
-
c: WebGL2RenderingContext,
|
|
37
|
-
array: Float32Array,
|
|
38
|
-
buffer: WebGLBuffer,
|
|
39
|
-
value: number[]
|
|
40
|
-
) => {
|
|
35
|
+
export const setArrayBuffer = (c: WebGL2RenderingContext, array: Float32Array, buffer: WebGLBuffer, value: number[]) => {
|
|
41
36
|
array.set(value)
|
|
42
37
|
c.bindBuffer(c.ARRAY_BUFFER, buffer)
|
|
43
38
|
c.bufferData(c.ARRAY_BUFFER, array, c.STATIC_DRAW)
|
|
@@ -65,13 +60,7 @@ export const updateUniform = (c: WebGL2RenderingContext, loc: WebGLUniformLocati
|
|
|
65
60
|
c[`uniformMatrix${l as 2}fv`](loc, false, value)
|
|
66
61
|
}
|
|
67
62
|
|
|
68
|
-
export const createTexture = (
|
|
69
|
-
c: WebGL2RenderingContext,
|
|
70
|
-
el: HTMLImageElement | HTMLVideoElement,
|
|
71
|
-
loc: WebGLUniformLocation,
|
|
72
|
-
unit: number,
|
|
73
|
-
isVideo = false
|
|
74
|
-
) => {
|
|
63
|
+
export const createTexture = (c: WebGL2RenderingContext, el: HTMLImageElement | HTMLVideoElement, loc: WebGLUniformLocation, unit: number, isVideo = false) => {
|
|
75
64
|
const texture = c.createTexture()
|
|
76
65
|
c.bindTexture(c.TEXTURE_2D, texture)
|
|
77
66
|
c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, el)
|
|
@@ -100,16 +89,7 @@ interface TextureBuffer {
|
|
|
100
89
|
buffer: WebGLFramebuffer
|
|
101
90
|
}
|
|
102
91
|
|
|
103
|
-
export const createStorage = (
|
|
104
|
-
c: WebGL2RenderingContext,
|
|
105
|
-
value: number[],
|
|
106
|
-
width: number,
|
|
107
|
-
height: number,
|
|
108
|
-
ping: TextureBuffer,
|
|
109
|
-
pong: TextureBuffer,
|
|
110
|
-
unit: number,
|
|
111
|
-
array: Float32Array
|
|
112
|
-
) => {
|
|
92
|
+
export const createStorage = (c: WebGL2RenderingContext, value: number[], width: number, height: number, ping: TextureBuffer, pong: TextureBuffer, unit: number, array: Float32Array) => {
|
|
113
93
|
const particleCount = width * height
|
|
114
94
|
const vectorSize = value.length / particleCount
|
|
115
95
|
for (let i = 0; i < particleCount; i++) {
|
|
@@ -132,10 +112,7 @@ export const createStorage = (
|
|
|
132
112
|
c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)
|
|
133
113
|
}
|
|
134
114
|
|
|
135
|
-
export const cleanStorage = (
|
|
136
|
-
c: WebGL2RenderingContext,
|
|
137
|
-
map: Iterable<{ ping: TextureBuffer; pong: TextureBuffer }>
|
|
138
|
-
) => {
|
|
115
|
+
export const cleanStorage = (c: WebGL2RenderingContext, map: Iterable<{ ping: TextureBuffer; pong: TextureBuffer }>) => {
|
|
139
116
|
for (const { ping, pong } of map) {
|
|
140
117
|
c.deleteTexture(ping.texture)
|
|
141
118
|
c.deleteTexture(pong.texture)
|
|
@@ -144,14 +121,7 @@ export const cleanStorage = (
|
|
|
144
121
|
}
|
|
145
122
|
}
|
|
146
123
|
|
|
147
|
-
export const createAttachment = (
|
|
148
|
-
c: WebGL2RenderingContext,
|
|
149
|
-
i: TextureBuffer,
|
|
150
|
-
o: TextureBuffer,
|
|
151
|
-
loc: WebGLUniformLocation,
|
|
152
|
-
unit: number,
|
|
153
|
-
index: number
|
|
154
|
-
) => {
|
|
124
|
+
export const createAttachment = (c: WebGL2RenderingContext, i: TextureBuffer, o: TextureBuffer, loc: WebGLUniformLocation, unit: number, index: number) => {
|
|
155
125
|
c.activeTexture(c.TEXTURE0 + unit)
|
|
156
126
|
c.bindTexture(c.TEXTURE_2D, i.texture)
|
|
157
127
|
c.uniform1i(loc, unit)
|
|
@@ -168,19 +138,13 @@ export const storageSize = (particleCount: number | number[] = 1024) => {
|
|
|
168
138
|
if (is.num(particleCount)) {
|
|
169
139
|
const sqrt = Math.sqrt(particleCount)
|
|
170
140
|
const size = Math.ceil(sqrt)
|
|
171
|
-
if (!Number.isInteger(sqrt)) {
|
|
172
|
-
console.warn(
|
|
173
|
-
`GLRE Storage Warning: particleCount (${particleCount}) is not a square. Using ${size}x${size} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`
|
|
174
|
-
)
|
|
175
|
-
}
|
|
141
|
+
if (!Number.isInteger(sqrt)) console.warn(`GLRE Storage Warning: particleCount (${particleCount}) is not a square. Using ${size}x${size} texture may waste GPU memory. Consider using [width, height] format for optimal storage.`)
|
|
176
142
|
return { x: size, y: size }
|
|
177
143
|
}
|
|
178
144
|
const [x, y, z] = particleCount
|
|
179
145
|
if (z !== undefined) {
|
|
180
146
|
const yz = y * z
|
|
181
|
-
console.warn(
|
|
182
|
-
`GLRE Storage Warning: 3D particleCount [${x}, ${y}, ${z}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${y} * depth=${z} = ${yz}.`
|
|
183
|
-
)
|
|
147
|
+
console.warn(`GLRE Storage Warning: 3D particleCount [${x}, ${y}, ${z}] specified but WebGL storage textures only support 2D. Flattening to 2D by multiplying height=${y} * depth=${z} = ${yz}.`)
|
|
184
148
|
return { x, y: yz }
|
|
185
149
|
}
|
|
186
150
|
return { x, y }
|
package/src/utils/webgl.ts
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
1
|
import { nested as cached } from 'reev'
|
|
2
2
|
import { is, getStride, GLSL_VS, GLSL_FS, loadingTexture } from './helpers'
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
cleanStorage,
|
|
6
|
-
createAttachment,
|
|
7
|
-
createProgram,
|
|
8
|
-
createStorage,
|
|
9
|
-
createTexture,
|
|
10
|
-
setArrayBuffer,
|
|
11
|
-
storageSize,
|
|
12
|
-
updateAttrib,
|
|
13
|
-
updateInstance,
|
|
14
|
-
updateUniform,
|
|
15
|
-
} from './program'
|
|
16
|
-
import type { GL, WebGLState } from '../types'
|
|
3
|
+
import { createArrayBuffer, cleanStorage, createAttachment, createProgram, createStorage, createTexture, setArrayBuffer, storageSize, updateAttrib, updateInstance, updateUniform } from './program'
|
|
4
|
+
import type { GL } from '../types'
|
|
17
5
|
|
|
18
6
|
const computeProgram = (gl: GL, c: WebGL2RenderingContext) => {
|
|
19
7
|
if (!gl.cs) return null // ignore if no compute shader
|
|
@@ -67,17 +55,17 @@ const computeProgram = (gl: GL, c: WebGL2RenderingContext) => {
|
|
|
67
55
|
|
|
68
56
|
export const webgl = async (gl: GL) => {
|
|
69
57
|
const config = { isWebGL: true, gl }
|
|
70
|
-
const c = gl.el!.getContext('webgl2')!
|
|
58
|
+
const c = (gl.webgl.context = gl.el!.getContext('webgl2')!)
|
|
71
59
|
const cp = computeProgram(gl, c)
|
|
72
60
|
const fs = gl.fs ? (is.str(gl.fs) ? gl.fs : gl.fs!.fragment(config)) : GLSL_FS
|
|
73
61
|
const vs = gl.vs ? (is.str(gl.vs) ? gl.vs : gl.vs!.vertex(config)) : GLSL_VS
|
|
74
|
-
const pg = createProgram(c, fs, vs, gl)!
|
|
62
|
+
const pg = (gl.webgl.program = createProgram(c, fs, vs, gl)!)
|
|
75
63
|
c.useProgram(pg)
|
|
76
64
|
|
|
77
65
|
let activeUnit = 0 // for texture units
|
|
78
66
|
|
|
79
67
|
const units = cached(() => activeUnit++)
|
|
80
|
-
const uniforms = cached((key) => c.getUniformLocation(pg, key))
|
|
68
|
+
const uniforms = (gl.webgl.uniforms = cached((key) => c.getUniformLocation(pg, key)))
|
|
81
69
|
|
|
82
70
|
const attribs = cached((key, value: number[], isInstance = false) => {
|
|
83
71
|
const stride = getStride(value.length, isInstance ? gl.instanceCount : gl.count, gl.error)
|
|
@@ -143,7 +131,5 @@ export const webgl = async (gl: GL) => {
|
|
|
143
131
|
ext.polygonModeWEBGL(c.FRONT_AND_BACK, ext.LINE_WEBGL)
|
|
144
132
|
}
|
|
145
133
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return { webgl, render, clean, _attribute, _instance, _uniform, _texture, _storage: cp?._storage }
|
|
134
|
+
return { render, clean, _attribute, _instance, _uniform, _texture, _storage: cp?._storage }
|
|
149
135
|
}
|