UNPKG

mdx-m3-viewer

Version:

A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.

56 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const geometryemitterfuncs_1 = require("./geometryemitterfuncs"); /** * A group of emitters that are going to be rendered together. */ class EmitterGroup { constructor(model) { this.objects = []; this.model = model; } render(instance) { const scene = instance.scene; const nodes = instance.nodes; const model = instance.model; const viewer = model.viewer; const gl = viewer.gl; const instancedArrays = viewer.webgl.extensions['ANGLE_instanced_arrays']; const mdxCache = viewer.sharedCache.get('mdx'); const shader = mdxCache.particlesShader; const uniforms = shader.uniforms; const attribs = shader.attribs; const rectBuffer = mdxCache.rectBuffer; gl.depthMask(false); gl.enable(gl.BLEND); gl.disable(gl.CULL_FACE); gl.enable(gl.DEPTH_TEST); shader.use(); gl.uniformMatrix4fv(uniforms['u_VP'], false, scene.camera.viewProjectionMatrix); gl.uniform1i(uniforms['u_texture'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_position'], 0); gl.bindBuffer(gl.ARRAY_BUFFER, rectBuffer); gl.vertexAttribPointer(attribs['a_position'], 1, gl.UNSIGNED_BYTE, false, 0, 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p0'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p1'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p2'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p3'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_health'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_color'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_tail'], 1); instancedArrays.vertexAttribDivisorANGLE(attribs['a_leftRightTop'], 1); for (const index of this.objects) { (0, geometryemitterfuncs_1.renderEmitter)(nodes[index].object, shader); } instancedArrays.vertexAttribDivisorANGLE(attribs['a_leftRightTop'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_tail'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_color'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_health'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p3'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p2'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p1'], 0); instancedArrays.vertexAttribDivisorANGLE(attribs['a_p0'], 0); } } exports.default = EmitterGroup; //# sourceMappingURL=emittergroup.js.map