UNPKG

@theatrejs/theatrejs

Version:

🎮 A JavaScript 2D Game Engine focused on creating pixel art games.

118 lines (92 loc) • 3.26 kB
// 'ESLint' configuration /* eslint-disable @stylistic/indent-binary-ops */ /* eslint-disable @stylistic/operator-linebreak */ import {SHADER_PARAMETER_TYPES} from '../index.js'; /** * Static default shader sources. * * @example * * const sourceFragment = Shader.sourceFragment; * const sourceVertex = Shader.sourceVertex; */ class Shader { /** * @typedef {(SHADER_PARAMETER_TYPES.VECTOR_2 | SHADER_PARAMETER_TYPES.VECTOR_3)} TypeTypeAttribute A type of attribute. * @protected * * @memberof Shader */ /** * @typedef {(SHADER_PARAMETER_TYPES.BOOLEAN | SHADER_PARAMETER_TYPES.ARRAY_BOOLEAN | SHADER_PARAMETER_TYPES.FLOAT | SHADER_PARAMETER_TYPES.ARRAY_FLOAT | SHADER_PARAMETER_TYPES.INTEGER | SHADER_PARAMETER_TYPES.ARRAY_INTEGER | SHADER_PARAMETER_TYPES.MATRIX_4 | SHADER_PARAMETER_TYPES.ARRAY_MATRIX_4 | SHADER_PARAMETER_TYPES.SAMPLER_2D | SHADER_PARAMETER_TYPES.VECTOR_2 | SHADER_PARAMETER_TYPES.ARRAY_VECTOR_2 | SHADER_PARAMETER_TYPES.VECTOR_3 | SHADER_PARAMETER_TYPES.ARRAY_VECTOR_3)} TypeTypeUniform A type of uniform. * @protected * * @memberof Shader */ /** * Stores the attributes needed by the shader program. * @type {Object<string, TypeTypeAttribute>} * @public * @readonly * @static */ static attributes = { 'attributePosition': SHADER_PARAMETER_TYPES.VECTOR_2, 'attributeUvmapping': SHADER_PARAMETER_TYPES.VECTOR_2 }; /** * Stores the fragment shader source. * @type {string} * @public * @readonly * @static */ static sourceFragment = ( 'precision highp float;' + 'uniform sampler2D uniformTexture;' + 'varying vec2 varyingUvmapping;' + 'void main(void) {' + 'gl_FragColor = texture2D(uniformTexture, varyingUvmapping);' + '}' ); /** * Stores the vertex shader source. * @type {string} * @public * @readonly * @static */ static sourceVertex = ( 'attribute vec2 attributePosition;' + 'attribute vec2 attributeUvmapping;' + 'uniform vec2 uniformAspect;' + 'uniform vec2 uniformSize;' + 'uniform vec2 uniformTranslation;' + 'uniform vec2 uniformTranslationPointOfView;' + 'varying vec2 varyingUvmapping;' + 'void main(void) {' + 'varyingUvmapping = attributeUvmapping;' + 'vec2 position = (attributePosition * uniformSize + uniformTranslation);' + 'vec2 projection = 2.0 * (position - uniformTranslationPointOfView) / uniformAspect;' + 'gl_Position = vec4(projection, 0.0, 1.0);' + '}' ); /** * Stores the uniforms needed by the shader program. * @type {Object<string, TypeTypeUniform>} * @public * @readonly * @static */ static uniforms = { 'uniformAspect': SHADER_PARAMETER_TYPES.VECTOR_2, 'uniformSize': SHADER_PARAMETER_TYPES.VECTOR_2, 'uniformTexture': SHADER_PARAMETER_TYPES.SAMPLER_2D, 'uniformTranslation': SHADER_PARAMETER_TYPES.VECTOR_2, 'uniformTranslationPointOfView': SHADER_PARAMETER_TYPES.VECTOR_2 }; } export { Shader }; export default Shader;