UNPKG

mdx-m3-viewer

Version:

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

89 lines 3.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const animatedobject_1 = require("./animatedobject"); const filtermode_1 = require("./filtermode"); /** * An MDX layer. */ class Layer extends animatedobject_1.default { constructor(model, layer, layerId, priorityPlane) { super(model, layer); this.textureId = 0; this.blendSrc = 0; this.blendDst = 0; this.blended = false; this.textureAnimation = null; let filterMode = layer.filterMode; const textureAnimationId = layer.textureAnimationId; const gl = model.viewer.gl; this.index = layerId; this.priorityPlane = priorityPlane; if (filterMode > 6 /* Modulate2x */) { filterMode = 2 /* Blend */; } this.filterMode = filterMode; if (layer.textureId !== -1) { this.textureId = layer.textureId; } this.coordId = layer.coordId; this.alpha = layer.alpha; const flags = layer.flags; this.unshaded = flags & 1 /* Unshaded */; this.sphereEnvironmentMap = flags & 2 /* SphereEnvMap */; this.twoSided = flags & 16 /* TwoSided */; this.unfogged = flags & 32 /* Unfogged */; this.noDepthTest = flags & 64 /* NoDepthTest */; this.noDepthSet = flags & 128 /* NoDepthSet */; this.depthMaskValue = (filterMode === 0 /* None */ || filterMode === 1 /* Transparent */); if (filterMode > 1 /* Transparent */) { this.blended = true; [this.blendSrc, this.blendDst] = (0, filtermode_1.layerFilterMode)(filterMode, gl); } if (textureAnimationId !== -1) { const textureAnimation = model.textureAnimations[textureAnimationId]; if (textureAnimation) { this.textureAnimation = textureAnimation; } } this.addVariants('KMTA', 'alpha'); this.addVariants('KMTF', 'textureId'); } bind(shader) { const gl = this.model.viewer.gl; // gl.uniform1f(shader.uniforms.u_unshaded, this.unshaded); gl.uniform1f(shader.uniforms['u_filterMode'], this.filterMode); if (this.blended) { gl.enable(gl.BLEND); gl.blendFunc(this.blendSrc, this.blendDst); } else { gl.disable(gl.BLEND); } if (this.twoSided) { gl.disable(gl.CULL_FACE); } else { gl.enable(gl.CULL_FACE); } if (this.noDepthTest) { gl.disable(gl.DEPTH_TEST); } else { gl.enable(gl.DEPTH_TEST); } if (this.noDepthSet) { gl.depthMask(false); } else { gl.depthMask(this.depthMaskValue); } } getAlpha(out, sequence, frame, counter) { return this.getScalarValue(out, 'KMTA', sequence, frame, counter, this.alpha); } getTextureId(out, sequence, frame, counter) { return this.getScalarValue(out, 'KMTF', sequence, frame, counter, this.textureId); } } exports.default = Layer; //# sourceMappingURL=layer.js.map