topical media & game development

talk show tell print

graphic-o3d-samples-o3djs-dump.js / js



  /*
   * Copyright 2009, Google Inc.
   * All rights reserved.
   *
   * 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 Google Inc. 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.
   */
  
  
@fileoverview This file contains various dumping functions for o3d. It puts them in the "dump" module on the o3djs object. Note: This library is only a sample. It is not meant to be some official library. It is provided only as example code.

  
  
  o3djs.provide('o3djs.dump');
  
  
A Module for dumping information about o3d objects. @namespace

  
  o3djs.dump = o3djs.dump || {};
  
  
Dump the 3 elements of an array of numbers. @private
parameter: {string} label Label to put in front of dump.
parameter: {!Array.} object Array.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpXYZ_ = function(label, object, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump(opt_prefix + label + ' : ' + object[0] + ', ' +
                    object[1] + ', ' + object[2] + '\n');
  };
  
  
Dump the 4 elements of an array of numbers. @private
parameter: {string} label Label to put in front of dump.
parameter: {!Array.} object Array.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpXYZW_ = function(label, object, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump(opt_prefix + label + ' : ' +
                    object[0] + ', ' +
                    object[1] + ', ' +
                    object[2] + ', ' +
                    object[3] + '\n');
  };
  
  
Get the name of a function. @private
parameter: {!function} theFunction Function.
returns: {string} The function name.

  
  o3djs.dump.getFunctionName_ = function(theFunction) {
    if (theFunction.name) {
      return theFunction.name;
    }
  
    // try to parse the function name from the definition
    var definition = theFunction.toString();
    var name = definition.substring(definition.indexOf('function') + 8,
                                    definition.indexOf('('));
    if (name) {
      return name;
    }
  
    // sometimes there won't be a function name
    // like for dynamic functions
    return '*anonymous*';
  };
  
  
Get the signature of a function. @private
parameter: {!function} theFunction Function.
returns: {string} The function signature.

  
  o3djs.dump.getSignature_ = function(theFunction) {
    var signature = o3djs.dump.getFunctionName_(theFunction);
    signature += '(';
    for (var x = 0; x < theFunction.arguments.length; x++) {
      // trim long arguments
      var nextArgument = theFunction.arguments[x];
      if (nextArgument.length > 30) {
        nextArgument = nextArgument.substring(0, 30) + '...';
      }
  
      // apend the next argument to the signature
      signature += "'" + nextArgument + "'";
  
      // comma separator
      if (x < theFunction.arguments.length - 1) {
        signature += ', ';
      }
    }
    signature += ')';
    return signature;
  };
  
  
Prints a value the console or log or wherever it thinks is appropriate for debugging.
parameter: {string} string String to print.

  
  o3djs.dump.dump = function(string) {
    o3djs.BROWSER_ONLY;
    if (window.dump) {
      window.dump(string);
    } else if (window.console && window.console.log) {
      window.console.log(string);
    }
  };
  
  
Gets the value of a matrix as a string.
parameter: {Matrix4} matrix Matrix4 to get value of.
parameter: {string} opt_prefix Optional prefix for indenting.
returns: {string} Value of param.

  
  o3djs.dump.getMatrixAsString = function(matrix, opt_prefix) {
    opt_prefix = opt_prefix || '';
    var result = opt_prefix + '[';
    for (var i = 0; 1; ++i){
      var mi = matrix[i];
      result += '[';
      for (var j = 0; 1; ++j) {
        result += mi[j];
        if (j < mi.length - 1) {
          result += ', ';
        } else {
          result += ']';
          break;
        }
      }
      if (i < matrix.length - 1) {
        result += '\n';
        result += opt_prefix;
      } else {
        break;
      }
    }
    result += ']';
    return result;
  };
  
  
Dumps a point3
parameter: {string} label Label to put in front of dump.
parameter: {o3d.Point3} point3 Point3 to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpPoint3 = function(label, point3, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dumpXYZ_(label, point3, opt_prefix);
  };
  
  
