@openspecui/web 0.9.3 → 1.0.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/assets/BufferResource-CVUoegR6.js +185 -0
- package/dist/assets/CanvasRenderer-BEIcB8i1.js +1 -0
- package/dist/assets/Filter-Bu_qhr6H.js +1 -0
- package/dist/assets/RenderTargetSystem-DWouFDxU.js +172 -0
- package/dist/assets/WebGLRenderer-6FH_N1FV.js +156 -0
- package/dist/assets/WebGPURenderer-B8sJk3Sv.js +41 -0
- package/dist/assets/browserAll-CLKeV1yb.js +14 -0
- package/dist/assets/gemini-Bk-V9kKu.png +0 -0
- package/dist/assets/{index-Bp00uZNc.js → index-BE5-y0_g.js} +1 -1
- package/{dist-ssg/client/assets/index-CCfVkFzN.js → dist/assets/index-BPCTI2mG.js} +1 -1
- package/dist/assets/{index-BsTieXqQ.js → index-BRp8MJ9v.js} +1 -1
- package/dist/assets/{index-8c6bEJ99.js → index-BlZ-sasH.js} +1 -1
- package/dist/assets/{index-Bafja8o4.js → index-Bp_dnlLF.js} +1 -1
- package/{dist-ssg/client/assets/index-ftYom_wU.js → dist/assets/index-BtNuxyw4.js} +1 -1
- package/dist/assets/index-Bv7pWR8R.js +7 -0
- package/{dist-ssg/client/assets/index-D3mXuuih.js → dist/assets/index-Byr3HkRi.js} +1 -1
- package/dist/assets/index-CEHMo0EU.js +1385 -0
- package/dist/assets/{index-eA_XNQ_L.js → index-CEKSUzvw.js} +1 -1
- package/dist/assets/index-CEf9wXLh.css +1 -0
- package/{dist-ssg/client/assets/index-ArhptQw0.js → dist/assets/index-CX13iBBs.js} +1 -1
- package/dist/assets/index-CoOT7eZ9.js +1 -0
- package/{dist-ssg/client/assets/index-B1hpa--1.js → dist/assets/index-D4AU46yO.js} +1 -1
- package/dist/assets/{index-BvGAWAqS.js → index-DXRZmZm8.js} +1 -1
- package/{dist-ssg/client/assets/index-AbWe21oh.js → dist/assets/index-eQZwF8qE.js} +1 -1
- package/dist/assets/{index-gvPT4BlL.js → index-mWXhCp9j.js} +1 -1
- package/dist/assets/webworkerAll-DjWoTx9g.js +83 -0
- package/dist/index.html +2 -2
- package/dist-ssg/client/.vite/ssr-manifest.json +3094 -504
- package/dist-ssg/client/assets/BufferResource-CVUoegR6.js +185 -0
- package/dist-ssg/client/assets/CanvasRenderer-BEIcB8i1.js +1 -0
- package/dist-ssg/client/assets/Filter-Bu_qhr6H.js +1 -0
- package/dist-ssg/client/assets/RenderTargetSystem-DWouFDxU.js +172 -0
- package/dist-ssg/client/assets/WebGLRenderer-6FH_N1FV.js +156 -0
- package/dist-ssg/client/assets/WebGPURenderer-B8sJk3Sv.js +41 -0
- package/dist-ssg/client/assets/browserAll-CLKeV1yb.js +14 -0
- package/dist-ssg/client/assets/gemini-Bk-V9kKu.png +0 -0
- package/dist-ssg/client/assets/{index-Bp00uZNc.js → index-BE5-y0_g.js} +1 -1
- package/{dist/assets/index-CCfVkFzN.js → dist-ssg/client/assets/index-BPCTI2mG.js} +1 -1
- package/dist-ssg/client/assets/{index-BsTieXqQ.js → index-BRp8MJ9v.js} +1 -1
- package/dist-ssg/client/assets/{index-8c6bEJ99.js → index-BlZ-sasH.js} +1 -1
- package/dist-ssg/client/assets/{index-Bafja8o4.js → index-Bp_dnlLF.js} +1 -1
- package/{dist/assets/index-ftYom_wU.js → dist-ssg/client/assets/index-BtNuxyw4.js} +1 -1
- package/dist-ssg/client/assets/index-Bv7pWR8R.js +7 -0
- package/{dist/assets/index-D3mXuuih.js → dist-ssg/client/assets/index-Byr3HkRi.js} +1 -1
- package/dist-ssg/client/assets/index-CEHMo0EU.js +1385 -0
- package/dist-ssg/client/assets/{index-eA_XNQ_L.js → index-CEKSUzvw.js} +1 -1
- package/dist-ssg/client/assets/index-CEf9wXLh.css +1 -0
- package/{dist/assets/index-ArhptQw0.js → dist-ssg/client/assets/index-CX13iBBs.js} +1 -1
- package/dist-ssg/client/assets/index-CoOT7eZ9.js +1 -0
- package/{dist/assets/index-B1hpa--1.js → dist-ssg/client/assets/index-D4AU46yO.js} +1 -1
- package/dist-ssg/client/assets/{index-BvGAWAqS.js → index-DXRZmZm8.js} +1 -1
- package/{dist/assets/index-AbWe21oh.js → dist-ssg/client/assets/index-eQZwF8qE.js} +1 -1
- package/dist-ssg/client/assets/{index-gvPT4BlL.js → index-mWXhCp9j.js} +1 -1
- package/dist-ssg/client/assets/webworkerAll-DjWoTx9g.js +83 -0
- package/dist-ssg/client/index.html +2 -2
- package/dist-ssg/server/assets/BufferResource-BXrsGVSz.js +592 -0
- package/dist-ssg/server/assets/CanvasRenderer-D9aMd7WV.js +1530 -0
- package/dist-ssg/server/assets/Filter-ClU0-pLL.js +80 -0
- package/dist-ssg/server/assets/RenderTargetSystem-CVz6i60H.js +3037 -0
- package/dist-ssg/server/assets/WebGLRenderer-B0I5TP5d.js +3887 -0
- package/dist-ssg/server/assets/WebGPURenderer-DCgUFny7.js +2146 -0
- package/dist-ssg/server/assets/browserAll-BixK1BYs.js +2691 -0
- package/dist-ssg/server/assets/{index-BUANIFyF.js → index-3uSTc-o9.js} +3 -1
- package/dist-ssg/server/assets/{index-D0JVKGRJ.js → index-8uE7RyRi.js} +3 -1
- package/dist-ssg/server/assets/{index-DCGDP0cs.js → index-BDzDVVaf.js} +2 -0
- package/dist-ssg/server/assets/{index-oPcprgZH.js → index-BkJYfA64.js} +3 -1
- package/dist-ssg/server/assets/{index-CAP0cmVO.js → index-BvGNqnLD.js} +3 -1
- package/dist-ssg/server/assets/{index-DsfT46da.js → index-BvURgefh.js} +3 -1
- package/dist-ssg/server/assets/{index-Dk9q2o0C.js → index-C2CuXbSQ.js} +3 -1
- package/dist-ssg/server/assets/{index-Cmnd0jiw.js → index-C3RtR5EA.js} +3 -1
- package/dist-ssg/server/assets/{index-CFKaffPZ.js → index-CZtnphnE.js} +3 -1
- package/dist-ssg/server/assets/{index-D6n8WPGB.js → index-D0DRToHj.js} +3 -1
- package/dist-ssg/server/assets/{index-mJoWrrNO.js → index-D5MdLWau.js} +3 -1
- package/dist-ssg/server/assets/{index-Brcpp_nj.js → index-DBYODvy4.js} +3 -1
- package/dist-ssg/server/assets/{index-DYmgiM6_.js → index-DL23PkQi.js} +3 -1
- package/dist-ssg/server/assets/{index-CnRKREoz.js → index-DfcLdBOi.js} +3 -1
- package/dist-ssg/server/assets/{index-Bzw5T-vd.js → index-O2XMojWG.js} +3 -1
- package/dist-ssg/server/assets/init-CnkBvt-J.js +666 -0
- package/dist-ssg/server/assets/webworkerAll-DNiMFaVV.js +12 -0
- package/dist-ssg/server/entry-server.js +87120 -34846
- package/package.json +23 -5
- package/dist/assets/index-D-Urq2hl.css +0 -1
- package/dist/assets/index-DFOLYN6W.js +0 -1
- package/dist/assets/index-DpxkOmNJ.js +0 -7
- package/dist/assets/index-YZ-iXB95.js +0 -309
- package/dist-ssg/client/assets/index-D-Urq2hl.css +0 -1
- package/dist-ssg/client/assets/index-DFOLYN6W.js +0 -1
- package/dist-ssg/client/assets/index-DpxkOmNJ.js +0 -7
- package/dist-ssg/client/assets/index-YZ-iXB95.js +0 -309
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
import { D as warn, J as getAttributeInfoFromFormat, K as STENCIL_MODES, O as unsafeEvalSupported, P as Buffer, Q as BufferUsage, V as EventEmitter, W as uid } from "../entry-server.js";
|
|
2
|
+
const localUniformBit = {
|
|
3
|
+
name: "local-uniform-bit",
|
|
4
|
+
vertex: {
|
|
5
|
+
header: (
|
|
6
|
+
/* wgsl */
|
|
7
|
+
`
|
|
8
|
+
|
|
9
|
+
struct LocalUniforms {
|
|
10
|
+
uTransformMatrix:mat3x3<f32>,
|
|
11
|
+
uColor:vec4<f32>,
|
|
12
|
+
uRound:f32,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;
|
|
16
|
+
`
|
|
17
|
+
),
|
|
18
|
+
main: (
|
|
19
|
+
/* wgsl */
|
|
20
|
+
`
|
|
21
|
+
vColor *= localUniforms.uColor;
|
|
22
|
+
modelMatrix *= localUniforms.uTransformMatrix;
|
|
23
|
+
`
|
|
24
|
+
),
|
|
25
|
+
end: (
|
|
26
|
+
/* wgsl */
|
|
27
|
+
`
|
|
28
|
+
if(localUniforms.uRound == 1)
|
|
29
|
+
{
|
|
30
|
+
vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
|
|
31
|
+
}
|
|
32
|
+
`
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const localUniformBitGroup2 = {
|
|
37
|
+
...localUniformBit,
|
|
38
|
+
vertex: {
|
|
39
|
+
...localUniformBit.vertex,
|
|
40
|
+
// replace the group!
|
|
41
|
+
header: localUniformBit.vertex.header.replace("group(1)", "group(2)")
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const localUniformBitGl = {
|
|
45
|
+
name: "local-uniform-bit",
|
|
46
|
+
vertex: {
|
|
47
|
+
header: (
|
|
48
|
+
/* glsl */
|
|
49
|
+
`
|
|
50
|
+
|
|
51
|
+
uniform mat3 uTransformMatrix;
|
|
52
|
+
uniform vec4 uColor;
|
|
53
|
+
uniform float uRound;
|
|
54
|
+
`
|
|
55
|
+
),
|
|
56
|
+
main: (
|
|
57
|
+
/* glsl */
|
|
58
|
+
`
|
|
59
|
+
vColor *= uColor;
|
|
60
|
+
modelMatrix = uTransformMatrix;
|
|
61
|
+
`
|
|
62
|
+
),
|
|
63
|
+
end: (
|
|
64
|
+
/* glsl */
|
|
65
|
+
`
|
|
66
|
+
if(uRound == 1.)
|
|
67
|
+
{
|
|
68
|
+
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
|
|
69
|
+
}
|
|
70
|
+
`
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const textureBit = {
|
|
75
|
+
name: "texture-bit",
|
|
76
|
+
vertex: {
|
|
77
|
+
header: (
|
|
78
|
+
/* wgsl */
|
|
79
|
+
`
|
|
80
|
+
|
|
81
|
+
struct TextureUniforms {
|
|
82
|
+
uTextureMatrix:mat3x3<f32>,
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;
|
|
86
|
+
`
|
|
87
|
+
),
|
|
88
|
+
main: (
|
|
89
|
+
/* wgsl */
|
|
90
|
+
`
|
|
91
|
+
uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;
|
|
92
|
+
`
|
|
93
|
+
)
|
|
94
|
+
},
|
|
95
|
+
fragment: {
|
|
96
|
+
header: (
|
|
97
|
+
/* wgsl */
|
|
98
|
+
`
|
|
99
|
+
@group(2) @binding(0) var uTexture: texture_2d<f32>;
|
|
100
|
+
@group(2) @binding(1) var uSampler: sampler;
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
`
|
|
104
|
+
),
|
|
105
|
+
main: (
|
|
106
|
+
/* wgsl */
|
|
107
|
+
`
|
|
108
|
+
outColor = textureSample(uTexture, uSampler, vUV);
|
|
109
|
+
`
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const textureBitGl = {
|
|
114
|
+
name: "texture-bit",
|
|
115
|
+
vertex: {
|
|
116
|
+
header: (
|
|
117
|
+
/* glsl */
|
|
118
|
+
`
|
|
119
|
+
uniform mat3 uTextureMatrix;
|
|
120
|
+
`
|
|
121
|
+
),
|
|
122
|
+
main: (
|
|
123
|
+
/* glsl */
|
|
124
|
+
`
|
|
125
|
+
uv = (uTextureMatrix * vec3(uv, 1.0)).xy;
|
|
126
|
+
`
|
|
127
|
+
)
|
|
128
|
+
},
|
|
129
|
+
fragment: {
|
|
130
|
+
header: (
|
|
131
|
+
/* glsl */
|
|
132
|
+
`
|
|
133
|
+
uniform sampler2D uTexture;
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
`
|
|
137
|
+
),
|
|
138
|
+
main: (
|
|
139
|
+
/* glsl */
|
|
140
|
+
`
|
|
141
|
+
outColor = texture(uTexture, vUV);
|
|
142
|
+
`
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
function ensureAttributes(geometry, extractedData) {
|
|
147
|
+
for (const i in geometry.attributes) {
|
|
148
|
+
const attribute = geometry.attributes[i];
|
|
149
|
+
const attributeData = extractedData[i];
|
|
150
|
+
if (attributeData) {
|
|
151
|
+
attribute.format ?? (attribute.format = attributeData.format);
|
|
152
|
+
attribute.offset ?? (attribute.offset = attributeData.offset);
|
|
153
|
+
attribute.instance ?? (attribute.instance = attributeData.instance);
|
|
154
|
+
} else {
|
|
155
|
+
warn(`Attribute ${i} is not present in the shader, but is present in the geometry. Unable to infer attribute details.`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
ensureStartAndStride(geometry);
|
|
159
|
+
}
|
|
160
|
+
function ensureStartAndStride(geometry) {
|
|
161
|
+
const { buffers, attributes } = geometry;
|
|
162
|
+
const tempStride = {};
|
|
163
|
+
const tempStart = {};
|
|
164
|
+
for (const j in buffers) {
|
|
165
|
+
const buffer = buffers[j];
|
|
166
|
+
tempStride[buffer.uid] = 0;
|
|
167
|
+
tempStart[buffer.uid] = 0;
|
|
168
|
+
}
|
|
169
|
+
for (const j in attributes) {
|
|
170
|
+
const attribute = attributes[j];
|
|
171
|
+
tempStride[attribute.buffer.uid] += getAttributeInfoFromFormat(attribute.format).stride;
|
|
172
|
+
}
|
|
173
|
+
for (const j in attributes) {
|
|
174
|
+
const attribute = attributes[j];
|
|
175
|
+
attribute.stride ?? (attribute.stride = tempStride[attribute.buffer.uid]);
|
|
176
|
+
attribute.start ?? (attribute.start = tempStart[attribute.buffer.uid]);
|
|
177
|
+
tempStart[attribute.buffer.uid] += getAttributeInfoFromFormat(attribute.format).stride;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const GpuStencilModesToPixi = [];
|
|
181
|
+
GpuStencilModesToPixi[STENCIL_MODES.NONE] = void 0;
|
|
182
|
+
GpuStencilModesToPixi[STENCIL_MODES.DISABLED] = {
|
|
183
|
+
stencilWriteMask: 0,
|
|
184
|
+
stencilReadMask: 0
|
|
185
|
+
};
|
|
186
|
+
GpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_ADD] = {
|
|
187
|
+
stencilFront: {
|
|
188
|
+
compare: "equal",
|
|
189
|
+
passOp: "increment-clamp"
|
|
190
|
+
},
|
|
191
|
+
stencilBack: {
|
|
192
|
+
compare: "equal",
|
|
193
|
+
passOp: "increment-clamp"
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
GpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_REMOVE] = {
|
|
197
|
+
stencilFront: {
|
|
198
|
+
compare: "equal",
|
|
199
|
+
passOp: "decrement-clamp"
|
|
200
|
+
},
|
|
201
|
+
stencilBack: {
|
|
202
|
+
compare: "equal",
|
|
203
|
+
passOp: "decrement-clamp"
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
GpuStencilModesToPixi[STENCIL_MODES.MASK_ACTIVE] = {
|
|
207
|
+
stencilWriteMask: 0,
|
|
208
|
+
stencilFront: {
|
|
209
|
+
compare: "equal",
|
|
210
|
+
passOp: "keep"
|
|
211
|
+
},
|
|
212
|
+
stencilBack: {
|
|
213
|
+
compare: "equal",
|
|
214
|
+
passOp: "keep"
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
GpuStencilModesToPixi[STENCIL_MODES.INVERSE_MASK_ACTIVE] = {
|
|
218
|
+
stencilWriteMask: 0,
|
|
219
|
+
stencilFront: {
|
|
220
|
+
compare: "not-equal",
|
|
221
|
+
passOp: "keep"
|
|
222
|
+
},
|
|
223
|
+
stencilBack: {
|
|
224
|
+
compare: "not-equal",
|
|
225
|
+
passOp: "keep"
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
class UboSystem {
|
|
229
|
+
constructor(adaptor) {
|
|
230
|
+
this._syncFunctionHash = /* @__PURE__ */ Object.create(null);
|
|
231
|
+
this._adaptor = adaptor;
|
|
232
|
+
this._systemCheck();
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Overridable function by `pixi.js/unsafe-eval` to silence
|
|
236
|
+
* throwing an error if platform doesn't support unsafe-evals.
|
|
237
|
+
* @private
|
|
238
|
+
*/
|
|
239
|
+
_systemCheck() {
|
|
240
|
+
if (!unsafeEvalSupported()) {
|
|
241
|
+
throw new Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
ensureUniformGroup(uniformGroup) {
|
|
245
|
+
const uniformData = this.getUniformGroupData(uniformGroup);
|
|
246
|
+
uniformGroup.buffer || (uniformGroup.buffer = new Buffer({
|
|
247
|
+
data: new Float32Array(uniformData.layout.size / 4),
|
|
248
|
+
usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST
|
|
249
|
+
}));
|
|
250
|
+
}
|
|
251
|
+
getUniformGroupData(uniformGroup) {
|
|
252
|
+
return this._syncFunctionHash[uniformGroup._signature] || this._initUniformGroup(uniformGroup);
|
|
253
|
+
}
|
|
254
|
+
_initUniformGroup(uniformGroup) {
|
|
255
|
+
const uniformGroupSignature = uniformGroup._signature;
|
|
256
|
+
let uniformData = this._syncFunctionHash[uniformGroupSignature];
|
|
257
|
+
if (!uniformData) {
|
|
258
|
+
const elements = Object.keys(uniformGroup.uniformStructures).map((i) => uniformGroup.uniformStructures[i]);
|
|
259
|
+
const layout = this._adaptor.createUboElements(elements);
|
|
260
|
+
const syncFunction = this._generateUboSync(layout.uboElements);
|
|
261
|
+
uniformData = this._syncFunctionHash[uniformGroupSignature] = {
|
|
262
|
+
layout,
|
|
263
|
+
syncFunction
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return this._syncFunctionHash[uniformGroupSignature];
|
|
267
|
+
}
|
|
268
|
+
_generateUboSync(uboElements) {
|
|
269
|
+
return this._adaptor.generateUboSync(uboElements);
|
|
270
|
+
}
|
|
271
|
+
syncUniformGroup(uniformGroup, data, offset) {
|
|
272
|
+
const uniformGroupData = this.getUniformGroupData(uniformGroup);
|
|
273
|
+
uniformGroup.buffer || (uniformGroup.buffer = new Buffer({
|
|
274
|
+
data: new Float32Array(uniformGroupData.layout.size / 4),
|
|
275
|
+
usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST
|
|
276
|
+
}));
|
|
277
|
+
let dataInt32 = null;
|
|
278
|
+
if (!data) {
|
|
279
|
+
data = uniformGroup.buffer.data;
|
|
280
|
+
dataInt32 = uniformGroup.buffer.dataInt32;
|
|
281
|
+
}
|
|
282
|
+
offset || (offset = 0);
|
|
283
|
+
uniformGroupData.syncFunction(uniformGroup.uniforms, data, dataInt32, offset);
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
updateUniformGroup(uniformGroup) {
|
|
287
|
+
if (uniformGroup.isStatic && !uniformGroup._dirtyId) return false;
|
|
288
|
+
uniformGroup._dirtyId = 0;
|
|
289
|
+
const synced = this.syncUniformGroup(uniformGroup);
|
|
290
|
+
uniformGroup.buffer.update();
|
|
291
|
+
return synced;
|
|
292
|
+
}
|
|
293
|
+
destroy() {
|
|
294
|
+
this._syncFunctionHash = null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const uniformParsers = [
|
|
298
|
+
// uploading pixi matrix object to mat3
|
|
299
|
+
{
|
|
300
|
+
type: "mat3x3<f32>",
|
|
301
|
+
test: (data) => {
|
|
302
|
+
const value = data.value;
|
|
303
|
+
return value.a !== void 0;
|
|
304
|
+
},
|
|
305
|
+
ubo: `
|
|
306
|
+
var matrix = uv[name].toArray(true);
|
|
307
|
+
data[offset] = matrix[0];
|
|
308
|
+
data[offset + 1] = matrix[1];
|
|
309
|
+
data[offset + 2] = matrix[2];
|
|
310
|
+
data[offset + 4] = matrix[3];
|
|
311
|
+
data[offset + 5] = matrix[4];
|
|
312
|
+
data[offset + 6] = matrix[5];
|
|
313
|
+
data[offset + 8] = matrix[6];
|
|
314
|
+
data[offset + 9] = matrix[7];
|
|
315
|
+
data[offset + 10] = matrix[8];
|
|
316
|
+
`,
|
|
317
|
+
uniform: `
|
|
318
|
+
gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));
|
|
319
|
+
`
|
|
320
|
+
},
|
|
321
|
+
// uploading a pixi rectangle as a vec4
|
|
322
|
+
{
|
|
323
|
+
type: "vec4<f32>",
|
|
324
|
+
test: (data) => data.type === "vec4<f32>" && data.size === 1 && data.value.width !== void 0,
|
|
325
|
+
ubo: `
|
|
326
|
+
v = uv[name];
|
|
327
|
+
data[offset] = v.x;
|
|
328
|
+
data[offset + 1] = v.y;
|
|
329
|
+
data[offset + 2] = v.width;
|
|
330
|
+
data[offset + 3] = v.height;
|
|
331
|
+
`,
|
|
332
|
+
uniform: `
|
|
333
|
+
cv = ud[name].value;
|
|
334
|
+
v = uv[name];
|
|
335
|
+
if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {
|
|
336
|
+
cv[0] = v.x;
|
|
337
|
+
cv[1] = v.y;
|
|
338
|
+
cv[2] = v.width;
|
|
339
|
+
cv[3] = v.height;
|
|
340
|
+
gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);
|
|
341
|
+
}
|
|
342
|
+
`
|
|
343
|
+
},
|
|
344
|
+
// uploading a pixi point as a vec2
|
|
345
|
+
{
|
|
346
|
+
type: "vec2<f32>",
|
|
347
|
+
test: (data) => data.type === "vec2<f32>" && data.size === 1 && data.value.x !== void 0,
|
|
348
|
+
ubo: `
|
|
349
|
+
v = uv[name];
|
|
350
|
+
data[offset] = v.x;
|
|
351
|
+
data[offset + 1] = v.y;
|
|
352
|
+
`,
|
|
353
|
+
uniform: `
|
|
354
|
+
cv = ud[name].value;
|
|
355
|
+
v = uv[name];
|
|
356
|
+
if (cv[0] !== v.x || cv[1] !== v.y) {
|
|
357
|
+
cv[0] = v.x;
|
|
358
|
+
cv[1] = v.y;
|
|
359
|
+
gl.uniform2f(ud[name].location, v.x, v.y);
|
|
360
|
+
}
|
|
361
|
+
`
|
|
362
|
+
},
|
|
363
|
+
// uploading a pixi color as a vec4
|
|
364
|
+
{
|
|
365
|
+
type: "vec4<f32>",
|
|
366
|
+
test: (data) => data.type === "vec4<f32>" && data.size === 1 && data.value.red !== void 0,
|
|
367
|
+
ubo: `
|
|
368
|
+
v = uv[name];
|
|
369
|
+
data[offset] = v.red;
|
|
370
|
+
data[offset + 1] = v.green;
|
|
371
|
+
data[offset + 2] = v.blue;
|
|
372
|
+
data[offset + 3] = v.alpha;
|
|
373
|
+
`,
|
|
374
|
+
uniform: `
|
|
375
|
+
cv = ud[name].value;
|
|
376
|
+
v = uv[name];
|
|
377
|
+
if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {
|
|
378
|
+
cv[0] = v.red;
|
|
379
|
+
cv[1] = v.green;
|
|
380
|
+
cv[2] = v.blue;
|
|
381
|
+
cv[3] = v.alpha;
|
|
382
|
+
gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);
|
|
383
|
+
}
|
|
384
|
+
`
|
|
385
|
+
},
|
|
386
|
+
// uploading a pixi color as a vec3
|
|
387
|
+
{
|
|
388
|
+
type: "vec3<f32>",
|
|
389
|
+
test: (data) => data.type === "vec3<f32>" && data.size === 1 && data.value.red !== void 0,
|
|
390
|
+
ubo: `
|
|
391
|
+
v = uv[name];
|
|
392
|
+
data[offset] = v.red;
|
|
393
|
+
data[offset + 1] = v.green;
|
|
394
|
+
data[offset + 2] = v.blue;
|
|
395
|
+
`,
|
|
396
|
+
uniform: `
|
|
397
|
+
cv = ud[name].value;
|
|
398
|
+
v = uv[name];
|
|
399
|
+
if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {
|
|
400
|
+
cv[0] = v.red;
|
|
401
|
+
cv[1] = v.green;
|
|
402
|
+
cv[2] = v.blue;
|
|
403
|
+
gl.uniform3f(ud[name].location, v.red, v.green, v.blue);
|
|
404
|
+
}
|
|
405
|
+
`
|
|
406
|
+
}
|
|
407
|
+
];
|
|
408
|
+
function createUboSyncFunction(uboElements, parserCode, arrayGenerationFunction, singleSettersMap) {
|
|
409
|
+
const funcFragments = [`
|
|
410
|
+
var v = null;
|
|
411
|
+
var v2 = null;
|
|
412
|
+
var t = 0;
|
|
413
|
+
var index = 0;
|
|
414
|
+
var name = null;
|
|
415
|
+
var arrayOffset = null;
|
|
416
|
+
`];
|
|
417
|
+
let prev = 0;
|
|
418
|
+
for (let i = 0; i < uboElements.length; i++) {
|
|
419
|
+
const uboElement = uboElements[i];
|
|
420
|
+
const name = uboElement.data.name;
|
|
421
|
+
let parsed = false;
|
|
422
|
+
let offset = 0;
|
|
423
|
+
for (let j = 0; j < uniformParsers.length; j++) {
|
|
424
|
+
const uniformParser = uniformParsers[j];
|
|
425
|
+
if (uniformParser.test(uboElement.data)) {
|
|
426
|
+
offset = uboElement.offset / 4;
|
|
427
|
+
funcFragments.push(
|
|
428
|
+
`name = "${name}";`,
|
|
429
|
+
`offset += ${offset - prev};`,
|
|
430
|
+
uniformParsers[j][parserCode] || uniformParsers[j].ubo
|
|
431
|
+
);
|
|
432
|
+
parsed = true;
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (!parsed) {
|
|
437
|
+
if (uboElement.data.size > 1) {
|
|
438
|
+
offset = uboElement.offset / 4;
|
|
439
|
+
funcFragments.push(arrayGenerationFunction(uboElement, offset - prev));
|
|
440
|
+
} else {
|
|
441
|
+
const template = singleSettersMap[uboElement.data.type];
|
|
442
|
+
offset = uboElement.offset / 4;
|
|
443
|
+
funcFragments.push(
|
|
444
|
+
/* wgsl */
|
|
445
|
+
`
|
|
446
|
+
v = uv.${name};
|
|
447
|
+
offset += ${offset - prev};
|
|
448
|
+
${template};
|
|
449
|
+
`
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
prev = offset;
|
|
454
|
+
}
|
|
455
|
+
const fragmentSrc = funcFragments.join("\n");
|
|
456
|
+
return new Function(
|
|
457
|
+
"uv",
|
|
458
|
+
"data",
|
|
459
|
+
"dataInt32",
|
|
460
|
+
"offset",
|
|
461
|
+
fragmentSrc
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
function loopMatrix(col, row) {
|
|
465
|
+
const total = col * row;
|
|
466
|
+
return `
|
|
467
|
+
for (let i = 0; i < ${total}; i++) {
|
|
468
|
+
data[offset + (((i / ${col})|0) * 4) + (i % ${col})] = v[i];
|
|
469
|
+
}
|
|
470
|
+
`;
|
|
471
|
+
}
|
|
472
|
+
const uboSyncFunctionsSTD40 = {
|
|
473
|
+
f32: `
|
|
474
|
+
data[offset] = v;`,
|
|
475
|
+
i32: `
|
|
476
|
+
dataInt32[offset] = v;`,
|
|
477
|
+
"vec2<f32>": `
|
|
478
|
+
data[offset] = v[0];
|
|
479
|
+
data[offset + 1] = v[1];`,
|
|
480
|
+
"vec3<f32>": `
|
|
481
|
+
data[offset] = v[0];
|
|
482
|
+
data[offset + 1] = v[1];
|
|
483
|
+
data[offset + 2] = v[2];`,
|
|
484
|
+
"vec4<f32>": `
|
|
485
|
+
data[offset] = v[0];
|
|
486
|
+
data[offset + 1] = v[1];
|
|
487
|
+
data[offset + 2] = v[2];
|
|
488
|
+
data[offset + 3] = v[3];`,
|
|
489
|
+
"vec2<i32>": `
|
|
490
|
+
dataInt32[offset] = v[0];
|
|
491
|
+
dataInt32[offset + 1] = v[1];`,
|
|
492
|
+
"vec3<i32>": `
|
|
493
|
+
dataInt32[offset] = v[0];
|
|
494
|
+
dataInt32[offset + 1] = v[1];
|
|
495
|
+
dataInt32[offset + 2] = v[2];`,
|
|
496
|
+
"vec4<i32>": `
|
|
497
|
+
dataInt32[offset] = v[0];
|
|
498
|
+
dataInt32[offset + 1] = v[1];
|
|
499
|
+
dataInt32[offset + 2] = v[2];
|
|
500
|
+
dataInt32[offset + 3] = v[3];`,
|
|
501
|
+
"mat2x2<f32>": `
|
|
502
|
+
data[offset] = v[0];
|
|
503
|
+
data[offset + 1] = v[1];
|
|
504
|
+
data[offset + 4] = v[2];
|
|
505
|
+
data[offset + 5] = v[3];`,
|
|
506
|
+
"mat3x3<f32>": `
|
|
507
|
+
data[offset] = v[0];
|
|
508
|
+
data[offset + 1] = v[1];
|
|
509
|
+
data[offset + 2] = v[2];
|
|
510
|
+
data[offset + 4] = v[3];
|
|
511
|
+
data[offset + 5] = v[4];
|
|
512
|
+
data[offset + 6] = v[5];
|
|
513
|
+
data[offset + 8] = v[6];
|
|
514
|
+
data[offset + 9] = v[7];
|
|
515
|
+
data[offset + 10] = v[8];`,
|
|
516
|
+
"mat4x4<f32>": `
|
|
517
|
+
for (let i = 0; i < 16; i++) {
|
|
518
|
+
data[offset + i] = v[i];
|
|
519
|
+
}`,
|
|
520
|
+
"mat3x2<f32>": loopMatrix(3, 2),
|
|
521
|
+
"mat4x2<f32>": loopMatrix(4, 2),
|
|
522
|
+
"mat2x3<f32>": loopMatrix(2, 3),
|
|
523
|
+
"mat4x3<f32>": loopMatrix(4, 3),
|
|
524
|
+
"mat2x4<f32>": loopMatrix(2, 4),
|
|
525
|
+
"mat3x4<f32>": loopMatrix(3, 4)
|
|
526
|
+
};
|
|
527
|
+
const uboSyncFunctionsWGSL = {
|
|
528
|
+
...uboSyncFunctionsSTD40,
|
|
529
|
+
"mat2x2<f32>": `
|
|
530
|
+
data[offset] = v[0];
|
|
531
|
+
data[offset + 1] = v[1];
|
|
532
|
+
data[offset + 2] = v[2];
|
|
533
|
+
data[offset + 3] = v[3];
|
|
534
|
+
`
|
|
535
|
+
};
|
|
536
|
+
class BufferResource extends EventEmitter {
|
|
537
|
+
/**
|
|
538
|
+
* Create a new Buffer Resource.
|
|
539
|
+
* @param options - The options for the buffer resource
|
|
540
|
+
* @param options.buffer - The underlying buffer that this resource is using
|
|
541
|
+
* @param options.offset - The offset of the buffer this resource is using.
|
|
542
|
+
* If not provided, then it will use the offset of the buffer.
|
|
543
|
+
* @param options.size - The size of the buffer this resource is using.
|
|
544
|
+
* If not provided, then it will use the size of the buffer.
|
|
545
|
+
*/
|
|
546
|
+
constructor({ buffer, offset, size }) {
|
|
547
|
+
super();
|
|
548
|
+
this.uid = uid("buffer");
|
|
549
|
+
this._resourceType = "bufferResource";
|
|
550
|
+
this._touched = 0;
|
|
551
|
+
this._resourceId = uid("resource");
|
|
552
|
+
this._bufferResource = true;
|
|
553
|
+
this.destroyed = false;
|
|
554
|
+
this.buffer = buffer;
|
|
555
|
+
this.offset = offset | 0;
|
|
556
|
+
this.size = size;
|
|
557
|
+
this.buffer.on("change", this.onBufferChange, this);
|
|
558
|
+
}
|
|
559
|
+
onBufferChange() {
|
|
560
|
+
this._resourceId = uid("resource");
|
|
561
|
+
this.emit("change", this);
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Destroys this resource. Make sure the underlying buffer is not used anywhere else
|
|
565
|
+
* if you want to destroy it as well, or code will explode
|
|
566
|
+
* @param destroyBuffer - Should the underlying buffer be destroyed as well?
|
|
567
|
+
*/
|
|
568
|
+
destroy(destroyBuffer = false) {
|
|
569
|
+
this.destroyed = true;
|
|
570
|
+
if (destroyBuffer) {
|
|
571
|
+
this.buffer.destroy();
|
|
572
|
+
}
|
|
573
|
+
this.emit("change", this);
|
|
574
|
+
this.buffer = null;
|
|
575
|
+
this.removeAllListeners();
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
export {
|
|
579
|
+
BufferResource as B,
|
|
580
|
+
GpuStencilModesToPixi as G,
|
|
581
|
+
UboSystem as U,
|
|
582
|
+
localUniformBit as a,
|
|
583
|
+
uboSyncFunctionsSTD40 as b,
|
|
584
|
+
createUboSyncFunction as c,
|
|
585
|
+
uniformParsers as d,
|
|
586
|
+
ensureAttributes as e,
|
|
587
|
+
localUniformBitGl as f,
|
|
588
|
+
textureBitGl as g,
|
|
589
|
+
localUniformBitGroup2 as l,
|
|
590
|
+
textureBit as t,
|
|
591
|
+
uboSyncFunctionsWGSL as u
|
|
592
|
+
};
|