• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 //
10 //
11 //
12 
13 #include "surface.h"
14 #include "composition.h"
15 #include "styling.h"
16 
17 //
18 //
19 //
20 
21 skc_err
skc_surface_retain(skc_surface_t surface)22 skc_surface_retain(skc_surface_t surface)
23 {
24   surface->ref_count += 1;
25 
26   return SKC_ERR_SUCCESS;
27 }
28 
29 skc_err
skc_surface_release(skc_surface_t surface)30 skc_surface_release(skc_surface_t surface)
31 {
32   surface->release(surface->impl);
33 
34   return SKC_ERR_SUCCESS;
35 }
36 
37 //
38 //
39 //
40 
41 skc_err
skc_surface_render(skc_surface_t surface,skc_styling_t styling,skc_composition_t composition,skc_framebuffer_t fb,uint32_t const clip[4],int32_t const txty[2],skc_surface_render_notify notify,void * data)42 skc_surface_render(skc_surface_t             surface,
43                    skc_styling_t             styling,
44                    skc_composition_t         composition,
45                    skc_framebuffer_t         fb,
46                    uint32_t            const clip[4],
47                    int32_t             const txty[2],
48                    skc_surface_render_notify notify,
49                    void                    * data)
50 {
51   skc_err err;
52 
53   // seal styling -- no dependencies so this will start immediately
54   if ((err = skc_styling_seal(styling)) != SKC_ERR_SUCCESS)
55     return err;
56 
57   // seal composition -- force starts any dependent paths or rasters
58   if ((err = skc_composition_seal(composition)) != SKC_ERR_SUCCESS)
59     return err;
60 
61   //
62   // NOTE: there is purposefully no guard against any of the following
63   // use cases:
64   //
65   //   - Simultaneous renders to different frambuffers.
66   //
67   //   - Simultaneous renders with potentially overlapping clips to
68   //     the same framebuffer.
69   //
70   // NOTE: we may want to support concurrent rendering of
71   // non-overlapping clips.  This is fairly easy but at this point
72   // doesn't seem like a common use case.
73   //
74   surface->render(surface->impl,
75                   styling,composition,
76                   fb,clip,txty,
77                   notify,data);
78 
79   return SKC_ERR_SUCCESS;
80 }
81 
82 //
83 //
84 //
85