ts-game-engine
Version:
Simple WebGL game/render engine written in TypeScript
46 lines (38 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Material_1 = require("./Material");
const Constants_1 = require("../Constants");
class VertexColoredInstancedMaterial extends Material_1.Material {
constructor(scene) {
super(scene, vsSource, fsSource);
this.Shader.DefineInstancedAttribute(Constants_1.INSTANCE_MATRIX_ATTRIBUTE, Constants_1.INSTANCED_ATTRIBUTE_BASE_LOCATION + 0);
this.Shader.DefineUniform(Constants_1.MODEL_MATRIX_UNIFORM, 10 /* Matrix4 */);
this.Shader.DefineUniform(Constants_1.VIEW_MATRIX_UNIFORM, 10 /* Matrix4 */);
this.Shader.DefineUniform(Constants_1.PROJECTION_MATRIX_UNIFORM, 10 /* Matrix4 */);
}
SetUniforms(globalUniforms) {
this.Shader.SetMatrix4Uniform(Constants_1.MODEL_MATRIX_UNIFORM, globalUniforms.modelMatrix);
this.Shader.SetMatrix4Uniform(Constants_1.VIEW_MATRIX_UNIFORM, globalUniforms.viewMatrix);
this.Shader.SetMatrix4Uniform(Constants_1.PROJECTION_MATRIX_UNIFORM, globalUniforms.projectionMatrix);
}
}
exports.VertexColoredInstancedMaterial = VertexColoredInstancedMaterial;
const vsSource = `#version 300 es
layout(location = ${Constants_1.POSITION_ATTRIBUTE_LOCATION}) in vec3 ${Constants_1.POSITION_ATTRIBUTE};
layout(location = ${Constants_1.COLOR_ATTRIBUTE_LOCATION}) in vec4 ${Constants_1.COLOR_ATTRIBUTE};
layout(location = ${Constants_1.INSTANCED_ATTRIBUTE_BASE_LOCATION + 0}) in mat4 ${Constants_1.INSTANCE_MATRIX_ATTRIBUTE};
uniform mat4 ${Constants_1.MODEL_MATRIX_UNIFORM};
uniform mat4 ${Constants_1.VIEW_MATRIX_UNIFORM};
uniform mat4 ${Constants_1.PROJECTION_MATRIX_UNIFORM};
out vec4 vColor;
void main() {
gl_Position = ${Constants_1.PROJECTION_MATRIX_UNIFORM} * ${Constants_1.VIEW_MATRIX_UNIFORM} * ${Constants_1.MODEL_MATRIX_UNIFORM} * ${Constants_1.INSTANCE_MATRIX_ATTRIBUTE} * vec4(${Constants_1.POSITION_ATTRIBUTE}, 1);
vColor = ${Constants_1.COLOR_ATTRIBUTE};
}`;
const fsSource = `#version 300 es
precision mediump float;
in vec4 vColor;
out vec4 fragColor;
void main() {
fragColor = vColor;
}`;