how to do fast drawing in plugin, pdb paintbrush api is slow
On Wed, Oct 6, 2010 at 2:39 PM, Alexia Death wrote:
On Wed, Oct 6, 2010 at 8:22 AM, ?? wrote:
I'm trying to write a plugin to apply effects like
this(http://mrdoob.com/projects/harmony/) to any path.
I've done the coding, but it runs too slow, it speed several minutes
to draw 7000 lines on my laptop.
Currently i use following methods to draw lines:
pdb.gimp_context_set_opacity(alpha)
pdb.gimp_paintbrush_default(drawable, 4, [x1,y1,x2,y2])
I guess the overhead of pdb api is too heavy. Is there any alternate
way to achieve my purpose?
I can't find a proper one in pdb, maybe i should use cairo api to draw
a back buffer, then send it to gimp, but i have no idea how to do
that.
Several minutes for 7000 strokes to me seems pretty much on par or
even above with paint core normal performance. You can try drawing on
a drawable/image that isn't visible, if you aren't already, but other
than that... Painting is rather expensive operation and is generally
optimized to keep up with human speeds, that usually at best do 4 or 5
strokes per second and I have to admit, with large brushes even there
it sometimes isn't good enough.
Make the layer invisible don't make it better, using pycairo does.
With pycairo, drawing random lines with random alpha value on gtk surface,
100000 strokes only take 21 seconds.
for i in range(100000):
cr = self.window.cairo_create()
cr.set_source_rgba(0,0,0,random.random())
cr.move_to(random.randint(0,200), random.randint(0,200))
cr.line_to(random.randint(0,200), random.randint(0,200))
cr.stroke()
Now i use pycairo to draw to a memory buffer, then copy to gimp layer,
that's fast enough, the code still needs to be adjusted though.
Thank you very much.