From 3644cb6def4f681c99959e5729e78ea353441fad Mon Sep 17 00:00:00 2001
From: Kris Kowal
Date: Fri, 6 Jul 2012 12:34:53 -0700
Subject: Normalize to unix line terminators
---
.../RDGE/src/core/script/RenderProcs.js | 1022 ++++++++++----------
1 file changed, 511 insertions(+), 511 deletions(-)
(limited to 'js/helper-classes/RDGE/src/core/script/RenderProcs.js')
diff --git a/js/helper-classes/RDGE/src/core/script/RenderProcs.js b/js/helper-classes/RDGE/src/core/script/RenderProcs.js
index 1583ea14..1f0d3b3c 100755
--- a/js/helper-classes/RDGE/src/core/script/RenderProcs.js
+++ b/js/helper-classes/RDGE/src/core/script/RenderProcs.js
@@ -1,511 +1,511 @@
-/*
-Copyright (c) 2012, Motorola Mobility, Inc
-All Rights Reserved.
-BSD License.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- - Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of Motorola Mobility nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
- */
-
-// RDGE namespaces
-var RDGE = RDGE || {};
-
-/**
-* supported uniform types
-*/
-RDGE.UNIFORMTYPE = function () {
- this.INT = 0x3F0;
- this.FLOAT = 0x3E8;
- this.FLOAT2 = 0x3E9;
- this.FLOAT3 = 0x3EA;
- this.FLOAT4 = 0x3EB;
- this.MATRIX3 = 0x3EC;
- this.MATRIX4 = 0x3ED;
- this.TEXTURE2D = 0x3EE;
- this.TEXTURECUBE = 0x3EF;
-};
-
-/**
-* RDGE.RenderObject - contains references to all the data need to render, including vertex buffers, uniform handles, and matrices
-* @param shaderHandle
-*/
-RDGE.RenderObject = function (shaderHandle) {
- this.shader = shaderHandle;
- this.world = null;
- this.bindings = new RDGE.ShaderData();
- this.initRenderProc = null;
- this.renderProc = null;
- this.postRenderProc = null;
-};
-
-/**
-* Adds a uniform to the render object to bound during render
-* @param name - name of the uniform
-* @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
-* @param type - type of uniform, use RDGE.UNIFORMTYPE
-*/
-RDGE.RenderObject.prototype.addUniform = function (name, value, type) {
- var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
- if (uniform) {
- uniform.debugName = name;
- this.bindings.uniforms.push(new RDGE.UniformPair(uniform, value, type));
- }
- /*
- else
- {
- gl.console.log("ERROR: uniform - " + name + " not found!");
- }
- */
-};
-
-/**
-* Adds a uniform to the render object to bound during render
-* @param name - name of the uniform
-* @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
-* @param type - type of uniform, use RDGE.UNIFORMTYPE
-*/
-RDGE.RenderObject.prototype.addUniformArray = function (name, value, type, size) {
- var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
- if (uniform) {
- for (var index = 0; index < size; index++) {
- uniform.debugName = name + index;
- this.bindings.uniforms.push(new RDGE.UniformPair(uniform, value[index], type));
- uniform += value[index].length;
- value++;
- }
- }
- /*
- else
- {
- gl.console.log("ERROR: uniform - " + name + " not found!");
- }*/
-};
-
-/**
-* Add texture to uniform
-* @param name - handle to the texture
-* @param unit - texture slot to use
-* @param type - RDGE.UNIFORMTYPE.TEXTURE2D or TEXTURE2D.TEXTURECUBE
-*/
-RDGE.RenderObject.prototype.addTexture = function (name, unit, type) {
- var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
- if (uniform) {
- this.bindings.textures.push(new RDGE.TexUniform(uniform, unit, type));
- }
- /*
- else
- {
- gl.console.log("ERROR: texture uniform - " + name + " not found!");
- }
- */
-};
-
-/**
-* Adds a vertex buffer to the render object
-* @param buffer - buffer to use
-* @param glBufferType - type of buffer i.e. gl.ARRAY_BUFFER
-* @param attribSize - if using attrib the size of an element (3 for vec3)
-* @param attribIndex - the index slot the attrib goes in
-* @param glAttribType - type of the attrib i.e. gl.FLOAT
-*/
-RDGE.RenderObject.prototype.addBuffers = function (buffer, glBufferType, attribSize, attribIndex, glAttribType) {
- //gl.useProgram(this.shader);
- if (attribSize == undefined || attribIndex == undefined || glAttribType == undefined ||
- attribSize == null || attribIndex == null || glAttribType == null) {
- this.bindings.buffers.push(new RDGE.BufferAttrib(buffer, glBufferType, null, null, null));
- }
- else {
- this.bindings.buffers.push(new RDGE.BufferAttrib(buffer, glBufferType, attribSize, attribIndex, glAttribType));
- }
- //gl.useProgram(null);
-};
-
-/**
-* bind the matrices, vertices and floats to shader uniforms
-*/
-RDGE.RenderObject.prototype.bindUniforms = function () {
- for (var uniIndex = 0; uniIndex < this.bindings.uniforms.length; uniIndex++) {
- var bind = this.bindings.uniforms[uniIndex];
- switch (bind.type) {
- case RDGE.UNIFORMTYPE.INT:
- RDGE.globals.gl.uniform1i(bind.uniform, bind.value);
- break;
- case RDGE.UNIFORMTYPE.FLOAT:
- RDGE.globals.gl.uniform1f(bind.uniform, bind.value);
- break;
- case RDGE.UNIFORMTYPE.FLOAT2:
- RDGE.globals.gl.uniform2fv(bind.uniform, bind.value);
- break;
- case RDGE.UNIFORMTYPE.FLOAT3:
- RDGE.globals.gl.uniform3fv(bind.uniform, bind.value);
- break;
- case RDGE.UNIFORMTYPE.FLOAT4:
- RDGE.globals.gl.uniform4fv(bind.uniform, bind.value);
- break;
- case RDGE.UNIFORMTYPE.MATRIX3:
- RDGE.globals.gl.uniformMatrix3fv(bind.uniform, false, bind.value);
- break;
- case RDGE.UNIFORMTYPE.MATRIX4:
- RDGE.globals.gl.uniformMatrix4fv(bind.uniform, false, bind.value);
- break;
- default:
- // gl.console.log("RDGE.RenderObject: trying to bind unknown texture type");
- break;
- }
- }
-};
-
-/**
-* binds the texture uniform to texture slots
-*/
-RDGE.RenderObject.prototype.bindTextures = function () {
- for (var uniIndex = 0; uniIndex < this.bindings.textures.length; uniIndex++) {
- var bind = this.bindings.textures[uniIndex];
- var error = 0;
- switch (bind.type) {
- case RDGE.UNIFORMTYPE.TEXTURE2D:
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0 + bind.unit);
- RDGE.globals.gl.uniform1i(bind.uniform, bind.unit);
- break;
- case RDGE.UNIFORMTYPE.TEXTURECUBE:
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0 + bind.unit);
- RDGE.globals.gl.uniform1i(bind.uniform, bind.unit);
- break;
- default:
- // gl.console.log("RDGE.RenderObject: trying to bind unknown texture type");
- break;
- }
- }
-};
-
-/**
-* Binds all buffers and enables any vertexAttribs
-*/
-RDGE.RenderObject.prototype.bindBuffers = function () {
- for (var bufIndex = 0; bufIndex < this.bindings.buffers.length; bufIndex++) {
- var bind = this.bindings.buffers[bufIndex];
- RDGE.globals.gl.bindBuffer(bind.glBufferType, bind.buffer);
-
- if (bind.glAttribType != null) {
- // enable the attribute and point buffer to it
- RDGE.globals.gl.enableVertexAttribArray(bind.attribIndex);
-
- RDGE.globals.gl.vertexAttribPointer(bind.attribIndex, bind.attribSize, bind.glAttribType, false, 0, 0);
- }
- }
-};
-
-RDGE.RenderObject.prototype.unBindBuffers = function () {
- for (var bufIndex = 0; bufIndex < this.bindings.buffers.length; bufIndex++) {
- var bind = this.bindings.buffers[bufIndex];
-
- if (bind.glAttribType != null) {
- // enable the attribute and point buffer to it
- RDGE.globals.gl.disableVertexAttribArray(bind.attribIndex);
- }
-
- RDGE.globals.gl.bindBuffer(bind.glBufferType, null);
- }
-};
-
-RDGE.RenderObject.prototype.initialize = function (initRenderProc) {
- initRenderProc(this);
-};
-
-RDGE.RenderObject.prototype.clear = function () {
- this.world = RDGE.mat4.identity();
- this.bindings = new RDGE.ShaderData();
-};
-
-/***
-* Shader data proto
-*/
-RDGE.ShaderData = function () {
- this.uniforms = [];
- this.textures = [];
- this.buffers = [];
-};
-
-/***
-* Structure to contain reference data for binding to during render
-*/
-RDGE.UniformPair = function (uniform, value, type) {
- this.uniform = uniform;
- this.value = value;
- this.type = type;
-};
-
-RDGE.TexUniform = function (uniform, unit, type) {
- this.uniform = uniform;
- this.unit = unit;
- this.type = type;
-};
-
-RDGE.BufferAttrib = function (buffer, glBufferType, attribSize, attribIndex, glAttribType) {
- // buffer data
- this.buffer = buffer;
- this.glBufferType = glBufferType;
-
- // attribute data (can be null)
- this.attribSize = attribSize;
- this.glAttribType = glAttribType;
- this.attribIndex = attribIndex;
-};
-
-RDGE.setActiveTexture = function (id, texture) {
- RDGE.globals.gl.activeTexture(id);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, texture);
-};
-
-RDGE.renderProcDefault = function (primSet) {
- //gl.disable(gl.DEPTH_TEST);
- //gl.disable(gl.CULL_FACE);
- var activeCam = RDGE.globals.cameraManager.getActiveCamera();
- RDGE.globals.gl.mvMatrix = activeCam.view;
- RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(RDGE.globals.gl.mvMatrix, primSet.parentMesh.world);
- RDGE.globals.gl.invMvMatrix = RDGE.mat4.inverse(RDGE.globals.gl.mvMatrix);
- RDGE.globals.gl.normalMatrix = RDGE.mat4.transpose(RDGE.globals.gl.invMvMatrix);
-
- // update shadow light MV matrix
- RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
- // Bind the texture
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set1).diff);
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE1);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set2).diff);
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE2);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set1).spec);
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE3);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set2).spec);
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE4);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.env));
-
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE5);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.envDiff));
-
- // stickers
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE7, RDGE.globals.cam.stickerTexture[0]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE8, RDGE.globals.cam.stickerTexture[1]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE9, RDGE.globals.cam.stickerTexture[2]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE10, RDGE.globals.cam.stickerTexture[3]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE11, RDGE.globals.cam.stickerTexture[4]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE12, RDGE.globals.cam.stickerTexture[5]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE13, RDGE.globals.cam.stickerTexture[6]);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE14, RDGE.globals.cam.stickerTexture[7]);
-
- // copy current cams matrix
- for (var i = 0; i < 8; i++) {
- primSet.parentMesh.stickers[i].load(RDGE.globals.cam.stickers[i]);
- primSet.parentMesh.stickersPos[i].setvec(RDGE.globals.cam.stickersPos[i]);
- }
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE15, arrayPeek(primSet.material.tex.set1).norm);
- RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE6, arrayPeek(primSet.material.tex.set2).norm);
-
- //bind buffers and attribs
- arrayPeek(primSet.material.renderObj).bindBuffers();
-
- // bind shader uniforms
- arrayPeek(primSet.material.renderObj).bindTextures();
-
- arrayPeek(primSet.material.renderObj).bindUniforms();
-
- RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
-};
-
-RDGE.renderProcLines = function (renderObj, r, g, b, a) {
- RDGE.globals.gl.useProgram(renderObj.shader);
-
- renderObj.lineColor[0] = r;
- renderObj.lineColor[1] = g;
- renderObj.lineColor[2] = b;
- renderObj.lineColor[3] = a;
-
- //bind buffers and attribs
- renderObj.bindBuffers();
-
- // bind shader uniforms
- renderObj.bindUniforms();
-
- // draw the AABBs
- RDGE.globals.gl.drawArrays(RDGE.globals.gl.LINES, 0, renderObj.numPoints / 3);
-
- RDGE.globals.gl.useProgram(null);
-};
-
-RDGE.renderProcScreenQuad = function (quad) {
- RDGE.globals.gl.disable(RDGE.globals.gl.DEPTH_TEST);
- RDGE.globals.gl.useProgram(quad.shader);
-
- //bind buffers and attribs
- quad.renderObj.bindBuffers();
-
- // bind shader uniforms
- quad.renderObj.bindTextures();
- quad.renderObj.bindUniforms();
-
- // render
- var offset = 0;
- // Bind the texture
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, quad.texture);
- RDGE.globals.gl.drawArrays(RDGE.globals.gl.TRIANGLES, 0, 6);
-
- RDGE.globals.gl.useProgram(null);
- RDGE.globals.gl.enable(RDGE.globals.gl.DEPTH_TEST);
-};
-
-// post render proc
-RDGE.postRenderProcDefault = function (primSet) {
- RDGE.globals.gl.useProgram(arrayPeek(primSet.material.renderObj).shader);
-
- //bind buffers and attribs
- //arrayPeek(primSet.material.renderObj).unBindBuffers();
-
- RDGE.globals.gl.useProgram(null);
-};
-
-RDGE.renderProcDepthMap = function (primSet) {
- RDGE.globals.gl.useProgram(g_depthMap.shader)
-
- //bind buffers
- arrayPeek(primSet.material.renderObj).bindBuffers();
-
- g_depthMap.bindUniforms();
-
- RDGE.globals.gl.enable(RDGE.globals.gl.DEPTH_TEST);
- RDGE.globals.gl.enable(RDGE.globals.gl.CULL_FACE);
- RDGE.globals.gl.enable(RDGE.globals.gl.POLYGON_OFFSET_FILL);
- RDGE.globals.gl.cullFace(RDGE.globals.gl.FRONT);
-
- RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
-
- RDGE.globals.gl.cullFace(RDGE.globals.gl.BACK);
- RDGE.globals.gl.disable(RDGE.globals.gl.POLYGON_OFFSET_FILL);
- RDGE.globals.gl.disable(RDGE.globals.gl.CULL_FACE);
- //gl.disable(gl.DEPTH_TEST);
-
- RDGE.globals.gl.useProgram(null);
-};
-
-RDGE.renderProcShadowReceiver = function (primSet) {
-
- // ---- initial pass, render shadow to target
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTarget.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, primSet.shadowTarget.frameBuffer.width, primSet.shadowTarget.frameBuffer.height);
- RDGE.globals.gl.clearDepth(g_farZ);
- RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
-
- RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
-
- // Bind the texture
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, g_depthMap.depthRT);
-
- // bind shader uniforms
- arrayPeek(primSet.material.renderObj).bindTextures();
-
- //gl.disable(gl.DEPTH_TEST);
- //gl.enable(gl.CULL_FACE);
-
- RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(g_defaultView, primSet.parentMesh.world);
-
- arrayPeek(primSet.material.renderObj).bindUniforms();
- error = RDGE.globals.gl.getError();
-
- //bind buffers and attribs
- arrayPeek(primSet.material.renderObj).bindBuffers();
- RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
-
- //gl.enable(gl.DEPTH_TEST);
- //gl.disable(gl.CULL_FACE);
-
- RDGE.globals.gl.useProgram(null);
-
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTarget);
- RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
-
- //----------change buffers render blur pass to quad
-
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTargetFinal.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, primSet.shadowTargetFinal.frameBuffer.width, primSet.shadowTargetFinal.frameBuffer.height);
- RDGE.globals.gl.clearDepth(g_farZ);
- RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
-
- primSet.screenQuad.setTexture(primSet.shadowTarget);
- primSet.screenQuad.render(RDGE.renderProcScreenQuad);
-
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTargetFinal);
- RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
-
- //----------change buffers render blur pass to quad again
-
-
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTarget.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, primSet.shadowTarget.frameBuffer.width, primSet.shadowTarget.frameBuffer.height);
- RDGE.globals.gl.clearDepth(g_farZ);
- RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
-
- primSet.screenQuad.setTexture(primSet.shadowTargetFinal);
- primSet.screenQuad.render(RDGE.renderProcScreenQuad);
-
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTarget);
- RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
- RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
- RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
-};
-
-RDGE.renderProcShadowProjection = function (primSet) {
- RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
- // Bind the texture
-
- var error = RDGE.globals.gl.getError();
- RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
- error = RDGE.globals.gl.getError(RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, g_depthMap.shadowTarget));
- RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, RDGE.globals.meshMan.getModelByName("backdropReceiver").mesh.shadowToProject);
-
- // bind shader uniforms
- arrayPeek(primSet.material.renderObj).bindTextures();
-
- RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(g_defaultView, primSet.parentMesh.world);
-
- arrayPeek(primSet.material.renderObj).bindUniforms();
-
- //bind buffers and attribs
- arrayPeek(primSet.material.renderObj).bindBuffers();
-
- RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
-
- RDGE.globals.gl.useProgram(null);
-};
+/*
+Copyright (c) 2012, Motorola Mobility, Inc
+All Rights Reserved.
+BSD License.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ - Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of Motorola Mobility nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// RDGE namespaces
+var RDGE = RDGE || {};
+
+/**
+* supported uniform types
+*/
+RDGE.UNIFORMTYPE = function () {
+ this.INT = 0x3F0;
+ this.FLOAT = 0x3E8;
+ this.FLOAT2 = 0x3E9;
+ this.FLOAT3 = 0x3EA;
+ this.FLOAT4 = 0x3EB;
+ this.MATRIX3 = 0x3EC;
+ this.MATRIX4 = 0x3ED;
+ this.TEXTURE2D = 0x3EE;
+ this.TEXTURECUBE = 0x3EF;
+};
+
+/**
+* RDGE.RenderObject - contains references to all the data need to render, including vertex buffers, uniform handles, and matrices
+* @param shaderHandle
+*/
+RDGE.RenderObject = function (shaderHandle) {
+ this.shader = shaderHandle;
+ this.world = null;
+ this.bindings = new RDGE.ShaderData();
+ this.initRenderProc = null;
+ this.renderProc = null;
+ this.postRenderProc = null;
+};
+
+/**
+* Adds a uniform to the render object to bound during render
+* @param name - name of the uniform
+* @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
+* @param type - type of uniform, use RDGE.UNIFORMTYPE
+*/
+RDGE.RenderObject.prototype.addUniform = function (name, value, type) {
+ var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
+ if (uniform) {
+ uniform.debugName = name;
+ this.bindings.uniforms.push(new RDGE.UniformPair(uniform, value, type));
+ }
+ /*
+ else
+ {
+ gl.console.log("ERROR: uniform - " + name + " not found!");
+ }
+ */
+};
+
+/**
+* Adds a uniform to the render object to bound during render
+* @param name - name of the uniform
+* @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
+* @param type - type of uniform, use RDGE.UNIFORMTYPE
+*/
+RDGE.RenderObject.prototype.addUniformArray = function (name, value, type, size) {
+ var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
+ if (uniform) {
+ for (var index = 0; index < size; index++) {
+ uniform.debugName = name + index;
+ this.bindings.uniforms.push(new RDGE.UniformPair(uniform, value[index], type));
+ uniform += value[index].length;
+ value++;
+ }
+ }
+ /*
+ else
+ {
+ gl.console.log("ERROR: uniform - " + name + " not found!");
+ }*/
+};
+
+/**
+* Add texture to uniform
+* @param name - handle to the texture
+* @param unit - texture slot to use
+* @param type - RDGE.UNIFORMTYPE.TEXTURE2D or TEXTURE2D.TEXTURECUBE
+*/
+RDGE.RenderObject.prototype.addTexture = function (name, unit, type) {
+ var uniform = RDGE.globals.gl.getUniformLocation(this.shader, name);
+ if (uniform) {
+ this.bindings.textures.push(new RDGE.TexUniform(uniform, unit, type));
+ }
+ /*
+ else
+ {
+ gl.console.log("ERROR: texture uniform - " + name + " not found!");
+ }
+ */
+};
+
+/**
+* Adds a vertex buffer to the render object
+* @param buffer - buffer to use
+* @param glBufferType - type of buffer i.e. gl.ARRAY_BUFFER
+* @param attribSize - if using attrib the size of an element (3 for vec3)
+* @param attribIndex - the index slot the attrib goes in
+* @param glAttribType - type of the attrib i.e. gl.FLOAT
+*/
+RDGE.RenderObject.prototype.addBuffers = function (buffer, glBufferType, attribSize, attribIndex, glAttribType) {
+ //gl.useProgram(this.shader);
+ if (attribSize == undefined || attribIndex == undefined || glAttribType == undefined ||
+ attribSize == null || attribIndex == null || glAttribType == null) {
+ this.bindings.buffers.push(new RDGE.BufferAttrib(buffer, glBufferType, null, null, null));
+ }
+ else {
+ this.bindings.buffers.push(new RDGE.BufferAttrib(buffer, glBufferType, attribSize, attribIndex, glAttribType));
+ }
+ //gl.useProgram(null);
+};
+
+/**
+* bind the matrices, vertices and floats to shader uniforms
+*/
+RDGE.RenderObject.prototype.bindUniforms = function () {
+ for (var uniIndex = 0; uniIndex < this.bindings.uniforms.length; uniIndex++) {
+ var bind = this.bindings.uniforms[uniIndex];
+ switch (bind.type) {
+ case RDGE.UNIFORMTYPE.INT:
+ RDGE.globals.gl.uniform1i(bind.uniform, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.FLOAT:
+ RDGE.globals.gl.uniform1f(bind.uniform, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.FLOAT2:
+ RDGE.globals.gl.uniform2fv(bind.uniform, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.FLOAT3:
+ RDGE.globals.gl.uniform3fv(bind.uniform, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.FLOAT4:
+ RDGE.globals.gl.uniform4fv(bind.uniform, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.MATRIX3:
+ RDGE.globals.gl.uniformMatrix3fv(bind.uniform, false, bind.value);
+ break;
+ case RDGE.UNIFORMTYPE.MATRIX4:
+ RDGE.globals.gl.uniformMatrix4fv(bind.uniform, false, bind.value);
+ break;
+ default:
+ // gl.console.log("RDGE.RenderObject: trying to bind unknown texture type");
+ break;
+ }
+ }
+};
+
+/**
+* binds the texture uniform to texture slots
+*/
+RDGE.RenderObject.prototype.bindTextures = function () {
+ for (var uniIndex = 0; uniIndex < this.bindings.textures.length; uniIndex++) {
+ var bind = this.bindings.textures[uniIndex];
+ var error = 0;
+ switch (bind.type) {
+ case RDGE.UNIFORMTYPE.TEXTURE2D:
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0 + bind.unit);
+ RDGE.globals.gl.uniform1i(bind.uniform, bind.unit);
+ break;
+ case RDGE.UNIFORMTYPE.TEXTURECUBE:
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0 + bind.unit);
+ RDGE.globals.gl.uniform1i(bind.uniform, bind.unit);
+ break;
+ default:
+ // gl.console.log("RDGE.RenderObject: trying to bind unknown texture type");
+ break;
+ }
+ }
+};
+
+/**
+* Binds all buffers and enables any vertexAttribs
+*/
+RDGE.RenderObject.prototype.bindBuffers = function () {
+ for (var bufIndex = 0; bufIndex < this.bindings.buffers.length; bufIndex++) {
+ var bind = this.bindings.buffers[bufIndex];
+ RDGE.globals.gl.bindBuffer(bind.glBufferType, bind.buffer);
+
+ if (bind.glAttribType != null) {
+ // enable the attribute and point buffer to it
+ RDGE.globals.gl.enableVertexAttribArray(bind.attribIndex);
+
+ RDGE.globals.gl.vertexAttribPointer(bind.attribIndex, bind.attribSize, bind.glAttribType, false, 0, 0);
+ }
+ }
+};
+
+RDGE.RenderObject.prototype.unBindBuffers = function () {
+ for (var bufIndex = 0; bufIndex < this.bindings.buffers.length; bufIndex++) {
+ var bind = this.bindings.buffers[bufIndex];
+
+ if (bind.glAttribType != null) {
+ // enable the attribute and point buffer to it
+ RDGE.globals.gl.disableVertexAttribArray(bind.attribIndex);
+ }
+
+ RDGE.globals.gl.bindBuffer(bind.glBufferType, null);
+ }
+};
+
+RDGE.RenderObject.prototype.initialize = function (initRenderProc) {
+ initRenderProc(this);
+};
+
+RDGE.RenderObject.prototype.clear = function () {
+ this.world = RDGE.mat4.identity();
+ this.bindings = new RDGE.ShaderData();
+};
+
+/***
+* Shader data proto
+*/
+RDGE.ShaderData = function () {
+ this.uniforms = [];
+ this.textures = [];
+ this.buffers = [];
+};
+
+/***
+* Structure to contain reference data for binding to during render
+*/
+RDGE.UniformPair = function (uniform, value, type) {
+ this.uniform = uniform;
+ this.value = value;
+ this.type = type;
+};
+
+RDGE.TexUniform = function (uniform, unit, type) {
+ this.uniform = uniform;
+ this.unit = unit;
+ this.type = type;
+};
+
+RDGE.BufferAttrib = function (buffer, glBufferType, attribSize, attribIndex, glAttribType) {
+ // buffer data
+ this.buffer = buffer;
+ this.glBufferType = glBufferType;
+
+ // attribute data (can be null)
+ this.attribSize = attribSize;
+ this.glAttribType = glAttribType;
+ this.attribIndex = attribIndex;
+};
+
+RDGE.setActiveTexture = function (id, texture) {
+ RDGE.globals.gl.activeTexture(id);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, texture);
+};
+
+RDGE.renderProcDefault = function (primSet) {
+ //gl.disable(gl.DEPTH_TEST);
+ //gl.disable(gl.CULL_FACE);
+ var activeCam = RDGE.globals.cameraManager.getActiveCamera();
+ RDGE.globals.gl.mvMatrix = activeCam.view;
+ RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(RDGE.globals.gl.mvMatrix, primSet.parentMesh.world);
+ RDGE.globals.gl.invMvMatrix = RDGE.mat4.inverse(RDGE.globals.gl.mvMatrix);
+ RDGE.globals.gl.normalMatrix = RDGE.mat4.transpose(RDGE.globals.gl.invMvMatrix);
+
+ // update shadow light MV matrix
+ RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
+ // Bind the texture
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set1).diff);
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE1);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set2).diff);
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE2);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set1).spec);
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE3);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.set2).spec);
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE4);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.env));
+
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE5);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, arrayPeek(primSet.material.tex.envDiff));
+
+ // stickers
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE7, RDGE.globals.cam.stickerTexture[0]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE8, RDGE.globals.cam.stickerTexture[1]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE9, RDGE.globals.cam.stickerTexture[2]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE10, RDGE.globals.cam.stickerTexture[3]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE11, RDGE.globals.cam.stickerTexture[4]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE12, RDGE.globals.cam.stickerTexture[5]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE13, RDGE.globals.cam.stickerTexture[6]);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE14, RDGE.globals.cam.stickerTexture[7]);
+
+ // copy current cams matrix
+ for (var i = 0; i < 8; i++) {
+ primSet.parentMesh.stickers[i].load(RDGE.globals.cam.stickers[i]);
+ primSet.parentMesh.stickersPos[i].setvec(RDGE.globals.cam.stickersPos[i]);
+ }
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE15, arrayPeek(primSet.material.tex.set1).norm);
+ RDGE.setActiveTexture(RDGE.globals.gl.TEXTURE6, arrayPeek(primSet.material.tex.set2).norm);
+
+ //bind buffers and attribs
+ arrayPeek(primSet.material.renderObj).bindBuffers();
+
+ // bind shader uniforms
+ arrayPeek(primSet.material.renderObj).bindTextures();
+
+ arrayPeek(primSet.material.renderObj).bindUniforms();
+
+ RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
+};
+
+RDGE.renderProcLines = function (renderObj, r, g, b, a) {
+ RDGE.globals.gl.useProgram(renderObj.shader);
+
+ renderObj.lineColor[0] = r;
+ renderObj.lineColor[1] = g;
+ renderObj.lineColor[2] = b;
+ renderObj.lineColor[3] = a;
+
+ //bind buffers and attribs
+ renderObj.bindBuffers();
+
+ // bind shader uniforms
+ renderObj.bindUniforms();
+
+ // draw the AABBs
+ RDGE.globals.gl.drawArrays(RDGE.globals.gl.LINES, 0, renderObj.numPoints / 3);
+
+ RDGE.globals.gl.useProgram(null);
+};
+
+RDGE.renderProcScreenQuad = function (quad) {
+ RDGE.globals.gl.disable(RDGE.globals.gl.DEPTH_TEST);
+ RDGE.globals.gl.useProgram(quad.shader);
+
+ //bind buffers and attribs
+ quad.renderObj.bindBuffers();
+
+ // bind shader uniforms
+ quad.renderObj.bindTextures();
+ quad.renderObj.bindUniforms();
+
+ // render
+ var offset = 0;
+ // Bind the texture
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, quad.texture);
+ RDGE.globals.gl.drawArrays(RDGE.globals.gl.TRIANGLES, 0, 6);
+
+ RDGE.globals.gl.useProgram(null);
+ RDGE.globals.gl.enable(RDGE.globals.gl.DEPTH_TEST);
+};
+
+// post render proc
+RDGE.postRenderProcDefault = function (primSet) {
+ RDGE.globals.gl.useProgram(arrayPeek(primSet.material.renderObj).shader);
+
+ //bind buffers and attribs
+ //arrayPeek(primSet.material.renderObj).unBindBuffers();
+
+ RDGE.globals.gl.useProgram(null);
+};
+
+RDGE.renderProcDepthMap = function (primSet) {
+ RDGE.globals.gl.useProgram(g_depthMap.shader)
+
+ //bind buffers
+ arrayPeek(primSet.material.renderObj).bindBuffers();
+
+ g_depthMap.bindUniforms();
+
+ RDGE.globals.gl.enable(RDGE.globals.gl.DEPTH_TEST);
+ RDGE.globals.gl.enable(RDGE.globals.gl.CULL_FACE);
+ RDGE.globals.gl.enable(RDGE.globals.gl.POLYGON_OFFSET_FILL);
+ RDGE.globals.gl.cullFace(RDGE.globals.gl.FRONT);
+
+ RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
+
+ RDGE.globals.gl.cullFace(RDGE.globals.gl.BACK);
+ RDGE.globals.gl.disable(RDGE.globals.gl.POLYGON_OFFSET_FILL);
+ RDGE.globals.gl.disable(RDGE.globals.gl.CULL_FACE);
+ //gl.disable(gl.DEPTH_TEST);
+
+ RDGE.globals.gl.useProgram(null);
+};
+
+RDGE.renderProcShadowReceiver = function (primSet) {
+
+ // ---- initial pass, render shadow to target
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTarget.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, primSet.shadowTarget.frameBuffer.width, primSet.shadowTarget.frameBuffer.height);
+ RDGE.globals.gl.clearDepth(g_farZ);
+ RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
+
+ RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
+
+ // Bind the texture
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, g_depthMap.depthRT);
+
+ // bind shader uniforms
+ arrayPeek(primSet.material.renderObj).bindTextures();
+
+ //gl.disable(gl.DEPTH_TEST);
+ //gl.enable(gl.CULL_FACE);
+
+ RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(g_defaultView, primSet.parentMesh.world);
+
+ arrayPeek(primSet.material.renderObj).bindUniforms();
+ error = RDGE.globals.gl.getError();
+
+ //bind buffers and attribs
+ arrayPeek(primSet.material.renderObj).bindBuffers();
+ RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
+
+ //gl.enable(gl.DEPTH_TEST);
+ //gl.disable(gl.CULL_FACE);
+
+ RDGE.globals.gl.useProgram(null);
+
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTarget);
+ RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
+
+ //----------change buffers render blur pass to quad
+
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTargetFinal.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, primSet.shadowTargetFinal.frameBuffer.width, primSet.shadowTargetFinal.frameBuffer.height);
+ RDGE.globals.gl.clearDepth(g_farZ);
+ RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
+
+ primSet.screenQuad.setTexture(primSet.shadowTarget);
+ primSet.screenQuad.render(RDGE.renderProcScreenQuad);
+
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTargetFinal);
+ RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
+
+ //----------change buffers render blur pass to quad again
+
+
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, primSet.shadowTarget.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, primSet.shadowTarget.frameBuffer.width, primSet.shadowTarget.frameBuffer.height);
+ RDGE.globals.gl.clearDepth(g_farZ);
+ RDGE.globals.gl.clear(RDGE.globals.gl.COLOR_BUFFER_BIT | RDGE.globals.gl.DEPTH_BUFFER_BIT);
+
+ primSet.screenQuad.setTexture(primSet.shadowTargetFinal);
+ primSet.screenQuad.render(RDGE.renderProcScreenQuad);
+
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, primSet.shadowTarget);
+ RDGE.globals.gl.generateMipmap(RDGE.globals.gl.TEXTURE_2D);
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, null);
+ RDGE.globals.gl.bindFramebuffer(RDGE.globals.gl.FRAMEBUFFER, theSceneRTT.frameBuffer);
+ RDGE.globals.gl.viewport(0, 0, theSceneRTT.frameBuffer.width, theSceneRTT.frameBuffer.height);
+};
+
+RDGE.renderProcShadowProjection = function (primSet) {
+ RDGE.globals.gl.useProgram(arrayPeek(primSet.material.shader).shaderHandle);
+ // Bind the texture
+
+ var error = RDGE.globals.gl.getError();
+ RDGE.globals.gl.activeTexture(RDGE.globals.gl.TEXTURE0);
+ error = RDGE.globals.gl.getError(RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, g_depthMap.shadowTarget));
+ RDGE.globals.gl.bindTexture(RDGE.globals.gl.TEXTURE_2D, RDGE.globals.meshMan.getModelByName("backdropReceiver").mesh.shadowToProject);
+
+ // bind shader uniforms
+ arrayPeek(primSet.material.renderObj).bindTextures();
+
+ RDGE.globals.gl.mvMatrix = RDGE.mat4.mul(g_defaultView, primSet.parentMesh.world);
+
+ arrayPeek(primSet.material.renderObj).bindUniforms();
+
+ //bind buffers and attribs
+ arrayPeek(primSet.material.renderObj).bindBuffers();
+
+ RDGE.globals.gl.drawElements(RDGE.globals.gl.TRIANGLES, primSet.size, RDGE.globals.gl.UNSIGNED_SHORT, primSet.indexInBuffer * 2);
+
+ RDGE.globals.gl.useProgram(null);
+};
--
cgit v1.2.3