aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/RDGE/src/core/script/RenderProcs.js
diff options
context:
space:
mode:
authorPierre Frisch2011-12-22 07:25:50 -0800
committerValerio Virgillito2012-01-27 11:18:17 -0800
commitb89a7ee8b956c96a1dcee995ea840feddc5d4b27 (patch)
tree0f3136ab0ecdbbbed6a83576581af0a53124d6f1 /js/helper-classes/RDGE/src/core/script/RenderProcs.js
parent2401f05d1f4b94d45e4568b81fc73e67b969d980 (diff)
downloadninja-b89a7ee8b956c96a1dcee995ea840feddc5d4b27.tar.gz
First commit of Ninja to ninja-internal
Signed-off-by: Valerio Virgillito <rmwh84@motorola.com>
Diffstat (limited to 'js/helper-classes/RDGE/src/core/script/RenderProcs.js')
-rw-r--r--js/helper-classes/RDGE/src/core/script/RenderProcs.js536
1 files changed, 536 insertions, 0 deletions
diff --git a/js/helper-classes/RDGE/src/core/script/RenderProcs.js b/js/helper-classes/RDGE/src/core/script/RenderProcs.js
new file mode 100644
index 00000000..6d3b02df
--- /dev/null
+++ b/js/helper-classes/RDGE/src/core/script/RenderProcs.js
@@ -0,0 +1,536 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7/**
8 * supported uniform types
9 */
10function __UNIFORMTYPE()
11{
12 this.INT = 0x3F0;
13 this.FLOAT = 0x3E8;
14 this.FLOAT2 = 0x3E9;
15 this.FLOAT3 = 0x3EA;
16 this.FLOAT4 = 0x3EB;
17 this.MATRIX3 = 0x3EC;
18 this.MATRIX4 = 0x3ED;
19 this.TEXTURE2D = 0x3EE;
20 this.TEXTURECUBE = 0x3EF;
21}
22UNIFORMTYPE = new __UNIFORMTYPE();
23
24/**
25 * RenderObject - contains references to all the data need to render, including vertex buffers, uniform handles, and matrices
26 * @param shaderHandle
27 */
28function RenderObject(shaderHandle)
29{
30 this.shader = shaderHandle;
31 this.world = null;
32 this.bindings = new ShaderData();
33 this.initRenderProc = null;
34 this.renderProc = null;
35 this.postRenderProc = null;
36}
37
38/**
39 * Adds a uniform to the render object to bound during render
40 * @param name - name of the uniform
41 * @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
42 * @param type - type of uniform, use UNIFORMTYPE
43 */
44RenderObject.prototype.addUniform = function(name, value, type)
45{
46 var uniform = gl.getUniformLocation(this.shader, name);
47 if(uniform)
48 {
49 uniform.debugName = name;
50 this.bindings.uniforms.push( new UniformPair(uniform, value, type));
51 }
52/*
53 else
54 {
55 gl.console.log("ERROR: uniform - " + name + " not found!");
56 }
57*/
58};
59
60/**
61* Adds a uniform to the render object to bound during render
62* @param name - name of the uniform
63* @param value - reference to value that will get bound (will be referenced from now on, don't delete the ref)
64* @param type - type of uniform, use UNIFORMTYPE
65*/
66RenderObject.prototype.addUniformArray = function(name, value, type, size)
67{
68 var uniform = gl.getUniformLocation(this.shader, name);
69 if (uniform)
70 {
71 for (var index=0; index<size; index)
72 {
73 uniform.debugName = name+index;
74 this.bindings.uniforms.push( new UniformPair(uniform, value[index], type));
75 uniform+=value[index].length;
76 value++;
77 }
78 }
79/*
80 else
81 {
82 gl.console.log("ERROR: uniform - " + name + " not found!");
83 }*/
84};
85/**
86 * Add texture to uniform
87 * @param name - handle to the texture
88 * @param unit - texture slot to use
89 * @param type - UNIFORMTYPE.TEXTURE2D or TEXTURE2D.TEXTURECUBE
90 */
91RenderObject.prototype.addTexture = function(name, unit, type)
92{
93 var uniform = gl.getUniformLocation(this.shader, name);
94 if(uniform)
95 {
96 this.bindings.textures.push( new TexUniform(uniform, unit, type));
97 }
98/*
99 else
100 {
101 gl.console.log("ERROR: texture uniform - " + name + " not found!");
102 }
103*/
104};
105
106/**
107 * Adds a vertex buffer to the render object
108 * @param buffer - buffer to use
109 * @param glBufferType - type of buffer i.e. gl.ARRAY_BUFFER
110 * @param attribSize - if using attrib the size of an element (3 for vec3)
111 * @param attribIndex - the index slot the attrib goes in
112 * @param glAttribType - type of the attrib i.e. gl.FLOAT
113 */
114RenderObject.prototype.addBuffers = function(buffer, glBufferType, attribSize, attribIndex, glAttribType)
115{
116 //gl.useProgram(this.shader);
117 if( attribSize == undefined || attribIndex == undefined || glAttribType == undefined ||
118 attribSize == null || attribIndex == null || glAttribType == null )
119 {
120 this.bindings.buffers.push( new BufferAttrib(buffer, glBufferType, null, null, null));
121 }
122 else
123 {
124 this.bindings.buffers.push( new BufferAttrib(buffer, glBufferType, attribSize, attribIndex, glAttribType));
125 }
126 //gl.useProgram(null);
127};
128
129/**
130 * bind the matrices, vertices and floats to shader uniforms
131 */
132RenderObject.prototype.bindUniforms = function()
133{
134 for(var uniIndex = 0; uniIndex < this.bindings.uniforms.length; uniIndex++)
135 {
136 var bind = this.bindings.uniforms[uniIndex];
137 switch(bind.type)
138 {
139 case UNIFORMTYPE.INT:
140 gl.uniform1i(bind.uniform, bind.value);
141 break;
142 case UNIFORMTYPE.FLOAT:
143 gl.uniform1f(bind.uniform, bind.value);
144 break;
145 case UNIFORMTYPE.FLOAT2:
146 gl.uniform2fv(bind.uniform, bind.value);
147 break;
148 case UNIFORMTYPE.FLOAT3:
149 gl.uniform3fv(bind.uniform, bind.value);
150 break;
151 case UNIFORMTYPE.FLOAT4:
152 gl.uniform4fv(bind.uniform, bind.value);
153 break;
154 case UNIFORMTYPE.MATRIX3:
155 gl.uniformMatrix3fv(bind.uniform, false, bind.value);
156 break;
157 case UNIFORMTYPE.MATRIX4:
158 gl.uniformMatrix4fv(bind.uniform, false, bind.value);
159 break;
160 default:
161// gl.console.log("RenderObject: trying to bind unknown texture type");
162 break;
163 }
164 }
165};
166
167/**
168 * binds the texture uniform to texture slots
169 */
170RenderObject.prototype.bindTextures = function()
171{
172 for(var uniIndex = 0; uniIndex < this.bindings.textures.length; uniIndex++)
173 {
174 var bind = this.bindings.textures[uniIndex];
175 var error = 0;
176 switch(bind.type)
177 {
178 case UNIFORMTYPE.TEXTURE2D:
179 gl.activeTexture(gl.TEXTURE0 + bind.unit);
180 gl.uniform1i(bind.uniform, bind.unit);
181 break;
182 case UNIFORMTYPE.TEXTURECUBE:
183 gl.activeTexture(gl.TEXTURE0 + bind.unit);
184 gl.uniform1i(bind.uniform, bind.unit);
185 break;
186 default:
187// gl.console.log("RenderObject: trying to bind unknown texture type");
188 break;
189 }
190 }
191};
192/**
193 * Binds all buffers and enables any vertexAttribs
194 */
195RenderObject.prototype.bindBuffers = function() {
196 for (var bufIndex = 0; bufIndex < this.bindings.buffers.length; bufIndex++)
197 {
198 var bind = this.bindings.buffers[bufIndex];
199 gl.bindBuffer(bind.glBufferType, bind.buffer);
200
201 if (bind.glAttribType != null) {
202 // enable the attribute and point buffer to it
203 gl.enableVertexAttribArray(bind.attribIndex);
204
205 gl.vertexAttribPointer(bind.attribIndex, bind.attribSize, bind.glAttribType, false, 0, 0);
206 }
207 }
208};
209
210RenderObject.prototype.unBindBuffers=function()
211{
212 for(var bufIndex=0;bufIndex<this.bindings.buffers.length;bufIndex++)
213 {
214 var bind=this.bindings.buffers[bufIndex];
215