From 2bb869eb1c0b71e379f159eb0f95dfa168496d8d Mon Sep 17 00:00:00 2001
From: hwc487
Date: Wed, 22 Feb 2012 15:22:13 -0800
Subject: Runtime classes
---
js/helper-classes/RDGE/runtime/CanvasLoader.js | 72 +++++++++++
js/helper-classes/RDGE/runtime/GLRuntime.js | 159 +++++++++++++++++++++++++
2 files changed, 231 insertions(+)
create mode 100644 js/helper-classes/RDGE/runtime/CanvasLoader.js
create mode 100644 js/helper-classes/RDGE/runtime/GLRuntime.js
(limited to 'js/helper-classes/RDGE/runtime')
diff --git a/js/helper-classes/RDGE/runtime/CanvasLoader.js b/js/helper-classes/RDGE/runtime/CanvasLoader.js
new file mode 100644
index 00000000..12a985d3
--- /dev/null
+++ b/js/helper-classes/RDGE/runtime/CanvasLoader.js
@@ -0,0 +1,72 @@
+/*
+This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
+ */
+
+
+
+///////////////////////////////////////////////////////////////////////
+// Class ShapeRuntime
+// Manages runtime shape display
+///////////////////////////////////////////////////////////////////////
+function CanvasLoader( root, valueArray, loadForAuthoring )
+{
+ var value = valueArray;
+ var nWorlds = value.length;
+ for (var i=0; i= 0)
+ {
+ var endIndex = importStr.indexOf( "\n", startIndex );
+ if (endIndex > 0)
+ {
+ var id = importStr.substring( startIndex+4, endIndex );
+ var canvas = this.findCanvasWithID( id, root );
+ if (canvas)
+ {
+ if (loadForAuthoring)
+ {
+ if (!canvas.elementModel)
+ {
+ NJUtils.makeElementModel(canvas, "Canvas", "shape", true);
+ }
+
+ if (canvas.elementModel)
+ {
+ if (canvas.elementModel.shapeModel.GLWorld)
+ canvas.elementModel.shapeModel.GLWorld.clearTree();
+
+ var world = new GLWorld( canvas );
+ canvas.elementModel.shapeModel.GLWorld = world;
+ world.import( importStr );
+ }
+ }
+ else
+ {
+ var rt = new GLRuntime( canvas, importStr );
+ }
+ }
+ }
+ }
+ }
+
+ this.findCanvasWithID = function( id, elt )
+ {
+ var cid = elt.getAttribute( "data-RDGE-id" );
+ if (cid == id) return elt;
+
+ if (elt.children)
+ {
+ var nKids = elt.children.length;
+ for (var i=0; i
+This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
+ */
+
+
+
+///////////////////////////////////////////////////////////////////////
+// Class GLRuntime
+// Manages runtime fora WebGL canvas
+///////////////////////////////////////////////////////////////////////
+function GLRuntime( canvas, importStr )
+{
+ ///////////////////////////////////////////////////////////////////////
+ // Instance variables
+ ///////////////////////////////////////////////////////////////////////
+ this._canvas = canvas;
+ this._importStr = importStr;
+
+ this.renderer = null;
+ this.myScene = null;
+ this.light = null;
+ this.light2 = null;
+ this._rootNode = null;
+
+ this._firstRender = true;
+
+ ///////////////////////////////////////////////////////////////////////
+ // initialization code
+ ///////////////////////////////////////////////////////////////////////
+ var id = canvas.getAttribute( "data-RDGE-id" );
+ canvas.rdgeid = id;
+ g_Engine.registerCanvas(canvas, this);
+ RDGEStart( canvas );
+
+ this.loadScene = function()
+ {
+ // parse the data
+ // the GL runtime must start with a "sceneData: "
+ var index = importStr.indexOf( "scenedata: " );
+ if (index >= 0)
+ {
+ var rdgeStr = importStr.substr( index+11 );
+ var endIndex = rdgeStr.indexOf( "endscene\n" );
+ if (endIndex < 0) throw new Error( "ill-formed WebGL data" );
+ var len = endIndex - index + 11;
+ rdgeStr = rdgeStr.substr( 0, endIndex );
+
+ this.myScene.importJSON( rdgeStr );
+ }
+ }
+
+ this.init = function()
+ {
+ var ctx1 = g_Engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle),
+ ctx2 = g_Engine.getContext();
+ if (ctx1 != ctx2) console.log( "***** different contexts *****" );
+ this.renderer = ctx1.renderer;
+
+ // create a camera, set its perspective, and then point it at the origin
+ var cam = new camera();
+ this._camera = cam;
+ cam.setPerspective(this.getFOV(), this.getAspect(), this.getZNear(), this.getZFar());
+ cam.setLookAt([0, 0, this.getViewDistance()], [0, 0, 0], vec3.up());
+
+ // make this camera the active camera
+ this.renderer.cameraManager().setActiveCamera(cam);
+
+ // change clear color
+ this.renderer.setClearColor([1.0, 1.0, 1.0, 0.0]);
+
+ // create an empty scene graph
+ this.myScene = new SceneGraph();
+ this.loadScene();
+
+ /*
+ // create some lights
+ // light 1
+ this.light = createLightNode("myLight");
+ this.light.setPosition([0,0,1.2]);
+ this.light.setDiffuseColor([0.75,0.9,1.0,1.0]);
+
+ // light 2
+ this.light2 = createLightNode("myLight2");
+ this.light2.setPosition([-0.5,0,1.2]);
+ this.light2.setDiffuseColor([1.0,0.9,0.75,1.0]);
+
+ // create a light transform
+ var lightTr = createTransformNode("lightTr");
+
+ // create and attach a material - materials hold the light data
+ lightTr.attachMaterial(createMaterialNode("lights"));
+
+ // enable light channels 1, 2 - channel 0 is used by the default shader
+ lightTr.materialNode.enableLightChannel(1, this.light);
+ lightTr.materialNode.enableLightChannel(2, this.light2);
+
+ // all added objects are parented to the light node
+ this._rootNode = lightTr;
+
+ // add the light node to the scene
+ this.myScene.addNode(lightTr);
+ */
+
+ // load the scene graph data
+
+ // Add the scene to the engine - necessary if you want the engine to draw for you
+ var name = "myScene" + this._canvas.getAttribute( "data-RDGE-id" );
+ g_Engine.AddScene(name, this.myScene);
+ }
+
+ // main code for handling user interaction and updating the scene
+ this.update = function(dt)
+ {
+ if (!dt) dt = 0.2;
+
+ dt = 0.01; // use our own internal throttle
+ this.elapsed += dt;
+
+ // changed the global position uniform of light 0, another way to change behavior of a light
+ rdgeGlobalParameters.u_light0Pos.set( [5*Math.cos(this.elapsed), 5*Math.sin(this.elapsed), 20]);
+
+ // orbit the light nodes around the boxes
+ this.light.setPosition([1.2*Math.cos(this.elapsed*2.0), 1.2*Math.sin(this.elapsed*2.0), 1.2*Math.cos(this.elapsed*2.0)]);
+ this.light2.setPosition([-1.2*Math.cos(this.elapsed*2.0), 1.2*Math.sin(this.elapsed*2.0), -1.2*Math.cos(this.elapsed)]);
+
+ // now update all the nodes in the scene
+ this.myScene.update(dt);
+ }
+
+ // defining the draw function to control how the scene is rendered
+ this.draw = function()
+ {
+ g_Engine.setContext( this._canvas.rdgeid );
+
+ var ctx = g_Engine.getContext();
+ var renderer = ctx.renderer;
+ if (renderer.unloadedTextureCount <= 0)
+ {
+ renderer.disableCulling();
+ renderer._clear();
+ this.myScene.render();
+
+ if (this._firstRender)
+ {
+ if (this._canvas.task)
+ {
+ this._firstRender = false;
+ this._canvas.task.stop();
+ }
+ }
+ }
+ }
+}
+
+
+
+
--
cgit v1.2.3