@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
46 lines • 3.94 kB
JavaScript
import { TgdPainter } from "./../../painter.js";
import { TgdProgram } from "./../../../program/index.js";
import { TgdVertexArray } from "./../../../vao/index.js";
import FRAG from "./shader.frag";
import VERT from "./shader.vert";
import { webglElementTypeFromTypedArray } from "./../../../utils/index.js";
/**
* Render a totaly opaque black and white mesh
* with ghost material.
*/
export class TgdPainterMeshNormals extends TgdPainter {
constructor(context, geometry) {
super();
this.context = context;
this.paint = () => {
const { context, prg } = this;
const { gl, camera } = context;
gl.enable(gl.CULL_FACE);
gl.cullFace(gl.BACK);
prg.use();
prg.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
prg.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
this.vao.bind();
gl.drawElements(gl.TRIANGLES, this.elementsCount, this.elementsType, 0);
this.vao.unbind();
};
const { dataset, count, attNormal, elements } = geometry;
if (!attNormal) {
throw new Error("This mesh has no normal!");
}
const prg = new TgdProgram(context.gl, {
vert: VERT,
frag: FRAG,
});
this.prg = prg;
this.vao = new TgdVertexArray(context.gl, prg, [dataset], elements);
this.elementsType = elements
? webglElementTypeFromTypedArray(elements)
: -1;
this.elementsCount = count;
}
delete() {
this.vao.delete();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWludGVyL21lc2gvbm9ybWFscy9ub3JtYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFekMsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFBO0FBQ2hDLE9BQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHM0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFVBQVU7SUFNakQsWUFBNkIsT0FBbUIsRUFBRSxRQUFxQjtRQUNuRSxLQUFLLEVBQUUsQ0FBQTtRQURrQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBbUJoQyxVQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQzdCLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFBO1lBQzlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3ZCLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3BCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUNULEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDbEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDZixFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3ZFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDckIsQ0FBQyxDQUFBO1FBNUJHLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUE7UUFDeEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNkLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVE7WUFDeEIsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtJQUM5QixDQUFDO0lBZUQsTUFBTTtRQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDckIsQ0FBQztDQUNKIn0=