wgsl-renderer 0.4.2 → 0.5.1
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/LICENSE.md +8 -8
- package/README.md +590 -589
- package/README.zh-CN.md +623 -621
- package/dist/cjs/index.js +20 -19
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +15 -14
- package/package.json +9 -10
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/RenderPass.ts
|
|
3
3
|
var RenderPass = class {
|
|
4
4
|
name;
|
|
@@ -32,11 +32,11 @@ var RenderPass = class {
|
|
|
32
32
|
this.format = descriptor.format;
|
|
33
33
|
this.renderToCanvas = descriptor.renderToCanvas;
|
|
34
34
|
const actualFormat = descriptor.format || format;
|
|
35
|
-
const module
|
|
35
|
+
const module = this.device.createShaderModule({
|
|
36
36
|
code: descriptor.shaderCode,
|
|
37
37
|
label: `Shader for ${descriptor.name}`
|
|
38
38
|
});
|
|
39
|
-
this.compilationInfo = module
|
|
39
|
+
this.compilationInfo = module.getCompilationInfo();
|
|
40
40
|
this.vertexBuffer = this.device.createBuffer({
|
|
41
41
|
size: 36,
|
|
42
42
|
usage: GPUBufferUsage.VERTEX,
|
|
@@ -59,7 +59,7 @@ var RenderPass = class {
|
|
|
59
59
|
this.pipeline = this.device.createRenderPipeline({
|
|
60
60
|
layout,
|
|
61
61
|
vertex: {
|
|
62
|
-
module
|
|
62
|
+
module,
|
|
63
63
|
entryPoint: vertexEntryPoint,
|
|
64
64
|
buffers: [{
|
|
65
65
|
arrayStride: 12,
|
|
@@ -71,7 +71,7 @@ var RenderPass = class {
|
|
|
71
71
|
}]
|
|
72
72
|
},
|
|
73
73
|
fragment: {
|
|
74
|
-
module
|
|
74
|
+
module,
|
|
75
75
|
entryPoint: fragmentEntryPoint,
|
|
76
76
|
targets: [{
|
|
77
77
|
format: actualFormat,
|
|
@@ -308,7 +308,6 @@ var RenderPass = class {
|
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
310
|
};
|
|
311
|
-
|
|
312
311
|
//#endregion
|
|
313
312
|
//#region src/TextureManager.ts
|
|
314
313
|
var TextureManager = class {
|
|
@@ -418,7 +417,6 @@ var TextureManager = class {
|
|
|
418
417
|
};
|
|
419
418
|
}
|
|
420
419
|
};
|
|
421
|
-
|
|
422
420
|
//#endregion
|
|
423
421
|
//#region src/PassTextureRef.ts
|
|
424
422
|
const PASS_TEXTURE_REF_SYMBOL = Symbol("PassTextureRef");
|
|
@@ -454,13 +452,12 @@ function createSamplingView(texture, ref) {
|
|
|
454
452
|
mipLevelCount: ref.options?.mipmaps ? texture.mipLevelCount : 1
|
|
455
453
|
});
|
|
456
454
|
}
|
|
457
|
-
|
|
458
455
|
//#endregion
|
|
459
456
|
//#region src/index.ts
|
|
460
|
-
var RenderMode = /* @__PURE__ */ function(RenderMode
|
|
461
|
-
RenderMode
|
|
462
|
-
RenderMode
|
|
463
|
-
return RenderMode
|
|
457
|
+
var RenderMode = /* @__PURE__ */ function(RenderMode) {
|
|
458
|
+
RenderMode["NORMAL"] = "normal";
|
|
459
|
+
RenderMode["EXPORT"] = "export";
|
|
460
|
+
return RenderMode;
|
|
464
461
|
}(RenderMode || {});
|
|
465
462
|
var WGSLRenderer = class {
|
|
466
463
|
ctx;
|
|
@@ -470,7 +467,7 @@ var WGSLRenderer = class {
|
|
|
470
467
|
textureManager;
|
|
471
468
|
animationFrameId = null;
|
|
472
469
|
isResizing = false;
|
|
473
|
-
renderMode =
|
|
470
|
+
renderMode = "normal";
|
|
474
471
|
readBuffer = null;
|
|
475
472
|
hasClearedCanvasThisFrame = false;
|
|
476
473
|
constructor(canvas, options) {
|
|
@@ -480,7 +477,8 @@ var WGSLRenderer = class {
|
|
|
480
477
|
this.ctx = canvas.getContext("webgpu");
|
|
481
478
|
}
|
|
482
479
|
async init() {
|
|
483
|
-
|
|
480
|
+
const adapter = await navigator.gpu.requestAdapter();
|
|
481
|
+
this.device = await adapter.requestDevice();
|
|
484
482
|
this.format = navigator.gpu.getPreferredCanvasFormat();
|
|
485
483
|
const config = Object.assign({
|
|
486
484
|
device: this.device,
|
|
@@ -695,7 +693,11 @@ var WGSLRenderer = class {
|
|
|
695
693
|
if (info.messages.length > 0) {
|
|
696
694
|
let errMsg = "";
|
|
697
695
|
for (const msg of info.messages) errMsg += `[WGSL ${msg.type}] Shader compilation failed for pass ${pass.name} (${msg.lineNum}:${msg.linePos}): ${msg.message}\n`;
|
|
698
|
-
|
|
696
|
+
return Promise.reject({
|
|
697
|
+
messages: info.messages,
|
|
698
|
+
cause: errMsg,
|
|
699
|
+
pass: pass.name
|
|
700
|
+
});
|
|
699
701
|
}
|
|
700
702
|
}));
|
|
701
703
|
await Promise.all(validations);
|
|
@@ -707,7 +709,7 @@ var WGSLRenderer = class {
|
|
|
707
709
|
renderError = e;
|
|
708
710
|
}
|
|
709
711
|
const error = await this.device.popErrorScope();
|
|
710
|
-
if (error) throw new Error(`Binding/validation error: ${error.message}
|
|
712
|
+
if (error) throw new Error(`Binding/validation error: ${error.message}`, { cause: error.message });
|
|
711
713
|
if (renderError) throw renderError;
|
|
712
714
|
}
|
|
713
715
|
insertPassesTo(passName, descriptors) {
|
|
@@ -832,7 +834,7 @@ var WGSLRenderer = class {
|
|
|
832
834
|
let renderTargetView;
|
|
833
835
|
let isRenderingToCanvas = false;
|
|
834
836
|
if (pass.view) renderTargetView = pass.view;
|
|
835
|
-
else if (this.renderMode ===
|
|
837
|
+
else if (this.renderMode === "export" && (pass.renderToCanvas || isLastPass)) {
|
|
836
838
|
renderTargetView = this.textureManager.getOrCreateOutputTexture(canvasWidth, canvasHeight, this.format).createView();
|
|
837
839
|
if (this.hasClearedCanvasThisFrame) {
|
|
838
840
|
if (loadOp === "clear") loadOp = "load";
|
|
@@ -932,10 +934,9 @@ async function createWGSLRenderer(cvs, options) {
|
|
|
932
934
|
await renderer.init();
|
|
933
935
|
return renderer;
|
|
934
936
|
}
|
|
935
|
-
|
|
936
937
|
//#endregion
|
|
937
938
|
exports.PassTextureRef = PassTextureRef;
|
|
938
939
|
exports.RenderMode = RenderMode;
|
|
939
940
|
exports.WGSLRenderer = WGSLRenderer;
|
|
940
941
|
exports.createSamplingView = createSamplingView;
|
|
941
|
-
exports.createWGSLRenderer = createWGSLRenderer;
|
|
942
|
+
exports.createWGSLRenderer = createWGSLRenderer;
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -307,7 +307,6 @@ var RenderPass = class {
|
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
};
|
|
310
|
-
|
|
311
310
|
//#endregion
|
|
312
311
|
//#region src/TextureManager.ts
|
|
313
312
|
var TextureManager = class {
|
|
@@ -417,7 +416,6 @@ var TextureManager = class {
|
|
|
417
416
|
};
|
|
418
417
|
}
|
|
419
418
|
};
|
|
420
|
-
|
|
421
419
|
//#endregion
|
|
422
420
|
//#region src/PassTextureRef.ts
|
|
423
421
|
const PASS_TEXTURE_REF_SYMBOL = Symbol("PassTextureRef");
|
|
@@ -453,13 +451,12 @@ function createSamplingView(texture, ref) {
|
|
|
453
451
|
mipLevelCount: ref.options?.mipmaps ? texture.mipLevelCount : 1
|
|
454
452
|
});
|
|
455
453
|
}
|
|
456
|
-
|
|
457
454
|
//#endregion
|
|
458
455
|
//#region src/index.ts
|
|
459
|
-
var RenderMode = /* @__PURE__ */ function(RenderMode
|
|
460
|
-
RenderMode
|
|
461
|
-
RenderMode
|
|
462
|
-
return RenderMode
|
|
456
|
+
var RenderMode = /* @__PURE__ */ function(RenderMode) {
|
|
457
|
+
RenderMode["NORMAL"] = "normal";
|
|
458
|
+
RenderMode["EXPORT"] = "export";
|
|
459
|
+
return RenderMode;
|
|
463
460
|
}(RenderMode || {});
|
|
464
461
|
var WGSLRenderer = class {
|
|
465
462
|
ctx;
|
|
@@ -469,7 +466,7 @@ var WGSLRenderer = class {
|
|
|
469
466
|
textureManager;
|
|
470
467
|
animationFrameId = null;
|
|
471
468
|
isResizing = false;
|
|
472
|
-
renderMode =
|
|
469
|
+
renderMode = "normal";
|
|
473
470
|
readBuffer = null;
|
|
474
471
|
hasClearedCanvasThisFrame = false;
|
|
475
472
|
constructor(canvas, options) {
|
|
@@ -479,7 +476,8 @@ var WGSLRenderer = class {
|
|
|
479
476
|
this.ctx = canvas.getContext("webgpu");
|
|
480
477
|
}
|
|
481
478
|
async init() {
|
|
482
|
-
|
|
479
|
+
const adapter = await navigator.gpu.requestAdapter();
|
|
480
|
+
this.device = await adapter.requestDevice();
|
|
483
481
|
this.format = navigator.gpu.getPreferredCanvasFormat();
|
|
484
482
|
const config = Object.assign({
|
|
485
483
|
device: this.device,
|
|
@@ -694,7 +692,11 @@ var WGSLRenderer = class {
|
|
|
694
692
|
if (info.messages.length > 0) {
|
|
695
693
|
let errMsg = "";
|
|
696
694
|
for (const msg of info.messages) errMsg += `[WGSL ${msg.type}] Shader compilation failed for pass ${pass.name} (${msg.lineNum}:${msg.linePos}): ${msg.message}\n`;
|
|
697
|
-
|
|
695
|
+
return Promise.reject({
|
|
696
|
+
messages: info.messages,
|
|
697
|
+
cause: errMsg,
|
|
698
|
+
pass: pass.name
|
|
699
|
+
});
|
|
698
700
|
}
|
|
699
701
|
}));
|
|
700
702
|
await Promise.all(validations);
|
|
@@ -706,7 +708,7 @@ var WGSLRenderer = class {
|
|
|
706
708
|
renderError = e;
|
|
707
709
|
}
|
|
708
710
|
const error = await this.device.popErrorScope();
|
|
709
|
-
if (error) throw new Error(`Binding/validation error: ${error.message}
|
|
711
|
+
if (error) throw new Error(`Binding/validation error: ${error.message}`, { cause: error.message });
|
|
710
712
|
if (renderError) throw renderError;
|
|
711
713
|
}
|
|
712
714
|
insertPassesTo(passName, descriptors) {
|
|
@@ -831,7 +833,7 @@ var WGSLRenderer = class {
|
|
|
831
833
|
let renderTargetView;
|
|
832
834
|
let isRenderingToCanvas = false;
|
|
833
835
|
if (pass.view) renderTargetView = pass.view;
|
|
834
|
-
else if (this.renderMode ===
|
|
836
|
+
else if (this.renderMode === "export" && (pass.renderToCanvas || isLastPass)) {
|
|
835
837
|
renderTargetView = this.textureManager.getOrCreateOutputTexture(canvasWidth, canvasHeight, this.format).createView();
|
|
836
838
|
if (this.hasClearedCanvasThisFrame) {
|
|
837
839
|
if (loadOp === "clear") loadOp = "load";
|
|
@@ -931,6 +933,5 @@ async function createWGSLRenderer(cvs, options) {
|
|
|
931
933
|
await renderer.init();
|
|
932
934
|
return renderer;
|
|
933
935
|
}
|
|
934
|
-
|
|
935
936
|
//#endregion
|
|
936
|
-
export { PassTextureRef, RenderMode, WGSLRenderer, createSamplingView, createWGSLRenderer };
|
|
937
|
+
export { PassTextureRef, RenderMode, WGSLRenderer, createSamplingView, createWGSLRenderer };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wgsl-renderer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "A multi-pass renderer based on WebGPU and WGSL.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -33,16 +33,15 @@
|
|
|
33
33
|
"files": [
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
|
-
"dependencies": {},
|
|
37
36
|
"devDependencies": {
|
|
38
|
-
"@taiyuuki/eslint-config": "^1.
|
|
39
|
-
"@types/node": "^
|
|
40
|
-
"@webgpu/types": "^0.1.
|
|
41
|
-
"eslint": "^
|
|
42
|
-
"rimraf": "^6.1.
|
|
43
|
-
"rolldown": "1.0.0-
|
|
44
|
-
"rolldown-plugin-dts": "^0.
|
|
45
|
-
"typescript": "^
|
|
37
|
+
"@taiyuuki/eslint-config": "^1.6.6",
|
|
38
|
+
"@types/node": "^25.5.2",
|
|
39
|
+
"@webgpu/types": "^0.1.69",
|
|
40
|
+
"eslint": "^10.2.0",
|
|
41
|
+
"rimraf": "^6.1.3",
|
|
42
|
+
"rolldown": "1.0.0-rc.17",
|
|
43
|
+
"rolldown-plugin-dts": "^0.23.2",
|
|
44
|
+
"typescript": "^6.0.2"
|
|
46
45
|
},
|
|
47
46
|
"scripts": {
|
|
48
47
|
"lint": "eslint --fix",
|