From: <md...@us...> - 2007-12-18 13:08:27
|
Revision: 4763 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4763&view=rev Author: mdboom Date: 2007-12-18 05:08:04 -0800 (Tue, 18 Dec 2007) Log Message: ----------- Don't allocate the clipping path buffers unless we need them. Modified Paths: -------------- branches/transforms/src/_backend_agg.cpp branches/transforms/src/_backend_agg.h Modified: branches/transforms/src/_backend_agg.cpp =================================================================== --- branches/transforms/src/_backend_agg.cpp 2007-12-18 13:02:33 UTC (rev 4762) +++ branches/transforms/src/_backend_agg.cpp 2007-12-18 13:08:04 UTC (rev 4763) @@ -239,27 +239,22 @@ height(height), dpi(dpi), NUMBYTES(width*height*4), + alphaBuffer(NULL), + alphaMaskRenderingBuffer(NULL), + alphaMask(NULL), + pixfmtAlphaMask(NULL), + rendererBaseAlphaMask(NULL), + rendererAlphaMask(NULL), + scanlineAlphaMask(NULL), debug(debug) { _VERBOSE("RendererAgg::RendererAgg"); unsigned stride(width*4); - pixBuffer = new agg::int8u[NUMBYTES]; renderingBuffer = new agg::rendering_buffer; renderingBuffer->attach(pixBuffer, width, height, stride); - alphaBuffer = new agg::int8u[NUMBYTES]; - alphaMaskRenderingBuffer = new agg::rendering_buffer; - alphaMaskRenderingBuffer->attach(alphaBuffer, width, height, stride); - alphaMask = new alpha_mask_type(*alphaMaskRenderingBuffer); - - pixfmtAlphaMask = new agg::pixfmt_gray8(*alphaMaskRenderingBuffer); - rendererBaseAlphaMask = new renderer_base_alpha_mask_type(*pixfmtAlphaMask); - rendererAlphaMask = new renderer_alpha_mask_type(*rendererBaseAlphaMask); - scanlineAlphaMask = new agg::scanline_p8(); - - slineP8 = new scanline_p8; slineBin = new scanline_bin; @@ -275,6 +270,21 @@ }; +void RendererAgg::create_alpha_buffers() { + if (!alphaBuffer) { + unsigned stride(width*4); + alphaBuffer = new agg::int8u[NUMBYTES]; + alphaMaskRenderingBuffer = new agg::rendering_buffer; + alphaMaskRenderingBuffer->attach(alphaBuffer, width, height, stride); + alphaMask = new alpha_mask_type(*alphaMaskRenderingBuffer); + + pixfmtAlphaMask = new agg::pixfmt_gray8(*alphaMaskRenderingBuffer); + rendererBaseAlphaMask = new renderer_base_alpha_mask_type(*pixfmtAlphaMask); + rendererAlphaMask = new renderer_alpha_mask_type(*rendererBaseAlphaMask); + scanlineAlphaMask = new agg::scanline_p8(); + } +} + template<class R> void RendererAgg::set_clipbox(const Py::Object& cliprect, R rasterizer) { @@ -442,6 +452,7 @@ if (has_clippath && (clippath.ptr() != lastclippath.ptr() || clippath_trans != lastclippath_transform)) { + create_alpha_buffers(); agg::trans_affine trans(clippath_trans); trans *= agg::trans_affine_scaling(1.0, -1.0); trans *= agg::trans_affine_translation(0.0, (double)height); @@ -617,7 +628,7 @@ _color(color) { } - void generate(color_type* output_span, int x, int y, unsigned len) + inline void generate(color_type* output_span, int x, int y, unsigned len) { _allocator.allocate(len); child_color_type* input_span = _allocator.span(); Modified: branches/transforms/src/_backend_agg.h =================================================================== --- branches/transforms/src/_backend_agg.h 2007-12-18 13:02:33 UTC (rev 4762) +++ branches/transforms/src/_backend_agg.h 2007-12-18 13:08:04 UTC (rev 4763) @@ -77,7 +77,7 @@ SafeSnap() : first(true), xsnap(0.0), lastx(0.0), lastxsnap(0.0), ysnap(0.0), lasty(0.0), lastysnap(0.0) {} SnapData snap (const float& x, const float& y); - + private: bool first; float xsnap, lastx, lastxsnap, ysnap, lasty, lastysnap; @@ -87,7 +87,7 @@ // a class in the swig wrapper class BufferRegion : public Py::PythonExtension<BufferRegion> { public: - BufferRegion(const agg::rect_i &r, bool freemem=true) : + BufferRegion(const agg::rect_i &r, bool freemem=true) : rect(r), freemem(freemem) { width = r.x2 - r.x1; height = r.y2 - r.y1; @@ -99,7 +99,7 @@ int width; int height; int stride; - + bool freemem; Py::Object to_string(const Py::Tuple &args); @@ -151,7 +151,7 @@ //struct AMRenderer { -// +// //} // the renderer @@ -246,6 +246,7 @@ const Py::SeqBase<Py::Int>& antialiaseds); private: + void create_alpha_buffers(); Py::Object lastclippath; agg::trans_affine lastclippath_transform; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |