@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
190 lines • 16 kB
JavaScript
export function isWebglImage(data) {
return (data instanceof ImageData ||
data instanceof HTMLImageElement ||
data instanceof HTMLCanvasElement ||
data instanceof HTMLVideoElement ||
data instanceof ImageBitmap);
}
export var WebglEnumDepthFunction;
(function (WebglEnumDepthFunction) {
/** never pass */
WebglEnumDepthFunction[WebglEnumDepthFunction["NEVER"] = WebGL2RenderingContext.NEVER] = "NEVER";
/** pass if the incoming value is less than the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["LESS"] = WebGL2RenderingContext.LESS] = "LESS";
/** pass if the incoming value equals the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["EQUAL"] = WebGL2RenderingContext.EQUAL] = "EQUAL";
/** pass if the incoming value is less than or equal to the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["LEQUAL"] = WebGL2RenderingContext.LEQUAL] = "LEQUAL";
/** pass if the incoming value is greater than the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["GREATER"] = WebGL2RenderingContext.GREATER] = "GREATER";
/** pass if the incoming value is not equal to the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["NOTEQUAL"] = WebGL2RenderingContext.NOTEQUAL] = "NOTEQUAL";
/** pass if the incoming value is greater than or equal to the depth buffer value */
WebglEnumDepthFunction[WebglEnumDepthFunction["GEQUAL"] = WebGL2RenderingContext.GEQUAL] = "GEQUAL";
/** always pass */
WebglEnumDepthFunction[WebglEnumDepthFunction["ALWAYS"] = WebGL2RenderingContext.ALWAYS] = "ALWAYS";
})(WebglEnumDepthFunction || (WebglEnumDepthFunction = {}));
export var WebglEnumBlendEquation;
(function (WebglEnumBlendEquation) {
/** source + destination (default value) */
WebglEnumBlendEquation[WebglEnumBlendEquation["FUNC_ADD"] = WebGL2RenderingContext.FUNC_ADD] = "FUNC_ADD";
/** source - destination */
WebglEnumBlendEquation[WebglEnumBlendEquation["FUNC_SUBTRACT"] = WebGL2RenderingContext.FUNC_SUBTRACT] = "FUNC_SUBTRACT";
/** destination - source */
WebglEnumBlendEquation[WebglEnumBlendEquation["FUNC_REVERSE_SUBTRACT"] = WebGL2RenderingContext.FUNC_REVERSE_SUBTRACT] = "FUNC_REVERSE_SUBTRACT";
/** Minimum of source and destination */
WebglEnumBlendEquation[WebglEnumBlendEquation["MIN"] = WebGL2RenderingContext.MIN] = "MIN";
/** Maximum of source and destination */
WebglEnumBlendEquation[WebglEnumBlendEquation["MAX"] = WebGL2RenderingContext.MAX] = "MAX";
})(WebglEnumBlendEquation || (WebglEnumBlendEquation = {}));
export var WebglEnumBlendFunction;
(function (WebglEnumBlendFunction) {
/**
* 0,0,0,0
*
* Multiplies all colors by 0.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ZERO"] = WebGL2RenderingContext.ZERO] = "ZERO";
/**
* 1,1,1,1
*
* Multiplies all colors by 1.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE"] = WebGL2RenderingContext.ONE] = "ONE";
/**
* RS, GS, BS, AS
*
* Multiplies all colors by the source colors.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["SRC_COLOR"] = WebGL2RenderingContext.SRC_COLOR] = "SRC_COLOR";
/**
* 1-RS, 1-GS, 1-BS, 1-AS
*
* Multiplies all colors by 1 minus each source color.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_SRC_COLOR"] = WebGL2RenderingContext.ONE_MINUS_SRC_COLOR] = "ONE_MINUS_SRC_COLOR";
/**
* RD, GD, BD, AD
*
* Multiplies all colors by the destination color.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["DST_COLOR"] = WebGL2RenderingContext.DST_COLOR] = "DST_COLOR";
/**
* 1-RD, 1-GD, 1-BD, 1-AD
*
* Multiplies all colors by 1 minus each destination color.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_DST_COLOR"] = WebGL2RenderingContext.ONE_MINUS_DST_COLOR] = "ONE_MINUS_DST_COLOR";
/**
* AS, AS, AS, AS
*
* Multiplies all colors by the source alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["SRC_ALPHA"] = WebGL2RenderingContext.SRC_ALPHA] = "SRC_ALPHA";
/**
* 1-AS, 1-AS, 1-AS, 1-AS
*
* Multiplies all colors by 1 minus the source alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_SRC_ALPHA"] = WebGL2RenderingContext.ONE_MINUS_SRC_ALPHA] = "ONE_MINUS_SRC_ALPHA";
/**
* AD, AD, AD, AD
*
* Multiplies all colors by the destination alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["DST_ALPHA"] = WebGL2RenderingContext.DST_ALPHA] = "DST_ALPHA";
/**
* 1-AD, 1-AD, 1-AD, 1-AD
*
* Multiplies all colors by 1 minus the destination alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_DST_ALPHA"] = WebGL2RenderingContext.ONE_MINUS_DST_ALPHA] = "ONE_MINUS_DST_ALPHA";
/**
* RC, GC, BC, AC
*
* Multiplies all colors by a constant color.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["CONSTANT_COLOR"] = WebGL2RenderingContext.CONSTANT_COLOR] = "CONSTANT_COLOR";
/**
* 1-RC, 1-GC, 1-BC, 1-AC
*
* Multiplies all colors by 1 minus a constant color.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_CONSTANT_COLOR"] = WebGL2RenderingContext.ONE_MINUS_CONSTANT_COLOR] = "ONE_MINUS_CONSTANT_COLOR";
/**
* AC, AC, AC, AC
*
* Multiplies all colors by a constant alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["CONSTANT_ALPHA"] = WebGL2RenderingContext.CONSTANT_ALPHA] = "CONSTANT_ALPHA";
/**
* 1-AC, 1-AC, 1-AC, 1-AC
*
* Multiplies all colors by 1 minus a constant alpha value.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["ONE_MINUS_CONSTANT_ALPHA"] = WebGL2RenderingContext.ONE_MINUS_CONSTANT_ALPHA] = "ONE_MINUS_CONSTANT_ALPHA";
/**
* min(AS, 1 - AD), min(AS, 1 - AD), min(AS, 1 - AD), 1
*
* Multiplies the RGB colors by the smaller of either the source alpha value or the value of 1 minus the destination alpha value. The alpha value is multiplied by 1.
*/
WebglEnumBlendFunction[WebglEnumBlendFunction["SRC_ALPHA_SATURATE"] = WebGL2RenderingContext.SRC_ALPHA_SATURATE] = "SRC_ALPHA_SATURATE";
})(WebglEnumBlendFunction || (WebglEnumBlendFunction = {}));
export var WebglEnumStencilFunction;
(function (WebglEnumStencilFunction) {
/** Never pass. */
WebglEnumStencilFunction[WebglEnumStencilFunction["NEVER"] = WebGL2RenderingContext.NEVER] = "NEVER";
/** Pass if (ref & mask) < (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["LESS"] = WebGL2RenderingContext.LESS] = "LESS";
/** Pass if (ref & mask) = (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["EQUAL"] = WebGL2RenderingContext.EQUAL] = "EQUAL";
/** Pass if (ref & mask) <= (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["LEQUAL"] = WebGL2RenderingContext.LEQUAL] = "LEQUAL";
/** Pass if (ref & mask) > (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["GREATER"] = WebGL2RenderingContext.GREATER] = "GREATER";
/** Pass if (ref & mask) !== (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["NOTEQUAL"] = WebGL2RenderingContext.NOTEQUAL] = "NOTEQUAL";
/** Pass if (ref & mask) >= (stencil & mask). */
WebglEnumStencilFunction[WebglEnumStencilFunction["GEQUAL"] = WebGL2RenderingContext.GEQUAL] = "GEQUAL";
/** Always pass. */
WebglEnumStencilFunction[WebglEnumStencilFunction["ALWAYS"] = WebGL2RenderingContext.ALWAYS] = "ALWAYS";
})(WebglEnumStencilFunction || (WebglEnumStencilFunction = {}));
export var WebglEnumStencilOperation;
(function (WebglEnumStencilOperation) {
/** Keeps the current value. */
WebglEnumStencilOperation[WebglEnumStencilOperation["KEEP"] = WebGL2RenderingContext.KEEP] = "KEEP";
/** Sets the stencil buffer value to 0. */
WebglEnumStencilOperation[WebglEnumStencilOperation["ZERO"] = WebGL2RenderingContext.ZERO] = "ZERO";
/** Sets the stencil buffer value to the reference value as specified by WebGLRenderingContext.stencilFunc(). */
WebglEnumStencilOperation[WebglEnumStencilOperation["REPLACE"] = WebGL2RenderingContext.REPLACE] = "REPLACE";
/** Increments the current stencil buffer value. Clamps to the maximum representable unsigned value. */
WebglEnumStencilOperation[WebglEnumStencilOperation["INCR"] = WebGL2RenderingContext.INCR] = "INCR";
/** Increments the current stencil buffer value. Wraps stencil buffer value to zero when incrementing the maximum representable unsigned value. */
WebglEnumStencilOperation[WebglEnumStencilOperation["INCR_WRAP"] = WebGL2RenderingContext.INCR_WRAP] = "INCR_WRAP";
/** Decrements the current stencil buffer value. Clamps to 0. */
WebglEnumStencilOperation[WebglEnumStencilOperation["DECR"] = WebGL2RenderingContext.DECR] = "DECR";
/** Decrements the current stencil buffer value. Wraps stencil buffer value to the maximum representable unsigned value when decrementing a stencil buffer value of 0. */
WebglEnumStencilOperation[WebglEnumStencilOperation["DECR_WRAP"] = WebGL2RenderingContext.DECR_WRAP] = "DECR_WRAP";
/** Inverts the current stencil buffer value bitwise. */
WebglEnumStencilOperation[WebglEnumStencilOperation["INVERT"] = WebGL2RenderingContext.INVERT] = "INVERT";
})(WebglEnumStencilOperation || (WebglEnumStencilOperation = {}));
export var WebglEnumCullFace;
(function (WebglEnumCullFace) {
WebglEnumCullFace[WebglEnumCullFace["FRONT"] = WebGL2RenderingContext.FRONT] = "FRONT";
WebglEnumCullFace[WebglEnumCullFace["BACK"] = WebGL2RenderingContext.BACK] = "BACK";
WebglEnumCullFace[WebglEnumCullFace["FRONT_AND_BACK"] = WebGL2RenderingContext.FRONT_AND_BACK] = "FRONT_AND_BACK";
})(WebglEnumCullFace || (WebglEnumCullFace = {}));
export var WebglEnumTex2DInternalFormat;
(function (WebglEnumTex2DInternalFormat) {
/** : Discards the red, green and blue components and reads the alpha component. */
WebglEnumTex2DInternalFormat[WebglEnumTex2DInternalFormat["ALPHA"] = WebGL2RenderingContext.ALPHA] = "ALPHA";
/** : Discards the alpha components and reads the red, green and blue components. */
WebglEnumTex2DInternalFormat[WebglEnumTex2DInternalFormat["RGB"] = WebGL2RenderingContext.RGB] = "RGB";
/** : Red, green, blue and alpha components are read from the color buffer. */
WebglEnumTex2DInternalFormat[WebglEnumTex2DInternalFormat["RGBA"] = WebGL2RenderingContext.RGBA] = "RGBA";
/** : Each color component is a luminance component, alpha is 1.0. */
WebglEnumTex2DInternalFormat[WebglEnumTex2DInternalFormat["LUMINANCE"] = WebGL2RenderingContext.LUMINANCE] = "LUMINANCE";
/** : Each component is a luminance/alpha component. */
WebglEnumTex2DInternalFormat[WebglEnumTex2DInternalFormat["LUMINANCE_ALPHA"] = WebGL2RenderingContext.LUMINANCE_ALPHA] = "LUMINANCE_ALPHA";
})(WebglEnumTex2DInternalFormat || (WebglEnumTex2DInternalFormat = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViZ2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvd2ViZ2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOENBLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBYTtJQUN0QyxPQUFPLENBQ0gsSUFBSSxZQUFZLFNBQVM7UUFDekIsSUFBSSxZQUFZLGdCQUFnQjtRQUNoQyxJQUFJLFlBQVksaUJBQWlCO1FBQ2pDLElBQUksWUFBWSxnQkFBZ0I7UUFDaEMsSUFBSSxZQUFZLFdBQVcsQ0FDOUIsQ0FBQTtBQUNMLENBQUM7QUFvQkQsTUFBTSxDQUFOLElBQVksc0JBaUJYO0FBakJELFdBQVksc0JBQXNCO0lBQzlCLGlCQUFpQjtJQUNqQix5REFBUSxzQkFBc0IsQ0FBQyxLQUFLLFdBQUEsQ0FBQTtJQUNwQyxxRUFBcUU7SUFDckUsd0RBQU8sc0JBQXNCLENBQUMsSUFBSSxVQUFBLENBQUE7SUFDbEMsK0RBQStEO0lBQy9ELHlEQUFRLHNCQUFzQixDQUFDLEtBQUssV0FBQSxDQUFBO0lBQ3BDLGlGQUFpRjtJQUNqRiwwREFBUyxzQkFBc0IsQ0FBQyxNQUFNLFlBQUEsQ0FBQTtJQUN0Qyx3RUFBd0U7SUFDeEUsMkRBQVUsc0JBQXNCLENBQUMsT0FBTyxhQUFBLENBQUE7SUFDeEMsd0VBQXdFO0lBQ3hFLDREQUFXLHNCQUFzQixDQUFDLFFBQVEsY0FBQSxDQUFBO0lBQzFDLG9GQUFvRjtJQUNwRiwwREFBUyxzQkFBc0IsQ0FBQyxNQUFNLFlBQUEsQ0FBQTtJQUN0QyxrQkFBa0I7SUFDbEIsMERBQVMsc0JBQXNCLENBQUMsTUFBTSxZQUFBLENBQUE7QUFDMUMsQ0FBQyxFQWpCVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBaUJqQztBQWNELE1BQU0sQ0FBTixJQUFZLHNCQVdYO0FBWEQsV0FBWSxzQkFBc0I7SUFDOUIsNENBQTRDO0lBQzVDLDREQUFXLHNCQUFzQixDQUFDLFFBQVEsY0FBQSxDQUFBO0lBQzFDLDRCQUE0QjtJQUM1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