diff options
Diffstat (limited to 'js/lib/drawing/world.js')
-rwxr-xr-x | js/lib/drawing/world.js | 293 |
1 files changed, 231 insertions, 62 deletions
diff --git a/js/lib/drawing/world.js b/js/lib/drawing/world.js index 0dde9af4..b46a002b 100755 --- a/js/lib/drawing/world.js +++ b/js/lib/drawing/world.js | |||
@@ -29,13 +29,20 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
29 | } | 29 | } |
30 | 30 | ||
31 | this._canvas = canvas; | 31 | this._canvas = canvas; |
32 | if (this._useWebGL) { | 32 | if (this._useWebGL) |
33 | if(preserveDrawingBuffer) { | 33 | { |
34 | preserveDrawingBuffer = true; | ||
35 | if(preserveDrawingBuffer) | ||
36 | { | ||
34 | this._glContext = canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true}); | 37 | this._glContext = canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true}); |
35 | } else { | 38 | } |
39 | else | ||
40 | { | ||
36 | this._glContext = canvas.getContext("experimental-webgl"); | 41 | this._glContext = canvas.getContext("experimental-webgl"); |
37 | } | 42 | } |
38 | } else { | 43 | } |
44 | else | ||
45 | { | ||
39 | this._2DContext = canvas.getContext( "2d" ); | 46 | this._2DContext = canvas.getContext( "2d" ); |
40 | } | 47 | } |
41 | 48 | ||
@@ -72,11 +79,15 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
72 | this._firstRender = true; | 79 | this._firstRender = true; |
73 | 80 | ||
74 | this._worldCount = worldCounter; | 81 | this._worldCount = worldCounter; |
82 | console.log( "creating world " + this._worldCount ); | ||
75 | worldCounter++; | 83 | worldCounter++; |
76 | 84 | ||
77 | // keep a counter for generating node names | 85 | // keep a counter for generating node names |
78 | this._nodeCounter = 0; | 86 | this._nodeCounter = 0; |
79 | 87 | ||
88 | // for sending notifications to listeners | ||
89 | this._notifier = new Notifier(); | ||
90 | |||
80 | /////////////////////////////////////////////////////////////////////// | 91 | /////////////////////////////////////////////////////////////////////// |
81 | // Property accessors | 92 | // Property accessors |
82 | /////////////////////////////////////////////////////////////////////// | 93 | /////////////////////////////////////////////////////////////////////// |
@@ -119,6 +130,7 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
119 | 130 | ||
120 | // Flag to play/pause animation at authortime | 131 | // Flag to play/pause animation at authortime |
121 | this._previewAnimation = true; | 132 | this._previewAnimation = true; |
133 | |||
122 | //////////////////////////////////////////////////////////////////////////////////// | 134 | //////////////////////////////////////////////////////////////////////////////////// |
123 | // RDGE | 135 | // RDGE |
124 | // local variables | 136 | // local variables |
@@ -143,7 +155,8 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
143 | this.setCameraMat( camMat ); | 155 | this.setCameraMat( camMat ); |
144 | 156 | ||
145 | // post-load processing of the scene | 157 | // post-load processing of the scene |
146 | this.init = function() { | 158 | this.init = function() |
159 | { | ||
147 | var ctx1 = RDGE.globals.engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle), | 160 | var ctx1 = RDGE.globals.engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle), |
148 | ctx2 = RDGE.globals.engine.getContext(); | 161 | ctx2 = RDGE.globals.engine.getContext(); |
149 | if (ctx1 != ctx2) console.log( "***** different contexts *****" ); | 162 | if (ctx1 != ctx2) console.log( "***** different contexts *****" ); |
@@ -201,13 +214,15 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
201 | }; | 214 | }; |
202 | 215 | ||
203 | // main code for handling user interaction and updating the scene | 216 | // main code for handling user interaction and updating the scene |
204 | this.update = function(dt) { | 217 | this.update = function(dt) |
218 | { | ||
205 | if (!dt) dt = 0.2; | 219 | if (!dt) dt = 0.2; |
206 | 220 | ||
207 | dt = 0.01; // use our own internal throttle | 221 | dt = 0.01; // use our own internal throttle |
208 | this.elapsed += dt; | 222 | this.elapsed += dt; |
209 | 223 | ||
210 | if (this._useWebGL) { | 224 | if (this._useWebGL) |
225 | { | ||
211 | // changed the global position uniform of light 0, another way to change behavior of a light | 226 | // changed the global position uniform of light 0, another way to change behavior of a light |
212 | RDGE.rdgeGlobalParameters.u_light0Pos.set([5 * Math.cos(this.elapsed), 5 * Math.sin(this.elapsed), 20]); | 227 | RDGE.rdgeGlobalParameters.u_light0Pos.set([5 * Math.cos(this.elapsed), 5 * Math.sin(this.elapsed), 20]); |
213 | 228 | ||
@@ -224,35 +239,48 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
224 | }; | 239 | }; |
225 | 240 | ||
226 | // defining the draw function to control how the scene is rendered | 241 | // defining the draw function to control how the scene is rendered |
227 | this.draw = function() { | 242 | this.draw = function() |
228 | if (this._useWebGL) { | 243 | { |
244 | if (this._useWebGL) | ||
245 | { | ||
229 | RDGE.globals.engine.setContext( this._canvas.rdgeid ); | 246 | RDGE.globals.engine.setContext( this._canvas.rdgeid ); |
230 | var ctx = RDGE.globals.engine.getContext(); | 247 | var ctx = RDGE.globals.engine.getContext(); |
231 | var renderer = ctx.renderer; | 248 | var renderer = ctx.renderer; |
232 | if (renderer.unloadedTextureCount <= 0) { | 249 | if (renderer.unloadedTextureCount <= 0) |
250 | { | ||
233 | renderer.disableCulling(); | 251 | renderer.disableCulling(); |
234 | renderer._clear(); | 252 | renderer._clear(); |
235 | this.myScene.render(); | 253 | this.myScene.render(); |
236 | 254 | ||
237 | if (this._firstRender) { | 255 | if (this._firstRender) |
238 | if (this._canvas.task) { | 256 | { |
257 | this._notifier.sendNotification( this._notifier.FIRST_RENDER ); | ||
258 | if (this._canvas.task) | ||
259 | { | ||
239 | this._firstRender = false; | 260 | this._firstRender = false; |
240 | 261 | ||
241 | if (!this.hasAnimatedMaterials() || !this._previewAnimation) { | 262 | if (!this.hasAnimatedMaterials() || !this._previewAnimation) |
263 | { | ||
242 | this._canvas.task.stop(); | 264 | this._canvas.task.stop(); |
243 | //this._renderCount = 10; | 265 | //this._renderCount = 10; |
244 | } | 266 | } |
245 | } | 267 | } |
246 | } else if (this._renderCount >= 0) { | 268 | } |
247 | if (this._canvas.task) { | 269 | else if (this._renderCount >= 0) |
270 | { | ||
271 | if (this._canvas.task) | ||
272 | { | ||
248 | this._renderCount--; | 273 | this._renderCount--; |
249 | if (this._renderCount <= 0) { | 274 | if (this._renderCount <= 0) |
275 | { | ||
250 | this._canvas.task.stop(); | 276 | this._canvas.task.stop(); |
251 | } | 277 | } |
252 | } | 278 | } |
253 | } | 279 | } |
254 | } | 280 | } |
255 | } else { | 281 | } |
282 | else | ||
283 | { | ||
256 | this.render(); | 284 | this.render(); |
257 | } | 285 | } |
258 | }; | 286 | }; |
@@ -266,8 +294,10 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
266 | // console.log( "GLWorld.onLoadState" ); | 294 | // console.log( "GLWorld.onLoadState" ); |
267 | }; | 295 | }; |
268 | 296 | ||
269 | this.textureToLoad = function( texture ) { | 297 | this.textureToLoad = function( texture ) |
270 | if (!texture.previouslyReferenced) { | 298 | { |
299 | if (!texture.previouslyReferenced) | ||
300 | { | ||
271 | var name = texture.lookUpName; | 301 | var name = texture.lookUpName; |
272 | texture._world = this; | 302 | texture._world = this; |
273 | texture.callback = this.textureMapLoaded; | 303 | texture.callback = this.textureMapLoaded; |
@@ -279,7 +309,8 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
279 | } | 309 | } |
280 | }; | 310 | }; |
281 | 311 | ||
282 | this.textureMapLoaded = function( texture ) { | 312 | this.textureMapLoaded = function( texture ) |
313 | { | ||
283 | var world = texture._world; | 314 | var world = texture._world; |
284 | if (!world) { | 315 | if (!world) { |
285 | console.log( "**** loaded texture does not have world defined ****" ); | 316 | console.log( "**** loaded texture does not have world defined ****" ); |
@@ -289,7 +320,8 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
289 | var name = texture.lookUpName; | 320 | var name = texture.lookUpName; |
290 | if (!world._texMapsToLoad[name]) { | 321 | if (!world._texMapsToLoad[name]) { |
291 | console.log( "loaded an unregistered texture map: " + name ); | 322 | console.log( "loaded an unregistered texture map: " + name ); |
292 | } else { | 323 | } |
324 | else { | ||
293 | //console.log( "loaded a registered texture map: " + name ); | 325 | //console.log( "loaded a registered texture map: " + name ); |
294 | world._texMapsToLoad[name] = undefined; | 326 | world._texMapsToLoad[name] = undefined; |
295 | } | 327 | } |
@@ -316,7 +348,8 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
316 | var world = this._world; | 348 | var world = this._world; |
317 | if (!world) { | 349 | if (!world) { |
318 | console.log( "**** world not defined for loaded texture map: " + name ); | 350 | console.log( "**** world not defined for loaded texture map: " + name ); |
319 | } else { | 351 | } |
352 | else { | ||
320 | world.textureMapLoaded( name ); | 353 | world.textureMapLoaded( name ); |
321 | } | 354 | } |
322 | }; | 355 | }; |
@@ -326,7 +359,17 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
326 | var rtnVal = false; | 359 | var rtnVal = false; |
327 | if (root) { | 360 | if (root) { |
328 | rtnVal = this.hHasAnimatedMaterials( root ); | 361 | rtnVal = this.hHasAnimatedMaterials( root ); |
362 | this._hasAnimatedMaterials = rtnVal; | ||
329 | } | 363 | } |
364 | else | ||
365 | { | ||
366 | // currently... | ||
367 | // we set this case to true - cloud materials create a | ||
368 | // world with no objects but cloud materials animate. | ||
369 | // TODO - find a better way to do this | ||
370 | rtnVal = true; | ||
371 | this._hasAnimatedMaterials = true; | ||
372 | } | ||
330 | 373 | ||
331 | return rtnVal; | 374 | return rtnVal; |
332 | }; | 375 | }; |
@@ -359,6 +402,15 @@ var World = function GLWorld( canvas, use3D, preserveDrawingBuffer ) { | |||
359 | return str; |