Skip to content

Commit 4168bc9

Browse files
committed
Set up WebGPU build for packaging as an addon
1 parent caaf89d commit 4168bc9

8 files changed

Lines changed: 2258 additions & 2271 deletions

File tree

rollup.config.mjs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const bundleSize = (name, sourcemap) => {
3636
});
3737
};
3838

39-
const modules = ['math'];
39+
const modules = ['webgpu']; // TODO: also generate math build
4040
const generateModuleBuild = () => {
4141
return modules.map(module => {
4242
return {
@@ -195,7 +195,6 @@ export default [
195195
},
196196
external: /node_modules/,
197197
plugins
198-
}
199-
// NOTE: comment to NOT build standalone math module
200-
// ...generateModuleBuild()
198+
},
199+
...generateModuleBuild()
201200
];

src/core/p5.Renderer3D.js

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,7 @@ import { RenderBuffer } from "../webgl/p5.RenderBuffer";
1818
import { Image } from "../image/p5.Image";
1919
import { Texture } from "../webgl/p5.Texture";
2020
import { makeFilterShader } from "../core/filterShaders";
21-
22-
export function getStrokeDefs(shaderConstant) {
23-
const STROKE_CAP_ENUM = {};
24-
const STROKE_JOIN_ENUM = {};
25-
let lineDefs = "";
26-
const defineStrokeCapEnum = function (key, val) {
27-
lineDefs += shaderConstant(`STROKE_CAP_${key}`, `${val}`, 'u32');
28-
STROKE_CAP_ENUM[constants[key]] = val;
29-
};
30-
const defineStrokeJoinEnum = function (key, val) {
31-
lineDefs += shaderConstant(`STROKE_JOIN_${key}`, `${val}`, 'u32');
32-
STROKE_JOIN_ENUM[constants[key]] = val;
33-
};
34-
35-
// Define constants in line shaders for each type of cap/join, and also record
36-
// the values in JS objects
37-
defineStrokeCapEnum("ROUND", 0);
38-
defineStrokeCapEnum("PROJECT", 1);
39-
defineStrokeCapEnum("SQUARE", 2);
40-
defineStrokeJoinEnum("ROUND", 0);
41-
defineStrokeJoinEnum("MITER", 1);
42-
defineStrokeJoinEnum("BEVEL", 2);
43-
44-
return { STROKE_CAP_ENUM, STROKE_JOIN_ENUM, lineDefs };
45-
}
21+
import { getStrokeDefs } from "../webgl/enums";
4622

4723
const { STROKE_CAP_ENUM, STROKE_JOIN_ENUM } = getStrokeDefs(()=>"");
4824

@@ -2035,3 +2011,13 @@ export class Renderer3D extends Renderer {
20352011
super.remove();
20362012
}
20372013
}
2014+
2015+
function renderer3D(p5, fn) {
2016+
p5.Renderer3D = Renderer3D;
2017+
}
2018+
2019+
export default renderer3D;
2020+
2021+
if (typeof p5 !== "undefined") {
2022+
renderer3D(p5, p5.prototype);
2023+
}