Dumps a float3
parameter: {string} label Label to put in front of dump.
parameter: {o3d.Float3} float3 Float3 to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpFloat3 = function(label, float3, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dumpXYZ_(label, float3, opt_prefix);
  };
  
  
Dumps a vector3
parameter: {string} label Label to put in front of dump.
parameter: {o3d.Vector3} vector3 Vector3 to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpVector3 = function(label, vector3, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dumpXYZ_(label, vector3, opt_prefix);
  };
  
  
Dumps a float4
parameter: {string} label Label to put in front of dump.
parameter: {o3d.Float4} float4 Float4 to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpFloat4 = function(label, float4, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dumpXYZW_(label, float4, opt_prefix);
  };
  
  
Dumps a vector4
parameter: {string} label Label to put in front of dump.
parameter: {!Array.} vector4 vector to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpVector4 = function(label, vector4, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dumpXYZW_(label, vector4, opt_prefix);
  };
  
  
Dumps a matrix
parameter: {string} label Label to put in front of dump.
parameter: {o3d.Matrix} matrix Matrix to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpMatrix = function(label, matrix, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump(
        opt_prefix + label + ' :\n' +
        o3djs.dump.getMatrixAsString(matrix, opt_prefix + '    ') +
        '\n');
  };
  
  
Dump a bounding box.
parameter: {string} label Label to put in front of dump.
parameter: {o3d.BoundingBox} boundingBox BoundingBox to dump.
parameter: {string} opt_prefix optional prefix for indenting.

  
  o3djs.dump.dumpBoundingBox = function(label,
                                        boundingBox,
                                        opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump(opt_prefix + label + ' :\n');
    o3djs.dump.dumpPoint3('min : ',
                          boundingBox.minExtent,
                          opt_prefix + '    ');
    o3djs.dump.dumpPoint3('max : ',
                          boundingBox.maxExtent,
                          opt_prefix + '    ');
  };
  
  
Gets the value of a parameter as a string.
parameter: {Param} param Parameter to get value of.
parameter: {string} opt_prefix Optional prefix for indenting.
returns: {string} Value of param.

  
  o3djs.dump.getParamValueAsString = function(param, opt_prefix) {
    opt_prefix = opt_prefix || '';
    var value = '*unknown*';
  
    if (param.isAClassName('o3d.ParamFloat')) {
      value = param.value.toString();
    } else if (param.isAClassName('o3d.ParamFloat2')) {
      value = '[' + param.value[0] + ', ' +
                    param.value[1] + ']';
    } else if (param.isAClassName('o3d.ParamFloat3')) {
      value = '[' + param.value[0] + ', ' +
                    param.value[1] + ', ' +
                    param.value[2] + ']';
    } else if (param.isAClassName('o3d.ParamFloat4')) {
      value = '[' + param.value[0] + ', ' +
                    param.value[1] + ', ' +
                    param.value[2] + ', ' +
                    param.value[3] + ']';
    } else if (param.isAClassName('o3d.ParamInteger')) {
      value = param.value.toString();
    } else if (param.isAClassName('o3d.ParamBoolean')) {
      value = param.value.toString();
    } else if (param.isAClassName('o3d.ParamMatrix4')) {
      value = '\n' + o3djs.dump.getMatrixAsString(param.value,
                                                  opt_prefix + '    ');
    } else if (param.isAClassName('o3d.ParamString')) {
      value = param.value;
    } else if (param.isAClassName('o3d.ParamTexture')) {
      value = param.value;
      value = 'texture : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamSampler')) {
      value = param.value;
      value = 'sampler : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamMaterial')) {
      value = param.value;
      value = 'material : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamEffect')) {
      value = param.value;
      value = 'effect : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamState')) {
      value = param.value;
      value = 'state : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamTransform')) {
      value = param.value;
      value = 'transform : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamDrawList')) {
      value = param.value;
      value = 'drawlist : "' + (value ? value.name : 'NULL') + '"';
    } else if (param.isAClassName('o3d.ParamDrawContext')) {
      value = param.value;
      value = 'drawcontext : "' + (value ? value.name : 'NULL') + '"';
    }
  
    return value;
  };
  
  
