summaryrefslogtreecommitdiffstats
path: root/o3d/plugin/idl
diff options
context:
space:
mode:
authorkbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-26 00:26:00 +0000
committerkbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-26 00:26:00 +0000
commit00d721c144d35882dfaf24b3869e95a8d6404ee5 (patch)
tree07243b1cb15a7fb0eddf54fce686c96cda594640 /o3d/plugin/idl
parent0a46d19ce396112b8a42005d1369de30df3bc872 (diff)
downloadchromium_src-00d721c144d35882dfaf24b3869e95a8d6404ee5.zip
chromium_src-00d721c144d35882dfaf24b3869e95a8d6404ee5.tar.gz
chromium_src-00d721c144d35882dfaf24b3869e95a8d6404ee5.tar.bz2
Added the bulk of the algorithm for GPU accelerated 2D vector curve
rendering from "Rendering Vector Art on the GPU" by Loop and Blinn, GPU Gems 3, Chapter 25. The main entry point to the algorithm is the PathProcessor, which takes in a Skia path and converts it to two triangle meshes: one for the exterior region of the shape containing the curve segments, and one for the interior region of the shape which is filled with constant (1.0) alpha. The o3d.ProcessedPath class is the internal object which exposes the needed entry points to JavaScript. However, o3djs.gpu2d is the user-level entry point to the algorithm. This exposes a Path primitive to which line, quadratic curve and cubic curve segments can be added, and simple fills (currently only a solid color). An SVG loader in samples/gpu2d/svgloader.js illustrates how content might be imported at run time. Several samples and regression tests demonstrate the current state of the implementation. More work is planned. Some small generalizations to the O3D code were necessary to support two-dimensional vertices. Note that I plan to submit gpu2d.js and/or svgloader.js for JavaScript readability. I have run both through the JS compiler and have fixed as many of the doc generation errors as possible in svgloader.js without pulling this file into the o3djs namespace. Tested in O3D on Windows and Mac OS X. BUG=none TEST=various SVG based tests Review URL: http://codereview.chromium.org/652016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40079 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/plugin/idl')
-rw-r--r--o3d/plugin/idl/processed_path.idl119
1 files changed, 119 insertions, 0 deletions
diff --git a/o3d/plugin/idl/processed_path.idl b/o3d/plugin/idl/processed_path.idl
new file mode 100644
index 0000000..0ba7ca8
--- /dev/null
+++ b/o3d/plugin/idl/processed_path.idl
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+namespace o3d {
+
+%[
+ A ProcessedPath holds a series of 2D vector drawing commands (i.e.,
+ move-to, line-to, quad-to, cubic-to) and the results of processing
+ this series of commands into a triangle mesh for rendering on the
+ GPU. It is only an internal class; this functionality is exposed via
+ the o3djs.gpu2d library.
+%]
+
+[nocpp, include="core/cross/processed_path.h"] class ProcessedPath
+ : ObjectBase {
+ %[
+ Clears out all of the curve segments that have been added to this
+ path.
+ %]
+ [nodocs]
+ void Clear();
+
+ %[
+ Moves the pen to the given absolute X,Y coordinates. If a contour
+ isn't currently open on this path, one is opened.
+ \param x the x coordinate to move to
+ \param y the y coordinate to move to
+ %]
+ [nodocs]
+ void MoveTo(float x, float y);
+
+ %[
+ Draws a line from the current coordinates to the given absolute
+ X,Y coordinates.
+ \param x the x coordinate to draw a line to
+ \param y the y coordinate to draw a line to
+ %]
+ [nodocs]
+ void LineTo(float x, float y);
+
+ %[
+ Draws a quadratic curve from the current coordinates through the
+ given control point and end point, specified in absolute
+ coordinates.
+ \param cx the x coordinate of the quadratic's control point
+ \param cy the y coordinate of the quadratic's control point
+ \param x the x coordinate of the quadratic's end point
+ \param y the y coordinate of the quadratic's end point
+ %]
+ [nodocs]
+ void QuadraticTo(float cx, float cy, float x, float y);
+
+ %[
+ Draws a cubic curve from the current coordinates through the
+ given control points and end point, specified in absolute
+ coordinates.
+ \param c0x the x coordinate of the cubic's first control point
+ \param c0y the y coordinate of the cubic's first control point
+ \param c1x the x coordinate of the cubic's second control point
+ \param c1y the y coordinate of the cubic's second control point
+ \param x the x coordinate of the cubic's end point
+ \param y the y coordinate of the cubic's end point
+ %]
+ [nodocs]
+ void CubicTo(float c0x, float c0y,
+ float c1x, float c1y,
+ float x, float y);
+
+ %[
+ Closes the currently open contour on this path.
+ %]
+ [nodocs]
+ void Close();
+
+ %[
+ Creates the triangle mesh which will render the given curve
+ segments. There are two regions: exterior and interior. The
+ exterior region covers the portions containing the curve
+ segments. It has two associated fields: a 2D floating point field
+ for the positions, and a 3D floating point field for the
+ Loop/Blinn texture coordinates. The interior region has one 2D
+ floating point field for the positions. The contents of the fields
+ are organized for rendering as non-indexed triangles.
+ %]
+ [nodocs]
+ void CreateMesh(Field exterior_positions,
+ Field exterior_texture_coordinates,
+ Field interior_positions);
+};
+
+} // namespace o3d