2018-01-01 23:29:15 +01:00
|
|
|
@comment $NetBSD: PLIST,v 1.41 2018/01/01 22:29:36 rillig Exp $
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
bin/cairo-trace
|
2007-03-20 16:29:18 +01:00
|
|
|
include/cairo/cairo-deprecated.h
|
2005-02-17 14:34:16 +01:00
|
|
|
include/cairo/cairo-features.h
|
|
|
|
include/cairo/cairo-ft.h
|
|
|
|
include/cairo/cairo-pdf.h
|
|
|
|
include/cairo/cairo-ps.h
|
2014-05-31 12:16:40 +02:00
|
|
|
${PLIST.quartz}include/cairo/cairo-quartz-image.h
|
|
|
|
${PLIST.quartz}include/cairo/cairo-quartz.h
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
include/cairo/cairo-script-interpreter.h
|
2012-09-07 17:24:03 +02:00
|
|
|
include/cairo/cairo-script.h
|
2006-07-04 17:14:49 +02:00
|
|
|
include/cairo/cairo-svg.h
|
2012-02-23 15:00:43 +01:00
|
|
|
include/cairo/cairo-tee.h
|
2008-10-16 12:55:08 +02:00
|
|
|
include/cairo/cairo-version.h
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
${PLIST.xcb}include/cairo/cairo-xcb.h
|
2008-04-13 00:42:57 +02:00
|
|
|
${PLIST.x11}include/cairo/cairo-xlib-xrender.h
|
|
|
|
${PLIST.x11}include/cairo/cairo-xlib.h
|
2005-02-17 14:34:16 +01:00
|
|
|
include/cairo/cairo.h
|
2012-09-07 17:24:03 +02:00
|
|
|
lib/cairo/cairo-fdr.la
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
lib/cairo/libcairo-trace.la
|
|
|
|
lib/libcairo-script-interpreter.la
|
2004-02-03 13:16:42 +01:00
|
|
|
lib/libcairo.la
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
lib/pkgconfig/cairo-fc.pc
|
2006-07-04 17:14:49 +02:00
|
|
|
lib/pkgconfig/cairo-ft.pc
|
|
|
|
lib/pkgconfig/cairo-pdf.pc
|
|
|
|
lib/pkgconfig/cairo-png.pc
|
|
|
|
lib/pkgconfig/cairo-ps.pc
|
2014-05-31 12:16:40 +02:00
|
|
|
${PLIST.quartz}lib/pkgconfig/cairo-quartz-font.pc
|
|
|
|
${PLIST.quartz}lib/pkgconfig/cairo-quartz-image.pc
|
|
|
|
${PLIST.quartz}lib/pkgconfig/cairo-quartz.pc
|
2018-01-01 23:29:15 +01:00
|
|
|
lib/pkgconfig/cairo-script.pc
|
|
|
|
lib/pkgconfig/cairo-svg.pc
|
|
|
|
lib/pkgconfig/cairo-tee.pc
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
${PLIST.xcb}lib/pkgconfig/cairo-xcb-shm.pc
|
|
|
|
${PLIST.xcb}lib/pkgconfig/cairo-xcb.pc
|
2008-04-13 00:42:57 +02:00
|
|
|
${PLIST.x11}lib/pkgconfig/cairo-xlib-xrender.pc
|
|
|
|
${PLIST.x11}lib/pkgconfig/cairo-xlib.pc
|
2004-02-03 13:16:42 +01:00
|
|
|
lib/pkgconfig/cairo.pc
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/bindings-errors.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-fonts.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-memory.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-overloading.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-path.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-patterns.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-return-values.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-streams.html
|
|
|
|
share/gtk-doc/html/cairo/bindings-surfaces.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Error-handling.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-FreeType-Fonts.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Image-Surfaces.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-PDF-Surfaces.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-PNG-Support.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Paths.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-PostScript-Surfaces.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Quartz-(CGFont)-Fonts.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Quartz-Surfaces.html
|
2012-09-07 17:24:03 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Raster-Sources.html
|
2010-12-26 15:58:43 +01:00
|
|
|
share/gtk-doc/html/cairo/cairo-Recording-Surfaces.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Regions.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-SVG-Surfaces.html
|
2012-09-07 17:24:03 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Script-Surfaces.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Transformations.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Types.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-User-Fonts.html
|
Update cairo to 1.14.0:
Release 1.14.0 (2014-10-13 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
Hard to believe it's been over a year since our last release, but it's
not for lack of activity. This release includes contributions of a wide
assortment of bug fixes, build system improvements, warnings cleanups,
codebase refactoring, test suite repairs, and static analysis work.
This release is lighter on features (compared with 1.12.10) but includes
a highly demanded rehaul of our image downscaling functionality, which
solves a serious problem experienced by Inkscape users when shrinking
embedded bitmaps in SVG files. The new scaling algorithms are used by
the image backend and by other backends as needed for fallbacks.
Features
--------
Filtering improvements for the image backend, in particular
down-scaling of images produces filtered images that depend on all the
pixels of the source. When using the image backend you get the
following settings:
CAIRO_FILTER_GOOD: uses a box filter for scales less than .75 in
either direction. For scales larger than this, the same filter as
CAIRO_FILTER_BILINEAR is used.
CAIRO_FILTER_BEST: uses a Catmull-Rom filter always. When upscaling
more than 2x this will produce anti-aliased square pixels, similar
to OS/X.
CAIRO_FILTER_GAUSSIAN: uses PIXMAN_FILTER_BEST, which in current
pixman is the same as BILINEAR. (This is subject to change in the
future).
xlib and xcb also use the image fallback for GOOD/BEST filters, but
note that other backends do not implement these filtering fixes yet,
however other actions may cause them to use an image fallback which
will cause these filters to be used.
Improve handling of device transformation and scaling, allowing Cairo
to now support scaling at a device level, permitting easier, more
transparent HiDPI support.
Support JBIG2 mime data in PDF. This allows embedding of more
compressed JPEG formats within PDF, rather than including the full
uncompressed image. Also, reduce the number of transparency groups
used by PDF to keep the file size small and viewing/printing of the
PDF fast.
Expand the embedding section to include stencil mask support.
Reorder font declarations to be in natural order.
Update the Skia backend to build against current Skia (as of June
2014).
Drop Link-Time Optimization (LTO) support from build system. This
seems to have caused much trouble for unclear benefit, and most
distros are reverting or disabling it anyway.
Optimize VBO size on GL to 1M and to 16k for EGL. This improves
(theoretical) performance for desktop GLX use cases while avoiding
hitting VBO memory size limitations on embedded devices.
API Changes
-----------
cairo_surface_set_device_scale, cairo_surface_get_device_scale:
Sets a scale that is multiplied to the device coordinates
determined by the CTM when drawing to @surface. One common use for
this is to render to very high resolution display devices at a scale
factor, so that code that assumes 1 pixel will be a certain size
will still work.
cairo_egl_device_get_display, cairo_egl_device_get_context:
Support get/set of EGLContext and EGLDisplay for egl-based cairo
devices, similar to GLX.
Dependency Changes
------------------
Cairo now requires glib 2.14 for its gobject helper functions,
and pixman 0.30 for downscaling.
Bug fixes
---------
Don't embed CMYK Jpeg images in svg.
Fix tests to place output in proper location.
Fix determination of alpha for all surfaces when recording.
Extend oversize check to cairo_gl_surface_create_for_texture, so an
error surface is returned if the texture is too large to render to.
Fix embedding of mime data in PDF and PS files.
Remove useless error handling in *_reply() functions in XCB.
Fix a double-free exposed by multithreaded apps creating and
destroying the same font concurrently.
https://bugs.freedesktop.org/show_bug.cgi?id=69470
Fix corrupt stacks produced by bugs in operand emission for trace.
Fix out of bounds array access in format cache for xlib
Don't rename glyphs used by seac operator. This can cause certain
combined characters to use their decorations (e.g. umlauts on ö) to be
lost during printing of PDFs using evince.
https://bugs.freedesktop.org/show_bug.cgi?id=70364
Fix crash on calling cairo_create with a finished surface
Fix SSIZE_T definition problem when making with MSYS on Windows7
Fix one off issue in gl context cleanup
Fix usage of CAIRO_STACK_ARRAY_LENGTH
Fix rectangle stroke with non rectilinear pen
Fix imagemask with pattern source failure on some printers. This bug
could cause files converted using pdftops to fail for example on Ricoh
printers, or opening in Adobe Distiller on Windows.
https://bugs.freedesktop.org/show_bug.cgi?id=69485
Fix whitespace in font names
Fix page size in generated PDFs. When printing using pdftocairo on
larger page sizes, such as 11x17, the image would be cropped to letter
size.
https://bugs.freedesktop.org/show_bug.cgi?id=73452
Fix path-currentpoint test by preserving current-point in
copy_path()/append_path() sequence
Fix generation of HTML in code docs for
cairo-format-stride-for-width. Raw HTML code was being passed
to the browser, instead of displaying normally.
https://bugs.freedesktop.org/show_bug.cgi?id=63257
Fix spelling of "tessellator" throughout code. We're using the
American rather than British spelling of this word.
https://bugs.freedesktop.org/show_bug.cgi?id=50411
Fix crash in pixman_image_composite32
Fix crash when trying to modify a (const) all-clipped cairo_clip_t
https://bugs.freedesktop.org/show_bug.cgi?id=75819
Add check_composite method to all compositors, to fix crashes in the
test suite.
Fix crash in Firefox when scrolling on certain pages.
Fix memory leaks found by static analysis.
Fix build of any2ppm if fork is not available.
Fix broken build for Qt backend, due to missing libstdc++.
Fix typo in two cairo_uint128 functions. Fixes potential build issues
on systems without a uint128 type.
Fix build when --enable-pdf=no
Fix cache_frozen assertions for Win32 print.
Correctly check for xcb image surface for inplace upload
Fix webkit-based web browser crashes due to empty boxes by skipping
over them when tesselating.
Make pixman, libpng, and zlib paths commandline configurable for win32
builds.
Fix image scale on Win32 when GDI scale is not identity.
Fix float endian configure test when using clang -O4
Fix compilation with Android bionic libc
Don't try to build util/sphinx on Windows
Fix loss of precision when emitting joins. This was caused by
discrepancies in line gradients when passing trapezoids around.
Fix loss of precision and associated rendering issues in
cairo-tor-scan-converter from projection onto sample grid.
Fix pixman oversampling of neighbouring edges within a cell by
eliminating self-intersections for the pixman traps compositor.
Fix multi-line string splitting in PDFs
Various cleanups and fixes to warnings, documentation, tests, and
build system. Improve error handling and return value checks.
Cleanup XFAIL tests and reference images. Cover recently added
functionality.
2014-10-22 11:55:36 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Version-Information.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-Win32-Fonts.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-Win32-Surfaces.html
|
2012-09-07 17:24:03 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-XCB-Surfaces.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-XLib-Surfaces.html
|
2012-09-07 17:24:03 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-XLib-XRender-Backend.html
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-device-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-font-face-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-font-options-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-matrix-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-pattern-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-scaled-font-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-surface-t.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-cairo-t.html
|
2008-10-16 12:55:08 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo-drawing.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-fonts.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-support.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-surfaces.html
|
|
|
|
share/gtk-doc/html/cairo/cairo-text.html
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/cairo.devhelp2
|
|
|
|
share/gtk-doc/html/cairo/home.png
|
Update to 1.10.0. Add default-on xcb option (implying x11 option).
Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120
https://bugs.freedesktop.org/show_bug.cgi?id=29121
https://bugs.freedesktop.org/show_bug.cgi?id=29122
https://bugs.freedesktop.org/show_bug.cgi?id=29124
https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
2010-09-13 14:23:01 +02:00
|
|
|
share/gtk-doc/html/cairo/index-1.10.html
|
2012-09-07 17:24:03 +02:00
|
|
|
share/gtk-doc/html/cairo/index-1.12.html
|
2015-11-06 12:15:51 +01:00
|
|
|
share/gtk-doc/html/cairo/index-1.14.html
|
2007-06-15 19:47:59 +02:00
|
|
|
share/gtk-doc/html/cairo/index-1.2.html
|
|
|
|
share/gtk-doc/html/cairo/index-1.4.html
|
2008-04-21 13:29:33 +02:00
|
|
|
share/gtk-doc/html/cairo/index-1.6.html
|
2008-10-16 12:55:08 +02:00
|
|
|
share/gtk-doc/html/cairo/index-1.8.html
|
|
|
|
share/gtk-doc/html/cairo/index-all.html
|
|
|
|
share/gtk-doc/html/cairo/index.html
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/language-bindings.html
|
Update to 1.14.2:
Release 1.14.2 (2014-03-09 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
This release provides collected bug fixes, along with one feature
enhancement for the xcb backend, and a small performance improvement for
fonts.
The running theme of the bug fixes is platform-specific issues, both
build and run-time. Platforms with fixes include Sparc, AIX, Windows
(mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF
issues round out our list.
It's come to light that changes in cairo 1.14 resulted in breakage on
MacOS X 10.4. We've not yet determined whether to fix up the support,
or excise the 10.4-specific code and support only OS X 10.5 or newer.
Meantime, we'll only advertise cairo as working on OS X 10.5.
Features
--------
* Improve xcb's handling of per-screen subpixel ordering. If no
Xft.rgba property is specified, default to the screen's subpixel
order.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
* Improve performance of cpu_to_be32 and be32_to_cpu, making truetype
subsetting of large fonts run about 15% faster.
Bug Fixes
---------
* Fix unaligned access on sparc with the compact font format (CFF).
Unlike truetype, all data in CFF is not aligned.
(Debian bug #712836)
* Fix unaligned access on sparc with tor-scan-converter's memory pool.
* Fix crash when loading a PDF with a transformed image.
(fdo bug #85151)
* Fix regression on mingw for bigendian test due to removal of file
extension for executables.
(fdo bug #85120)
* Fix handling of backslash in PDF interpreter
(fdo bug #85662)
* Fix crash in xlib and xcb renderers when swapping a 0-sized glyph
* Fix bug with RTL text in PDF operators
(fdo bug #86461)
* Fix compilation 'cairo-path-stroke-traps.c' with MSVC8
(fdo bug #84908)
* Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is
negative.
* Fix valgrind error by releasing pattern created by
cairo_pattern_create_rgb().
* Fix valgrind errors when running cairo-test-suite.
* Fix memory leak in recording surface replays
(fdo bug #87898)
* Fix destruction of fonts in api-special-cases test.
(fdo bug #87567)
* Fix duplicated surface push on similar-image, preventing trivial GTK3
program traces from being replayable, with an error message about
invalid values for the size of the input.
(fdo bug #73580)
* Fix crash when win32 surface's image size does not cover the entire
surface.
(fdo bug #53121)
* Fix crash due to obsolete CGFontGetGlyphPath call
(fdo bug #84324)
* Fix several build issues on AIX
(fdo bugs #89338, #89340, #89356, #89354)
* Fix various documentation warnings and errors
2015-03-15 22:05:37 +01:00
|
|
|
share/gtk-doc/html/cairo/left-insensitive.png
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/left.png
|
Update to 1.14.2:
Release 1.14.2 (2014-03-09 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
This release provides collected bug fixes, along with one feature
enhancement for the xcb backend, and a small performance improvement for
fonts.
The running theme of the bug fixes is platform-specific issues, both
build and run-time. Platforms with fixes include Sparc, AIX, Windows
(mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF
issues round out our list.
It's come to light that changes in cairo 1.14 resulted in breakage on
MacOS X 10.4. We've not yet determined whether to fix up the support,
or excise the 10.4-specific code and support only OS X 10.5 or newer.
Meantime, we'll only advertise cairo as working on OS X 10.5.
Features
--------
* Improve xcb's handling of per-screen subpixel ordering. If no
Xft.rgba property is specified, default to the screen's subpixel
order.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
* Improve performance of cpu_to_be32 and be32_to_cpu, making truetype
subsetting of large fonts run about 15% faster.
Bug Fixes
---------
* Fix unaligned access on sparc with the compact font format (CFF).
Unlike truetype, all data in CFF is not aligned.
(Debian bug #712836)
* Fix unaligned access on sparc with tor-scan-converter's memory pool.
* Fix crash when loading a PDF with a transformed image.
(fdo bug #85151)
* Fix regression on mingw for bigendian test due to removal of file
extension for executables.
(fdo bug #85120)
* Fix handling of backslash in PDF interpreter
(fdo bug #85662)
* Fix crash in xlib and xcb renderers when swapping a 0-sized glyph
* Fix bug with RTL text in PDF operators
(fdo bug #86461)
* Fix compilation 'cairo-path-stroke-traps.c' with MSVC8
(fdo bug #84908)
* Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is
negative.
* Fix valgrind error by releasing pattern created by
cairo_pattern_create_rgb().
* Fix valgrind errors when running cairo-test-suite.
* Fix memory leak in recording surface replays
(fdo bug #87898)
* Fix destruction of fonts in api-special-cases test.
(fdo bug #87567)
* Fix duplicated surface push on similar-image, preventing trivial GTK3
program traces from being replayable, with an error message about
invalid values for the size of the input.
(fdo bug #73580)
* Fix crash when win32 surface's image size does not cover the entire
surface.
(fdo bug #53121)
* Fix crash due to obsolete CGFontGetGlyphPath call
(fdo bug #84324)
* Fix several build issues on AIX
(fdo bugs #89338, #89340, #89356, #89354)
* Fix various documentation warnings and errors
2015-03-15 22:05:37 +01:00
|
|
|
share/gtk-doc/html/cairo/right-insensitive.png
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/right.png
|
|
|
|
share/gtk-doc/html/cairo/style.css
|
Update to 1.14.2:
Release 1.14.2 (2014-03-09 Bryce Harrington <bryce@osg.samsung.com>)
====================================================================
This release provides collected bug fixes, along with one feature
enhancement for the xcb backend, and a small performance improvement for
fonts.
The running theme of the bug fixes is platform-specific issues, both
build and run-time. Platforms with fixes include Sparc, AIX, Windows
(mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF
issues round out our list.
It's come to light that changes in cairo 1.14 resulted in breakage on
MacOS X 10.4. We've not yet determined whether to fix up the support,
or excise the 10.4-specific code and support only OS X 10.5 or newer.
Meantime, we'll only advertise cairo as working on OS X 10.5.
Features
--------
* Improve xcb's handling of per-screen subpixel ordering. If no
Xft.rgba property is specified, default to the screen's subpixel
order.
API Changes
-----------
None
Dependency Changes
------------------
None
Performance Optimizations
-------------------------
* Improve performance of cpu_to_be32 and be32_to_cpu, making truetype
subsetting of large fonts run about 15% faster.
Bug Fixes
---------
* Fix unaligned access on sparc with the compact font format (CFF).
Unlike truetype, all data in CFF is not aligned.
(Debian bug #712836)
* Fix unaligned access on sparc with tor-scan-converter's memory pool.
* Fix crash when loading a PDF with a transformed image.
(fdo bug #85151)
* Fix regression on mingw for bigendian test due to removal of file
extension for executables.
(fdo bug #85120)
* Fix handling of backslash in PDF interpreter
(fdo bug #85662)
* Fix crash in xlib and xcb renderers when swapping a 0-sized glyph
* Fix bug with RTL text in PDF operators
(fdo bug #86461)
* Fix compilation 'cairo-path-stroke-traps.c' with MSVC8
(fdo bug #84908)
* Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is
negative.
* Fix valgrind error by releasing pattern created by
cairo_pattern_create_rgb().
* Fix valgrind errors when running cairo-test-suite.
* Fix memory leak in recording surface replays
(fdo bug #87898)
* Fix destruction of fonts in api-special-cases test.
(fdo bug #87567)
* Fix duplicated surface push on similar-image, preventing trivial GTK3
program traces from being replayable, with an error message about
invalid values for the size of the input.
(fdo bug #73580)
* Fix crash when win32 surface's image size does not cover the entire
surface.
(fdo bug #53121)
* Fix crash due to obsolete CGFontGetGlyphPath call
(fdo bug #84324)
* Fix several build issues on AIX
(fdo bugs #89338, #89340, #89356, #89354)
* Fix various documentation warnings and errors
2015-03-15 22:05:37 +01:00
|
|
|
share/gtk-doc/html/cairo/up-insensitive.png
|
2006-08-10 16:28:53 +02:00
|
|
|
share/gtk-doc/html/cairo/up.png
|