Dumps an single parameter
parameter: {Param} param Param to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpParam = function(param, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump (
        opt_prefix + param.className + ' : "' + param.name + '" : ' +
        o3djs.dump.getParamValueAsString(param, opt_prefix) + '\n');
  };
  
  
Given a ParamObject dumps all the Params on it.
parameter: {ParamObject} param_object ParamObject to dump Params of.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpParams = function(param_object, opt_prefix) {
    opt_prefix = opt_prefix || '';
    // print params
    var params = param_object.params;
    for (var p = 0; p < params.length; p++) {
      o3djs.dump.dumpParam(params[p], opt_prefix);
    }
  };
  
  
Given a ParamObject dumps it and all the Params on it.
parameter: {ParamObject} param_object ParamObject to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpParamObject = function(param_object, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump (
        opt_prefix + param_object.className + ' : "' +
        param_object.name + '"\n');
    o3djs.dump.dumpParams(param_object, opt_prefix + '    ');
  };
  
  
Given a Stream dumps it and all the Params on it.
parameter: {Stream} stream Stream to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpStream = function(stream, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump(
        opt_prefix + 'semantic: ' + stream.semantic +
        ', index: ' + stream.semanticIndex +
        ', dataType: ' + stream.dataType +
        ', field: ' + stream.field.name + '\n');
  };
  
  
Given a element dumps its name, all the Params and DrawElements on it.
parameter: {Element} element Element to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpElement = function(element, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dump (opt_prefix + '------------ Element --------------\n');
  
    // get type
    o3djs.dump.dump (
        opt_prefix + 'Element: "' + element.name + '"\n');
  
    // print params
    o3djs.dump.dump (opt_prefix + '  --Params--\n');
    o3djs.dump.dumpParams (element, opt_prefix + '  ');
  
    // print elements.
    o3djs.dump.dump (opt_prefix + '  --DrawElements--\n');
    var drawElements = element.drawElements;
    for (var g = 0; g < drawElements.length; g++) {
      var drawElement = drawElements[g]
      o3djs.dump.dumpParamObject(drawElement, opt_prefix + '    ');
    }
  
    if (element.isAClassName('o3d.Primitive')) {
      o3djs.dump.dump (
          opt_prefix + '  primitive type: ' + element.primitiveType + '\n');
      o3djs.dump.dump (
          opt_prefix + '  number vertices: ' + element.numberVertices + '\n');
      o3djs.dump.dump (
          opt_prefix + '  number primitives: ' + element.numberPrimitives +
          '\n');
      var streamBank = element.streamBank;
      if (streamBank) {
        var streams = streamBank.vertexStreams;
        for (var ss = 0; ss < streams.length; ss++) {
          var stream = streams[ss];
          o3djs.dump.dump(opt_prefix + '  stream ' + ss + ': ');
          o3djs.dump.dumpStream(stream);
        }
      }
    }
  };
  
  
Given a shape dumps its name, all the Params and Primitves on it.
parameter: {Shape} shape Shape to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpShape = function(shape, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dump (opt_prefix + '------------ Shape --------------\n');
  
    // get type
    o3djs.dump.dump (
        opt_prefix + 'Shape: "' + shape.name + '"\n');
  
    // print params
    o3djs.dump.dump (opt_prefix + '  --Params--\n');
    o3djs.dump.dumpParams (shape, opt_prefix + '  ');
  
    // print elements.
    o3djs.dump.dump (opt_prefix + '  --Elements--\n');
    var elements = shape.elements;
    for (var p = 0; p < elements.length; p++) {
      var element = elements[p];
      o3djs.dump.dumpElement(element, opt_prefix + '    ');
    }
  };
  
  
Given a texture dumps its name and other info. it.
parameter: {o3d.Texture} texture Texture to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpTexture = function(texture, opt_prefix) {
    opt_prefix = opt_prefix || '';
    var uri = '';
    var param = texture.getParam('uri');
    if (param) {
      uri = param.value;
    }
    o3djs.dump.dump (
        opt_prefix + texture.className +
        ' : "' + texture.name +
        '" uri : "' + uri +
        '" width: ' + texture.width +
        ' height: ' + texture.height +
        ' alphaIsOne: ' + texture.alphaIsOne +
        '\n');
  };
  
  
