@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
35 lines • 2.94 kB
JavaScript
import { webglPresetCull } from "./../utils/index.js";
import { TgdVec4 } from "./../math/index.js";
import { TgdMaterial } from "./material.js";
const DEFAULT_COLOR = [0.111, 0.333, 0.999, 1];
export class TgdMaterialHull extends TgdMaterial {
constructor(options = {}) {
super({
uniforms: {
uniColor: "vec4",
uniExpansion: "float",
uniZ: "float",
},
fragmentShaderCode: [`return uniColor;`],
vertexShaderCode: [
"vec3 n = normalize(vec3((mat3(uniModelViewMatrix) * normal).xy, 0));",
"float size = uniExpansion * gl_Position.w;",
"n *= size;",
"gl_Position.xy += n.xy;",
"gl_Position.z += size * uniZ;",
],
setUniforms: ({ program }) => {
program.uniform4fv("uniColor", this.color);
program.uniform1f("uniExpansion", this.thickness * 0.01);
program.uniform1f("uniZ", this.zShift);
},
state: { cull: webglPresetCull.front },
});
this.thickness = 1;
this.zShift = 0.01;
this.color = new TgdVec4(options.color ?? DEFAULT_COLOR);
this.thickness = options.expansion ?? 1;
this.zShift = options.zShift ?? 0.01;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9odWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBcUJ4QyxNQUFNLGFBQWEsR0FBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUU1RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBSzVDLFlBQVksVUFBa0MsRUFBRTtRQUM1QyxLQUFLLENBQUM7WUFDRixRQUFRLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFlBQVksRUFBRSxPQUFPO2dCQUNyQixJQUFJLEVBQUUsT0FBTzthQUNoQjtZQUNELGtCQUFrQixFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDeEMsZ0JBQWdCLEVBQUU7Z0JBQ2Qsc0VBQXNFO2dCQUN0RSw0Q0FBNEM7Z0JBQzVDLFlBQVk7Z0JBQ1oseUJBQXlCO2dCQUN6QiwrQkFBK0I7YUFDbEM7WUFDRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBMkIsRUFBUSxFQUFFO2dCQUN4RCxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUE7Z0JBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMxQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUU7U0FDekMsQ0FBQyxDQUFBO1FBeEJDLGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDYixXQUFNLEdBQUcsSUFBSSxDQUFBO1FBeUJoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFBO0lBQ3hDLENBQUM7Q0FDSiJ9