Hi. I'm using Inkscape to author a comic and the slow speed for certain
things is very annoying. I'm already have OpenMP turned on and using 4
1. *large blurs are slow* - I'm an expert with writing SIMD code, so I was
thinking about vectorizing the Gaussian IIR filter with SIMD intrinsics,
even though it's harder than for a FIR. But I noticed there isn't any SIMD
code in Inkscape so does that mean it's something to avoid.
I'm pretty sure no current compiler is smart enough to vectorize it, and
besides, Inkscape is compiled with -O2, meaning -ftree-vectorize isn't on
2. *when there's a large image (raster based) background - scrolling in a
zoomed region is very slow*
I compiled the latest 0.49 code with GCC profiling and it shows this:
33.98 22.47 22.47 exp2l
21.29 36.55 14.08 log2l
17.57 48.17 11.62 pow
7.12 52.88 4.71 658 0.01 0.01
6.72 57.32 4.44 563 0.01 0.01
5.51 60.96 3.64 1216 0.00 0.00
5.23 64.42 3.46 internal_modf
0.59 64.81 0.39 _mcount_private
0.41 65.08 0.27 __fentry__
0.12 65.16 0.08 GC_mark_from
0.09 65.22 0.06 5579 0.00 0.00
Geom::parse_svg_path(char const*, Geom::SVGPathSink&)
0.06 65.26 0.04 35320 0.00 0.00
std::allocator<Geom::Path> > const&, Geom::Affine const&)
0.06 65.30 0.04 8 0.01 0.01
0.05 65.33 0.03 885444 0.00 0.00
std::vector<Geom::Linear, std::allocator<Geom::Linear> > >, unsigned long
long, Geom::Linear const&)
The cost is absolutely dominated by ink_cairo_surface_srgb_to_linear() and
ink_cairo_surface_linear_to_srgb(). My first instinct was to optimize
those 2 functions, but then I thought why are those even being called every
time I scroll through the image?
Why not convert the images up front to linear and stay that way in memory?
If that can't be done, then my optimization approach is:
1. replace ink_cairo_surface_srgb_to_linear() with a simple 3rd degree
polynomial approximation (0.902590573087882 - 0.010238759806148x +
0.002825455367280x^2 + 0.000004414767235x^3) and vectorize with SSE
intrinsics. The approximation was calculated by minimizing the square error
(maxError = 0.313) over the range [10, 255]. For x < 10, it uses simple
2. replace ink_surface_linear_to_srgb() with a vectorized implementation
of pow(). Unlike srgb_to_linear(), a low degree polynomial can't be used
due to the curve having larger high order derivatives. An alternative would
be piece wise, low order polynomials.
The main question I have is what degree of accuracy is desired? Certainly,
it doesn't need double precision pow() since the input is only 8 bits! Is
+- 0.5 from the true value (before quantization) OK or do people depend on
getting pixel perfect results?
I initially asked at
was told to better post my request to this mailing list.
I wonder if it wouldn't be possible to create releases more regularly.
Currently there are many months or even years between each release of
Bug fixes should get out more quickly and it should be possible to try out
new features of upcoming versions. Most users don't have the possibility to
build Inkscape by their own, so they have to wait for the next release.
Unfortunately the provided development downloads are not synchronized,
hosted on different third-party web sites and out of date (currently
especially the Windows version).
So I suggest to create a (more or less) fixed fast release cycle for normal
releases (e.g. every two or three months) and periodically (e.g. every one
or two weeks) create alpha versions.
Alpha versions should be built (maybe even automatically) for all supported
OSes and hosted directly on inkscape.org.
I tried your modified build with an NVidia Quadro 1000M on Windows 7 and it
seemed okay to me.
> Le Jeudi 21 novembre 2013 9h09, Nicolas Dufour <nicoduf@...48...> a ?crit
> > I'm still investigating the issue, and just found out that the computers
> > used to reproduced the bug were all using an Intel GPU. Tests with an
> > GeForce 210 (GT218) show no slowness at all.
> Could some Windows users help me? I'd like to confirm the slowness only
> affects Intel graphics cards. Could you test a modified Inkscape binary
> (from ftp://download.tuxfamily.org/inkscape/inkscape-12282-cairo-18.104.22.168z),
> give your graphic card model and tell me if it's slow or not? IMHO it could
> be a blocker for 0.49 on Windows.
Hey Inkscape developers, I’ve spent the last several years both using Inkscape and working with C++, and I’d really like to contribute to the project now that I have some relevant skills. I develop on macs though, and I can’t seem to find any up-to-date instructions on building for mac. Can anyone point me to some current info?
Thanks for the help, and thanks for everything you guys do.
ref : https://bugs.launchpad.net/inkscape/+bug/165665
I believe this bug can be fixed by disabling the flag USE_PANGO_WIN32 in
line 19 of src/libnrtype/FontFactory.h. When I do this on Windows XP, I gain
about 35 new fonts. Not all of these new fonts are useable, but the most
interesting ones, such as CommercialPi, Symbol, Technic, Webdings,
Wingdings, MonoType Sorts, TechnicLite are working well, both in Inkscape
and in IE9.
This is a Windows-specific bug which hides symbol fonts, and does not
occur in Gimp 2.6 on Win XP. As far as I can tell, the Gimp source code does
not contain any analogue or equivalent of the flag USE_PANGO_WIN32.
Would there be any objection if I disable this flag, or does it serve a
specific purpose that is essential?
- Alvin Penner
View this message in context: http://old.nabble.com/non-Unicode-symbol-fonts-do-not-work-on-Windows.-Bu...
Sent from the Inkscape - Dev mailing list archive at Nabble.com.
The past weeks I've been trying to fix some transformation center offset
regressions, which were caused by the new unit/viewbox stuff. That should
all work reasonably well again, but it remains a headache. IMHO this
transformation center handling is broken by design, and judging by some
comments in the code I'm not the only one to think so. It requires all
kinds of special casing everywhere transformations are being applied, due
to the transformation center being expressed in horizontal/vertical
coordinates, relative to the center of the bounding box. Does anybody know
why it was designed like this?
If there are no strong objections, then I'd propose to use absolute
coordinates, and to apply transformations as if it were simply a point of a
path. This would make code much cleaner. We will no longer need to call
document->ensureUpToDate() to force an update of the bounding box everytime
the center is requested or changed. It might also allow us to get rid of
the weird behavior of the transformation center (which should rotate with
the item in case an object is rotated!)
Not that I'm going to change this now, but I might get to this after the
When drawing stuff I usually have a lot of overlapping areas.
Sometimes I use a vinyl cutter to cut adhesive foil. Then I need
to select the topmost object and subtract it from every object
which is (partially) covered by the topmost object.
Next, I need to repeat the process with the second-to-topmost
I also need to convert all strokes etc. to paths to actually get paths
with non-zero width, otherwise it's just one cut along the path which is
I also need to intersect all objects with their respective clip or mask,
if they are clipped or masked. For complex drawings this process takes a
lot of time.
I wondered if there's a plugin or something for "flattening" an image
essentially converting it to a set of non-overlapping closed paths
If there isn't such a functionality I'd like to program it.
In which way should this be done?
On which branch should I base this?
Are there any major changes to parts of Inkscape planned which would
interfere with this functionality / should I wait for some changes to be
finished before I start?
@Krzysztof Did you finish your API changes etc. you started in your GSoC
I'm going to try and be as verbose as possible about the procedure to
upload your own release to inkscape.org, I need you to perform this task
if you package any of our release packages because a) it's good practice
and b) packages will be signed with your gpg key and it'd be an odd
world where I could do that for you. :-)
Releasing on inkscape.org:
1. Make sure you have a user account on inkscape.org
- Go to https://inkscape.org and look in the top right of the page and
note your logged in status, use the links provided in the drop down to
log in or register an account.
2. Make sure that your account has a big enough quota
- Go to https://inkscape.org/user/ and hover over the "Upload Quota"
bar, you will only see 10MB if you are a normal user at this time. If
you do not see a 1GB quota then you need to contact a website admin (me)
to put you into the releases group with the larger quota.
3. Make sure you have a public gpg key recorded.
- Go to https://inkscape.org/user/edit/ and fill in the right boxes,
the GPG Public Key box is expecting a pasted public key (not private
key!) and hit submit when done.
4. Make a folder for your releases in your 'InkSpace'.
- Go to https://inkscape.org/gallery/new/ and fill in the name of the
folder you want to use. This folder is only for your own organisation
and won't be seen by users.
5. Upload your released file
- Go to https://inkscape.org/user/ and drag your file to the new
gallery folder created above. The upload may take some time but you
should be able to see a progress bar as it uploads. (if you don't have
follow the manual form)
6. Enter all the details
- Go into your folder and click on the newly uploaded item. It should
have a red border indicating it's not yet published (if you used the
- Going into the editor section you should be able to fill in the
title for the released file.
- Paste in the release notes into the description.
- Select 'Releases' from the category drop down.
- Attach the sig file from your detached.
- Select 'GPLv2' from the Licenses drop down.
- Check 'Mirror' checkbox (if you have this)
- Check 'Visible' checkbox
Submit this form.
7. Verify and copy link
- If everything's gone well you should now see your released file with
a green padlock indicating the gpg signature has been verified against
your account public key.
- Download the release by clicking on the down-arrow icon. Confirm
it's the file you intended.
- Copy this download link.
8. Link from the downloads page.
- For this step you will need CMS editor access or pass this task onto
a website editor and/or translator.
- Edit the downloads pages for the right OS and update with the right
version, release and other details as you would want it to be presented
to users. Add the copied link into the right place.
- Save /and/ then hit the blue publish button.
Congratulations, you've uploaded, released and published your release
file. Let the website administrator (me) know if you have any difficulty
with this process.
Best Regards, Martin Owens
4. Feature Freeze √ Stable Branch is forked from Mainline
√ Regular development resumes on Mainline.
√ Avoid major refactorings on Mainline.
√ Only bug fixes committed to Stable Branch.
√ Bug fixes are cherrypicked from Mainline.
√ Inkscape must pass 'make distcheck'
String Freeze √ No further string changes allowed on Stable Branch.
√ Finalize tutorials to be shipped with release
√ Finalize other docs included in the release
√ Finalize about screen
√ Finalize Release Notes except Known Issues
√ Translators work on translations.
√ Recruit Release Wardens for Hard Freeze
5. Hard freeze. √ Only Release Wardens can commit to Stable Branch
Cherrypick bug fixes from Mainline to Stable
Complete any late work under advisement of Wardens
Focus on release-critical bug fixing.
Finalize all extensions
Finalize codebase translations
Finalize Known Issues section of Release Notes
Finalize packaging scripts
Post additional inkscape-0.91-pre*.tar.gz releases
Inkscape has completed Feature Freeze and String Freeze, and is now
moving to Hard Freeze.
Translators, thanks for your efforts. If there are any late
translations please coordinate with Jazzynico, and submit them to him
for committing. We're down to the wire though so don't delay!
Developers, at this point only Josh and I should be committing to the
tree. We'll accept patches if they're either a) obviously safe and a
useful fix, or b) more complex but fix a particularly severe bug.
In either case, please make sure the fix is already applied to the 0.92
branch, and then send Josh and I a backported patch ready to be landed
Josh will follow up with our evaluation of blocker bugs. Things
actually look to be in fairly good shape. If anyone has a bug they want
to raise as a blocker, now's the time to do it!
Since we're in a new stage of the release, I'll cut one last
P.S. We're also going to need to do some marketing work to publicise the
release, and I'm thinking we should establish a formal marketing team.
I'll try to organize something soon; if you're interested in joining
early, or have ideas to consider in the meantime, please shoot me an