Given a transform dumps its name and all the Params and Shapes on it.
parameter: {Transform} transform Transform to dump.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpTransform = function(transform, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dump (opt_prefix + '----------- Transform -------------\n');
  
    // get type
    o3djs.dump.dump (
        opt_prefix + 'Transform: ' + transform.name + '"\n');
  
    // print params
    o3djs.dump.dump (opt_prefix + '  --Local Matrix--\n');
    o3djs.dump.dump (
        o3djs.dump.getMatrixAsString(transform.localMatrix,
                                     opt_prefix + '    ') + '\n');
  
    // print params
    o3djs.dump.dump (opt_prefix + '  --Params--\n');
    o3djs.dump.dumpParams (transform, opt_prefix + '  ');
  
    // print shapes.
    o3djs.dump.dump (opt_prefix + '  --Shapes--\n');
    var shapes = transform.shapes;
    for (var s = 0; s < shapes.length; s++) {
      var shape = shapes[s];
      o3djs.dump.dumpNamedObjectName(shape, opt_prefix + '  ');
    }
  };
  
  
Dumps an entire transform graph tree.
parameter: {Transform} transform Transform to start dumping from.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpTransformTree = function(transform, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dumpTransform(transform, opt_prefix);
  
    var child_prefix = opt_prefix + '    ';
    var children = transform.children;
    for (var c = 0; c < children.length; c++) {
      o3djs.dump.dumpTransformTree(children[c], child_prefix);
    }
  };
  
  
Dumps a list of Transforms.
parameter: {TransformArray} transform_list Array of Transforms to dump.

  
  o3djs.dump.dumpTransformList = function(transform_list) {
    o3djs.dump.dump (transform_list.length + ' transforms in list!!!\n');
    for (var i = 0; i < transform_list.length; i++) {
      o3djs.dump.dumpTransform(transform_list[i]);
    }
  };
  
  
Dumps the name and class of a NamedObject.
parameter: {NamedObject} namedObject to use.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpNamedObjectName = function(namedObject, opt_prefix) {
    opt_prefix = opt_prefix || '';
    o3djs.dump.dump (
        opt_prefix + namedObject.className + ' : "' + namedObject.name +
        '"\n');
  };
  
  
Dumps a RenderNode and all its paramaters.
parameter: {RenderNode} render_node RenderNode to use.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpRenderNode = function(render_node, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dump (opt_prefix + '----------- Render Node -----------\n');
    // get type
    o3djs.dump.dumpNamedObjectName(render_node, opt_prefix);
  
    // print params
    o3djs.dump.dump (opt_prefix + '  --Params--\n');
    o3djs.dump.dumpParams(render_node, opt_prefix + '  ');
  };
  
  
Dumps an entire RenderGraph tree.
parameter: {RenderNode} render_node RenderNode to start dumping from.
parameter: {string} opt_prefix Optional prefix for indenting.

  
  o3djs.dump.dumpRenderNodeTree = function(render_node, opt_prefix) {
    opt_prefix = opt_prefix || '';
  
    o3djs.dump.dumpRenderNode(render_node, opt_prefix);
  
    var child_prefix = opt_prefix + '    ';
    var children = render_node.children;
    for (var c = 0; c < children.length; c++) {
      o3djs.dump.dumpRenderNodeTree(children[c], child_prefix);
    }
  };
  
  
Dumps a javascript stack track.

  
  o3djs.dump.dumpStackTrace = function() {
    o3djs.dump.dump('Stack trace:\n');
    var nextCaller = arguments.callee.caller;
    while (nextCaller) {
      o3djs.dump.dump(o3djs.dump.getSignature_(nextCaller) + '\n');
      nextCaller = nextCaller.caller;
    }
    o3djs.dump.dump('\n\n');
  };
  
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.