blob: 9996a2bfd7a69f35661d40f2da69391a91f8dda3 [file] [log] [blame]
Allan MacKinnon4359d522018-06-19 13:57:04 -07001/*
2 * Copyright 2017 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can
5 * be found in the LICENSE file.
6 *
7 */
8
9#pragma once
10
11//
12//
13//
14
15#include "skc.h"
16#include "assert_state.h"
17#include "extent_ring.h" // note that these structs are *not* opaque
18
19//
20//
21//
22
23typedef enum skc_raster_builder_state_e {
24
25 SKC_RASTER_BUILDER_STATE_READY,
26 SKC_RASTER_BUILDER_STATE_BUILDING
27
28} skc_raster_builder_state_e;
29
30//
31// Construct and dispose of a raster builder and its opaque
32// implementation.
33//
34
35struct skc_raster_builder
36{
37 struct skc_context * context;
38
39 struct skc_raster_builder_impl * impl;
40
41 skc_err (* add )(struct skc_raster_builder_impl * const impl, skc_path_t const * paths, skc_uint count);
42 void (* end )(struct skc_raster_builder_impl * const impl, skc_raster_t * const raster);
43 void (* start )(struct skc_raster_builder_impl * const impl);
44 void (* force )(struct skc_raster_builder_impl * const impl);
45 void (* release)(struct skc_raster_builder_impl * const impl);
46
47 struct {
48 skc_path_t * extent;
49 struct skc_extent_ring ring;
50 } path_ids;
51
52 struct {
53 union skc_transform * extent;
54 struct skc_extent_ring ring;
55 } transforms;
56
57 struct {
58 union skc_path_clip * extent;
59 struct skc_extent_ring ring;
60 } clips;
61
62 struct {
63 union skc_cmd_fill * extent;
64 struct skc_extent_ring ring;
65 } fill_cmds;
66
67 struct {
68 skc_raster_t * extent;
69 struct skc_extent_ring ring;
70 } raster_ids;
71
72 skc_uint refcount; // FIXME -- split this into host and impl refcounts
73
74 SKC_ASSERT_STATE_DECLARE(skc_raster_builder_state_e);
75};
76
77//
78//
79//