wgsl-renderer 0.4.2 → 0.5.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/LICENSE.md +8 -8
- package/README.md +590 -589
- package/README.zh-CN.md +623 -621
- package/dist/cjs/index.js +19 -19
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +14 -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,10 @@ 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
|
+
});
|
|
699
700
|
}
|
|
700
701
|
}));
|
|
701
702
|
await Promise.all(validations);
|
|
@@ -707,7 +708,7 @@ var WGSLRenderer = class {
|
|
|
707
708
|
renderError = e;
|
|
708
709
|
}
|
|
709
710
|
const error = await this.device.popErrorScope();
|
|
710
|
-
if (error) throw new Error(`Binding/validation error: ${error.message}
|
|
711
|
+
if (error) throw new Error(`Binding/validation error: ${error.message}`, { cause: error.message });
|
|
711
712
|
if (renderError) throw renderError;
|
|
712
713
|
}
|
|
713
714
|
insertPassesTo(passName, descriptors) {
|
|
@@ -832,7 +833,7 @@ var WGSLRenderer = class {
|
|
|
832
833
|
let renderTargetView;
|
|
833
834
|
let isRenderingToCanvas = false;
|
|
834
835
|
if (pass.view) renderTargetView = pass.view;
|
|
835
|
-
else if (this.renderMode ===
|
|
836
|
+
else if (this.renderMode === "export" && (pass.renderToCanvas || isLastPass)) {
|
|
836
837
|
renderTargetView = this.textureManager.getOrCreateOutputTexture(canvasWidth, canvasHeight, this.format).createView();
|
|
837
838
|
if (this.hasClearedCanvasThisFrame) {
|
|
838
839
|
if (loadOp === "clear") loadOp = "load";
|
|
@@ -932,10 +933,9 @@ async function createWGSLRenderer(cvs, options) {
|
|
|
932
933
|
await renderer.init();
|
|
933
934
|
return renderer;
|
|
934
935
|
}
|
|
935
|
-
|
|
936
936
|
//#endregion
|
|
937
937
|
exports.PassTextureRef = PassTextureRef;
|
|
938
938
|
exports.RenderMode = RenderMode;
|
|
939
939
|
exports.WGSLRenderer = WGSLRenderer;
|
|
940
940
|
exports.createSamplingView = createSamplingView;
|
|
941
|
-
exports.createWGSLRenderer = createWGSLRenderer;
|
|
941
|
+
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,10 @@ 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
|
+
});
|
|
698
699
|
}
|
|
699
700
|
}));
|
|
700
701
|
await Promise.all(validations);
|
|
@@ -706,7 +707,7 @@ var WGSLRenderer = class {
|
|
|
706
707
|
renderError = e;
|
|
707
708
|
}
|
|
708
709
|
const error = await this.device.popErrorScope();
|
|
709
|
-
if (error) throw new Error(`Binding/validation error: ${error.message}
|
|
710
|
+
if (error) throw new Error(`Binding/validation error: ${error.message}`, { cause: error.message });
|
|
710
711
|
if (renderError) throw renderError;
|
|
711
712
|
}
|
|
712
713
|
insertPassesTo(passName, descriptors) {
|
|
@@ -831,7 +832,7 @@ var WGSLRenderer = class {
|
|
|
831
832
|
let renderTargetView;
|
|
832
833
|
let isRenderingToCanvas = false;
|
|
833
834
|
if (pass.view) renderTargetView = pass.view;
|
|
834
|
-
else if (this.renderMode ===
|
|
835
|
+
else if (this.renderMode === "export" && (pass.renderToCanvas || isLastPass)) {
|
|
835
836
|
renderTargetView = this.textureManager.getOrCreateOutputTexture(canvasWidth, canvasHeight, this.format).createView();
|
|
836
837
|
if (this.hasClearedCanvasThisFrame) {
|
|
837
838
|
if (loadOp === "clear") loadOp = "load";
|
|
@@ -931,6 +932,5 @@ async function createWGSLRenderer(cvs, options) {
|
|
|
931
932
|
await renderer.init();
|
|
932
933
|
return renderer;
|
|
933
934
|
}
|
|
934
|
-
|
|
935
935
|
//#endregion
|
|
936
|
-
export { PassTextureRef, RenderMode, WGSLRenderer, createSamplingView, createWGSLRenderer };
|
|
936
|
+
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.0",
|
|
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",
|