From 648ee61ae84216d0236e0dbc211addc13b2cfa3a Mon Sep 17 00:00:00 2001
From: Kris Kowal
Date: Fri, 6 Jul 2012 11:52:06 -0700
Subject: Expand tabs
---
.../RDGE/src/core/script/scenegraph.js | 306 ++++++++++-----------
1 file changed, 153 insertions(+), 153 deletions(-)
(limited to 'js/helper-classes/RDGE/src/core/script/scenegraph.js')
diff --git a/js/helper-classes/RDGE/src/core/script/scenegraph.js b/js/helper-classes/RDGE/src/core/script/scenegraph.js
index 44f1212f..92fe98c8 100755
--- a/js/helper-classes/RDGE/src/core/script/scenegraph.js
+++ b/js/helper-classes/RDGE/src/core/script/scenegraph.js
@@ -74,8 +74,8 @@ RDGE.SceneGraph = function (scene) {
this.bckTypes = RDGE.rdgeConstants.categoryEnumeration;
this.renderList = new Array(this.bckTypes.MAX_CAT);
- this.renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- this.renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
+ this.renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
+ this.renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
this.renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
this.renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
this.renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
@@ -89,127 +89,127 @@ RDGE.SceneGraph = function (scene) {
// define passes to render geometry and handle post-processing
this.defaultPassDef =
- {
- // a pass can have children that will receive their parents output as input
-
- // this pass renders the depth map to an off-screen target - from the shadow lights view
- // you can specify what your output should be
- // @param name - this tells jshader's of child passes (which receive the parents output as input)
- // what the sampler2d uniform name will be for this output texture
- // @param type - the type of output could be tex2d or target
- // @param width - optional width of the render target
- // @param height - optional height of the render target
- // @param mips - optional flag indicating whether the render target will support mip-mapping
-
- // the geometry pass
- 'name': "geoPass",
- 'geometrySet': "ALL"
- // 'outputs':[{ 'name':"u_mainRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'children':
- // [
- // // shadow pass
- // {
- // 'outputs':[{ 'name':"u_shadowDepthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // // custom parameter
- // 'name':"shadowDepthMap",
- // 'shader': RDGE.rdgeDepthMapShaderDef,
- // 'technique':"shadowDepthMap",
- // 'geometrySet':"SHADOW",
- // 'children':
- // [
- // // create shadow rt
- // {
- // 'outputs':[{ 'name':"u_shadowMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'name':"shadowMap",
- // 'shader': RDGE.rdgeShadowMapShader,
- // 'clearColor' : [1.0,1.0,1.0,1.0],
- // 'geometrySet':"SHADOW",
- // }
- // ]
- // },
- // // glow pass
- // {
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'name':"glowMap",
- // 'shader': RDGE.rdgeGlowMapShader,
- // 'clearColor' : [0.0,0.0,0.0,1.0],
- // 'technique':"createGlowMap",
- // 'geometrySet':"ALL",
- // 'children':
- // [
- // { // the blur pass at half resolution
- // 'name':"blurQuarter",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':256, 'height':256, 'mips':false }],
- // 'children':
- // [
- // { // the blur pass at half resolution
- // 'name':"blurThreeQuarter",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':128, 'height':128, 'mips':false }],
- // 'children':
- // [
- // { // the blur pass at quarter resolution
- // 'name':"blurFull",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"u_glowFinal", 'type':"target", 'width':1024, 'height':1024, 'mips':false }]
- // }
- // ]
- // }
- // ]
- // }
- // ]
- // },
- // // depth map in view space
- // {
- // 'name':"depth_map",
- // 'shader': RDGE.rdgeDepthMapShaderDef,
- // 'technique': "depthMap",
- // 'outputs':[{ 'name':"u_depthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'geometrySet':"ALL",
- // 'children' :
- // [
- // // get the normals in view space
- // {
- // 'name':"normals",
- // 'shader': RDGE.rdgeViewSpaceNormalsShader,
- // 'outputs':[{ 'name':"u_normalsRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'geometrySet':"ALL",
- // 'children' :
- // [
- // // techniques requiring depth and normals in view space go here
- //
- // // SSAO map
- // {
- // 'name':"SSAO",
- // 'shader': RDGE.rdgeSSAOShader,
- // 'outputs':[{ 'name':"u_ssaoRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'textures':[{ 'type':"tex2d", 'data':"u_depthMap" }],
- // 'geometrySet':"SCREEN_QUAD",
- // 'preRender': function()
- // {
- // this.shader.ssao.u_cameraFTR.set(this.renderer.cameraManager().getActiveCamera().getFTR());
- // }
- // }
- // ]
- // }
- // ]
- // },
- //
- // // final pass must always be last in the list
- // {
- // // this final pass has no output, its shader, however, will render its input (the previous pass's output)
- // // to the screen-quad geometry setup under the 'renderList' object
- // 'name':"finalPass",
- // 'geometrySet':"SCREEN_QUAD",
- // 'textures':[{ 'type':"tex2d", 'data':"u_glowFinal" }, { 'type':"tex2d", 'data':"u_ssaoRT" }, { 'type':"tex2d", 'data':"u_shadowMap" }],
- // 'shader': RDGE.rdgeScreenQuadShaderDef,
- // }
- // ]
- };
+ {
+ // a pass can have children that will receive their parents output as input
+
+ // this pass renders the depth map to an off-screen target - from the shadow lights view
+ // you can specify what your output should be
+ // @param name - this tells jshader's of child passes (which receive the parents output as input)
+ // what the sampler2d uniform name will be for this output texture
+ // @param type - the type of output could be tex2d or target
+ // @param width - optional width of the render target
+ // @param height - optional height of the render target
+ // @param mips - optional flag indicating whether the render target will support mip-mapping
+
+ // the geometry pass
+ 'name': "geoPass",
+ 'geometrySet': "ALL"
+ // 'outputs':[{ 'name':"u_mainRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'children':
+ // [
+ // // shadow pass
+ // {
+ // 'outputs':[{ 'name':"u_shadowDepthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // // custom parameter
+ // 'name':"shadowDepthMap",
+ // 'shader': RDGE.rdgeDepthMapShaderDef,
+ // 'technique':"shadowDepthMap",
+ // 'geometrySet':"SHADOW",
+ // 'children':
+ // [
+ // // create shadow rt
+ // {
+ // 'outputs':[{ 'name':"u_shadowMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'name':"shadowMap",
+ // 'shader': RDGE.rdgeShadowMapShader,
+ // 'clearColor' : [1.0,1.0,1.0,1.0],
+ // 'geometrySet':"SHADOW",
+ // }
+ // ]
+ // },
+ // // glow pass
+ // {
+ // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'name':"glowMap",
+ // 'shader': RDGE.rdgeGlowMapShader,
+ // 'clearColor' : [0.0,0.0,0.0,1.0],
+ // 'technique':"createGlowMap",
+ // 'geometrySet':"ALL",
+ // 'children':
+ // [
+ // { // the blur pass at half resolution
+ // 'name':"blurQuarter",
+ // 'geometrySet':"SCREEN_QUAD",
+ // 'shader': RDGE.rdgeGaussianBlurShader,
+ // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':256, 'height':256, 'mips':false }],
+ // 'children':
+ // [
+ // { // the blur pass at half resolution
+ // 'name':"blurThreeQuarter",
+ // 'geometrySet':"SCREEN_QUAD",
+ // 'shader': RDGE.rdgeGaussianBlurShader,
+ // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':128, 'height':128, 'mips':false }],
+ // 'children':
+ // [
+ // { // the blur pass at quarter resolution
+ // 'name':"blurFull",
+ // 'geometrySet':"SCREEN_QUAD",
+ // 'shader': RDGE.rdgeGaussianBlurShader,
+ // 'outputs':[{ 'name':"u_glowFinal", 'type':"target", 'width':1024, 'height':1024, 'mips':false }]
+ // }
+ // ]
+ // }
+ // ]
+ // }
+ // ]
+ // },
+ // // depth map in view space
+ // {
+ // 'name':"depth_map",
+ // 'shader': RDGE.rdgeDepthMapShaderDef,
+ // 'technique': "depthMap",
+ // 'outputs':[{ 'name':"u_depthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'geometrySet':"ALL",
+ // 'children' :
+ // [
+ // // get the normals in view space
+ // {
+ // 'name':"normals",
+ // 'shader': RDGE.rdgeViewSpaceNormalsShader,
+ // 'outputs':[{ 'name':"u_normalsRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'geometrySet':"ALL",
+ // 'children' :
+ // [
+ // // techniques requiring depth and normals in view space go here
+ //
+ // // SSAO map
+ // {
+ // 'name':"SSAO",
+ // 'shader': RDGE.rdgeSSAOShader,
+ // 'outputs':[{ 'name':"u_ssaoRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
+ // 'textures':[{ 'type':"tex2d", 'data':"u_depthMap" }],
+ // 'geometrySet':"SCREEN_QUAD",
+ // 'preRender': function()
+ // {
+ // this.shader.ssao.u_cameraFTR.set(this.renderer.cameraManager().getActiveCamera().getFTR());
+ // }
+ // }
+ // ]
+ // }
+ // ]
+ // },
+ //
+ // // final pass must always be last in the list
+ // {
+ // // this final pass has no output, its shader, however, will render its input (the previous pass's output)
+ // // to the screen-quad geometry setup under the 'renderList' object
+ // 'name':"finalPass",
+ // 'geometrySet':"SCREEN_QUAD",
+ // 'textures':[{ 'type':"tex2d", 'data':"u_glowFinal" }, { 'type':"tex2d", 'data':"u_ssaoRT" }, { 'type':"tex2d", 'data':"u_shadowMap" }],
+ // 'shader': RDGE.rdgeScreenQuadShaderDef,
+ // }
+ // ]
+ };
// a graph of render passes to process in order to produce a final output
this.renderGraph = new RDGE.jpassGraph(this.defaultPassDef);
@@ -250,7 +250,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * scene traversal functor for finding a node by name
+ * scene traversal functor for finding a node by name
*/
findNodeByName = function (nodeName) {
this.result = null;
@@ -265,7 +265,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * scene traversal functor for creating a list of node with a given name
+ * scene traversal functor for creating a list of node with a given name
*/
buildNodeList = function (nodeName) {
this.result = [];
@@ -279,7 +279,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * scene traversal functor for creating a list of nodes based on a regular expression
+ * scene traversal functor for creating a list of nodes based on a regular expression
*/
buildNodeListRegex = function (re) {
this.result = [];
@@ -293,7 +293,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * scene traversal functor for importing a previously exported json scene
+ * scene traversal functor for importing a previously exported json scene
*/
importScene = function () {
this.renderer = RDGE.globals.engine.getContext().renderer;
@@ -333,7 +333,7 @@ RDGE.SceneGraph = function (scene) {
// load meshes into context
for (var i = 0, len = node.meshes.length; i < len; ++i) {
var mesh = RDGE.globals.meshMan.getModelByName(node.meshes[i].mesh.name);
- // mesh.primitive.built = false;
+ // mesh.primitive.built = false;
this.renderer.createPrimitive(mesh.primitive);
}
}
@@ -345,7 +345,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * helper comparison functions
+ * helper comparison functions
*/
__compareLessThan = function (a, b) {
return a < b;
@@ -355,7 +355,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * scene traversal functor for creating a sorted list
+ * scene traversal functor for creating a sorted list
*/
insertIntoSortedList = function (list, item, comparator) {
// insert at the end
@@ -374,7 +374,7 @@ RDGE.SceneGraph = function (scene) {
// get the distance from object to cameras' 'z' plane
item.depth = RDGE.vec3.dot(look, toObject);
- // walk down the list of object moving the current item into place until the comparison fails
+ // walk down the list of object moving the current item into place until the comparison fails
var i = len - 1;
var temp = null;
for (; i > 0; --i) {
@@ -390,7 +390,7 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * Helper function to generate a culled list of geometry for shadow mapping from the mainLights point of view
+ * Helper function to generate a culled list of geometry for shadow mapping from the mainLights point of view
*/
shadowCullPass = function (cameraLight, sortCat, compareFunc) {
this.result = [];
@@ -416,16 +416,16 @@ RDGE.SceneGraph = function (scene) {
};
/*
- * Helper function to create a list sorted front to back as would be used by an opaque render list
- * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
+ * Helper function to create a list sorted front to back as would be used by an opaque render list
+ * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
*/
insertFrontToBack = function (list, item) {
insertIntoSortedList(list, item, __compareLessThan);
};
/*
- * Helper function to create a list sorted back to front as would be used by an transparent render list
- * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
+ * Helper function to create a list sorted back to front as would be used by an transparent render list
+ * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
*/
insertBackToFront = function (list, item) {
insertIntoSortedList(list, item, __compareGreaterThan);
@@ -648,7 +648,7 @@ RDGE.SceneGraph.prototype.BuildBVHHelper = function (node) {
curNode.world = RDGE.mat4.mul(curNode.local, parentXfrm);
if (bbox) {
- // update bounding box position
+ // update bounding box position
curNode.bbox_world = bbox.transform(curNode.world);
}
@@ -678,7 +678,7 @@ RDGE.SceneGraph.prototype.BuildBVHHelper = function (node) {
// propagate the bounding volume up the hierarchy
if (parent && parent.bbox_world && parent.bbox_world.isValid()
- && curNode.bbox_world && curNode.bbox_world.isValid()) {
+ && curNode.bbox_world && curNode.bbox_world.isValid()) {
parent.bbox_world.addBox(curNode.bbox_world);
}
@@ -805,8 +805,8 @@ RDGE.SceneGraph.prototype.GetBBoxForNode = function (tr) {
RDGE.SceneGraph.prototype._RenderDFHelper = function (renderer, renderProc, node, forceThisProc) {
renderList = [];
- renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
+ renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
+ renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
@@ -944,24 +944,24 @@ RDGE.SceneGraph.prototype.exportJSON = function () {
if (key == 'bbox_world') {
return null;
}
- // else if(key === 'image')
- // {
- // return "image";
- // }
+ // else if(key === 'image')
+ // {
+ // return "image";
+ // }
else if (key === 'parent') {
return "parent";
}
- // for(var i = 0, len = objMap.length; i < len; ++i)
- // {
- // if((value && typeof value === "object" && !value.jsonExportName && value === objMap[i]) || (value && value.baseURI !== undefined))
- // {
- // return 'replaced';
- // }
- // }
+ // for(var i = 0, len = objMap.length; i < len; ++i)
+ // {
+ // if((value && typeof value === "object" && !value.jsonExportName && value === objMap[i]) || (value && value.baseURI !== undefined))
+ // {
+ // return 'replaced';
+ // }
+ // }
//
- // if(value && value.baseURI === undefined && typeof value === "object" && !value.lookUpName)
- // objMap.push(value);
+ // if(value && value.baseURI === undefined && typeof value === "object" && !value.lookUpName)
+ // objMap.push(value);
return value;
}
--
cgit v1.2.3
From 04343eda8c2f870b0da55cfdc8003c99fe1cc4de Mon Sep 17 00:00:00 2001
From: Kris Kowal
Date: Fri, 6 Jul 2012 11:53:10 -0700
Subject: Remove trailing spaces
---
.../RDGE/src/core/script/scenegraph.js | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
(limited to 'js/helper-classes/RDGE/src/core/script/scenegraph.js')
diff --git a/js/helper-classes/RDGE/src/core/script/scenegraph.js b/js/helper-classes/RDGE/src/core/script/scenegraph.js
index 92fe98c8..789f69e5 100755
--- a/js/helper-classes/RDGE/src/core/script/scenegraph.js
+++ b/js/helper-classes/RDGE/src/core/script/scenegraph.js
@@ -74,8 +74,8 @@ RDGE.SceneGraph = function (scene) {
this.bckTypes = RDGE.rdgeConstants.categoryEnumeration;
this.renderList = new Array(this.bckTypes.MAX_CAT);
- this.renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- this.renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
+ this.renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
+ this.renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
this.renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
this.renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
this.renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
@@ -170,7 +170,7 @@ RDGE.SceneGraph = function (scene) {
// 'technique': "depthMap",
// 'outputs':[{ 'name':"u_depthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
// 'geometrySet':"ALL",
- // 'children' :
+ // 'children' :
// [
// // get the normals in view space
// {
@@ -178,10 +178,10 @@ RDGE.SceneGraph = function (scene) {
// 'shader': RDGE.rdgeViewSpaceNormalsShader,
// 'outputs':[{ 'name':"u_normalsRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
// 'geometrySet':"ALL",
- // 'children' :
+ // 'children' :
// [
// // techniques requiring depth and normals in view space go here
- //
+ //
// // SSAO map
// {
// 'name':"SSAO",
@@ -198,7 +198,7 @@ RDGE.SceneGraph = function (scene) {
// }
// ]
// },
- //
+ //
// // final pass must always be last in the list
// {
// // this final pass has no output, its shader, however, will render its input (the previous pass's output)
@@ -374,7 +374,7 @@ RDGE.SceneGraph = function (scene) {
// get the distance from object to cameras' 'z' plane
item.depth = RDGE.vec3.dot(look, toObject);
- // walk down the list of object moving the current item into place until the comparison fails
+ // walk down the list of object moving the current item into place until the comparison fails
var i = len - 1;
var temp = null;
for (; i > 0; --i) {
@@ -648,7 +648,7 @@ RDGE.SceneGraph.prototype.BuildBVHHelper = function (node) {
curNode.world = RDGE.mat4.mul(curNode.local, parentXfrm);
if (bbox) {
- // update bounding box position
+ // update bounding box position
curNode.bbox_world = bbox.transform(curNode.world);
}
@@ -805,8 +805,8 @@ RDGE.SceneGraph.prototype.GetBBoxForNode = function (tr) {
RDGE.SceneGraph.prototype._RenderDFHelper = function (renderer, renderProc, node, forceThisProc) {
renderList = [];
- renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
+ renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
+ renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
@@ -959,7 +959,7 @@ RDGE.SceneGraph.prototype.exportJSON = function () {
// return 'replaced';
// }
// }
- //
+ //
// if(value && value.baseURI === undefined && typeof value === "object" && !value.lookUpName)
// objMap.push(value);
--
cgit v1.2.3
From 3644cb6def4f681c99959e5729e78ea353441fad Mon Sep 17 00:00:00 2001
From: Kris Kowal
Date: Fri, 6 Jul 2012 12:34:53 -0700
Subject: Normalize to unix line terminators
---
.../RDGE/src/core/script/scenegraph.js | 2006 ++++++++++----------
1 file changed, 1003 insertions(+), 1003 deletions(-)
(limited to 'js/helper-classes/RDGE/src/core/script/scenegraph.js')
diff --git a/js/helper-classes/RDGE/src/core/script/scenegraph.js b/js/helper-classes/RDGE/src/core/script/scenegraph.js
index 789f69e5..99f9f289 100755
--- a/js/helper-classes/RDGE/src/core/script/scenegraph.js
+++ b/js/helper-classes/RDGE/src/core/script/scenegraph.js
@@ -1,1003 +1,1003 @@
-/*
-Copyright (c) 2012, Motorola Mobility, Inc
-All Rights Reserved.
-BSD License.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- - Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of Motorola Mobility nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
- */
-
-// RDGE namespaces
-var RDGE = RDGE || {};
-
-// default render proc
-// render scene nodes
-RDGE.DefaultRender = function () {
- // setup the default shader
- this.renderer = RDGE.globals.engine.getContext().renderer;
- //this.shaderProgram = this.renderer.defaultShader;
- this.jshaderProgram = new RDGE.jshader();
- this.jshaderProgram.def = this.renderer.defaultShaderDefintion;
- this.jshaderProgram.init();
-};
-
-RDGE.DefaultRender.prototype.process = function (context, trNode, parent) {
-};
-
-function renderObject(trNode, renderCtx, parent) {
- this.node = trNode ? trNode : RDGE.createTransformNode();
- this.context = renderCtx ? renderCtx : new RDGE.RenderContext();
- this.parent = parent ? parent : null;
-};
-
-
-// Scene graph contains set of tools for manipulating the graph
-RDGE.SceneGraph = function (scene) {
- if (scene == undefined || scene == null)
- scene = {};
-
- this.scene = scene;
-
- if (this.scene.root != undefined)
- this.scene = this.scene.root;
- else
- this.scene = { 'children': [] };
-
- this.tick = 0;
- this.lastTick = -1;
- this.frustumCulling = true;
-
- // the main light for the scene - also casts shadows
- this.mainLight = new RDGE.shadowLight();
-
- this.bckTypes = RDGE.rdgeConstants.categoryEnumeration;
-
- this.renderList = new Array(this.bckTypes.MAX_CAT);
- this.renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- this.renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
- this.renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
- this.renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
- this.renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
- this.renderList[this.bckTypes.FOREGROUND] = []; //FOREGROUND
-
- // a list of shadow geometry
- this.shadowRenderList = [];
-
- // scene traversal functor for creating a culled list of shadow geometry
- this.shadowCuller = null;
-
- // define passes to render geometry and handle post-processing
- this.defaultPassDef =
- {
- // a pass can have children that will receive their parents output as input
-
- // this pass renders the depth map to an off-screen target - from the shadow lights view
- // you can specify what your output should be
- // @param name - this tells jshader's of child passes (which receive the parents output as input)
- // what the sampler2d uniform name will be for this output texture
- // @param type - the type of output could be tex2d or target
- // @param width - optional width of the render target
- // @param height - optional height of the render target
- // @param mips - optional flag indicating whether the render target will support mip-mapping
-
- // the geometry pass
- 'name': "geoPass",
- 'geometrySet': "ALL"
- // 'outputs':[{ 'name':"u_mainRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'children':
- // [
- // // shadow pass
- // {
- // 'outputs':[{ 'name':"u_shadowDepthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // // custom parameter
- // 'name':"shadowDepthMap",
- // 'shader': RDGE.rdgeDepthMapShaderDef,
- // 'technique':"shadowDepthMap",
- // 'geometrySet':"SHADOW",
- // 'children':
- // [
- // // create shadow rt
- // {
- // 'outputs':[{ 'name':"u_shadowMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'name':"shadowMap",
- // 'shader': RDGE.rdgeShadowMapShader,
- // 'clearColor' : [1.0,1.0,1.0,1.0],
- // 'geometrySet':"SHADOW",
- // }
- // ]
- // },
- // // glow pass
- // {
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'name':"glowMap",
- // 'shader': RDGE.rdgeGlowMapShader,
- // 'clearColor' : [0.0,0.0,0.0,1.0],
- // 'technique':"createGlowMap",
- // 'geometrySet':"ALL",
- // 'children':
- // [
- // { // the blur pass at half resolution
- // 'name':"blurQuarter",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':256, 'height':256, 'mips':false }],
- // 'children':
- // [
- // { // the blur pass at half resolution
- // 'name':"blurThreeQuarter",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"sTexture", 'type':"target", 'width':128, 'height':128, 'mips':false }],
- // 'children':
- // [
- // { // the blur pass at quarter resolution
- // 'name':"blurFull",
- // 'geometrySet':"SCREEN_QUAD",
- // 'shader': RDGE.rdgeGaussianBlurShader,
- // 'outputs':[{ 'name':"u_glowFinal", 'type':"target", 'width':1024, 'height':1024, 'mips':false }]
- // }
- // ]
- // }
- // ]
- // }
- // ]
- // },
- // // depth map in view space
- // {
- // 'name':"depth_map",
- // 'shader': RDGE.rdgeDepthMapShaderDef,
- // 'technique': "depthMap",
- // 'outputs':[{ 'name':"u_depthMap", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'geometrySet':"ALL",
- // 'children' :
- // [
- // // get the normals in view space
- // {
- // 'name':"normals",
- // 'shader': RDGE.rdgeViewSpaceNormalsShader,
- // 'outputs':[{ 'name':"u_normalsRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'geometrySet':"ALL",
- // 'children' :
- // [
- // // techniques requiring depth and normals in view space go here
- //
- // // SSAO map
- // {
- // 'name':"SSAO",
- // 'shader': RDGE.rdgeSSAOShader,
- // 'outputs':[{ 'name':"u_ssaoRT", 'type':"target", 'width':1024, 'height':1024, 'mips':false }],
- // 'textures':[{ 'type':"tex2d", 'data':"u_depthMap" }],
- // 'geometrySet':"SCREEN_QUAD",
- // 'preRender': function()
- // {
- // this.shader.ssao.u_cameraFTR.set(this.renderer.cameraManager().getActiveCamera().getFTR());
- // }
- // }
- // ]
- // }
- // ]
- // },
- //
- // // final pass must always be last in the list
- // {
- // // this final pass has no output, its shader, however, will render its input (the previous pass's output)
- // // to the screen-quad geometry setup under the 'renderList' object
- // 'name':"finalPass",
- // 'geometrySet':"SCREEN_QUAD",
- // 'textures':[{ 'type':"tex2d", 'data':"u_glowFinal" }, { 'type':"tex2d", 'data':"u_ssaoRT" }, { 'type':"tex2d", 'data':"u_shadowMap" }],
- // 'shader': RDGE.rdgeScreenQuadShaderDef,
- // }
- // ]
- };
-
- // a graph of render passes to process in order to produce a final output
- this.renderGraph = new RDGE.jpassGraph(this.defaultPassDef);
- //this.renderGraph.shadowDepthMap.camera = this.mainLight;
-
- this.animstack = [];
- this.pushAnim = function (anim) {
- this.animstack.push(anim);
- };
-
- this.popAnim = function (anim) {
- this.animstack.pop();
- };
-
- this.playAnim = function (anim) {
- this.popAnim();
- this.pushAnim(anim);
- };
-
- this.stopAllAnims = function () {
- this.animstack = [];
- };
-
- this.jdefShaderProgram = new RDGE.jshader();
- this.jdefShaderProgram.def = RDGE.rdgeDefaultShaderDefintion;
- this.jdefShaderProgram.init();
-
- //this.defaultRenderProc = new RDGE.DefaultRender();
-
- mapping = new Array();
- mapping.process = function (trNode, parent) {
- mapping[trNode.name] = trNode;
- };
- this.Traverse(mapping);
-
- this.findNode = function (name) {
- return mapping[name];
- };
-
- /*
- * scene traversal functor for finding a node by name
- */
- findNodeByName = function (nodeName) {
- this.result = null;
- this.process = function (node, parent) {
- if (node.name == nodeName) {
- this.result = node;
- }
- return true;
- }
-
- this.init = function () { this.result = null; }
- };
-
- /*
- * scene traversal functor for creating a list of node with a given name
- */
- buildNodeList = function (nodeName) {
- this.result = [];
- this.process = function (node, parent) {
- if (node.name == nodeName) {
- this.result.push(node);
- }
- return true;
- }
- this.init = function () { this.result = []; }
- };
-
- /*
- * scene traversal functor for creating a list of nodes based on a regular expression
- */
- buildNodeListRegex = function (re) {
- this.result = [];
- this.process = function (node, parent) {
- if (re.test(node.name)) {
- this.result.push(node);
- }
- return true;
- }
- this.init = function () { this.result = []; }
- };
-
- /*
- * scene traversal functor for importing a previously exported json scene
- */
- importScene = function () {
- this.renderer = RDGE.globals.engine.getContext().renderer;
-
- this.process = function (node, parent) {
- node.parent = parent;
-
- if (node.nodeType === RDGE.rdgeConstants.nodeType.TRNODE) {
- node.transformNodeTemplate = undefined;
- RDGE.verifyTransformNode(node);
-
- if (node.materialNode) {
- node.materialNode.materialNodeTemplate = undefined;
- RDGE.verifyMaterialNode(node.materialNode);
-
- if (node.materialNode.shaderProgram) {
- var shader = new RDGE.jshader();
- shader.def = JSON.parse(node.materialNode.shaderProgram);
- shader.init();
- node.materialNode.shaderProgram = shader;
- }
-
- var texList = node.materialNode.textureList;
- for (var i = 0, len = texList.length; i < len; ++i) {
- texList[i].handle = this.renderer.getTextureByName(texList[i].handle.lookUpName, texList[i].handle.texparams.wrap, texList[i].handle.texparams.mips);
- }
-
- var lights = node.materialNode.lightChannel;
- for (var i = 0, len = lights.length; i < len; ++i) {
- if (lights[i]) {
- lights[i].lightNodeTemplate = undefined;
- RDGE.verifyLightNode(lights[i]);
- }
- }
- }
-
- // load meshes into context
- for (var i = 0, len = node.meshes.length; i < len; ++i) {
- var mesh = RDGE.globals.meshMan.getModelByName(node.meshes[i].mesh.name);
- // mesh.primitive.built = false;
- this.renderer.createPrimitive(mesh.primitive);
- }
- }
-
- return true;
- };
-
- this.init = function () { this.result = []; }
- };
-
- /*
- * helper comparison functions
- */
- __compareLessThan = function (a, b) {
- return a < b;
- };
- __compareGreaterThan = function (a, b) {
- return a > b;
- };
-
- /*
- * scene traversal functor for creating a sorted list
- */
- insertIntoSortedList = function (list, item, comparator) {
- // insert at the end
- list.push(item);
-
- var len = list.length;
-
- // get the active camera
- var cam = RDGE.globals.engine.getContext().renderer.cameraManager().getActiveCamera();
-
- // camera z plane
- var look = [cam.world[8], cam.world[9], cam.world[10]];
- // to object vector
- var toObject = [cam.world[12] - item.node.world[12], cam.world[13] - item.node.world[13], cam.world[14] - item.node.world[14]];
-
- // get the distance from object to cameras' 'z' plane
- item.depth = RDGE.vec3.dot(look, toObject);
-
- // walk down the list of object moving the current item into place until the comparison fails
- var i = len - 1;
- var temp = null;
- for (; i > 0; --i) {
- if (comparator(item.depth, list[i - 1].depth)) {
- temp = list[i - 1]
- list[i - 1] = list[i];
- list[i] = temp;
- }
- else {
- break;
- }
- }
- };
-
- /*
- * Helper function to generate a culled list of geometry for shadow mapping from the mainLights point of view
- */
- shadowCullPass = function (cameraLight, sortCat, compareFunc) {
- this.result = [];
- this.activeCam = cameraLight;
- this.bucketType = sortCat;
- this.compare = compareFunc;
-
- this.process = function (node, parent) {
- // test visibility
- if (node.bbox_world && node.bbox_world.isValid()) {
- if (!node.bbox_world.isVisible(this.activeCam.frustum)) {
- return false;
- }
- }
-
- if (node.materialNode && node.materialNode.sortCategory == this.bucketType) {
- insertIntoSortedList(this.result, { 'context': new RDGE.RenderContext(), 'node': node, 'parent': parent }, this.compare);
- }
-
- return true;
- }
- this.init = function () { this.result = []; }
- };
-
- /*
- * Helper function to create a list sorted front to back as would be used by an opaque render list
- * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
- */
- insertFrontToBack = function (list, item) {
- insertIntoSortedList(list, item, __compareLessThan);
- };
-
- /*
- * Helper function to create a list sorted back to front as would be used by an transparent render list
- * note: this is an insertion sort designed to create a new sorted list, not sort an existing list (optimization)
- */
- insertBackToFront = function (list, item) {
- insertIntoSortedList(list, item, __compareGreaterThan);
- };
-
- // sort map
- this.sortFunc = [];
- this.sortFunc[this.bckTypes.BACKGROUND] = function (list, item) { list.push(item); };
- this.sortFunc[this.bckTypes.OPAQUE] = insertFrontToBack;
- this.sortFunc[this.bckTypes.TRANSPARENT] = insertBackToFront;
- this.sortFunc[this.bckTypes.ADDITIVE] = insertBackToFront;
- this.sortFunc[this.bckTypes.TRANSLUCENT] = insertBackToFront;
- this.sortFunc[this.bckTypes.FOREGROUND] = function (list, item) { list.push(item); };
-};
-
-/*
-* functor must have 'process(node, parent)' function defined, it takes a scene transform node, and the parent
-*/
-RDGE.SceneGraph.prototype.Traverse = function (functor, isDepthFirst) {
- if (this.scene == null) {
- window.console.log("traversing a NULL scene!");
- return;
- }
-
- if (functor.init)
- functor.init();
-
- if (isDepthFirst) {
- this._TraverseDFHelper(functor, this.scene);
- }
- else {
- this._TraverseBFHelper(functor, this.scene);
- }
-};
-
-/*
-* adds a transform node under the root of the scene
-*/
-RDGE.SceneGraph.prototype.addNode = function (trNode) {
- RDGE.verifyTransformNode(trNode);
-
- this.scene.children.push({ transformNode: trNode });
-};
-
-/*
-* adds a transform node under the root of the scene
-*/
-RDGE.SceneGraph.prototype.insertUnder = function (targetNode, newNode) {
- RDGE.verifyTransformNode(targetNode);
-
- targetNode.insertAsChild(newNode);
-};
-
-/*
-* adds a transform node under the root of the scene
-*/
-RDGE.SceneGraph.prototype.insertAbove = function (targetNode, newNode) {
- RDGE.verifyTransformNode(targetNode);
-
- targetNode.insertAsParent(newNode);
-};
-
-/*
-* locates a node by name
-* @return returns the node if found or null otherwise
-*/
-RDGE.SceneGraph.prototype.getNode = function (nodeName) {
- var functor = new findNodeByName(nodeName);
- this.Traverse(functor, true);
-
- return functor.result;
-};
-
-/*
-* locates a node by name
-* @return returns a list of all node with the name requested
-*/
-RDGE.SceneGraph.prototype.getNodes = function (nodeName) {
- var functor = new buildNodeList(nodeName);
- this.Traverse(functor, true);
-
- return functor.result;
-};
-
-/*
-* locates a node by name
-* @return returns a list of all node with the name requested
-*/
-RDGE.SceneGraph.prototype.getNodesRegex = function (re) {
- if (typeof re == "string") {
- re = new RegExp(re);
- }
-
- var functor = new buildNodeListRegex(re);
- this.Traverse(functor, true);
-
- return functor.result;
-};
-
-/*
-* Depth first Traverse helper
-*/
-RDGE.SceneGraph.prototype._TraverseDFHelper = function (functor, node, parent) {
- if (node.children != 'undefined') {
- var queue = [];
-
- queue.push({ 'node': node, 'parent': null });
-
- while (queue.length > 0) {
- // pop the head and process it
- var trNode = queue.pop();
- var tr = trNode.node;
- var parent = trNode.parent;
-
- if (tr.transformNode !== undefined) {
- tr = tr.transformNode;
- if (functor.process(tr, parent) === false) {
- continue;
- }
- }
-
- if (tr.children === undefined)
- continue;
-
- // push on kids
- for (var kid = 0; kid < tr.children.length; ++kid) {
- queue.push({ 'node': tr.children[kid], 'parent': tr });
- }
- }
- }
-};
-
-/*
-* Depth first post process Traverse helper
-*/
-RDGE.SceneGraph.prototype._TraverseDFPostOrderHelper = function (functor, node, parent) {
- if (node.children != 'undefined') {
- var queue = [];
-
- queue.push({ 'node': node, 'parent': null });
-
- var top = queue.length;
-
- while (top > 0) {
-
- top = queue.length;
-
- var topNode = tr.children[top - 1];
-
- var len = topNode.children == undefined ? 0 : topNode.children.length;
-
- // push on children
- for (var child = 0; child < len; ++child) {
- queue.push({ 'node': tr.children[child], 'parent': tr });
- }
-
- // did we push anything on?
- if (len > 0)
- continue;
-
- // pop the head and process it
- var trNode = queue.pop();
- var tr = trNode.node;
- var parent = trNode.parent;
-
- if (tr.transformNode !== undefined) {
- tr = tr.transformNode;
- functor.process(tr, parent);
- }
- }
- }
-};
-
-/*
-* Depth first post process Traverse helper
-*/
-RDGE.SceneGraph.prototype.BuildBVHHelper = function (node) {
- if (node.children != 'undefined') {
- if (node.bbox_world)
- node.bbox_world.reset();
- else
- node.bbox_world = new RDGE.box();
-
- if (node.local == undefined) {
- node.local = RDGE.mat4.identity();
- }
-
- var queue = [];
-
- var idIndex = 0;
- node.id = "root";
- queue.push({ 'node': node, 'xfrm': RDGE.mat4.identity(), 'parent': null, 'visited': false });
-
- var top = queue.length;
- var topIndex = 0;
-
- while (top > 0) {
- // update the top
- top = queue.length;
- topIndex = top - 1;
-
- var curNode = queue[topIndex].node.transformNode == undefined ? queue[topIndex].node : queue[topIndex].node.transformNode;
- var parentXfrm = queue[topIndex].xfrm;
- var parent = queue[topIndex].parent;
- var visited = queue[topIndex].visited;
- if (curNode.id == undefined) curNode.id = "id" + idIndex;
-
- if (!visited) {
- // Copy the parent's world mat and setup bounding box
- if (curNode.local !== undefined) {
-
- if (curNode.bbox_world)
- curNode.bbox_world.reset();
- else
- curNode.bbox_world = new RDGE.box();
-
- var bbox = this.GetBBoxForNode(curNode);
-
- // transform child node by parent
- curNode.world = RDGE.mat4.mul(curNode.local, parentXfrm);
-
- if (bbox) {
- // update bounding box position
- curNode.bbox_world = bbox.transform(curNode.world);
- }
-
- // make sure the nodes have a bounding volume so they dont impede the propagation
- if (!bbox || !bbox.isValid()) {
- var dummybb = new RDGE.box();
- dummybb.set(0, 0);
- curNode.bbox_world = dummybb;
- }
-
- }
-
- // child count
- var len = curNode.children == undefined ? 0 : curNode.children.length;
-
- // push on children
- for (var child = 0; child < len; ++child) {
- queue.push({ 'node': curNode.children[child], 'xfrm': curNode.world, 'parent': curNode, 'visited': false });
- }
-
- idIndex++;
-
- // did we push anything on if so then this is not a leaf and we dont pop?
- if (len > 0)
- continue;
- }
-
- // propagate the bounding volume up the hierarchy
- if (parent && parent.bbox_world && parent.bbox_world.isValid()
- && curNode.bbox_world && curNode.bbox_world.isValid()) {
- parent.bbox_world.addBox(curNode.bbox_world);
- }
-
- // remove top node
- queue.pop();
-
- // update the top
- top = queue.length;
-
- if (top > 0) {
- // if the previous node in the stack/queue was the parent of this node, then mark the parent as visited
- var prevNode = queue[top - 1].node.transformNode == undefined ? queue[top - 1].node : queue[top - 1].node.transformNode;
-
- if (prevNode.id == parent.id)
- queue[top - 1].visited = true;
- }
- }
- }
-};
-
-
-/*
-* Breadth first Traverse helper
-*/
-RDGE.SceneGraph.prototype._TraverseBFHelper = function (functor, node) {
-
- if (node.children != 'undefined') {
- var queue = [];
-
- queue.push({ 'node': node, 'parent': null });
-
- while (queue.length > 0) {
- // pop the head and process it
- var trNode = queue.shift();
- var tr = trNode.node;
- var parent = trNode.parent;
-
- if (tr.transformNode !== undefined) {
- tr = tr.transformNode;
- functor.process(tr, parent);
- }
-
- if (tr.children === undefined)
- continue;
-
- // push on kids
- for (var kid = 0; kid < tr.children.length; ++kid) {
- queue.push({ 'node': tr.children[kid], 'parent': tr });
- }
- }
- }
-};
-
-/*
-* Update the scene
-*/
-RDGE.SceneGraph.prototype.update = function (dt) {
- var renderer = RDGE.globals.engine.getContext().renderer;
- RDGE.globals.engine.getContext().debug.mat4CallCount = 0;
-
- // animation update...
- var i = this.animstack.length - 1;
- while (i >= 0) {
- this.animstack[i].step(dt);
- --i;
- }
-
- this.BuildBVHHelper(this.scene);
-
- RDGE.g_particleSystemManager.update(dt);
-
- var activeCam = renderer.cameraManager().getActiveCamera();
- if (activeCam !== undefined && activeCam != null && activeCam.controller != null && activeCam.controller.world !== undefined) {
- activeCam.setWorld(activeCam.controller.world);
- }
- this.tick++;
-};
-
-/*
-* Render the scene
-*/
-RDGE.SceneGraph.prototype.render = function (renderProc, forceThisProc) {
- if (this.scene.children.length == 0)
- return;
-
- var renderer = RDGE.globals.engine.getContext().renderer;
-
- RDGE.rdgeGlobalParameters.u_shadowLightFarZ.set([this.mainLight.zFar()]);
-
- this.renderList = this._RenderDFHelper(renderer, renderProc, this.scene, forceThisProc);
-
- if (this.shadowsEnabled) {
- this.Traverse(this.shadowCuller, true);
- this.shadowRenderList = this.shadowCuller.result;
- }
-
- this.renderGraph.render(this);
-
- RDGE.g_particleSystemManager.render();
-};
-
-/*
-* Returns the bbox for the passed node, if present
-*/
-RDGE.SceneGraph.prototype.GetBBoxForNode = function (tr) {
- var bbox = null;
-
- if (tr.materialNode && tr.materialNode.meshNode) {
- var mesh = tr.materialNode.meshNode.mesh;
- var model = null;
-
- model = RDGE.globals.meshMan.getModelByName(mesh.name);
-
- if (model != null)
- bbox = model.bbox;
- }
-
- return bbox;
-};
-
-/*
-* Depth first Traverse Render helper
-*/
-
-RDGE.SceneGraph.prototype._RenderDFHelper = function (renderer, renderProc, node, forceThisProc) {
- renderList = [];
- renderList[this.bckTypes.BACKGROUND] = []; //BACKGROUND
- renderList[this.bckTypes.OPAQUE] = []; //OPAQUE
- renderList[this.bckTypes.TRANSPARENT] = []; //TRANSPARENT
- renderList[this.bckTypes.ADDITIVE] = []; //ADDITIVE
- renderList[this.bckTypes.TRANSLUCENT] = []; //TRANSLUCENT
- renderList[this.bckTypes.FOREGROUND] = []; //FOREGROUND
-
- if (node.children != 'undefined') {
- var queue_bf = [];
-
- //
- // Render Pass
- //
- // the context - default settings
- var _Ctx = RDGE.globals.engine.defaultContext;
-
- // last depth in tree
- var lastAppliedID = 0;
-
- var isRoot = true, isVisible = true, contextDirty = true;
-
- queue_bf.push({ 'node': node, 'curCtx': _Ctx });
-
- var activeCam = renderer.cameraManager().getActiveCamera();
-
- while (queue_bf.length > 0) {
-
- isVisible = true;
-
- // pop the head and process it
- var trNode = queue_bf.pop();
- var tr = trNode.node;
-
-
- // default context
- var curCtx = new RDGE.RenderContext();
- curCtx.Load(trNode.curCtx);
-
- // flatten out matrices gather render context from material and render
- if (tr.transformNode !== undefined) {
-
- tr = tr.transformNode; // if transform exist we need to use it as our current node to check for kids
-
- if (tr.hide !== undefined && tr.hide == true) {
- continue;
- }
-
- // test visibility
- if (this.frustumCulling && tr.bbox_world && tr.bbox_world.isValid()) {
- if (!tr.bbox_world.isVisible(activeCam.frustum)) {
- continue;
- }
- }
-
- curCtx.shaderProg = this.jdefShaderProgram;
-
- var renderBucket = RDGE.rdgeConstants.categoryEnumeration.OPAQUE;
-
- // get material if its available
- if (tr.materialNode) {
- renderBucket = tr.materialNode.sortCategory;
-
- // set shader to use
- if (tr.materialNode.shaderProgram !== undefined) {
- curCtx.shaderProg = tr.materialNode.shaderProgram; // use whats on the node if we are not beinged forced
- }
-
- if (tr.materialNode.textureList !== undefined) {
- curCtx.textureList = tr.materialNode.textureList.slice();
- }
-
- if (tr.materialNode.uniforms.length > 0) {
- curCtx.uniforms = tr.materialNode.uniforms.slice();
- }
-
- var len = tr.materialNode.lightChannel.length;
- for (var i = 0; i < len; ++i) {
- if (tr.materialNode.lightChannel[i])
- curCtx.lights[i] = tr.materialNode.lightChannel[i];
- }
- }
-
- // push onto deferred render list
- this.sortFunc[renderBucket](renderList[renderBucket], { 'context': curCtx, 'node': tr, 'parent': parent });
- }
-
- if (tr.children === undefined)
- continue;
-
- // push on kids
- var numKids = tr.children.length;
- for (var kid = 0; kid < numKids; ++kid) {
- queue_bf.push({ 'node': tr.children[kid], 'curCtx': curCtx });
- }
-
- }
- }
-
- return renderList;
-};
-
-RDGE.SceneGraph.prototype.enableShadows = function (areEnabled) {
- if (areEnabled) {
- var renderer = RDGE.globals.engine.getContext().renderer;
-
- this.shadowCuller = new shadowCullPass(this.mainLight, RDGE.rdgeConstants.categoryEnumeration.OPAQUE, function (a, b) { return a < b; });
-
- this.mainLight.init();
- // lights position and point of view
- this.mainLight.setPerspective(45.0, renderer.vpWidth / renderer.vpHeight, 1.0, 200.0);
- this.mainLight.setLookAt([-60, 17, -15], [-5, -5, 15], RDGE.vec3.up());
-
- // setup light params
- RDGE.rdgeGlobalParameters.u_shadowLightWorld.set(this.mainLight.world);
- RDGE.rdgeGlobalParameters.u_vShadowLight.set(this.mainLight.view);
- var shadowMatrix = RDGE.mat4.identity();
- shadowMatrix = RDGE.mat4.scale(shadowMatrix, [0.5, 0.5, 0.5]);
- shadowMatrix = RDGE.mat4.translate(shadowMatrix, [0.5, 0.5, 0.5]);
- RDGE.rdgeGlobalParameters.u_shadowBiasMatrix.set(shadowMatrix);
- var BiasProjViewMat = RDGE.mat4.mul(this.mainLight.proj, shadowMatrix);
- BiasProjViewMat = RDGE.mat4.mul(this.mainLight.view, BiasProjViewMat);
- RDGE.rdgeGlobalParameters.u_shadowBPV.set(BiasProjViewMat);
-
- this.shadowsEnabled = true;
- }
- else {
- this.mainLight = null;
- this.shadowsEnabled = false;
- }
-};
-
-
-RDGE.SceneGraph.prototype.exportJSON = function () {
- objMap = [];
-
- function replacer(key, value) {
- if (key == 'bbox_world') {
- return null;
- }
- // else if(key === 'image')
- // {
- // return "image";
- // }
- else if (key === 'parent') {
- return "parent";
- }
-
- // for(var i = 0, len = objMap.length; i < len; ++i)
- // {
- // if((value && typeof value === "object" && !value.jsonExportName && value === objMap[i]) || (value && value.baseURI !== undefined))
- // {
- // return 'replaced';
- // }
- // }
- //
- // if(value && value.baseURI === undefined && typeof value === "object" && !value.lookUpName)
- // objMap.push(value);
-
- return value;
- }
-
- var val = { 'scene': null, 'meshes': null };
- val.scene = JSON.stringify(this.scene, replacer);
-
- val.meshes = RDGE.globals.meshMan.exportJSON();
-
- val = JSON.stringify(val);
-
- return val;
-};
-
-RDGE.SceneGraph.prototype.importJSON = function (jsonScene) {
- try {
- if (jsonScene) {
- var sceneImport = JSON.parse(jsonScene);
-
- if (sceneImport) {
- this.scene = JSON.parse(sceneImport.scene);
-
- if (sceneImport.meshes) {
- RDGE.globals.meshMan.importJSON(sceneImport.meshes);
- }
-
- if (this.scene) {
- // traverse the scene, re-creating missing components
- var importer = new importScene();
- this.Traverse(importer, true);
-
- window.console.log("scene imported");
- }
- }
- }
- } catch (e) {
- window.console.error("error importing JSON scene: " + e.description);
- }
-};
+/*
+Copyright (c) 2012, Motorola Mobility, Inc
+All Rights Reserved.
+BSD License.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ - Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the name of Motorola Mobility nor the names of its contributors
+ may be used to endorse or promo