Newer
Older
pixi.js / src / mesh / webgl / MeshRenderer.js
@Mat Groves Mat Groves on 9 Apr 2017 1 KB Bye bye pixi-gl-core!
import * as core from '../../core';

const byteSizeMap = { 5126: 4, 5123: 2, 5121: 1 };

/**
 * WebGL renderer plugin for tiling sprites
 *
 * @class
 * @memberof PIXI
 * @extends PIXI.ObjectRenderer
 */
export default class MeshRenderer extends core.ObjectRenderer
{

    /**
     * constructor for renderer
     *
     * @param {WebGLRenderer} renderer The renderer this tiling awesomeness works for.
     */
    constructor(renderer)
    {
        super(renderer);

        this.shader = null;
    }

    /**
     * Sets up the renderer context and necessary buffers.
     *
     * @private
     */
    contextChange()
    {
        this.gl = this.renderer.gl;
        this.CONTEXT_UID = this.renderer.CONTEXT_UID;
    }

    /**
     * renders mesh
     * @private
     * @param {PIXI.mesh.RawMesh} mesh mesh instance
     */
    render(mesh)
    {
        // bind the shader..
        const glShader = this.renderer.shader.bind(mesh.shader, true);

        // set the shader props..
        //if (glShader.uniformData.translationMatrix)
        //{
            // the transform!
          //  glShader.uniforms.translationMatrix = mesh.transform.worldTransform.toArray(true);
        //}

        // set unifomrs..
        this.renderer.shader.syncUniformGroup(mesh.shader.uniformGroup);

        // sync uniforms..
        this.renderer.state.setState(mesh.state);

        // bind the geometry...
        this.renderer.geometry.bind(mesh.geometry, glShader);
        // then render it
        mesh.geometry.glVertexArrayObjects[this.CONTEXT_UID].draw(mesh.drawMode, mesh.size, mesh.start, mesh.geometry.instanceCount);
    }

    /**
     * draws mesh
     * @param {PIXI.mesh.RawMesh} mesh mesh instance
     */
    draw(mesh)
    {
        mesh.geometry.glVertexArrayObjects[this.CONTEXT_UID].draw(mesh.drawMode, mesh.size, mesh.start, mesh.geometry.instanceCount);
    }
}

core.WebGLRenderer.registerPlugin('mesh', MeshRenderer);