/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can * be found in the LICENSE file. * */ #pragma once // // // #include "skc.h" #include "assert_state.h" #include "extent_ring.h" // note that these structs are *not* opaque // // // typedef enum skc_raster_builder_state_e { SKC_RASTER_BUILDER_STATE_READY, SKC_RASTER_BUILDER_STATE_BUILDING } skc_raster_builder_state_e; // // Construct and dispose of a raster builder and its opaque // implementation. // struct skc_raster_builder { struct skc_context * context; struct skc_raster_builder_impl * impl; skc_err (* add )(struct skc_raster_builder_impl * const impl, skc_path_t const * paths, skc_uint count); void (* end )(struct skc_raster_builder_impl * const impl, skc_raster_t * const raster); void (* start )(struct skc_raster_builder_impl * const impl); void (* force )(struct skc_raster_builder_impl * const impl); void (* release)(struct skc_raster_builder_impl * const impl); struct { skc_path_t * extent; struct skc_extent_ring ring; } path_ids; struct { union skc_transform * extent; struct skc_extent_ring ring; } transforms; struct { union skc_path_clip * extent; struct skc_extent_ring ring; } clips; struct { union skc_cmd_fill * extent; struct skc_extent_ring ring; } fill_cmds; struct { skc_raster_t * extent; struct skc_extent_ring ring; } raster_ids; skc_uint refcount; // FIXME -- split this into host and impl refcounts SKC_ASSERT_STATE_DECLARE(skc_raster_builder_state_e); }; // // //