summaryrefslogtreecommitdiffstats
path: root/o3d/samples/o3d-webgl/base.js
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/samples/o3d-webgl/base.js')
-rw-r--r--o3d/samples/o3d-webgl/base.js211
1 files changed, 211 insertions, 0 deletions
diff --git a/o3d/samples/o3d-webgl/base.js b/o3d/samples/o3d-webgl/base.js
new file mode 100644
index 0000000..9863ee6
--- /dev/null
+++ b/o3d/samples/o3d-webgl/base.js
@@ -0,0 +1,211 @@
+/*
+ * Copyright 2010, 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 Base for all o3d classes implemented in javscript.
+ * Include just this file in a script tag and it will include all other
+ * source files needed by o3d.
+ * For more information about o3d see
+ * http://code.google.com/p/o3d.
+ */
+
+/**
+ * A namespace for all the o3d classes.
+ * @namespace
+ */
+var o3d = o3d || {};
+
+/**
+ * Define this because the Google internal JSCompiler needs goog.typedef below.
+ */
+var goog = goog || {};
+
+/**
+ * A macro for defining composite types.
+ *
+ * By assigning goog.typedef to a name, this tells Google internal JSCompiler
+ * that this is not the name of a class, but rather it's the name of a composite
+ * type.
+ *
+ * For example,
+ * /** @type {Array|NodeList} / goog.ArrayLike = goog.typedef;
+ * will tell JSCompiler to replace all appearances of goog.ArrayLike in type
+ * definitions with the union of Array and NodeList.
+ *
+ * Does nothing in uncompiled code.
+ */
+goog.typedef = true;
+
+/**
+ * Reference to the global context. In most cases this will be 'window'.
+ */
+o3d.global = this;
+
+/**
+ * Path for included scripts.
+ * @type {string}
+ */
+o3d.basePath = '';
+
+/**
+ * Tries to detect the base path of the base.js script that
+ * bootstraps the o3d libraries.
+ * @private
+ */
+o3d.findBasePath_ = function() {
+ var doc = o3d.global.document;
+ if (typeof doc == 'undefined') {
+ return;
+ }
+ if (o3d.global.BASE_PATH) {
+ o3d.basePath = o3d.global.BASE_PATH;
+ return;
+ } else {
+ // HACK to hide compiler warnings :(
+ o3d.global.BASE_PATH = null;
+ }
+ var scripts = doc.getElementsByTagName('script');
+ for (var script, i = 0; script = scripts[i]; i++) {
+ var src = script.src;
+ var l = src.length;
+ var s = 'o3d-webgl/base.js';
+ var sl = s.length;
+ if (src.substr(l - sl) == s) {
+ o3d.basePath = src.substr(0, l - sl) + 'o3d-webgl/';
+ return;
+ }
+ }
+};
+
+/**
+ * Writes a script tag for the given o3d source file name
+ * to the document. (Must be called at execution time.)
+ * @param {string} src The full path to the source file.
+ * @private
+ */
+o3d.writeScriptTag_ = function(src) {
+ var doc = o3d.global.document;
+ if (typeof doc != 'undefined') {
+ doc.write('<script type="text/javascript" src="' +
+ src + '"></' + 'script>');
+ }
+};
+
+/**
+ * Includes the file indicated by the rule by adding a script tag.
+ * @param {string} rule Rule to include, in the form o3d.package.part.
+ */
+o3d.include = function(rule) {
+ var parts = rule.split('.');
+ var path = parts[parts.length - 1] + '.js';
+ o3d.writeScriptTag_(o3d.basePath + path);
+};
+
+
+/**
+ * Makes one class inherit from another. Adds the member variables superClass
+ * and superClassName to the prototype of the sub class.
+ * @param {string} subClass Class that wants to inherit.
+ * @param {string} superClass Class to inherit from.
+ */
+o3d.inherit = function(subClassName, superClassName) {
+ var superClass = o3d.global.o3d[superClassName];
+ var subClass = o3d.global.o3d[subClassName];
+
+ if (!superClass)
+ throw ('Invalid superclass: ' + superClassName);
+ if (!subClass)
+ throw ('Invalid subclass: ' + subClassName);
+
+ subClass.prototype = new superClass;
+ subClass.prototype.superClassName = superClassName;
+ subClass.prototype.superClass = superClass;
+};
+
+
+/**
+ * If an o3d function has not been implemented in javascript yet, it should
+ * call this function to throw an error because it's better than doing
+ * nothing.
+ */
+o3d.notImplemented = function() {
+ var callerName = arguments.caller.toString();
+ callerName = callerName.substr('function '.length);
+ callerName = ownName.substr(0, ownName.indexOf('('));
+ throw 'Not implemented: ' + callerName;
+};
+
+
+// First find the path to the directory where all o3d-webgl sources live.
+o3d.findBasePath_();
+
+
+// Unlike o3djs, we include all o3d-webgl files at once, this way, an o3d
+// developer converting to use these classes only has to include this
+// javascript file.
+o3d.include('object_base');
+o3d.include('named_object_base');
+o3d.include('named_object');
+o3d.include('param_object');
+o3d.include('param');
+o3d.include('event');
+o3d.include('raw_data');
+o3d.include('file_request');
+o3d.include('client');
+o3d.include('render_node');
+o3d.include('clear_buffer');
+o3d.include('state_set');
+o3d.include('viewport');
+o3d.include('tree_traversal');
+o3d.include('draw_list');
+o3d.include('draw_pass');
+o3d.include('render_surface_set');
+o3d.include('render_surface');
+o3d.include('state');
+o3d.include('draw_context');
+o3d.include('texture');
+o3d.include('sampler');
+o3d.include('transform');
+o3d.include('pack');
+o3d.include('bounding_box');
+o3d.include('draw_element');
+o3d.include('element');
+o3d.include('field');
+o3d.include('buffer');
+o3d.include('stream');
+o3d.include('stream_bank');
+o3d.include('primitive');
+o3d.include('shape');
+o3d.include('effect');
+o3d.include('material');
+
+