[cairo] [cairo-announce] cairo snapshot 1.9.6 now available
cworth at cworth.org
Thu Feb 25 10:24:24 PST 2010
[This snapshot was created last week, but I only realized now that the
mail I intended to send didn't actually go where I intended to send it.]
A new cairo snapshot 1.9.6 is now available from:
which can be verified with:
(signed by Carl Worth)
Additionally, a git clone of the source tree:
git clone git://git.cairographics.org/git/cairo
will include a signed 1.9.6 tag which points to a commit named:
which can be verified with:
git verify-tag 1.9.6
and can be checked out with a command such as:
git checkout -b build 1.9.6
We're happy to share this snapshot of recent cairo development. We
apologize that it has been so long since the last snapshot, (snapshot
1.9.4 was 4 months ago), but we are optimistic that we can finish up
cairo 1.10 in the next month or so. Our goal going forward is to have
major cairo releases on a time-based schedule with releases at the end
of every March and September (or so).
This 1.9.6 snapshot is really exactly that---it's a snapshot of current
development. There hasn't been as much testing through the test suite as
we would normally do for a cairo release. But that's what we'll be doing
From now until cairo 1.10. We also hope that many of you will also test
this snapshot with your cairo applications and report back to us.
One of the most exciting things in the 1.9.6 snapshot is the cairo-gl
backend with dramatic improvements compared to cairo-gl in any previous
snapshots, (it's now using shaders to accelerate many operations). See
Eric's post here for some performance numbers:
and please join me in thanking Eric and T. Zachary Laine (a welcome new
contributor!) for this work.
As usual, Chris Wilson has put in a remarkable amount of effort as
reflected in this snapshot. I give him my heartfelt thanks for keeping
cairo so vibrant while I have not been able to give it much personal
This snapshot also includes the cairo-drm backend worked on by Chris
Wilson and Kristian Høgsber. This is another interesting experimental
backend which currently outperforms cairo-gl in several benchmarks, (and
sets the bar for cairo-gl to reach). This direct-rendering backend only
support Intel graphics chipsets in the i915 and i965 families.
I've written a quick summary of other improvements in 1.9.6 below. I've
certainly missed many interesting things that have been done. If you are
aware of interesting work that I neglected, please let me know so that
we can get that work mentioned for the 1.10 release notes. (Best would
be a patch to the NEWS file adding the information).
I hope that everyone will have lots of fun with cairo!
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
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:
along with a pair of routines for serialising interaction:
and a method to flush any outstanding accesses:
The device for a particular surface may be retrieved using:
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
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
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.
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)
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.
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):
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
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
Improvements to embedding of JPEG and JPEG2000 data.
Fix printing of rotated user fonts.
Log of all changes from 1.9.4 to 1.9.6
Adrian Johnson (11):
Provide a builtin implementation of isspace() and isdigit()
Type 1 subset: Don't add a new line when in binary mode
Type1-subset: Check for binary eexec data
PDF: Include Type 1 fixed-content portion in the embedded font
Type1-subset: Append "cleartomark" operator for binary fonts that don't include it
PS: Add some missing pdf-operators flushes
PDF: Remove extraneous \n from end of jpeg/jp2 data
PDF: Don't specify colorspace in JPEG2000 image dictionary
Fix bug in _cairo_ft_index_to_ucs4
Fix incorrect font scale and glyph position in Type 3 fonts
Fix printing of rotated user fonts
Alexander Shulgin (1):
surface: Fix detach mime-data after ecda633f887a10da650b4cd3efb17c861a6f519f
Andrea Canciani (35):
[test] Add surface-pattern-operator
quartz: Fix compilation
xlib: Fix double free
Add new operator-alpha-alpha test
Fix compilation on MacOS X
[quartz] Improve A8 image handling
[quartz] Improve unbounded operators fixup
[quartz] Fix implied colour of alpha-only surface sources
[quartz] Fix stroking with unbounded operator
[quartz] Fix source-unbounded compositing of surface sources
[quartz] Fix compositing operators
Add dash-offset test
Fix odd length dashing with negative offset
Improve stroke offset computation
Revert "[test] Reorder dash-infinite-loop to not hit a runaway allocation."
Improve stroking of densely dashed styles
[trace] Fix compilation when FreeType is disabled
[quartz] Improve A8 and A1 support
[quartz] Approximate dense dashing patterns
[quartz] Fix generic masking
[quartz] Leftbehind change from a39075c88f9b2e12e19348ea11c9b3f739818265
Fix image backend compilation
Fix compilation on MacOS X
Constrain subsurface creation
Silence autoconf on Mac OS X
Round caps coverage extimate explanation
Improve dash pattern approximation
Improve comments style consistency
Approximate dash patterns in gstate
Revert "[quartz] Approximate dense dashing patterns"
Partially revert "Improve stroking of densely dashed styles"
[quartz] Silence compiler warnings
[quartz] Fix surface to CGImage conversion
[quartz] Fix UNSUPPORTED operations
[quartz] Unbreak mask fallback path
Benjamin Otte (24):
[xlib] Fix compiler warnings
[path] Fix compiler warnings
[clip] Remove non-existing functions from header
[gstate] Apply target device offsets to patterns immediately
[test] Update upscale test to expose an Xlib failure
sphinx: Add required pthread libs
[test] Add a test exposing bugs in XRenderComposite
[xlib] Fix new Composite test
[test] Add "target=raster" to test
[xlib] Use correct number when checking if points are out of range
test: Add cases to exercise clipping after no-ops
[clip] Don't ignore outermost clip when it clips everything
Apply device transform in surface wrapper
Satisfy make check
[test] Add new test checking is_clear is handled properly
[test] Add a simple multithreading test
[test] Add pthread-same-source test
Give cairo_surface_mark_dirty() the slim hidden treatment
Remove useless pixman version checks
[png] Simplify coercion code
build: Fix pthread detection
docs: appease make check
build: Remove glitz surface
build: Add -Wdeclaration-after-statement
Carl Worth (4):
Increment version to 1.9.5
NEWS: Add notes for the 1.9.6 snapshot.
Update version to 1.9.6
Update REFERENCE_IMAGES list for "make distcheck".
Chris Wilson (140):
[fallback] Create intermediate surface with same content.
[image] Clone the format for a similar surface with identical content
[surface] Don't AND in the desired content.
[test] Add radial-gradient-source
[test] Update rotate-image-surface-paint
[doc] Add comments on when surfaces are cleared on construction.
Make the surface->is_clear logic common
[gl] Do not clear internal surfaces.
[pattern] Compute zero extents for empty patterns
wideint: Protect 64_32_div for non-HAVE_UINT16_T systems
perf: Fix comparisons
gitignore: Add forgotten cairo-perf-print
scaled-font: Fix documentation examples with incorrect derefs
xlib: Set has_component_alpha = FALSE for gradient Pictures
path: Misclassification of rectilinear after degenerate line-to
path: Skip any secondary degenerate line-to segments.
sphinx: Add required pthread libs
build: Add -pthread to real_pthread_CFLAGS
test: Tweak Benjamin's xcomposite-projection
AUTHORS: Add Andrea Canciani
arc: Just emit a line-to if radius is zero.
trace: Correctly encode octal values.
type1: Destroy the output stream.
test: Add path-stroke-twice
path: Do not remove anti-parallel line segments in case we are stroking
test: Fix typo in path-stroke-twice reference image
test: Add degenerate-arcs
test: Add linear-uniform
pattern: Premultiply color-stop when converting to solid
qt: Make flush() robust.
surface-wrapper: Avoid copying patterns and clips unless transformed.
Move _cairo_error() to a standalone header
perf: Enable a surface cache for perf-trace
script: Permit surface operations on the context
script: Free the correct pattern after failure.
script: Handle cache allocation failure more gracefully
Constify stroke style and matrices.
Unify the two freed object pools
Add surface-offset internal API.
Remove content matching from snapshot lookup.
Real zero-copy cow snapshotting
configure: Globally define AC_GNU_SOURCE
script: Port cairo_script_context_t to cairo_device_t
xml: Port to cairo_device_t
gl: Port to cairo_device_t
gl: Exercise Window destinations with boilerplate
qt: Trivial compile fix for boilerplate.
spans: Pass multiple rows of identical spans to the renders.
Alter definition of cairo_composite_rectangles_t
boxes: Efficient storage for an array of cairo_box_t.
boxes: Enable tessellation
boxes: Enable generation of boxes from rectilinear polygons.
spans: Add a Bentley-Ottmann variant on the Tor scan converter
spans: Add a rectangular scan converter
pattern: An EXTEND_NONE surface is not opaque if we sample outside
test: Add --track-origins=yes to valgrind flags.
test: Exercise scan converters with large rounded rectangles.
test: Tweak aligned of text-rotate
test: Add an xcb surface source test
test: Add explicit device management to xlib-surface-source
scaled-font: Use tight glyph bounds when determining overlap.
pattern: Add convenience patterns for stock colours
gstate: White space.
gstate: Check for an invalid matrix before cairo_transform()
gstate: Skip ops with a clear mask.
gstate: Reduce operators
matrix: Do not need to iteratively refine conversion for unity matrices.
path: Compute coarse bounds upon construction.
fill: Convert rectilinear paths to boxes.
stroke: Convert rectilinear paths to boxes.
color: Add enum value for the largest stock color.
types: Move cairo_scaled_glyph_t to cairo-types-private.h
clip: Implement clipping using only the high-level operators.
surface-fallback: Convert to composite rectangles
ft: Tidy computation of transformed bitmap, and mark if CA
image: Implement high level interface.
drm: Add backends for i915 and i965.
misc: Only use custom lround() under DISABLE_SOME_FLOATING_POINT
glew: Do not assume that UNIX == GLX
gl: Acquire the context whilst creating surfaces.
glew: Silence compiler.
pdf: Arguments to fill_extents() were reversed.
ps: Arguments to fill_extents() were reversed.
ps: Wean off the low-level image composite interface
scaled-font: Mark an error site with _cairo_error()
script: Encode octal values correctly.
win32: Trivially fix the compile error with printing.
surface-fallback: We no longer own a reference to the clip surface
image: Prevent deref of NULL clip_region
test: Erroneous ref image for big-line xlib-fallback.
clip: Create a fallback clip surface
xcb: compile errors with lockdep
configure: dri2 is only required for xcb-drm
xcb: Make shm optional
mime-data: Detach existing alternate representations upon modification
xcb: Fix linking with xcb-drm
drm: compile fix for cairo_always_inline
configure: Enable AC_SYS_LARGEFILE for drm
drm-i915: Ensure surface size for clone is initialized.
drm/i915: Ensure surface is initialized.
drm-i915: Don't tile temporary image textures.
drm-intel: Assert that the bo is unmapped upon release.
drm-intel: The accumulation bo may be NULL, beware.
drm-intel: flush in memory modifications to texture.
drm: Paranoid assert that the fallback is released upon finish.
drm-intel: Unmap a full glyph cache.
atomic: Fix up compile on PPC with libatomic-ops
xlib: Compile fix for no fontconfig
csi-replay: compile fix
test: Add clip-empty-save
clip: Propagate all-clipped when copying
test: Add linear-step-function
pattern: Zero-length gradients are not necessary empty
drm: Handle absence of PCI_ID
drm/i915: Pass the correct length to dump the batchbuffer.
drm/i915: Don't tile page sized bo.
drm/i915: check for batch buffer overflow.
drm/i915: Increase batch buffer space.
drm/i915: Free potential leak of cloned textures.
gl: Use pixman to create the gradient texture
test: Add linear-gradient-subset
ps: Propagate NOTHING_TO_DO
ps: Initialise page bbox to page size
qt: Fix compile error.
drm/intel: An interrupted SET_TILING modifies the input parameters
script: Compile without mmap
drm/i965: fix use of uninitialized variable whilst dumping errors
gl: Remove eagle support
test: Add clip-twice-rectangle
clip: Restrict composite extents to clip extents
boilerplate: Include X11.h for GL/GLX
clip: Avoiding derefencing NULL clip_region
drm/i915: Use correct linear mode for mask.
drm/i915: Set a source for unbounded fixups.
Dave Airlie (1):
gl: initial support for EXT_texture_rectangle extension
Eric Anholt (42):
[gl] Fix the glyph cache full flush to really try again.
[gl] Clear the current_target cache when binding a framebuffer in creation.
[gl] Use ADD instead of SOURCE when making a mask for overlapping glyphs.
[gl] Use GLSL for fill_rectangles when available.
[gl] Remove the special-casing of acquiring a pattern surface.
[gl] Fix the color bits of CAIRO_CONTENT_ALPHA surface patterns to be 0.
[gl] Use the UNSUPPORTED() macro in more places for fallback debugging.
[gl] Add support for component-alpha glyph rendering.
[gl] Use GL_RGBA textures even for CAIRO_CONTENT_COLOR.
[gl] Composite component-alpha glyphs directly instead of through a mask.
[gl] Cache a temporary glyph compositing mask for reuse later.
[gl] Emit rectanges a whole primitive at a time.
[gl] Release the context acquired in surface_create.
[gl] Use GL_MESA_pack_invert to flip get_image of windows around.
[gl] Check for GLSL support once at context init instead of per draw.
[gl] Avoid macro obfuscation of the shader impl structures.
[gl] Cut out the abstraction of GL_VERTEX_SHADER vs GL_VERTEX_SHADER_ARB.
[gl] Convert fill_rectangles to the new GLSL core/arb wrapper.
[gl] Use GLSL when available for glyph rendering.
[gl] Move the glyphs shader construction to a more general location.
[gl] Move normal composites to using GLSL when available.
[gl] Move the component alpha composite to using GLSL when available.
[gl] Use the shader source choice from operand setup instead of DIY.
[gl] Test for required EXT_bgra and explain what it's used for.
[gl] Convert the spans code to using GLSL when available.
[gl] Sanity check the sampler uniform binding.
[gl] Pull the gradient operand setup out to its own function.
[gl] Fix create_gradient_texture to premultiply alpha.
[gl] Implement linear gradients acceleration.
[gl] When filling a gradient texture, multiply alpha after interpolating.
[gl] When making a boilerplate GLX window, ensure it has alpha.
[gl] Add radial gradients acceleration.
[gl] Make the VBO once at startup instead of recreating per glyphs/spans.
gl: Reduce the size of the gradient texture for small numbers of stops.
gl: Add GLSL support for ARB_texture_rectangle, and repeat/reflect fallbacks.
gl: Fix glyphs texture coordinates for ARB_texture_rectangle.
gl: Implement draw_image for window targets.
gl: Reduce complexity of radial fragment shaders.
gl: Remove the old unused radial/linear gradients shaders.
gl: Stop trying to handle first/last stop offset in the gradient shaders.
gl: Be sure to do linear interpolation on gradients.
test: Add an option to explicitly specify a test name to the runner.
Haakon Sporsheim (1):
win32: Compile fix, rename render_row to render_rows.
Luo Jinghua (1):
atomic: correct libatomic_ops version of _cairo_atomic_int_cmpxchg
M Joonas Pihlaja (6):
[meta] Rename cairo_meta_surface_t to cairo_recording_surface_t.
[test] Add missing mark_dirty() calls to test cases.
[gstate] Change dash offset normalisation to preserve offsets in range.
[test] Don't use uninitialised data in surface-source.c
[dirty] Add more missing surface dirtying notifications.
[stroker] Fix off-by-one memory allocation in _tessellate_fan().
Robert O'Callahan (2):
[quartz] Fix gradient pattern painting
[quartz] Cleanup fallback source
T. Zachary Laine (3):
[gl] Removed repeated lines of source
[gl] Clear the is_clear flag on the temporary glyph mask we create.
[gl] Add function for creating a 1D texture to use for gradient lookups.
Tim Janik (1):
Fixed documentation typo.
Zach Laine (1):
[gl] Add shader support code for GL versions < 3.0.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 189 bytes
Desc: not available
-------------- next part --------------
cairo-announce mailing list
cairo-announce at lists.cairographics.org
More information about the cairo