UNPKG

pixi.js

Version:

PixiJS — The HTML5 Creation Engine =============

72 lines (68 loc) 2.5 kB
'use strict'; var Extensions = require('../../../extensions/Extensions.js'); var compileHighShaderToProgram = require('../../high-shader/compileHighShaderToProgram.js'); var colorBit = require('../../high-shader/shader-bits/colorBit.js'); var generateTextureBatchBit = require('../../high-shader/shader-bits/generateTextureBatchBit.js'); var roundPixelsBit = require('../../high-shader/shader-bits/roundPixelsBit.js'); var getBatchSamplersUniformGroup = require('../../renderers/gl/shader/getBatchSamplersUniformGroup.js'); var Shader = require('../../renderers/shared/shader/Shader.js'); var State = require('../../renderers/shared/state/State.js'); var maxRecommendedTextures = require('./utils/maxRecommendedTextures.js'); "use strict"; class GlBatchAdaptor { constructor() { this._didUpload = false; this._tempState = State.State.for2d(); } init(batcherPipe) { const maxTextures = maxRecommendedTextures.getMaxTexturesPerBatch(); const glProgram = compileHighShaderToProgram.compileHighShaderGlProgram({ name: "batch", bits: [ colorBit.colorBitGl, generateTextureBatchBit.generateTextureBatchBitGl(maxTextures), roundPixelsBit.roundPixelsBitGl ] }); this._shader = new Shader.Shader({ glProgram, resources: { batchSamplers: getBatchSamplersUniformGroup.getBatchSamplersUniformGroup(maxTextures) } }); batcherPipe.renderer.runners.contextChange.add(this); } contextChange() { this._didUpload = false; } start(batchPipe, geometry) { const renderer = batchPipe.renderer; renderer.shader.bind(this._shader, this._didUpload); renderer.shader.updateUniformGroup(renderer.globalUniforms.uniformGroup); renderer.geometry.bind(geometry, this._shader.glProgram); } execute(batchPipe, batch) { const renderer = batchPipe.renderer; this._didUpload = true; this._tempState.blendMode = batch.blendMode; renderer.state.set(this._tempState); const textures = batch.textures.textures; for (let i = 0; i < batch.textures.count; i++) { renderer.texture.bind(textures[i], i); } renderer.geometry.draw("triangle-list", batch.size, batch.start); } destroy() { this._shader.destroy(true); this._shader = null; } } /** @ignore */ GlBatchAdaptor.extension = { type: [ Extensions.ExtensionType.WebGLPipesAdaptor ], name: "batch" }; exports.GlBatchAdaptor = GlBatchAdaptor; //# sourceMappingURL=GlBatchAdaptor.js.map