/* * File: NaormalMapShader.js * Subclass from LightShader (to take advantage of light sources) */ /*jslint node: true, vars: true */ /*global gEngine, SpriteShader, LightShader, ShaderLightAtIndex, vec4 */ /* 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 IllumShader(vertexShaderPath, fragmentShaderPath) { // Call super class constructor LightShader.call(this, vertexShaderPath, fragmentShaderPath); // call super class constructor // this is the material property of the Renderable this.mMaterial = null; this.mMaterialLoader = new ShaderMaterial(this.mCompiledShader); var gl = gEngine.Core.getGL(); // Reference to the camera position this.mCameraPos = null; // points to a vec3 this.mCameraPosRef = gl.getUniformLocation(this.mCompiledShader, "uCameraPosition"); // reference to the normal map sampler this.mNormalSamplerRef = gl.getUniformLocation(this.mCompiledShader, "uNormalSampler"); } gEngine.Core.inheritPrototype(IllumShader, LightShader); // // // Overriding the Activation of the shader for rendering IllumShader.prototype.activateShader = function(pixelColor, aCamera) { // first call the super class's activate LightShader.prototype.activateShader.call(this, pixelColor, aCamera); var gl = gEngine.Core.getGL(); gl.uniform1i(this.mNormalSamplerRef, 1); // binds to texture unit 1 // do not need to set up texture coordinate buffer // as we are going to use the ones from the sprite texture // in the fragment shader this.mMaterialLoader.loadToShader(this.mMaterial); gl.uniform3fv(this.mCameraPosRef, this.mCameraPos); }; IllumShader.prototype.setMaterialAndCameraPos = function(m, p) { this.mMaterial = m; this.mCameraPos = p; }; //