|
From: <md...@us...> - 2010-10-04 19:22:38
|
Revision: 8728
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8728&view=rev
Author: mdboom
Date: 2010-10-04 19:22:32 +0000 (Mon, 04 Oct 2010)
Log Message:
-----------
Speed up Gouraud triangles in Agg backend.
Modified Paths:
--------------
trunk/matplotlib/src/_backend_agg.cpp
Modified: trunk/matplotlib/src/_backend_agg.cpp
===================================================================
--- trunk/matplotlib/src/_backend_agg.cpp 2010-10-04 18:46:18 UTC (rev 8727)
+++ trunk/matplotlib/src/_backend_agg.cpp 2010-10-04 19:22:32 UTC (rev 8728)
@@ -1910,13 +1910,15 @@
Py::Object points_obj = args[1];
Py::Object colors_obj = args[2];
agg::trans_affine trans = py_to_agg_transformation_matrix(args[3].ptr());
+ double c_points[6];
+ double c_colors[12];
theRasterizer.reset_clipping();
rendererBase.reset_clipping(true);
set_clipbox(gc.cliprect, theRasterizer);
bool has_clippath = render_clippath(gc.clippath, gc.clippath_trans);
- PyArrayObject* points = (PyArrayObject*)PyArray_ContiguousFromAny
+ PyArrayObject* points = (PyArrayObject*)PyArray_FromObject
(points_obj.ptr(), PyArray_DOUBLE, 3, 3);
if (!points ||
PyArray_DIM(points, 1) != 3 || PyArray_DIM(points, 2) != 2)
@@ -1926,7 +1928,7 @@
}
points_obj = Py::Object((PyObject*)points, true);
- PyArrayObject* colors = (PyArrayObject*)PyArray_ContiguousFromAny
+ PyArrayObject* colors = (PyArrayObject*)PyArray_FromObject
(colors_obj.ptr(), PyArray_DOUBLE, 3, 3);
if (!colors ||
PyArray_DIM(colors, 1) != 3 || PyArray_DIM(colors, 2) != 4)
@@ -1943,9 +1945,20 @@
for (int i = 0; i < PyArray_DIM(points, 0); ++i)
{
+ for (int j = 0; j < 3; ++j) {
+ for (int k = 0; k < 2; ++k) {
+ c_points[j*2+k] = *(double *)PyArray_GETPTR3(points, i, j, k);
+ }
+ }
+
+ for (int j = 0; j < 3; ++j) {
+ for (int k = 0; k < 4; ++k) {
+ c_colors[j*4+k] = *(double *)PyArray_GETPTR3(colors, i, j, k);
+ }
+ }
+
_draw_gouraud_triangle(
- (double*)PyArray_GETPTR1(points, i),
- (double*)PyArray_GETPTR1(colors, i), trans, has_clippath);
+ c_points, c_colors, trans, has_clippath);
}
return Py::Object();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|