UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

72 lines 6.12 kB
import { TgdPainterState, } from "../index.js"; export class TgdMaterial { /** * The code of a `vec4 applyMaterial()` function. */ get fragmentShaderCode() { if (typeof this._fragmentShaderCode === "function") return this._fragmentShaderCode(); return this._fragmentShaderCode; } get fragmentShaderHeader() { if (typeof this._fragmentShaderHeader === "function") return this._fragmentShaderHeader(); return this._fragmentShaderHeader; } get extraFragmentShaderFunctions() { if (typeof this._extraFragmentShaderFunctions === "function") return this._extraFragmentShaderFunctions(); return this._extraFragmentShaderFunctions; } /** * The code of a `void applyMaterial(position, normal, uv)` function. */ get vertexShaderCode() { if (typeof this._vertexShaderCode === "function") return this._vertexShaderCode(); return this._vertexShaderCode; } get extraVertexShaderFunctions() { if (typeof this._extraVertexShaderFunctions === "function") return this._extraVertexShaderFunctions(); return this._extraVertexShaderFunctions; } /** * Body of the function `vec4 getPosition(vec4 pos)` of the vertex shader. * * By default, this body is `return pos;`. * Yo can use this code to apply any transformation on the vertex position * before convertion to screen space. */ get vertexShaderCodeForGetPosition() { if (typeof this._vertexShaderCodeForGetPosition === "function") return this._vertexShaderCodeForGetPosition(); return this._vertexShaderCodeForGetPosition; } applyState(context, action) { TgdPainterState.do(context, { ...this.state, action, }); } constructor({ attPosition = "POSITION", attNormal = "NORMAL", attTangent = "CUSTOM_ATTRIBUTE_3", attUV = "TEXCOORD_0", varyings = {}, uniforms = {}, fragmentShaderCode = ["return vec4(1, .666, .1, 1);"], fragmentShaderHeader = [], extraFragmentShaderFunctions = {}, vertexShaderCode = [], extraVertexShaderFunctions = {}, vertexShaderCodeForGetPosition = "return pos;", setUniforms, state = {}, debug = false, delete: deleteFunction = () => { }, }) { this.debug = false; this.delete = deleteFunction; this.debug = debug; this.attPosition = attPosition; this.attNormal = attNormal; this.attTangent = attTangent; this.attUV = attUV; this.varyings = varyings; this.uniforms = uniforms; this._fragmentShaderCode = fragmentShaderCode; this._fragmentShaderHeader = fragmentShaderHeader; this._extraFragmentShaderFunctions = extraFragmentShaderFunctions; this._vertexShaderCode = vertexShaderCode; this._extraVertexShaderFunctions = extraVertexShaderFunctions; this._vertexShaderCodeForGetPosition = vertexShaderCodeForGetPosition; this.setUniforms = setUniforms; this.state = state; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUVILGVBQWUsR0FJbEIsTUFBTSxJQUFJLENBQUE7QUF1RVgsTUFBTSxPQUFPLFdBQVc7SUF3QnBCOztPQUVHO0lBQ0gsSUFBSSxrQkFBa0I7UUFDbEIsSUFBSSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUNyRixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUN6RixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQTtJQUNyQyxDQUFDO0lBSUQsSUFBSSw0QkFBNEI7UUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyw2QkFBNkIsS0FBSyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQTtRQUN6RyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQTtJQUM3QyxDQUFDO0lBSUQ7O09BRUc7SUFDSCxJQUFJLGdCQUFnQjtRQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFBO0lBQ2pDLENBQUM7SUFJRCxJQUFJLDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixLQUFLLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFBO1FBQ3JHLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFBO0lBQzNDLENBQUM7SUFJRDs7Ozs7O09BTUc7SUFDSCxJQUFJLDhCQUE4QjtRQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDLCtCQUErQixLQUFLLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFBO1FBQzdHLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFBO0lBQy9DLENBQUM7SUFNTSxVQUFVLENBQUMsT0FBaUUsRUFBRSxNQUFrQjtRQUNuRyxlQUFlLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRTtZQUN4QixHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsTUFBTTtTQUNULENBQUMsQ0FBQTtJQUNOLENBQUM7SUFJRCxZQUFZLEVBQ1IsV0FBVyxHQUFHLFVBQVUsRUFDeEIsU0FBUyxHQUFHLFFBQVEsRUFDcEIsVUFBVSxHQUFHLG9CQUFvQixFQUNqQyxLQUFLLEdBQUcsWUFBWSxFQUNwQixRQUFRLEdBQUcsRUFBRSxFQUNiLFFBQVEsR0FBRyxFQUFFLEVBQ2Isa0JBQWtCLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNyRCxvQkFBb0IsR0FBRyxFQUFFLEVBQ3pCLDRCQUE0QixHQUFHLEVBQUUsRUFDakMsZ0JBQWdCLEdBQUcsRUFBRSxFQUNyQiwwQkFBMEIsR0FBRyxFQUFFLEVBQy9CLDhCQUE4QixHQUFHLGFBQWEsRUFDOUMsV0FBVyxFQUNYLEtBQUssR0FBRyxFQUFFLEVBQ1YsS0FBSyxHQUFHLEtBQUssRUFDYixNQUFNLEVBQUUsY0FBYyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsR0FDUDtRQXhHdkIsVUFBSyxHQUFHLEtBQUssQ0FBQTtRQXlHaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUE7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFBO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQTtRQUNqRCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsNEJBQTRCLENBQUE7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFBO1FBQ3pDLElBQUksQ0FBQywyQkFBMkIsR0FBRywwQkFBMEIsQ0FBQTtRQUM3RCxJQUFJLENBQUMsK0JBQStCLEdBQUcsOEJBQThCLENBQUE7UUFDckUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDdEIsQ0FBQztDQUNKIn0=