@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
39 lines • 3.2 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 = {}) {
var _a, _b, _c;
super();
this.thickness = 1;
this.zShift = 0.01;
this.uniforms = {
uniColor: "vec4",
uniExpansion: "float",
uniZ: "float",
};
this.state = {
cull: webglPresetCull.front,
};
this.color = new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
this.thickness = (_b = options.expansion) !== null && _b !== void 0 ? _b : 1;
this.zShift = (_c = options.zShift) !== null && _c !== void 0 ? _c : 0.01;
this.fragmentShaderCode = [`return uniColor;`];
this.vertexShaderCode = [];
this.varyings = {};
this.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);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9odWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBcUJ4QyxNQUFNLGFBQWEsR0FBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUU1RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBa0I1QyxZQUFZLFVBQWtDLEVBQUU7O1FBQzVDLEtBQUssRUFBRSxDQUFBO1FBakJKLGNBQVMsR0FBRyxDQUFDLENBQUE7UUFDYixXQUFNLEdBQUcsSUFBSSxDQUFBO1FBR0osYUFBUSxHQUF5QztZQUM3RCxRQUFRLEVBQUUsTUFBTTtZQUNoQixZQUFZLEVBQUUsT0FBTztZQUNyQixJQUFJLEVBQUUsT0FBTztTQUNoQixDQUFBO1FBSWtCLFVBQUssR0FBb0M7WUFDeEQsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLO1NBQzlCLENBQUE7UUFJRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksYUFBYSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFBLE9BQU8sQ0FBQyxTQUFTLG1DQUFJLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUEsT0FBTyxDQUFDLE1BQU0sbUNBQUksSUFBSSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsc0VBQXNFO1lBQ3RFLDRDQUE0QztZQUM1QyxZQUFZO1lBQ1oseUJBQXlCO1lBQ3pCLCtCQUErQjtTQUNsQyxDQUFBO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQjtRQUMzQixPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUN4RCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsQ0FBQztDQUNKIn0=