src/core/rendering.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import { Framebuffer } from '../webgl/p5.Framebuffer';
1010
let renderers;
1111
function rendering(p5, fn){
1212
// Extend additional renderers object to p5 class, new renderer can be similarly attached
13-
renderers = p5.renderers = {};
13+
if (!p5.renderers) {
14+
p5.renderers = {};
15+
}
16+
renderers = p5.renderers;
1417

1518
/**
1619
* Creates a canvas element on the web page.

src/webgl/enums.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as constants from '../core/constants';
2+
export function getStrokeDefs(shaderConstant) {
3+
const STROKE_CAP_ENUM = {};
4+
const STROKE_JOIN_ENUM = {};
5+
let lineDefs = "";
6+
const defineStrokeCapEnum = function (key, val) {
7+
lineDefs += shaderConstant(`STROKE_CAP_${key}`, `${val}`, 'u32');
8+
STROKE_CAP_ENUM[constants[key]] = val;
9+
};
10+
const defineStrokeJoinEnum = function (key, val) {
11+
lineDefs += shaderConstant(`STROKE_JOIN_${key}`, `${val}`, 'u32');
12+
STROKE_JOIN_ENUM[constants[key]] = val;
13+
};
14+
15+
// Define constants in line shaders for each type of cap/join, and also record
16+
// the values in JS objects
17+
defineStrokeCapEnum("ROUND", 0);
18+
defineStrokeCapEnum("PROJECT", 1);
19+
defineStrokeCapEnum("SQUARE", 2);
20+
defineStrokeJoinEnum("ROUND", 0);
21+
defineStrokeJoinEnum("MITER", 1);
22+
defineStrokeJoinEnum("BEVEL", 2);
23+
24+
return { STROKE_CAP_ENUM, STROKE_JOIN_ENUM, lineDefs };
25+
}

src/webgl/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import framebuffer from './p5.Framebuffer';
1212
import dataArray from './p5.DataArray';
1313
import camera from './p5.Camera';
1414
import texture from './p5.Texture';
15+
import renderer3D from '../core/p5.Renderer3D';
1516
import rendererGL from './p5.RendererGL';
1617

1718
export default function(p5){
19+
p5.registerAddon(renderer3D);
1820
p5.registerAddon(rendererGL);
1921
p5.registerAddon(primitives3D);
2022
p5.registerAddon(interaction);

src/webgl/p5.RendererGL.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import {
99
setWebGLUniformValue,
1010
checkWebGLCapabilities
1111
} from './utils';
12-
import { Renderer3D, getStrokeDefs } from '../core/p5.Renderer3D';
12+
import { Renderer3D } from '../core/p5.Renderer3D';
13+
import { getStrokeDefs } from './enums';
1314
import { Shader } from './p5.Shader';
1415
import { MipmapTexture } from './p5.Texture';
1516
import { Framebuffer } from './p5.Framebuffer';

src/webgpu/index.js

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,5 @@
1-
import primitives3D from '../webgl/3d_primitives';
2-
import interaction from '../webgl/interaction';
3-
import light from '../webgl/light';
4-
import loading from '../webgl/loading';
5-
import material from '../webgl/material';
6-
import text from '../webgl/text';
7-
import renderBuffer from '../webgl/p5.RenderBuffer';
8-
import quat from '../webgl/p5.Quat';
9-
import matrix from '../math/p5.Matrix';
10-
import geometry from '../webgl/p5.Geometry';
11-
import framebuffer from '../webgl/p5.Framebuffer';
12-
import dataArray from '../webgl/p5.DataArray';
13-
import shader from '../webgl/p5.Shader';
14-
import camera from '../webgl/p5.Camera';
15-
import texture from '../webgl/p5.Texture';
16-
import rendererGL from '../webgl/p5.RendererGL';
17-
import strands from '../strands/p5.strands';
1+
import rendererWebGPU from './p5.RendererWebGPU';
182

193
export default function(p5){
20-
p5.registerAddon(rendererGL);
21-
p5.registerAddon(primitives3D);
22-
p5.registerAddon(interaction);
23-
p5.registerAddon(light);
24-
p5.registerAddon(loading);
25-
p5.registerAddon(material);
26-
p5.registerAddon(text);
27-
p5.registerAddon(renderBuffer);
28-
p5.registerAddon(quat);
29-
p5.registerAddon(matrix);
30-
p5.registerAddon(geometry);
31-
p5.registerAddon(camera);
32-
p5.registerAddon(framebuffer);
33-
p5.registerAddon(dataArray);
34-
p5.registerAddon(shader);
35-
p5.registerAddon(texture);
36-
p5.registerAddon(strands);
4+
p5.registerAddon(rendererWebGPU);
375
}

0 commit comments

Comments
 (0)