/*
* File: SpriteShader.js
* Subclass from TextureShader
* Implements a Textured ShaderProgram object where texture coordinate can be changed
* at run time.
*/
/*jslint node: true, vars: true */
/*global gEngine: false, SimpleShader: false, TextureShader: false, Float32Array: false */
/* find out more about jslint: http://www.jslint.com/help.html */
"use strict"; // Operate in Strict mode such that variables must be declared before used!
//
// constructor
function SpriteShader(vertexShaderPath, fragmentShaderPath) {
// Call super class constructor
TextureShader.call(this, vertexShaderPath, fragmentShaderPath); // call SimpleShader constructor
this.mTexCoordBuffer = null; // this is the reference to gl buffer that contains the actual texture coordinate
var initTexCoord = [
1.0, 1.0,
0.0, 1.0,
1.0, 0.0,
0.0, 0.0
];
var gl = gEngine.Core.getGL();
this.mTexCoordBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.mTexCoordBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(initTexCoord), gl.DYNAMIC_DRAW);
// DYNAMIC_DRAW: says buffer content may change!
}
// get all the prototype functions from SimpleShader
gEngine.Core.inheritPrototype(SpriteShader, TextureShader);
//
//
// Overriding the Activation of the shader for rendering
SpriteShader.prototype.activateShader = function (pixelColor, aCamera) {
// first call the super class's activate
SimpleShader.prototype.activateShader.call(this, pixelColor, aCamera);
// now binds the proper texture coordinate buffer
var gl = gEngine.Core.getGL();
gl.bindBuffer(gl.ARRAY_BUFFER, this.mTexCoordBuffer);
gl.vertexAttribPointer(this.mShaderTextureCoordAttribute,
2,
gl.FLOAT,
false,
0,
0);
gl.enableVertexAttribArray(this.mShaderTextureCoordAttribute);
};
SpriteShader.prototype.setTextureCoordinate = function (texCoord) {
var gl = gEngine.Core.getGL();
gl.bindBuffer(gl.ARRAY_BUFFER, this.mTexCoordBuffer);
gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Float32Array(texCoord));
};
SpriteShader.prototype.cleanUp = function () {
var gl = gEngine.Core.getGL();
gl.deleteBuffer(this.mTexCoordBuffer);
// now call super class's clean up ...
SimpleShader.prototype.cleanUp.call(this);
};
// make sure these functions are defined, such that
// this shader can support LightRenderable and IllumRenderable
// will be override by LightShader
SpriteShader.prototype.setLights = function (l) { };
// will be override by IllumShader
SpriteShader.prototype.setMaterialAndCameraPos = function(m, p) { };
//