@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
72 lines • 6.12 kB
JavaScript
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=