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
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
With 0.91 finally coming to a wrap soon, there are many different ideas
on what to focus on next. One thing we all agree on is turning the next
few releases out more rapidly, 0.92 especially.
To do this, we'll need to carefully select which new features to
undertake each release; the more discriminating we are, the less risk of
delay we'll face in these. The less we undertake in parallel, the more
quickly we can perfect what we do tackle. The more we collaborate
together as a team, the better the end result will be.
The Inkscape roadmap has proven instrumental in prioritizing and
organizing our effort in the past. We can to use it again to help
chart our course of development for the next several releases.
I'd like to tackle this in three steps: First, brainstorm and gather
ideas into a big list. Second, filter the list down to our most
pressing needs. And third, prioritize that list across the next
I figure we should strive for one primary objective each release, with
one secondary and perhaps a few tertiary items. Of course, as we go
we'll also have some surprises, early deliveries and the like; no need
to turn those away. But the idea is to focus Inkscape on what we as a
project want to achieve each release.
What do you think should be listed in our Roadmap?
I just added high-dpi awareness to the Win64 manifest.
It makes all the icons pretty tiny on my system, but I think it's a step
in the right direction. :)
Could someone please test if this breaks Inkscape on a non-highdpi
system? Note: only the 64-bit build is affected.