aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/RDGE/src/core/script/MeshManager.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/helper-classes/RDGE/src/core/script/MeshManager.js')
-rwxr-xr-xjs/helper-classes/RDGE/src/core/script/MeshManager.js131
1 files changed, 56 insertions, 75 deletions
diff --git a/js/helper-classes/RDGE/src/core/script/MeshManager.js b/js/helper-classes/RDGE/src/core/script/MeshManager.js
index 7dfc79d4..4fa3c908 100755
--- a/js/helper-classes/RDGE/src/core/script/MeshManager.js
+++ b/js/helper-classes/RDGE/src/core/script/MeshManager.js
@@ -4,17 +4,19 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */ 5</copyright> */
6 6
7function Model(name, mesh) 7// RDGE namespaces
8{ 8var RDGE = RDGE || {};
9
10RDGE.Model = function (name, mesh) {
9 this.name = name; 11 this.name = name;
10 this.mesh = mesh; 12 this.mesh = mesh;
11 this.camera = null; 13 this.camera = null;
12} 14};
13 15
14/* 16/*
15 * Maintains a list of meshes to allow instancing of data 17 * Maintains a list of meshes to allow instancing of data
16 */ 18 */
17function MeshManager() { 19RDGE.MeshManager = function () {
18 this.contentUrl = "assets_web/mesh/"; 20 this.contentUrl = "assets_web/mesh/";
19 this.modelMap = {}; 21 this.modelMap = {};
20 this.readyList = []; // meshes that have data ready 22 this.readyList = []; // meshes that have data ready
@@ -22,27 +24,24 @@ function MeshManager() {
22 this.postMeshLoadCallbackList = []; 24 this.postMeshLoadCallbackList = [];
23 this.tempSphere = null; 25 this.tempSphere = null;
24 this.requestCounter = 0; 26 this.requestCounter = 0;
25} 27};
26 28
27/* 29/*
28 * Pass the scene meshNode stump, loads temp object while real mesh is downloading 30 * Pass the scene meshNode stump, loads temp object while real mesh is downloading
29 */ 31 */
30MeshManager.prototype.loadMesh = function (meshStump, tempMesh) 32RDGE.MeshManager.prototype.loadMesh = function (meshStump, tempMesh) {
31{
32 // if it exists already, return the mesh requested 33 // if it exists already, return the mesh requested
33 if ( this.modelMap[meshStump.name] !== undefined ) 34 if ( this.modelMap[meshStump.name] !== undefined )
34 return this.modelMap[meshStump.name]; 35 return this.modelMap[meshStump.name];
35 36
36 meshStump.ready = false; 37 meshStump.ready = false;
37 meshStump.addr = this.contentUrl + meshStump.name + "_mesh.json"; 38 meshStump.addr = this.contentUrl + meshStump.name + "_mesh.json";
38 meshStump.ctxID = g_Engine.getContext().renderer.id; 39 meshStump.ctxID = RDGE.globals.engine.getContext().renderer.id;
39 40
40 // sets a temp mesh up in place of the final mesh to load 41 // sets a temp mesh up in place of the final mesh to load
41 if (!tempMesh) 42 if (!tempMesh) {
42 { 43 if (this.tempSphere == null) {
43 if (this.tempSphere == null) 44 this.tempSphere = RDGE.renderUtils.makeSphere(RDGE.globals.engine.getContext().renderer.ctx, 25, 5, 5);
44 {
45 this.tempSphere = makeSphere(g_Engine.getContext().renderer.ctx, 25, 5, 5);
46 } 45 }
47 46
48 tempMesh = this.tempSphere; 47 tempMesh = this.tempSphere;
@@ -54,7 +53,7 @@ MeshManager.prototype.loadMesh = function (meshStump, tempMesh)
54 // update the request counter - we now have one more mesh to load 53 // update the request counter - we now have one more mesh to load
55 this.requestCounter++; 54 this.requestCounter++;
56 55
57 requestMesh(meshStump); 56 RDGE.requestMesh(meshStump);
58 57
59 return null; 58 return null;
60}; 59};
@@ -62,14 +61,11 @@ MeshManager.prototype.loadMesh = function (meshStump, tempMesh)
62/* 61/*
63 * Deletes the passed mesh from the manager as well as all renderers 62 * Deletes the passed mesh from the manager as well as all renderers
64 */ 63 */
65MeshManager.prototype.deleteMesh = function (name) 64RDGE.MeshManager.prototype.deleteMesh = function (name) {
66{
67 var model = this.modelMap[name]; 65 var model = this.modelMap[name];
68 66
69 if (model) 67 if (model) {
70 { 68 RDGE.globals.engine.ctxMan.forEach(function (context) {
71 g_Engine.ctxMan.forEach(function(context)
72 {
73 context.renderer.deletePrimitive(model.primitive); 69 context.renderer.deletePrimitive(model.primitive);
74 }); 70 });
75 71
@@ -77,13 +73,11 @@ MeshManager.prototype.deleteMesh = function (name)
77 } 73 }
78}; 74};
79 75
80MeshManager.prototype.getModelByName = function (name) 76RDGE.MeshManager.prototype.getModelByName = function (name) {
81{
82 return this.modelMap[name]; 77 return this.modelMap[name];
83}; 78};
84 79
85MeshManager.prototype.getModelNames = function () 80RDGE.MeshManager.prototype.getModelNames = function () {
86{
87 var names = []; 81 var names = [];
88 for (var index in this.modelMap) { 82 for (var index in this.modelMap) {
89 names.push(this.modelList[index].name); 83 names.push(this.modelList[index].name);
@@ -93,8 +87,8 @@ MeshManager.prototype.getModelNames = function ()
93}; 87};
94 88
95 89
96MeshManager.prototype.processMeshData = function () { 90RDGE.MeshManager.prototype.processMeshData = function () {
97 var renderer = g_Engine.getContext().renderer; 91 var renderer = RDGE.globals.engine.getContext().renderer;
98 92
99 // loop through meshes and load ready data 93 // loop through meshes and load ready data
100 for (var index in this.readyList) { 94 for (var index in this.readyList) {
@@ -106,20 +100,20 @@ MeshManager.prototype.processMeshData = function () {
106 var model = this.readyList[index]; 100 var model = this.readyList[index];
107 this.readyList.splice(index, 1); 101 this.readyList.splice(index, 1);
108 102
109 var primset = new rdgePrimitiveDefinition(); 103 var primset = new RDGE.rdgePrimitiveDefinition();
110 104
111 primset.vertexDefinition = 105 primset.vertexDefinition =
112 { 106 {
113 // this shows two ways to map this data to an attribute 107 // this shows two ways to map this data to an attribute
114 "vert":{'type':rdgeConstants.VS_ELEMENT_POS, 'bufferIndex':0, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 108 "vert": { 'type': RDGE.rdgeConstants.VS_ELEMENT_POS, 'bufferIndex': 0, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
115 "a_pos":{'type':rdgeConstants.VS_ELEMENT_POS, 'bufferIndex':0, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 109 "a_pos": { 'type': RDGE.rdgeConstants.VS_ELEMENT_POS, 'bufferIndex': 0, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
116 "normal":{'type':rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex':1, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 110 "normal": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex': 1, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
117 "a_norm":{'type':rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex':1, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 111 "a_norm": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex': 1, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
118 "a_normal":{'type':rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex':1, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 112 "a_normal": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT3, 'bufferIndex': 1, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
119 "texcoord":{'type':rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex':2, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 113 "texcoord": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex': 2, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
120 "a_texcoord":{'type':rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex':2, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 114 "a_texcoord": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex': 2, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
121 "a_texcoords":{'type':rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex':2, 'bufferUsage': rdgeConstants.BUFFER_STATIC}, 115 "a_texcoords": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex': 2, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC },
122 "a_uv":{'type':rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex':2, 'bufferUsage': rdgeConstants.BUFFER_STATIC} 116 "a_uv": { 'type': RDGE.rdgeConstants.VS_ELEMENT_FLOAT2, 'bufferIndex': 2, 'bufferUsage': RDGE.rdgeConstants.BUFFER_STATIC }
123 }; 117 };
124 118
125 primset.bufferStreams = 119 primset.bufferStreams =
@@ -131,12 +125,12 @@ MeshManager.prototype.processMeshData = function () {
131 125
132 primset.streamUsage = 126 primset.streamUsage =
133 [ 127 [
134 rdgeConstants.BUFFER_STATIC, 128 RDGE.rdgeConstants.BUFFER_STATIC,
135 rdgeConstants.BUFFER_STATIC, 129 RDGE.rdgeConstants.BUFFER_STATIC,
136 rdgeConstants.BUFFER_STATIC 130 RDGE.rdgeConstants.BUFFER_STATIC
137 ]; 131 ];
138 132
139 primset.indexUsage = rdgeConstants.BUFFER_STREAM; 133 primset.indexUsage = RDGE.rdgeConstants.BUFFER_STREAM;
140 134
141 primset.indexBuffer = model.root.data.indices; 135 primset.indexBuffer = model.root.data.indices;
142 136
@@ -145,11 +139,10 @@ MeshManager.prototype.processMeshData = function () {
145 model.root.primitive = primset; 139 model.root.primitive = primset;
146 140
147 // generate a bounding box for this mesh 141 // generate a bounding box for this mesh
148 model.root.bbox = new box(); 142 model.root.bbox = new RDGE.box();
149 143
150 var numCoords = model.root.data.coords.length; var idx = 0; 144 var numCoords = model.root.data.coords.length; var idx = 0;
151 while (idx < numCoords - 2) 145 while (idx < numCoords - 2) {
152 {
153 var thisCoord = [model.root.data.coords[idx+0], model.root.data.coords[idx+1], model.root.data.coords[idx+2]]; 146 var thisCoord = [model.root.data.coords[idx+0], model.root.data.coords[idx+1], model.root.data.coords[idx+2]];
154 model.root.bbox.addVec3(thisCoord); 147 model.root.bbox.addVec3(thisCoord);
155 idx += 3; 148 idx += 3;
@@ -165,62 +158,50 @@ MeshManager.prototype.processMeshData = function () {
165 } 158 }
166 159
167 }