1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
</copyright> */
// RDGE namespaces
var RDGE = RDGE || {};
// manage light links
RDGE.LightManager = function (lightUniformList) {
// build a list of all light uniforms, contains a list of light uniform lists
this.lightUniforms = [[], [], [], []];
// bucket the uniforms lists
for (var l in lightUniformList) {
// starts with
if (l.indexOf("u_light0") == 0) {
this.lightUniforms[0][l] = l;
}
else if (l.indexOf("u_light1") == 0) {
this.lightUniforms[1][l] = l;
}
else if (l.indexOf("u_light2") == 0) {
this.lightUniforms[2][l] = l;
}
else if (l.indexOf("u_light3") == 0) {
this.lightUniforms[3][l] = l;
}
}
// maps (takes a string returns an object)
this.lightToMesh = []; // pass light name, returns light of meshes
this.meshToLight = []; // pass mesh name, returns list of lights
// list of light objects by type
this.dirLights = [];
this.pointLights = [];
this.spotLights = [];
this.ambLights = [];
this.unknLights = [];
// light types
this.typePointLight = "point_light";
this.typeSpotLight = "spot_light";
this.typeAmbLight = "amb_light";
this.typeDirLight = "dir_light";
this.defaultLights =
[
RDGE.createLightNode("default0"),
RDGE.createLightNode("default1"),
RDGE.createLightNode("default2"),
RDGE.createLightNode("default3")
];
};
/*
* configuration function called when loading the scene
*/
RDGE.LightManager.prototype.setMapping = function (theLightNode, theLinks) {
this.lightToMesh[theLightNode.name] = theLinks;
for (var lghtIdx = 0; lghtIdx < theLinks.length; lghtIdx++) {
var lightList = this.meshToLight[theLinks[lghtIdx]]; // check if mapping list exists
if (lightList !== undefined) {
lightList.push(theLightNode);
} else {
// create new light list and add light list mapping
lightList = [];
lightList.push(theLightNode);
this.meshToLight[theLinks[lghtIdx]] = lightList;
}
}
if (theLightNode.typeName == this.typePointLight) {
this.pointLights.push(theLightNode);
} else if (theLightNode.typeName == this.typeSpotLight) {
this.spotLights.push(theLightNode);
} else if (theLightNode.typeName == this.typeAmbLight) {
this.ambLights.push(theLightNode);
} else if (theLightNode.typeName == this.typeDirLight) {
this.dirLights.push(theLightNode);
} else {
this.unknLights.push(theLightNode);
}
};
RDGE.LightManager.prototype.getLightsForMesh = function (mesh) {
return this.meshToLight[mesh];
};
|