aboutsummaryrefslogtreecommitdiff
path: root/js/lib/rdge/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/rdge/runtime')
-rw-r--r--js/lib/rdge/runtime/CanvasDataManager.js83
-rw-r--r--js/lib/rdge/runtime/GLRuntime.js357
-rw-r--r--js/lib/rdge/runtime/RuntimeGeomObj.js633
-rw-r--r--js/lib/rdge/runtime/RuntimeMaterial.js351
4 files changed, 1424 insertions, 0 deletions
diff --git a/js/lib/rdge/runtime/CanvasDataManager.js b/js/lib/rdge/runtime/CanvasDataManager.js
new file mode 100644
index 00000000..8afc9de0
--- /dev/null
+++ b/js/lib/rdge/runtime/CanvasDataManager.js
@@ -0,0 +1,83 @@
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
8var GeomObj = require("js/lib/geom/geom-obj").GeomObj;
9var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive;
10var MaterialsModel = require("js/models/materials-model").MaterialsModel;
11var GLRuntime = require("js/lib/rdge/runtime/GLRuntime").GLRuntime;
12
13///////////////////////////////////////////////////////////////////////
14// Class ShapeRuntime
15// Manages runtime shape display
16///////////////////////////////////////////////////////////////////////
17var CanvasDataManager = function CanvasDataManager()
18{
19 this.loadGLData = function(root, valueArray )
20 {
21 var value = valueArray;
22 var nWorlds = value.length;
23 for (var i=0; i<nWorlds; i++)
24 {
25 var importStr = value[i];
26 var startIndex = importStr.indexOf( "id: " );
27 if (startIndex >= 0)
28 {
29 var endIndex = importStr.indexOf( "\n", startIndex );
30 if (endIndex > 0)
31 {
32 var id = importStr.substring( startIndex+4, endIndex );
33 var canvas = this.findCanvasWithID( id, root );
34 if (canvas)
35 {
36 var rt = new GLRuntime( canvas, importStr );
37 }
38 }
39 }
40 }
41 }
42
43 this.collectGLData = function( elt, dataArray )
44 {
45 if (elt.elementModel && elt.elementModel.shapeModel && elt.elementModel.shapeModel.GLWorld)
46 {
47 var data = elt.elementModel.shapeModel.GLWorld.export( true );
48 dataArray.push( data );
49 }
50
51 if (elt.children)
52 {
53 var nKids = elt.children.length;
54 for (var i=0; i<nKids; i++)
55 {
56 var child = elt.children[i];
57 this.collectGLData( child, dataArray );
58 }
59 }
60 }
61
62 this.findCanvasWithID = function( id, elt )
63 {
64 var cid = elt.getAttribute( "data-RDGE-id" );
65 if (cid == id) return elt;
66
67 if (elt.children)
68 {
69 var nKids = elt.children.length;
70 for (var i=0; i<nKids; i++)
71 {
72 var child = elt.children[i];
73 var foundElt = this.findCanvasWithID( id, child );
74 if (foundElt) return foundElt;
75 }
76 }
77 }
78}
79
80
81if (typeof exports === "object") {
82 exports.CanvasDataManager = CanvasDataManager;
83}
diff --git a/js/lib/rdge/runtime/GLRuntime.js b/js/lib/rdge/runtime/GLRuntime.js
new file mode 100644
index 00000000..a4da8549
--- /dev/null
+++ b/js/lib/rdge/runtime/GLRuntime.js
@@ -0,0 +1,357 @@
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
8var GeomObj = require("js/lib/geom/geom-obj").GeomObj,
9 RuntimeGeomObj = require("js/lib/rdge/runtime/RuntimeGeomObj"),
10 RuntimeRectangle = RuntimeGeomObj.RuntimeRectangle,
11 RuntimeOval = RuntimeGeomObj.RuntimeOval,
12 getPropertyFromString = require("js/lib/rdge/runtime/RuntimeGeomObj").getPropertyFromString;
13
14///////////////////////////////////////////////////////////////////////
15// Class GLRuntime
16// Manages runtime fora WebGL canvas
17///////////////////////////////////////////////////////////////////////
18var GLRuntime = function GLRuntime( canvas, importStr )
19{
20 ///////////////////////////////////////////////////////////////////////
21 // Instance variables
22 ///////////////////////////////////////////////////////////////////////
23 this._canvas = canvas;
24 this._context = null;
25 this._importStr = importStr;
26
27 this.renderer = null;
28 this.myScene = null;
29 this.light = null;
30 this.light2 = null;
31 this._rootNode = null;
32
33 this._firstRender = true;
34 this._initialized = false;
35
36 this._useWebGL = false;
37
38 // view parameters
39 this._fov = 45.0;
40 this._zNear = 0.1;
41 this._zFar = 100.0;
42 this._viewDist = 5.0;
43
44 this._aspect = canvas.width/canvas.height;
45
46 this._geomRoot;
47
48 // all "live" materials
49 this._materials = [];
50
51 ///////////////////////////////////////////////////////////////////////
52 // accessors
53 ///////////////////////////////////////////////////////////////////////
54 this.getZNear = function() { return this._zNear; }
55 this.getZFar = function() { return this._zFar; }
56 this.getFOV = function() { return this._fov; }
57 this.getAspect = function() { return this._aspect; }
58 this.getViewDistance = function() { return this._viewDist; }
59
60 this.get2DContext = function() { return this._context; }
61
62 this.getViewportWidth = function() { return this._canvas.width; }
63 this.getViewportHeight = function() { return this._canvas.height; }
64
65 ///////////////////////////////////////////////////////////////////////
66 // accessors
67 ///////////////////////////////////////////////////////////////////////
68 this.loadScene = function()
69 {
70 // parse the data
71 // the GL runtime must start with a "sceneData: "
72 var index = importStr.indexOf( "scenedata: " );
73 if (index >= 0)
74 {
75 this._useWebGL = true;
76
77 var rdgeStr = importStr.substr( index+11 );
78 var endIndex = rdgeStr.indexOf( "endscene\n" );
79 if (endIndex < 0) throw new Error( "ill-formed WebGL data" );
80 var len = endIndex - index + 11;
81 rdgeStr = rdgeStr.substr( 0, endIndex );
82
83 this.myScene.importJSON( rdgeStr );
84 this.importObjects( importStr );
85 this.linkMaterials( this._geomRoot );
86 this.initMaterials();
87 }
88 else
89 {
90 this._context = this._canvas.getContext( "2d" );
91 this.importObjects( importStr );
92 this.render();
93 }
94 }
95
96 this.init = function()
97 {
98 var ctx1 = g_Engine.ctxMan.handleToObject(this._canvas.rdgeCtxHandle),
99 ctx2 = g_Engine.getContext();
100 if (ctx1 != ctx2) console.log( "***** different contexts *****" );
101 this.renderer = ctx1.renderer;
102
103 // create a camera, set its perspective, and then point it at the origin
104 var cam = new camera();
105 this._camera = cam;
106 cam.setPerspective(this.getFOV(), this.getAspect(), this.getZNear(), this.getZFar());
107 cam.setLookAt([0, 0, this.getViewDistance()], [0, 0, 0], vec3.up());
108
109 // make this camera the active camera
110 this.renderer.cameraManager().setActiveCamera(cam);
111
112 // change clear color
113 this.renderer.setClearColor([1.0, 1.0, 1.0, 0.0]);
114
115 // create an empty scene graph
116 this.myScene = new SceneGraph();
117
118 // load the scene graph data
119 this.loadScene();
120
121 // Add the scene to the engine - necessary if you want the engine to draw for you
122 var name = "myScene" + this._canvas.getAttribute( "data-RDGE-id" );
123 g_Engine.AddScene(name, this.myScene);
124
125 this._initialized = true;
126 }
127
128 // main code for handling user interaction and updating the scene
129 this.update = function(dt)
130 {
131 if (this._initialized)
132 {
133 if (!dt) dt = 0.2;
134
135 dt = 0.01; // use our own internal throttle
136 this.elapsed += dt;
137
138 // changed the global position uniform of light 0, another way to change behavior of a light
139 rdgeGlobalParameters.u_light0Pos.set( [5*Math.cos(this.elapsed)