summaryrefslogtreecommitdiff
path: root/src/cairo-spans.c
AgeCommit message (Collapse)AuthorFilesLines
2009-09-08[spans] Correct offsets for trapezoidsChris Wilson1-2/+2
Pass on the destination offset from composite_trapezoids() to composite_polygon().
2009-08-29traps-as-spansChris Wilson1-0/+82
Add an interface to spans that accepts trapezoids. This allows backends that have an efficient span-line interface but lack efficient handling of boxes (partly due to the current poor compositor interface) to redirect composite_trapezoids() to composite_polygon() and the span-renderer.
2009-08-29Eliminate self-intersecting strokes.Chris Wilson1-143/+36
We refactor the surface fallbacks to convert full strokes and fills to the intermediate polygon representation (as opposed to before where we returned the trapezoidal representation). This allow greater flexibility to choose how then to rasterize the polygon. Where possible we use the local spans rasteriser for its increased performance, but still have the option to use the tessellator instead (for example, with the current Render protocol which does not yet have a polygon image). In order to accommodate this, the spans interface is tweaked to accept whole polygons instead of a path and the tessellator is tweaked for speed. Performance Impact ================== ... Still measuring, expecting some severe regressions. ...
2009-07-23Remove clip handling from generic surface layer.Chris Wilson1-10/+10
Handling clip as part of the surface state, as opposed to being part of the operation state, is cumbersome and a hindrance to providing true proxy surface support. For example, the clip must be copied from the surface onto the fallback image, but this was forgotten causing undue hassle in each backend. Another example is the contortion the meta surface endures to ensure the clip is correctly recorded. By contrast passing the clip along with the operation is quite simple and enables us to write generic handlers for providing surface wrappers. (And in the future, we should be able to write more esoteric wrappers, e.g. automatic 2x FSAA, trivially.) In brief, instead of the surface automatically applying the clip before calling the backend, the backend can call into a generic helper to apply clipping. For raster surfaces, clip regions are handled automatically as part of the composite interface. For vector surfaces, a clip helper is introduced to replay and callback into an intersect_clip_path() function as necessary. Whilst this is not primarily a performance related change (the change should just move the computation of the clip from the moment it is applied by the user to the moment it is required by the backend), it is important to track any potential regression: ppc: Speedups ======== image-rgba evolution-20090607-0 1026085.22 0.18% -> 672972.07 0.77%: 1.52x speedup ▌ image-rgba evolution-20090618-0 680579.98 0.12% -> 573237.66 0.16%: 1.19x speedup ▎ image-rgba swfdec-fill-rate-4xaa-0 460296.92 0.36% -> 407464.63 0.42%: 1.13x speedup ▏ image-rgba swfdec-fill-rate-2xaa-0 128431.95 0.47% -> 115051.86 0.42%: 1.12x speedup ▏ Slowdowns ========= image-rgba firefox-periodic-table-0 56837.61 0.78% -> 66055.17 3.20%: 1.09x slowdown ▏
2009-06-19[spans] Squash a compiler warning when creating error objects.M Joonas Pihlaja1-0/+2
Handle the new CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED status code in the switch/case of the ..._create_in_error() functions for creating span renderers or scan converters.
2009-03-29Silence compiler warnings for CAIRO_STATUS_LAST_STATUSChris Wilson1-0/+2
Add ASSERT_NOT_REACHED (or similar) cases to the error handling switches to silence the compiler.
2009-01-29[surface] add CAIRO_STATUS_INVALID_SIZEPaolo Bonzini1-0/+2
Adds an error code replacing CAIRO_STATUS_NO_MEMORY in one case where it is not really appropriate. CAIRO_STATUS_INVALID_SIZE is used by several backends that do not support image sizes beyond 2^15 pixels on each side. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2008-12-23[spans] Close open subpaths when filling with a scan converter.M Joonas Pihlaja1-22/+31
As reported by Christian Persch, open subpaths weren't being closed when rendering to an image surface: http://bugs.freedesktop.org/show_bug.cgi?id=19240
2008-12-12[path] Mark points as const during _cairo_path_fixed_interpret()Chris Wilson1-11/+7
Use const to document the read-only nature of the arguments passed to the callbacks.
2008-12-06[cairo-spans] New cairo_tor_scan_converter_t.M Joonas Pihlaja1-5/+13
Imports a new polygon scan converter implementation from the repository at http://cgit.freedesktop.org/~joonas/glitter-paths/ Glitter paths is a stand alone polygon rasteriser derived from David Turner's reimplementation of Tor Anderssons's 15x17 supersampling rasteriser from the Apparition graphics library. The main new feature in this implementation is cheaply choosing per-scan line between doing fully analytical coverage computation for an entire row at a time vs. using a supersampling approach.
2008-12-06[cairo-spans] New _cairo_path_fixed_fill_using_spans().M Joonas Pihlaja1-0/+145
Adds a helper function for backends to use for filling a path using spans.
2008-12-06[cairo-spans] New abstract types for scan converting polygons.M Joonas Pihlaja1-0/+242
A cairo_span_renderer_t implementation can be provided by a surface if it wants to render paths as horizontal spans of the alpha component of a mask. Its job is to composite a source pattern to the destination surface when given spans of alpha coverage for a row while taking care of backend specific clipping. A cairo_scan_converter_t takes edges of a flattened path and generates spans for a span renderer to render.