summaryrefslogtreecommitdiffstats
path: root/o3d/samples/o3d-webgl
diff options
context:
space:
mode:
authorpetersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-17 21:36:08 +0000
committerpetersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-17 21:36:08 +0000
commit422e69530732e4f54acb649ea8130ed22e3ccb53 (patch)
treecd556e693f9448a83d63a764e13561c67c883d6e /o3d/samples/o3d-webgl
parenta81e44e1ccd4c19de283dcd1e90da04bf8ae0208 (diff)
downloadchromium_src-422e69530732e4f54acb649ea8130ed22e3ccb53.zip
chromium_src-422e69530732e4f54acb649ea8130ed22e3ccb53.tar.gz
chromium_src-422e69530732e4f54acb649ea8130ed22e3ccb53.tar.bz2
Sorts drawlists by priority or by depth as indicated by the flag in the DrawPass.
Review URL: http://codereview.chromium.org/2075003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47459 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/samples/o3d-webgl')
-rw-r--r--o3d/samples/o3d-webgl/draw_list.js47
-rw-r--r--o3d/samples/o3d-webgl/draw_pass.js3
-rw-r--r--o3d/samples/o3d-webgl/transform.js26
3 files changed, 69 insertions, 7 deletions
diff --git a/o3d/samples/o3d-webgl/draw_list.js b/o3d/samples/o3d-webgl/draw_list.js
index 875f237..6132a8b 100644
--- a/o3d/samples/o3d-webgl/draw_list.js
+++ b/o3d/samples/o3d-webgl/draw_list.js
@@ -69,10 +69,55 @@ o3d.DrawList.BY_PRIORITY = 2;
/**
+ * Compare function for by-priority sort.
+ */
+o3d.DrawList.comparePriority_ = function(drawElementInfoA, drawElementInfoB) {
+ return drawElementInfoA.drawElement.owner.priority -
+ drawElementInfoB.drawElement.owner.priority;
+};
+
+
+/**
+ * Compare function for by-z-coordinate sort.
+ * @param {!o3d.DrawElement} drawElementInfoA
+ * @param {!o3d.DrawElement} drawElementInfoB
+ */
+o3d.DrawList.compareZ_ = function(drawElementInfoA, drawElementInfoB) {
+ return o3d.Transform.transformPointZOnly(
+ drawElementInfoA.worldViewProjection,
+ drawElementInfoA.drawElement.owner.zSortPoint) -
+ o3d.Transform.transformPointZOnly(
+ drawElementInfoB.worldViewProjection,
+ drawElementInfoB.drawElement.owner.zSortPoint);
+};
+
+
+/**
+ * Sorts this list according to the given sort method.
+ * @param {o3d.DrawList.SortMethod} sort_method Which method to use.
+ * @private
+ */
+o3d.DrawList.prototype.sort_ = function(sort_method) {
+ switch (sort_method) {
+ case o3d.DrawList.BY_PRIORITY:
+ this.list_.sort(o3d.DrawList.comparePriority_);
+ break;
+
+ case o3d.DrawList.BY_Z_ORDER:
+ this.list_.sort(o3d.DrawList.compareZ_);
+ break;
+
+ case o3d.DrawList.BY_PERFORMANCE:
+ default:
+ break;
+ }
+};
+
+
+/**
* Renders the draw list.
*/
o3d.DrawList.prototype.render = function() {
- // TODO(petersont): Add sort.
for (var i = 0; i < this.list_.length; ++i) {
var drawElementInfo = this.list_[i];
var world = drawElementInfo.world;
diff --git a/o3d/samples/o3d-webgl/draw_pass.js b/o3d/samples/o3d-webgl/draw_pass.js
index 600f641..c02601b 100644
--- a/o3d/samples/o3d-webgl/draw_pass.js
+++ b/o3d/samples/o3d-webgl/draw_pass.js
@@ -32,7 +32,7 @@
/**
* A DrawPass renders a DrawList.
- *
+ *
* @param {o3d.DrawList} drawList The DrawList used by this DrawPass.
* @param {o3d.DrawPass.SortMethod} sortMethod ParamInteger The method
* of sorting this DrawPass.
@@ -69,6 +69,7 @@ o3d.ParamObject.setUpO3DParam_(o3d.DrawPass, 'sortMethod', 'ParamInteger');
*/
o3d.DrawPass.prototype.before = function() {
if (this.drawList) {
+ this.drawList.sort_(this.sortMethod);
this.drawList.render();
}
};
diff --git a/o3d/samples/o3d-webgl/transform.js b/o3d/samples/o3d-webgl/transform.js
index 929abfd..6499da2 100644
--- a/o3d/samples/o3d-webgl/transform.js
+++ b/o3d/samples/o3d-webgl/transform.js
@@ -612,11 +612,6 @@ o3d.Transform.transformPoint = function(m, v) {
var v0 = v[0];
var v1 = v[1];
var v2 = v[2];
-
- if (!m) {
- debugger;
- }
-
var m0 = m[0];
var m1 = m[1];
var m2 = m[2];
@@ -629,6 +624,27 @@ o3d.Transform.transformPoint = function(m, v) {
};
+/**
+ * Takes a 4-by-4 matrix and a vector with 3 entries,
+ * interprets the vector as a point, transforms that point by the matrix,
+ * returning the z-component of the result only.
+ * @param {!o3djs.math.Matrix4} m The matrix.
+ * @param {!o3djs.math.Vector3} v The point.
+ * @return {number} The z coordinate of the transformed point.
+ */
+o3d.Transform.transformPointZOnly = function(m, v) {
+ var v0 = v[0];
+ var v1 = v[1];
+ var v2 = v[2];
+ var m0 = m[0];
+ var m1 = m[1];
+ var m2 = m[2];
+ var m3 = m[3];
+
+ var d = (v0 * m0[2] + v1 * m1[2] + v2 * m2[2] + m3[2]) /
+ (v0 * m0[3] + v1 * m1[3] + v2 * m2[3] + m3[3]);
+};
+
/**
* Pre-composes the local matrix of this Transform with a rotation about the