UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

84 lines 6.53 kB
import { createTipsTexture } from "./tips.js"; import { TgdPainterProgram } from "./../../program.js"; import { TgdUniformBufferObject } from "./../../../uniform/index.js"; export class PainterTipsNormal extends TgdPainterProgram { static async create(context, options) { const texture = await createTipsTexture(context); return new PainterTipsNormal(context, { texture, ...options }); } constructor(context, { uniformCamera, size, texture }) { const uniformPainter = new TgdUniformBufferObject(context, { uniforms: { uniIndex: "float", uniRadius: "float", uniScreenHeightInPixels: "float", }, values: { uniRadius: 0.333, }, }); const U = 1 / 3; const V = 1 / 2; super(context, { drawMode: "POINTS", textures: { uniTexture: texture, }, uniforms: { uniformCamera, uniformPainter, }, dataset: { attribs: { attPoint: { type: "vec3", data: new Float32Array([+1, 0, 0, 0, +1, 0, 0, 0, +1, -1, 0, 0, 0, -1, 0, 0, 0, -1]), }, attUV: { type: "vec2", data: new Float32Array([0, 0, U, 0, 2 * U, 0, 0, V, U, V, 2 * U, V]) }, attIndex: { type: "float", data: new Float32Array([0, 1, 2, 3, 4, 5]) }, }, }, varying: { varUV: "vec2", varLight: "float", }, vert: { mainCode: [ "varUV = attUV;", "varLight = (attIndex == uniIndex) ? 0.5 : 0.0;", "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);", "vec4 shift = point + vec4(0, uniRadius, 0, 0);", "gl_Position = uniProjectionMatrix * point;", "vec4 screenShift = uniProjectionMatrix * shift;", "gl_PointSize = max(", ["8.0,", "abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w"], ");", ], }, frag: { mainCode: [ `vec4 color = texture(uniTexture, varUV + gl_PointCoord * vec2(${1 / 3}, 0.5));`, `if (color.a < ${1 / 0xff}) discard;`, "color.xyz *= 1.0 - varLight;", "color.xyz += vec3(varLight);", "FragColor = color;", ], }, state: { depth: "less", blend: "alpha", }, onEnter: () => { uniformPainter.values.uniIndex = this.index; uniformPainter.values.uniScreenHeightInPixels = this.size; }, onDelete: () => { texture.delete(); uniformPainter.delete(); }, }); this.index = -1; this.size = size; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhaW50ZXIvZ2l6bW8vcGFpbnRlcnMvbm9ybWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFRckQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFtQixFQUFFLE9BQWtEO1FBQzlGLE1BQU0sT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUtELFlBQW9CLE9BQW1CLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBNEI7UUFDL0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUU7WUFDdkQsUUFBUSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixTQUFTLEVBQUUsT0FBTztnQkFDbEIsdUJBQXVCLEVBQUUsT0FBTzthQUNuQztZQUNELE1BQU0sRUFBRTtnQkFDSixTQUFTLEVBQUUsS0FBSzthQUNuQjtTQUNKLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNYLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRTtnQkFDTixVQUFVLEVB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