Home | History | Annotate | Download | only in api
      1 SkSurface Reference
      2 ===
      3 
      4 
      5 <a name='SkSurface'></a>
      6 
      7 ---
      8 
      9 <pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
     10 class <a href='SkSurface_Reference#SkSurface'>SkSurface</a> : public <a href='undocumented#SkRefCnt'>SkRefCnt</a> {
     11 
     12     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, void* pixels,
     13                                              size_t rowBytes,
     14                                              const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr);
     15     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, void* pixels,
     16                                     size_t rowBytes,
     17                                     void (*releaseProc)(void* pixels, void* context),
     18                                     void* context, const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr);
     19     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRaster'>MakeRaster</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, size_t rowBytes,
     20                                        const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps);
     21     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRaster'>MakeRaster</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo,
     22                                        const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* props = nullptr);
     23     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a>(int width, int height,
     24                                                 const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr);
     25     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeFromBackendTexture'>MakeFromBackendTexture</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
     26                                                    const <a href='undocumented#GrBackendTexture'>GrBackendTexture</a>& backendTexture,
     27                                                    <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin, int sampleCnt,
     28                                                    <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType,
     29                                                    <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorSpace'>SkColorSpace</a>> colorSpace,
     30                                                    const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps);
     31     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
     32                                                 const <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a>& backendRenderTarget,
     33                                                 <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin,
     34                                                 <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType,
     35                                                 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorSpace'>SkColorSpace</a>> colorSpace,
     36                                                 const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps);
     37     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
     38                                                             const <a href='undocumented#GrBackendTexture'>GrBackendTexture</a>& backendTexture,
     39                                                             <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin,
     40                                                             int sampleCnt,
     41                                                             <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType,
     42                                                             <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorSpace'>SkColorSpace</a>> colorSpace,
     43                                                             const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps);
     44     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
     45                                              const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo,
     46                                              int sampleCount, <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> surfaceOrigin,
     47                                              const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps,
     48                                              bool shouldCreateWithMips = false);
     49     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
     50                                              const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, int sampleCount,
     51                                              const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* props);
     52     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
     53                                              const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo);
     54     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
     55                                              const <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a>& characterization,
     56                                              <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted);
     57     static <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_MakeNull'>MakeNull</a>(int width, int height);
     58     int <a href='#SkSurface_width'>width()</a> const;
     59     int <a href='#SkSurface_height'>height()</a> const;
     60     uint32_t <a href='#SkSurface_generationID'>generationID</a>();
     61 
     62     enum <a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> {
     63         <a href='#SkSurface_kDiscard_ContentChangeMode'>kDiscard_ContentChangeMode</a>,
     64         <a href='#SkSurface_kRetain_ContentChangeMode'>kRetain_ContentChangeMode</a>,
     65     };
     66 
     67     void <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a>(<a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> mode);
     68 
     69     enum <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> {
     70         <a href='#SkSurface_kFlushRead_BackendHandleAccess'>kFlushRead_BackendHandleAccess</a>,
     71         <a href='#SkSurface_kFlushWrite_BackendHandleAccess'>kFlushWrite_BackendHandleAccess</a>,
     72         <a href='#SkSurface_kDiscardWrite_BackendHandleAccess'>kDiscardWrite_BackendHandleAccess</a>,
     73     };
     74 
     75     <a href='undocumented#GrBackendTexture'>GrBackendTexture</a> <a href='#SkSurface_getBackendTexture'>getBackendTexture</a>(<a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> backendHandleAccess);
     76     <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a> <a href='#SkSurface_getBackendRenderTarget'>getBackendRenderTarget</a>(<a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> backendHandleAccess);
     77     <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='#SkSurface_getCanvas'>getCanvas</a>();
     78     <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkSurface_Reference#SkSurface'>SkSurface</a>> <a href='#SkSurface_makeSurface'>makeSurface</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo);
     79     <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkImage_Reference#SkImage'>SkImage</a>> <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>();
     80     <a href='undocumented#sk_sp'>sk_sp</a><<a href='SkImage_Reference#SkImage'>SkImage</a>> <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>(const <a href='SkIRect_Reference#SkIRect'>SkIRect</a>& bounds);
     81     void <a href='#SkSurface_draw'>draw</a>(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='SkCanvas_Reference#Canvas'>canvas</a>, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* <a href='SkPaint_Reference#Paint'>paint</a>);
     82     bool <a href='#SkSurface_peekPixels'>peekPixels</a>(<a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>* <a href='SkPixmap_Reference#Pixmap'>pixmap</a>);
     83     bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>& dst, int srcX, int srcY);
     84     bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& dstInfo, void* dstPixels, size_t dstRowBytes,
     85                     int srcX, int srcY);
     86     bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkBitmap_Reference#SkBitmap'>SkBitmap</a>& dst, int srcX, int srcY);
     87     void <a href='#SkSurface_writePixels'>writePixels</a>(const <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>& src, int dstX, int dstY);
     88     void <a href='#SkSurface_writePixels'>writePixels</a>(const <a href='SkBitmap_Reference#SkBitmap'>SkBitmap</a>& src, int dstX, int dstY);
     89     const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>& <a href='#SkSurface_props'>props()</a> const;
     90     void <a href='#SkSurface_flush'>flush()</a>;
     91     <a href='undocumented#GrSemaphoresSubmitted'>GrSemaphoresSubmitted</a> <a href='#SkSurface_flushAndSignalSemaphores'>flushAndSignalSemaphores</a>(int numSemaphores,
     92                                                    <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a> signalSemaphores[]);
     93     bool <a href='#SkSurface_wait'>wait</a>(int numSemaphores, const <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>* waitSemaphores);
     94     bool <a href='#SkSurface_characterize'>characterize</a>(<a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a>* characterization) const;
     95     bool <a href='#SkSurface_draw'>draw</a>(<a href='undocumented#SkDeferredDisplayList'>SkDeferredDisplayList</a>* deferredDisplayList);
     96 };
     97 
     98 </pre>
     99 
    100 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is responsible for managing the pixels that a <a href='SkCanvas_Reference#Canvas'>canvas</a> draws into. The pixels can be
    101 allocated either in CPU memory, if a  <a href='undocumented#Raster_Surface'>raster surface</a>; or on the GPU, for a <a href='undocumented#GrRenderTarget'>GrRenderTarget</a> <a href='SkSurface_Reference#Surface'>surface</a>.
    102 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> takes care of allocating a <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> that will draw into the <a href='SkSurface_Reference#Surface'>surface</a>. Call
    103 <a href='SkSurface_Reference#Surface'>surface</a>-><a href='#SkSurface_getCanvas'>getCanvas</a>() to use that <a href='SkCanvas_Reference#Canvas'>canvas</a>. The caller should not delete the returned <a href='SkCanvas_Reference#Canvas'>canvas</a>;
    104 it is owned by <a href='SkSurface_Reference#Surface'>surface</a>.
    105 
    106 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> always has non-zero dimensions. If there is a request for a new <a href='SkSurface_Reference#Surface'>surface</a>, and either
    107 of the requested dimensions are zero, then nullptr will be returned.
    108 
    109 <a name='SkSurface_MakeRasterDirect'></a>
    110 
    111 ---
    112 
    113 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    114 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, void* pixels, size_t rowBytes,
    115                                          const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr)
    116 </pre>
    117 
    118 Allocates raster <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a> draws directly into <a href='#SkSurface_MakeRasterDirect_pixels'>pixels</a>.
    119 
    120 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid.
    121 Valid parameters include:
    122 info dimensions are greater than zero;
    123 info contains <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> supported by  <a href='undocumented#Raster_Surface'>raster surface</a>;
    124 <a href='#SkSurface_MakeRasterDirect_pixels'>pixels</a> is not nullptr;
    125 <a href='#SkSurface_MakeRasterDirect_rowBytes'>rowBytes</a> is large enough to contain info width <a href='#SkSurface_MakeRasterDirect_pixels'>pixels</a> of <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>.
    126 
    127 <a href='undocumented#Pixel'>Pixel</a> buffer <a href='undocumented#Size'>size</a> should be info height times computed <a href='#SkSurface_MakeRasterDirect_rowBytes'>rowBytes</a>.
    128 Pixels are not initialized.
    129 To access <a href='#SkSurface_MakeRasterDirect_pixels'>pixels</a> after drawing, call <a href='#SkSurface_flush'>flush()</a> or <a href='#SkSurface_peekPixels'>peekPixels</a>().
    130 
    131 ### Parameters
    132 
    133 <table>  <tr>    <td><a name='SkSurface_MakeRasterDirect_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    134     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    135   </tr>
    136 </table>
    137 
    138 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width and height must be greater than zero
    139 
    140 ### Parameters
    141 
    142 <table>  <tr>    <td><a name='SkSurface_MakeRasterDirect_pixels'><code><strong>pixels</strong></code></a></td>
    143     <td>pointer to destination <a href='#SkSurface_MakeRasterDirect_pixels'>pixels</a> buffer</td>
    144   </tr>
    145   <tr>    <td><a name='SkSurface_MakeRasterDirect_rowBytes'><code><strong>rowBytes</strong></code></a></td>
    146     <td>interval from one <a href='SkSurface_Reference#SkSurface'>SkSurface</a> row to the next</td>
    147   </tr>
    148   <tr>    <td><a name='SkSurface_MakeRasterDirect_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    149     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent fonts;</td>
    150   </tr>
    151 </table>
    152 
    153 may be nullptr
    154 
    155 ### Return Value
    156 
    157 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    158 
    159 ### Example
    160 
    161 <div><fiddle-embed name="3f5aeb870104187643197354a7f1d27a">
    162 
    163 #### Example Output
    164 
    165 ~~~~
    166 ---
    167 -x-
    168 ---
    169 ~~~~
    170 
    171 </fiddle-embed></div>
    172 
    173 ### See Also
    174 
    175 <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a> <a href='#SkSurface_MakeRaster'>MakeRaster</a> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_MakeRasterDirect'>MakeRasterDirect</a>
    176 
    177 <a name='SkSurface_MakeRasterDirectReleaseProc'></a>
    178 
    179 ---
    180 
    181 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    182 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, void* pixels,
    183                                            size_t rowBytes, void (*releaseProc) (void* pixels,
    184                                            void* context) , void* context,
    185                                            const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr)
    186 </pre>
    187 
    188 Allocates raster <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a> draws directly into <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a>.
    189 <a href='#SkSurface_MakeRasterDirectReleaseProc_releaseProc'>releaseProc</a> is called with <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a> and <a href='#SkSurface_MakeRasterDirectReleaseProc_context'>context</a> when <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is deleted.
    190 
    191 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid.
    192 Valid parameters include:
    193 info dimensions are greater than zero;
    194 info contains <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> supported by  <a href='undocumented#Raster_Surface'>raster surface</a>;
    195 <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a> is not nullptr;
    196 <a href='#SkSurface_MakeRasterDirectReleaseProc_rowBytes'>rowBytes</a> is large enough to contain info width <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a> of <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>.
    197 
    198 <a href='undocumented#Pixel'>Pixel</a> buffer <a href='undocumented#Size'>size</a> should be info height times computed <a href='#SkSurface_MakeRasterDirectReleaseProc_rowBytes'>rowBytes</a>.
    199 Pixels are not initialized.
    200 To access <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a> after drawing, call <a href='#SkSurface_flush'>flush()</a> or <a href='#SkSurface_peekPixels'>peekPixels</a>().
    201 
    202 ### Parameters
    203 
    204 <table>  <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    205     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    206   </tr>
    207 </table>
    208 
    209 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width and height must be greater than zero
    210 
    211 ### Parameters
    212 
    213 <table>  <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_pixels'><code><strong>pixels</strong></code></a></td>
    214     <td>pointer to destination <a href='#SkSurface_MakeRasterDirectReleaseProc_pixels'>pixels</a> buffer</td>
    215   </tr>
    216   <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_rowBytes'><code><strong>rowBytes</strong></code></a></td>
    217     <td>interval from one <a href='SkSurface_Reference#SkSurface'>SkSurface</a> row to the next</td>
    218   </tr>
    219   <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_releaseProc'><code><strong>releaseProc</strong></code></a></td>
    220     <td>called when <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is deleted; may be nullptr</td>
    221   </tr>
    222   <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_context'><code><strong>context</strong></code></a></td>
    223     <td>passed to <a href='#SkSurface_MakeRasterDirectReleaseProc_releaseProc'>releaseProc</a>; may be nullptr</td>
    224   </tr>
    225   <tr>    <td><a name='SkSurface_MakeRasterDirectReleaseProc_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    226     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent fonts;</td>
    227   </tr>
    228 </table>
    229 
    230 may be nullptr
    231 
    232 ### Return Value
    233 
    234 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    235 
    236 ### Example
    237 
    238 <div><fiddle-embed name="8e6530b26ab4096a9a91cfaadda1c568">
    239 
    240 #### Example Output
    241 
    242 ~~~~
    243 ---
    244 -x-
    245 ---
    246 expected release context
    247 ~~~~
    248 
    249 </fiddle-embed></div>
    250 
    251 ### See Also
    252 
    253 <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a> <a href='#SkSurface_MakeRaster'>MakeRaster</a>
    254 
    255 <a name='SkSurface_MakeRaster'></a>
    256 
    257 ---
    258 
    259 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    260 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRaster'>MakeRaster</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, size_t rowBytes,
    261                                    const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps)
    262 </pre>
    263 
    264 Allocates raster <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a> draws directly into pixels.
    265 Allocates and zeroes <a href='undocumented#Pixel'>pixel</a> memory. <a href='undocumented#Pixel'>Pixel</a> memory <a href='undocumented#Size'>size</a> is <a href='#SkSurface_MakeRaster_imageInfo'>imageInfo</a>.<a href='#SkImageInfo_height'>height()</a> times
    266 <a href='#SkSurface_MakeRaster_rowBytes'>rowBytes</a>, or times <a href='#SkSurface_MakeRaster_imageInfo'>imageInfo</a>.<a href='#SkImageInfo_minRowBytes'>minRowBytes</a>() if <a href='#SkSurface_MakeRaster_rowBytes'>rowBytes</a> is zero.
    267 <a href='undocumented#Pixel'>Pixel</a> memory is deleted when <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is deleted.
    268 
    269 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid.
    270 Valid parameters include:
    271 info dimensions are greater than zero;
    272 info contains <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> supported by  <a href='undocumented#Raster_Surface'>raster surface</a>;
    273 <a href='#SkSurface_MakeRaster_rowBytes'>rowBytes</a> is large enough to contain info width pixels of <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, or is zero.
    274 
    275 If <a href='#SkSurface_MakeRaster_rowBytes'>rowBytes</a> is not zero, subsequent images returned by <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>()
    276 have the same <a href='#SkSurface_MakeRaster_rowBytes'>rowBytes</a>.
    277 
    278 ### Parameters
    279 
    280 <table>  <tr>    <td><a name='SkSurface_MakeRaster_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    281     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    282   </tr>
    283 </table>
    284 
    285 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width and height must be greater than zero
    286 
    287 ### Parameters
    288 
    289 <table>  <tr>    <td><a name='SkSurface_MakeRaster_rowBytes'><code><strong>rowBytes</strong></code></a></td>
    290     <td>interval from one <a href='SkSurface_Reference#SkSurface'>SkSurface</a> row to the next; may be zero</td>
    291   </tr>
    292   <tr>    <td><a name='SkSurface_MakeRaster_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    293     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent fonts;</td>
    294   </tr>
    295 </table>
    296 
    297 may be nullptr
    298 
    299 ### Return Value
    300 
    301 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    302 
    303 ### Example
    304 
    305 <div><fiddle-embed name="a803910ada4f8733f0b62456afead55f">
    306 
    307 #### Example Output
    308 
    309 ~~~~
    310 ---
    311 -x-
    312 ---
    313 ~~~~
    314 
    315 </fiddle-embed></div>
    316 
    317 ### See Also
    318 
    319 <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a> <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a>
    320 
    321 <a name='SkSurface_MakeRaster_2'></a>
    322 
    323 ---
    324 
    325 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    326 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRaster'>MakeRaster</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo,
    327                                    const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* props = nullptr)
    328 </pre>
    329 
    330 Allocates raster <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a> draws directly into pixels.
    331 Allocates and zeroes <a href='undocumented#Pixel'>pixel</a> memory. <a href='undocumented#Pixel'>Pixel</a> memory <a href='undocumented#Size'>size</a> is <a href='#SkSurface_MakeRaster_2_imageInfo'>imageInfo</a>.<a href='#SkImageInfo_height'>height()</a> times
    332 <a href='#SkSurface_MakeRaster_2_imageInfo'>imageInfo</a>.<a href='#SkImageInfo_minRowBytes'>minRowBytes</a>().
    333 <a href='undocumented#Pixel'>Pixel</a> memory is deleted when <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is deleted.
    334 
    335 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid.
    336 Valid parameters include:
    337 info dimensions are greater than zero;
    338 info contains <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> supported by  <a href='undocumented#Raster_Surface'>raster surface</a>.
    339 
    340 ### Parameters
    341 
    342 <table>  <tr>    <td><a name='SkSurface_MakeRaster_2_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    343     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    344   </tr>
    345 </table>
    346 
    347 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width and height must be greater than zero
    348 
    349 ### Parameters
    350 
    351 <table>  <tr>    <td><a name='SkSurface_MakeRaster_2_props'><code><strong>props</strong></code></a></td>
    352     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent fonts;</td>
    353   </tr>
    354 </table>
    355 
    356 may be nullptr
    357 
    358 ### Return Value
    359 
    360 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    361 
    362 ### Example
    363 
    364 <div><fiddle-embed name="c6197d204ef9e4ccfb583242651fb2a7"></fiddle-embed></div>
    365 
    366 ### See Also
    367 
    368 <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a> <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a>
    369 
    370 <a name='SkSurface_MakeRasterN32Premul'></a>
    371 
    372 ---
    373 
    374 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    375 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a>(int width, int height,
    376                                             const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps = nullptr)
    377 </pre>
    378 
    379 Allocates raster <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a> draws directly into pixels.
    380 Allocates and zeroes <a href='undocumented#Pixel'>pixel</a> memory. <a href='undocumented#Pixel'>Pixel</a> memory <a href='undocumented#Size'>size</a> is <a href='#SkSurface_MakeRasterN32Premul_height'>height</a> times <a href='#SkSurface_MakeRasterN32Premul_width'>width</a> times
    381 four. <a href='undocumented#Pixel'>Pixel</a> memory is deleted when <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is deleted.
    382 
    383 Internally, sets <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a> to <a href='#SkSurface_MakeRasterN32Premul_width'>width</a>, <a href='#SkSurface_MakeRasterN32Premul_height'>height</a>, native  <a href='SkImageInfo_Reference#Color_Type'>color type</a>, and
    384 <a href='SkImageInfo_Reference#kPremul_SkAlphaType'>kPremul_SkAlphaType</a>.
    385 
    386 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if <a href='#SkSurface_MakeRasterN32Premul_width'>width</a> and <a href='#SkSurface_MakeRasterN32Premul_height'>height</a> are greater than zero.
    387 
    388 Use to create <a href='SkSurface_Reference#SkSurface'>SkSurface</a> that matches <a href='SkColor_Reference#SkPMColor'>SkPMColor</a>, the native <a href='undocumented#Pixel'>pixel</a> arrangement on
    389 the platform. <a href='SkSurface_Reference#SkSurface'>SkSurface</a> drawn to output <a href='undocumented#Device'>device</a> skips converting its <a href='undocumented#Pixel'>pixel</a> format.
    390 
    391 ### Parameters
    392 
    393 <table>  <tr>    <td><a name='SkSurface_MakeRasterN32Premul_width'><code><strong>width</strong></code></a></td>
    394     <td><a href='undocumented#Pixel'>pixel</a> column count; must be greater than zero</td>
    395   </tr>
    396   <tr>    <td><a name='SkSurface_MakeRasterN32Premul_height'><code><strong>height</strong></code></a></td>
    397     <td><a href='undocumented#Pixel'>pixel</a> row count; must be greater than zero</td>
    398   </tr>
    399   <tr>    <td><a name='SkSurface_MakeRasterN32Premul_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    400     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    401   </tr>
    402 </table>
    403 
    404 fonts; may be nullptr
    405 
    406 ### Return Value
    407 
    408 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    409 
    410 ### Example
    411 
    412 <div><fiddle-embed name="b932a2bd68455fb0af2e7a1ed19e36b3">
    413 
    414 #### Example Output
    415 
    416 ~~~~
    417 ---
    418 -x-
    419 ---
    420 ~~~~
    421 
    422 </fiddle-embed></div>
    423 
    424 ### See Also
    425 
    426 <a href='#SkSurface_MakeRasterDirect'>MakeRasterDirect</a> <a href='#SkSurface_MakeRasterN32Premul'>MakeRasterN32Premul</a> <a href='#SkSurface_MakeRasterDirectReleaseProc'>MakeRasterDirectReleaseProc</a>
    427 
    428 <a name='SkSurface_MakeFromBackendTexture'></a>
    429 
    430 ---
    431 
    432 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    433 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeFromBackendTexture'>MakeFromBackendTexture</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
    434                                                const <a href='undocumented#GrBackendTexture'>GrBackendTexture</a>& backendTexture,
    435                                                <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin, int sampleCnt,
    436                                                <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType,
    437                                                <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorSpace'>SkColorSpace</a>&gt; colorSpace,
    438                                                const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps)
    439 </pre>
    440 
    441 Wraps a GPU-backed <a href='undocumented#Texture'>texture</a> into <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. Caller must ensure the <a href='undocumented#Texture'>texture</a> is
    442 valid for the lifetime of returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. If <a href='#SkSurface_MakeFromBackendTexture_sampleCnt'>sampleCnt</a> greater than zero,
    443 creates an intermediate MSAA <a href='SkSurface_Reference#SkSurface'>SkSurface</a> which is used for drawing <a href='#SkSurface_MakeFromBackendTexture_backendTexture'>backendTexture</a>.
    444 
    445 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid. <a href='#SkSurface_MakeFromBackendTexture_backendTexture'>backendTexture</a> is valid if
    446 its <a href='undocumented#Pixel'>pixel</a> configuration agrees with <a href='#SkSurface_MakeFromBackendTexture_colorSpace'>colorSpace</a> and <a href='#SkSurface_MakeFromBackendTexture_context'>context</a>; for instance, if
    447 <a href='#SkSurface_MakeFromBackendTexture_backendTexture'>backendTexture</a> has an sRGB configuration, then <a href='#SkSurface_MakeFromBackendTexture_context'>context</a> must support sRGB,
    448 and <a href='#SkSurface_MakeFromBackendTexture_colorSpace'>colorSpace</a> must be present. Further, <a href='#SkSurface_MakeFromBackendTexture_backendTexture'>backendTexture</a> width and height must
    449 not exceed <a href='#SkSurface_MakeFromBackendTexture_context'>context</a> capabilities, and the <a href='#SkSurface_MakeFromBackendTexture_context'>context</a> must be able to support
    450 back-end textures.
    451 
    452 If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
    453 
    454 ### Parameters
    455 
    456 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendTexture_context'><code><strong>context</strong></code></a></td>
    457     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    458   </tr>
    459   <tr>    <td><a name='SkSurface_MakeFromBackendTexture_backendTexture'><code><strong>backendTexture</strong></code></a></td>
    460     <td><a href='undocumented#Texture'>texture</a> residing on GPU</td>
    461   </tr>
    462   <tr>    <td><a name='SkSurface_MakeFromBackendTexture_origin'><code><strong>origin</strong></code></a></td>
    463     <td>one of: <a href='undocumented#kBottomLeft_GrSurfaceOrigin'>kBottomLeft_GrSurfaceOrigin</a>, <a href='undocumented#kTopLeft_GrSurfaceOrigin'>kTopLeft_GrSurfaceOrigin</a></td>
    464   </tr>
    465   <tr>    <td><a name='SkSurface_MakeFromBackendTexture_sampleCnt'><code><strong>sampleCnt</strong></code></a></td>
    466     <td>samples per <a href='undocumented#Pixel'>pixel</a>, or 0 to disable full scene <a href='SkPaint_Reference#Anti_Alias'>anti-aliasing</a></td>
    467   </tr>
    468   <tr>    <td><a name='SkSurface_MakeFromBackendTexture_colorType'><code><strong>colorType</strong></code></a></td>
    469     <td>one of:</td>
    470   </tr>
    471 </table>
    472 
    473 <a href='SkImageInfo_Reference#kUnknown_SkColorType'>kUnknown_SkColorType</a>, <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>,
    474 <a href='SkImageInfo_Reference#kARGB_4444_SkColorType'>kARGB_4444_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a>,
    475 <a href='SkImageInfo_Reference#kRGB_888x_SkColorType'>kRGB_888x_SkColorType</a>, <a href='SkImageInfo_Reference#kBGRA_8888_SkColorType'>kBGRA_8888_SkColorType</a>,
    476 <a href='SkImageInfo_Reference#kRGBA_1010102_SkColorType'>kRGBA_1010102_SkColorType</a>, <a href='SkImageInfo_Reference#kRGB_101010x_SkColorType'>kRGB_101010x_SkColorType</a>,
    477 <a href='SkImageInfo_Reference#kGray_8_SkColorType'>kGray_8_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>
    478 
    479 ### Parameters
    480 
    481 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendTexture_colorSpace'><code><strong>colorSpace</strong></code></a></td>
    482     <td>range of colors; may be nullptr</td>
    483   </tr>
    484   <tr>    <td><a name='SkSurface_MakeFromBackendTexture_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    485     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    486   </tr>
    487 </table>
    488 
    489 fonts; may be nullptr
    490 
    491 ### Return Value
    492 
    493 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    494 
    495 ### Example
    496 
    497 <div><fiddle-embed name="d3aec071998f871809f515e58abb1b0e" gpu="true" cpu="true"></fiddle-embed></div>
    498 
    499 ### See Also
    500 
    501 <a href='undocumented#GrBackendTexture'>GrBackendTexture</a> <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>
    502 
    503 <a name='SkSurface_MakeFromBackendRenderTarget'></a>
    504 
    505 ---
    506 
    507 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    508 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
    509                                                    const <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a>& backendRenderTarget,
    510                                                    <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType,
    511                                                    <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorSpace'>SkColorSpace</a>&gt; colorSpace,
    512                                                    const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps)
    513 </pre>
    514 
    515 Wraps a GPU-backed buffer into <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. Caller must ensure <a href='#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget'>backendRenderTarget</a>
    516 is valid for the lifetime of returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a>.
    517 
    518 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid. <a href='#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget'>backendRenderTarget</a> is valid if
    519 its <a href='undocumented#Pixel'>pixel</a> configuration agrees with <a href='#SkSurface_MakeFromBackendRenderTarget_colorSpace'>colorSpace</a> and <a href='#SkSurface_MakeFromBackendRenderTarget_context'>context</a>; for instance, if
    520 <a href='#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget'>backendRenderTarget</a> has an sRGB configuration, then <a href='#SkSurface_MakeFromBackendRenderTarget_context'>context</a> must support sRGB,
    521 and <a href='#SkSurface_MakeFromBackendRenderTarget_colorSpace'>colorSpace</a> must be present. Further, <a href='#SkSurface_MakeFromBackendRenderTarget_backendRenderTarget'>backendRenderTarget</a> width and height must
    522 not exceed <a href='#SkSurface_MakeFromBackendRenderTarget_context'>context</a> capabilities, and the <a href='#SkSurface_MakeFromBackendRenderTarget_context'>context</a> must be able to support
    523 back-end render targets.
    524 
    525 If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
    526 
    527 ### Parameters
    528 
    529 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_context'><code><strong>context</strong></code></a></td>
    530     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    531   </tr>
    532   <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_backendRenderTarget'><code><strong>backendRenderTarget</strong></code></a></td>
    533     <td>GPU intermediate memory buffer</td>
    534   </tr>
    535   <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_origin'><code><strong>origin</strong></code></a></td>
    536     <td>one of: <a href='undocumented#kBottomLeft_GrSurfaceOrigin'>kBottomLeft_GrSurfaceOrigin</a>, <a href='undocumented#kTopLeft_GrSurfaceOrigin'>kTopLeft_GrSurfaceOrigin</a></td>
    537   </tr>
    538   <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_colorType'><code><strong>colorType</strong></code></a></td>
    539     <td>one of:</td>
    540   </tr>
    541 </table>
    542 
    543 <a href='SkImageInfo_Reference#kUnknown_SkColorType'>kUnknown_SkColorType</a>, <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>,
    544 <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>,
    545 <a href='SkImageInfo_Reference#kARGB_4444_SkColorType'>kARGB_4444_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a>,
    546 <a href='SkImageInfo_Reference#kRGB_888x_SkColorType'>kRGB_888x_SkColorType</a>, <a href='SkImageInfo_Reference#kBGRA_8888_SkColorType'>kBGRA_8888_SkColorType</a>,
    547 <a href='SkImageInfo_Reference#kRGBA_1010102_SkColorType'>kRGBA_1010102_SkColorType</a>, <a href='SkImageInfo_Reference#kRGB_101010x_SkColorType'>kRGB_101010x_SkColorType</a>,
    548 <a href='SkImageInfo_Reference#kGray_8_SkColorType'>kGray_8_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>
    549 
    550 ### Parameters
    551 
    552 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_colorSpace'><code><strong>colorSpace</strong></code></a></td>
    553     <td>range of colors</td>
    554   </tr>
    555   <tr>    <td><a name='SkSurface_MakeFromBackendRenderTarget_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    556     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    557   </tr>
    558 </table>
    559 
    560 fonts; may be nullptr
    561 
    562 ### Return Value
    563 
    564 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    565 
    566 ### Example
    567 
    568 <pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
    569 
    570     SkPaint paint;
    571     paint.setTextSize(32);
    572     GrContext* context = canvas->getGrContext();
    573     if (!context) {
    574          canvas->drawString("GPU only!", 20, 40, paint);
    575          return;
    576     }
    577     sk_sp<SkSurface> gpuSurface = SkSurface::MakeFromBackendRenderTarget(context,
    578             backEndRenderTarget, kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType,
    579             nullptr, nullptr);
    580     auto surfaceCanvas = gpuSurface->getCanvas();
    581     surfaceCanvas->drawString("GPU rocks!", 20, 40, paint);
    582     sk_sp<SkImage> image(gpuSurface->makeImageSnapshot());
    583     canvas->drawImage(image, 0, 0);
    584 
    585 </pre>
    586 
    587 ### See Also
    588 
    589 <a href='#SkSurface_MakeFromBackendTexture'>MakeFromBackendTexture</a> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>
    590 
    591 <a name='SkSurface_MakeFromBackendTextureAsRenderTarget'></a>
    592 
    593 ---
    594 
    595 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    596 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
    597                                             const <a href='undocumented#GrBackendTexture'>GrBackendTexture</a>& backendTexture,
    598                                             <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> origin, int sampleCnt,
    599                                             <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> colorType, <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorSpace'>SkColorSpace</a>&gt; colorSpace,
    600                                             const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps)
    601 </pre>
    602 
    603 Wraps a GPU-backed <a href='undocumented#Texture'>texture</a> into <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. Caller must ensure <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'>backendTexture</a> is
    604 valid for the lifetime of returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. If <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_sampleCnt'>sampleCnt</a> greater than zero,
    605 creates an intermediate MSAA <a href='SkSurface_Reference#SkSurface'>SkSurface</a> which is used for drawing <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'>backendTexture</a>.
    606 
    607 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is returned if all parameters are valid. <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'>backendTexture</a> is valid if
    608 its <a href='undocumented#Pixel'>pixel</a> configuration agrees with <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_colorSpace'>colorSpace</a> and <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_context'>context</a>; for instance, if
    609 <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'>backendTexture</a> has an sRGB configuration, then <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_context'>context</a> must support sRGB,
    610 and <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_colorSpace'>colorSpace</a> must be present. Further, <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'>backendTexture</a> width and height must
    611 not exceed <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget_context'>context</a> capabilities.
    612 
    613 Returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is available only for drawing into, and cannot generate an
    614 <a href='SkImage_Reference#SkImage'>SkImage</a>.
    615 
    616 If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
    617 
    618 ### Parameters
    619 
    620 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_context'><code><strong>context</strong></code></a></td>
    621     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    622   </tr>
    623   <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_backendTexture'><code><strong>backendTexture</strong></code></a></td>
    624     <td><a href='undocumented#Texture'>texture</a> residing on GPU</td>
    625   </tr>
    626   <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_origin'><code><strong>origin</strong></code></a></td>
    627     <td>one of: <a href='undocumented#kBottomLeft_GrSurfaceOrigin'>kBottomLeft_GrSurfaceOrigin</a>, <a href='undocumented#kTopLeft_GrSurfaceOrigin'>kTopLeft_GrSurfaceOrigin</a></td>
    628   </tr>
    629   <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_sampleCnt'><code><strong>sampleCnt</strong></code></a></td>
    630     <td>samples per <a href='undocumented#Pixel'>pixel</a>, or 0 to disable full scene <a href='SkPaint_Reference#Anti_Alias'>anti-aliasing</a></td>
    631   </tr>
    632   <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_colorType'><code><strong>colorType</strong></code></a></td>
    633     <td>one of:</td>
    634   </tr>
    635 </table>
    636 
    637 <a href='SkImageInfo_Reference#kUnknown_SkColorType'>kUnknown_SkColorType</a>, <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a>, <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>,
    638 <a href='SkImageInfo_Reference#kARGB_4444_SkColorType'>kARGB_4444_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a>,
    639 <a href='SkImageInfo_Reference#kRGB_888x_SkColorType'>kRGB_888x_SkColorType</a>, <a href='SkImageInfo_Reference#kBGRA_8888_SkColorType'>kBGRA_8888_SkColorType</a>,
    640 <a href='SkImageInfo_Reference#kRGBA_1010102_SkColorType'>kRGBA_1010102_SkColorType</a>, <a href='SkImageInfo_Reference#kRGB_101010x_SkColorType'>kRGB_101010x_SkColorType</a>,
    641 <a href='SkImageInfo_Reference#kGray_8_SkColorType'>kGray_8_SkColorType</a>, <a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a>
    642 
    643 ### Parameters
    644 
    645 <table>  <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_colorSpace'><code><strong>colorSpace</strong></code></a></td>
    646     <td>range of colors; may be nullptr</td>
    647   </tr>
    648   <tr>    <td><a name='SkSurface_MakeFromBackendTextureAsRenderTarget_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    649     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    650   </tr>
    651 </table>
    652 
    653 fonts; may be nullptr
    654 
    655 ### Return Value
    656 
    657 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    658 
    659 ### Example
    660 
    661 <div><fiddle-embed name="5e87093b9cbe95124ae14cbe77091eb7" gpu="true"></fiddle-embed></div>
    662 
    663 ### See Also
    664 
    665 <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>
    666 
    667 <a name='SkSurface_MakeRenderTarget'></a>
    668 
    669 ---
    670 
    671 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    672 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
    673                                          const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, int sampleCount,
    674                                          <a href='undocumented#GrSurfaceOrigin'>GrSurfaceOrigin</a> surfaceOrigin,
    675                                          const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* surfaceProps,
    676                                          bool shouldCreateWithMips = false)
    677 </pre>
    678 
    679 Returns <a href='SkSurface_Reference#SkSurface'>SkSurface</a> on GPU indicated by <a href='#SkSurface_MakeRenderTarget_context'>context</a>. Allocates memory for
    680 pixels, based on the width, height, and <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> in <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>.  <a href='#SkSurface_MakeRenderTarget_budgeted'>budgeted</a>
    681 selects whether allocation for pixels is tracked by <a href='#SkSurface_MakeRenderTarget_context'>context</a>. <a href='#SkSurface_MakeRenderTarget_imageInfo'>imageInfo</a>
    682 describes the <a href='undocumented#Pixel'>pixel</a> format in <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, and transparency in
    683 <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, and <a href='SkColor_Reference#Color'>color</a> matching in <a href='undocumented#SkColorSpace'>SkColorSpace</a>.
    684 
    685 <a href='#SkSurface_MakeRenderTarget_sampleCount'>sampleCount</a> requests the number of samples per <a href='undocumented#Pixel'>pixel</a>.
    686 Pass zero to disable  <a href='undocumented#Multi_Sample_Anti_Aliasing'>multi-sample anti-aliasing</a>.  The request is rounded
    687 up to the next supported count, or rounded down if it is larger than the
    688 maximum supported count.
    689 
    690 <a href='#SkSurface_MakeRenderTarget_surfaceOrigin'>surfaceOrigin</a> pins either the top-left or the bottom-left corner to the origin.
    691 
    692 <a href='#SkSurface_MakeRenderTarget_shouldCreateWithMips'>shouldCreateWithMips</a> hints that <a href='SkImage_Reference#SkImage'>SkImage</a> returned by <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>() is  <a href='undocumented#Mip_Map'>mip map</a>.
    693 
    694 If SK_SUPPORT_GPU is defined as zero, has no effect and returns nullptr.
    695 
    696 ### Parameters
    697 
    698 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_context'><code><strong>context</strong></code></a></td>
    699     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    700   </tr>
    701   <tr>    <td><a name='SkSurface_MakeRenderTarget_budgeted'><code><strong>budgeted</strong></code></a></td>
    702     <td>one of: <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kNo'>kNo</a>, <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kYes'>kYes</a></td>
    703   </tr>
    704   <tr>    <td><a name='SkSurface_MakeRenderTarget_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    705     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>;</td>
    706   </tr>
    707 </table>
    708 
    709 width, or height, or both, may be zero
    710 
    711 ### Parameters
    712 
    713 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_sampleCount'><code><strong>sampleCount</strong></code></a></td>
    714     <td>samples per <a href='undocumented#Pixel'>pixel</a>, or 0 to disable full scene <a href='SkPaint_Reference#Anti_Alias'>anti-aliasing</a></td>
    715   </tr>
    716   <tr>    <td><a name='SkSurface_MakeRenderTarget_surfaceOrigin'><code><strong>surfaceOrigin</strong></code></a></td>
    717     <td>one of: <a href='undocumented#kBottomLeft_GrSurfaceOrigin'>kBottomLeft_GrSurfaceOrigin</a>, <a href='undocumented#kTopLeft_GrSurfaceOrigin'>kTopLeft_GrSurfaceOrigin</a></td>
    718   </tr>
    719   <tr>    <td><a name='SkSurface_MakeRenderTarget_surfaceProps'><code><strong>surfaceProps</strong></code></a></td>
    720     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    721   </tr>
    722 </table>
    723 
    724 fonts; may be nullptr
    725 
    726 ### Parameters
    727 
    728 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_shouldCreateWithMips'><code><strong>shouldCreateWithMips</strong></code></a></td>
    729     <td>hint that <a href='SkSurface_Reference#SkSurface'>SkSurface</a> will host  <a href='undocumented#Mip_Map'>mip map</a> images</td>
    730   </tr>
    731 </table>
    732 
    733 ### Return Value
    734 
    735 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    736 
    737 ### Example
    738 
    739 <div><fiddle-embed name="67b6609471a3f1ed0f4b1657004cdecb" gpu="true"></fiddle-embed></div>
    740 
    741 ### See Also
    742 
    743 <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>
    744 
    745 <a name='SkSurface_MakeRenderTarget_2'></a>
    746 
    747 ---
    748 
    749 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    750 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
    751                                          const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo, int sampleCount,
    752                                          const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>* props)
    753 </pre>
    754 
    755 Returns <a href='SkSurface_Reference#SkSurface'>SkSurface</a> on GPU indicated by <a href='#SkSurface_MakeRenderTarget_2_context'>context</a>. Allocates memory for
    756 pixels, based on the width, height, and <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> in <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>.  <a href='#SkSurface_MakeRenderTarget_2_budgeted'>budgeted</a>
    757 selects whether allocation for pixels is tracked by <a href='#SkSurface_MakeRenderTarget_2_context'>context</a>. <a href='#SkSurface_MakeRenderTarget_2_imageInfo'>imageInfo</a>
    758 describes the <a href='undocumented#Pixel'>pixel</a> format in <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, and transparency in
    759 <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, and <a href='SkColor_Reference#Color'>color</a> matching in <a href='undocumented#SkColorSpace'>SkColorSpace</a>.
    760 
    761 <a href='#SkSurface_MakeRenderTarget_2_sampleCount'>sampleCount</a> requests the number of samples per <a href='undocumented#Pixel'>pixel</a>.
    762 Pass zero to disable  <a href='undocumented#Multi_Sample_Anti_Aliasing'>multi-sample anti-aliasing</a>.  The request is rounded
    763 up to the next supported count, or rounded down if it is larger than the
    764 maximum supported count.
    765 
    766 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> bottom-left corner is pinned to the origin.
    767 
    768 ### Parameters
    769 
    770 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_2_context'><code><strong>context</strong></code></a></td>
    771     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    772   </tr>
    773   <tr>    <td><a name='SkSurface_MakeRenderTarget_2_budgeted'><code><strong>budgeted</strong></code></a></td>
    774     <td>one of: <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kNo'>kNo</a>, <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kYes'>kYes</a></td>
    775   </tr>
    776   <tr>    <td><a name='SkSurface_MakeRenderTarget_2_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    777     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    778   </tr>
    779 </table>
    780 
    781 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width, or height, or both, may be zero
    782 
    783 ### Parameters
    784 
    785 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_2_sampleCount'><code><strong>sampleCount</strong></code></a></td>
    786     <td>samples per <a href='undocumented#Pixel'>pixel</a>, or 0 to disable  <a href='undocumented#Multi_Sample_Anti_Aliasing'>multi-sample anti-aliasing</a></td>
    787   </tr>
    788   <tr>    <td><a name='SkSurface_MakeRenderTarget_2_props'><code><strong>props</strong></code></a></td>
    789     <td>LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent</td>
    790   </tr>
    791 </table>
    792 
    793 fonts; may be nullptr
    794 
    795 ### Return Value
    796 
    797 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    798 
    799 ### Example
    800 
    801 <div><fiddle-embed name="640321e8ecfb3f9329f3bc6e1f02485f" gpu="true" cpu="true"><div>LCD <a href='undocumented#Text'>text</a> takes advantage of raster striping to improve resolution. Only one of
    802 the four combinations is correct, depending on whether monitor LCD striping is
    803 horizontal or vertical, and whether the order of the stripes is red blue green
    804 or red green blue.
    805 </div></fiddle-embed></div>
    806 
    807 ### See Also
    808 
    809 <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>
    810 
    811 <a name='SkSurface_MakeRenderTarget_3'></a>
    812 
    813 ---
    814 
    815 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    816 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context, <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted,
    817                                          const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo)
    818 </pre>
    819 
    820 Returns <a href='SkSurface_Reference#SkSurface'>SkSurface</a> on GPU indicated by <a href='#SkSurface_MakeRenderTarget_3_context'>context</a>. Allocates memory for
    821 pixels, based on the width, height, and <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> in <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>.  <a href='#SkSurface_MakeRenderTarget_3_budgeted'>budgeted</a>
    822 selects whether allocation for pixels is tracked by <a href='#SkSurface_MakeRenderTarget_3_context'>context</a>. <a href='#SkSurface_MakeRenderTarget_3_imageInfo'>imageInfo</a>
    823 describes the <a href='undocumented#Pixel'>pixel</a> format in <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, and transparency in
    824 <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, and <a href='SkColor_Reference#Color'>color</a> matching in <a href='undocumented#SkColorSpace'>SkColorSpace</a>.
    825 
    826 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> bottom-left corner is pinned to the origin.
    827 
    828 ### Parameters
    829 
    830 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_3_context'><code><strong>context</strong></code></a></td>
    831     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    832   </tr>
    833   <tr>    <td><a name='SkSurface_MakeRenderTarget_3_budgeted'><code><strong>budgeted</strong></code></a></td>
    834     <td>one of: <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kNo'>kNo</a>, <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kYes'>kYes</a></td>
    835   </tr>
    836   <tr>    <td><a name='SkSurface_MakeRenderTarget_3_imageInfo'><code><strong>imageInfo</strong></code></a></td>
    837     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
    838   </tr>
    839 </table>
    840 
    841 of  <a href='undocumented#Raster_Surface'>raster surface</a>; width, or height, or both, may be zero
    842 
    843 ### Return Value
    844 
    845 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    846 
    847 ### Example
    848 
    849 <div><fiddle-embed name="5c7629c15e9ac93f098335e72560fa2e" gpu="true"></fiddle-embed></div>
    850 
    851 ### See Also
    852 
    853 <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>
    854 
    855 <a name='SkSurface_MakeRenderTarget_4'></a>
    856 
    857 ---
    858 
    859 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    860 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>(<a href='undocumented#GrContext'>GrContext</a>* context,
    861                                          const <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a>& characterization,
    862                                          <a href='undocumented#SkBudgeted'>SkBudgeted</a> budgeted)
    863 </pre>
    864 
    865 Returns <a href='SkSurface_Reference#SkSurface'>SkSurface</a> on GPU indicated by <a href='#SkSurface_MakeRenderTarget_4_context'>context</a> that is compatible with the provided
    866 <a href='#SkSurface_MakeRenderTarget_4_characterization'>characterization</a>. <a href='#SkSurface_MakeRenderTarget_4_budgeted'>budgeted</a> selects whether allocation for pixels is tracked by <a href='#SkSurface_MakeRenderTarget_4_context'>context</a>.
    867 
    868 ### Parameters
    869 
    870 <table>  <tr>    <td><a name='SkSurface_MakeRenderTarget_4_context'><code><strong>context</strong></code></a></td>
    871     <td><a href='undocumented#GPU_Context'>GPU context</a></td>
    872   </tr>
    873   <tr>    <td><a name='SkSurface_MakeRenderTarget_4_characterization'><code><strong>characterization</strong></code></a></td>
    874     <td>description of the desired <a href='SkSurface_Reference#SkSurface'>SkSurface</a></td>
    875   </tr>
    876   <tr>    <td><a name='SkSurface_MakeRenderTarget_4_budgeted'><code><strong>budgeted</strong></code></a></td>
    877     <td>one of: <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kNo'>kNo</a>, <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kYes'>kYes</a></td>
    878   </tr>
    879 </table>
    880 
    881 ### Return Value
    882 
    883 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if all parameters are valid; otherwise, nullptr
    884 
    885 ### See Also
    886 
    887 <a href='#SkSurface_MakeFromBackendRenderTarget'>MakeFromBackendRenderTarget</a> <a href='#SkSurface_MakeFromBackendTextureAsRenderTarget'>MakeFromBackendTextureAsRenderTarget</a>
    888 
    889 <a name='SkSurface_MakeNull'></a>
    890 
    891 ---
    892 
    893 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    894 static <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_MakeNull'>MakeNull</a>(int width, int height)
    895 </pre>
    896 
    897 Returns <a href='SkSurface_Reference#SkSurface'>SkSurface</a> without backing pixels. Drawing to <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned from <a href='SkSurface_Reference#SkSurface'>SkSurface</a>
    898 has no effect. Calling <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>() on returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a> returns nullptr.
    899 
    900 ### Parameters
    901 
    902 <table>  <tr>    <td><a name='SkSurface_MakeNull_width'><code><strong>width</strong></code></a></td>
    903     <td>one or greater</td>
    904   </tr>
    905   <tr>    <td><a name='SkSurface_MakeNull_height'><code><strong>height</strong></code></a></td>
    906     <td>one or greater</td>
    907   </tr>
    908 </table>
    909 
    910 ### Return Value
    911 
    912 <a href='SkSurface_Reference#SkSurface'>SkSurface</a> if <a href='#SkSurface_MakeNull_width'>width</a> and <a href='#SkSurface_MakeNull_height'>height</a> are positive; otherwise, nullptr
    913 
    914 ### Example
    915 
    916 <div><fiddle-embed name="99a54b814ccab7d2b1143c88581649ff">
    917 
    918 #### Example Output
    919 
    920 ~~~~
    921 SkSurface::MakeNull(0, 0) == nullptr
    922 surf->makeImageSnapshot() == nullptr
    923 ~~~~
    924 
    925 </fiddle-embed></div>
    926 
    927 ### See Also
    928 
    929 <a href='#SkSurface_MakeRaster'>MakeRaster</a> <a href='#SkSurface_MakeRenderTarget'>MakeRenderTarget</a>
    930 
    931 <a name='Property'></a>
    932 
    933 <a name='SkSurface_width'></a>
    934 
    935 ---
    936 
    937 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    938 int <a href='#SkSurface_width'>width()</a>const
    939 </pre>
    940 
    941 Returns <a href='undocumented#Pixel'>pixel</a> count in each row; may be zero or greater.
    942 
    943 ### Return Value
    944 
    945 number of <a href='undocumented#Pixel'>pixel</a> columns
    946 
    947 ### Example
    948 
    949 <div><fiddle-embed name="df066b56dd97c7c589fd2bb6a2539de8">
    950 
    951 #### Example Output
    952 
    953 ~~~~
    954 surface width=37  canvas width=37
    955 ~~~~
    956 
    957 </fiddle-embed></div>
    958 
    959 ### See Also
    960 
    961 <a href='#SkSurface_height'>height()</a>
    962 
    963 <a name='SkSurface_height'></a>
    964 
    965 ---
    966 
    967 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    968 int <a href='#SkSurface_height'>height()</a>const
    969 </pre>
    970 
    971 Returns <a href='undocumented#Pixel'>pixel</a> row count; may be zero or greater.
    972 
    973 ### Return Value
    974 
    975 number of <a href='undocumented#Pixel'>pixel</a> rows
    976 
    977 ### Example
    978 
    979 <div><fiddle-embed name="20571cc23e3146deaa09046b64cc0aef">
    980 
    981 #### Example Output
    982 
    983 ~~~~
    984 surface height=1000  canvas height=1000
    985 ~~~~
    986 
    987 </fiddle-embed></div>
    988 
    989 ### See Also
    990 
    991 <a href='#SkSurface_width'>width()</a>
    992 
    993 <a name='SkSurface_generationID'></a>
    994 
    995 ---
    996 
    997 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
    998 uint32_t <a href='#SkSurface_generationID'>generationID</a>()
    999 </pre>
   1000 
   1001 Returns unique value identifying the content of <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. Returned value changes
   1002 each time the content changes. Content is changed by drawing, or by calling
   1003 <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a>().
   1004 
   1005 ### Return Value
   1006 
   1007 unique content identifier
   1008 
   1009 ### Example
   1010 
   1011 <div><fiddle-embed name="be9574c4a14f891e1abb4ec2b1e51d6c">
   1012 
   1013 #### Example Output
   1014 
   1015 ~~~~
   1016 surface generationID: 1
   1017 surface generationID: 2
   1018 surface generationID: 3
   1019 ~~~~
   1020 
   1021 </fiddle-embed></div>
   1022 
   1023 ### See Also
   1024 
   1025 <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a> <a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> <a href='#SkSurface_getCanvas'>getCanvas</a>
   1026 
   1027 <a name='SkSurface_ContentChangeMode'></a>
   1028 
   1029 ---
   1030 
   1031 <pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
   1032     enum <a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> {
   1033         <a href='#SkSurface_kDiscard_ContentChangeMode'>kDiscard_ContentChangeMode</a>,
   1034         <a href='#SkSurface_kRetain_ContentChangeMode'>kRetain_ContentChangeMode</a>,
   1035     };
   1036 </pre>
   1037 
   1038 <a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> members are parameters to <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a>.
   1039 
   1040 ### Constants
   1041 
   1042 <table style='border-collapse: collapse; width: 62.5em'>
   1043   <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
   1044 <th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
   1045 <th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
   1046   <tr style='background-color: #f0f0f0; '>
   1047     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkSurface_kDiscard_ContentChangeMode'><code>SkSurface::kDiscard_ContentChangeMode</code></a></td>
   1048     <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # discards surface on change ##</td>
   1049     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
   1050 Pass to <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a> to discard <a href='SkSurface_Reference#Surface'>surface</a> contents when
   1051 the <a href='SkSurface_Reference#Surface'>surface</a> is cleared or overwritten.
   1052 </td>
   1053   </tr>
   1054   <tr>
   1055     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkSurface_kRetain_ContentChangeMode'><code>SkSurface::kRetain_ContentChangeMode</code></a></td>
   1056     <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # preserves surface on change ##</td>
   1057     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
   1058 Pass to <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a> when to preserve <a href='SkSurface_Reference#Surface'>surface</a> contents.
   1059 If a snapshot has been generated, this copies the <a href='SkSurface_Reference#Surface'>Surface</a> contents.
   1060 </td>
   1061   </tr>
   1062 </table>
   1063 
   1064 ### See Also
   1065 
   1066 <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a> <a href='#SkSurface_generationID'>generationID</a>
   1067 
   1068 <a name='Miscellaneous'></a>
   1069 
   1070 <a name='SkSurface_notifyContentWillChange'></a>
   1071 
   1072 ---
   1073 
   1074 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1075 void <a href='#SkSurface_notifyContentWillChange'>notifyContentWillChange</a>(<a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> mode)
   1076 </pre>
   1077 
   1078 Notifies that <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contents will be changed by code outside of Skia.
   1079 Subsequent calls to <a href='#SkSurface_generationID'>generationID</a>() return a different value.
   1080 
   1081 ### Parameters
   1082 
   1083 <table>  <tr>    <td><a name='SkSurface_notifyContentWillChange_mode'><code><strong>mode</strong></code></a></td>
   1084     <td>one of: <a href='#SkSurface_kDiscard_ContentChangeMode'>kDiscard_ContentChangeMode</a>, <a href='#SkSurface_kRetain_ContentChangeMode'>kRetain_ContentChangeMode</a></td>
   1085   </tr>
   1086 </table>
   1087 
   1088 ### Example
   1089 
   1090 <div><fiddle-embed name="be9574c4a14f891e1abb4ec2b1e51d6c"></fiddle-embed></div>
   1091 
   1092 ### See Also
   1093 
   1094 <a href='#SkSurface_ContentChangeMode'>ContentChangeMode</a> <a href='#SkSurface_generationID'>generationID</a>
   1095 
   1096 <a name='SkSurface_BackendHandleAccess'></a>
   1097 
   1098 ---
   1099 
   1100 <pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
   1101     enum <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> {
   1102         <a href='#SkSurface_kFlushRead_BackendHandleAccess'>kFlushRead_BackendHandleAccess</a>,
   1103         <a href='#SkSurface_kFlushWrite_BackendHandleAccess'>kFlushWrite_BackendHandleAccess</a>,
   1104         <a href='#SkSurface_kDiscardWrite_BackendHandleAccess'>kDiscardWrite_BackendHandleAccess</a>,
   1105     };
   1106 
   1107     static const <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> kFlushRead_TextureHandleAccess =
   1108             <a href='#SkSurface_kFlushRead_BackendHandleAccess'>kFlushRead_BackendHandleAccess</a>;
   1109     static const <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> kFlushWrite_TextureHandleAccess =
   1110             <a href='#SkSurface_kFlushWrite_BackendHandleAccess'>kFlushWrite_BackendHandleAccess</a>;
   1111     static const <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> kDiscardWrite_TextureHandleAccess =
   1112             <a href='#SkSurface_kDiscardWrite_BackendHandleAccess'>kDiscardWrite_BackendHandleAccess</a>;
   1113 </pre>
   1114 
   1115 ### Constants
   1116 
   1117 <table style='border-collapse: collapse; width: 62.5em'>
   1118   <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
   1119 <th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
   1120 <th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
   1121   <tr style='background-color: #f0f0f0; '>
   1122     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkSurface_kFlushRead_BackendHandleAccess'><code>SkSurface::kFlushRead_BackendHandleAccess</code></a></td>
   1123     <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
   1124     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
   1125 Caller may read from the back-end object.
   1126 </td>
   1127   </tr>
   1128   <tr>
   1129     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkSurface_kFlushWrite_BackendHandleAccess'><code>SkSurface::kFlushWrite_BackendHandleAccess</code></a></td>
   1130     <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
   1131     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
   1132 Caller may write to the back-end object.
   1133 </td>
   1134   </tr>
   1135   <tr style='background-color: #f0f0f0; '>
   1136     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkSurface_kDiscardWrite_BackendHandleAccess'><code>SkSurface::kDiscardWrite_BackendHandleAccess</code></a></td>
   1137     <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
   1138     <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
   1139 Caller must overwrite the entire back-end object.
   1140 </td>
   1141   </tr>
   1142 </table>
   1143 
   1144 ### See Also
   1145 
   1146 <a href='#SkSurface_getBackendTexture'>getBackendTexture</a> <a href='#SkSurface_getBackendRenderTarget'>getBackendRenderTarget</a>
   1147 
   1148 <a name='SkSurface_getBackendTexture'></a>
   1149 
   1150 ---
   1151 
   1152 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1153 <a href='undocumented#GrBackendTexture'>GrBackendTexture</a> <a href='#SkSurface_getBackendTexture'>getBackendTexture</a>(<a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> backendHandleAccess)
   1154 </pre>
   1155 
   1156 Retrieves the back-end <a href='undocumented#Texture'>texture</a>. If <a href='SkSurface_Reference#SkSurface'>SkSurface</a> has no back-end <a href='undocumented#Texture'>texture</a>, an invalid
   1157 object is returned. Call <a href='undocumented#GrBackendTexture'>GrBackendTexture</a>::<a href='#GrBackendTexture_isValid'>isValid</a> to determine if the result
   1158 is valid.
   1159 
   1160 The returned <a href='undocumented#GrBackendTexture'>GrBackendTexture</a> should be discarded if the <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is drawn to or deleted.
   1161 
   1162 ### Parameters
   1163 
   1164 <table>  <tr>    <td><a name='SkSurface_getBackendTexture_backendHandleAccess'><code><strong>backendHandleAccess</strong></code></a></td>
   1165     <td>one of:  <a href='#SkSurface_kFlushRead_BackendHandleAccess'>kFlushRead_BackendHandleAccess</a>,</td>
   1166   </tr>
   1167 </table>
   1168 
   1169 <a href='#SkSurface_kFlushWrite_BackendHandleAccess'>kFlushWrite_BackendHandleAccess</a>,
   1170 <a href='#SkSurface_kDiscardWrite_BackendHandleAccess'>kDiscardWrite_BackendHandleAccess</a>
   1171 
   1172 ### Return Value
   1173 
   1174 <a href='undocumented#GPU_Texture'>GPU texture</a> reference; invalid on failure
   1175 
   1176 ### See Also
   1177 
   1178 <a href='undocumented#GrBackendTexture'>GrBackendTexture</a> <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> <a href='#SkSurface_getBackendRenderTarget'>getBackendRenderTarget</a>
   1179 
   1180 <a name='SkSurface_getBackendRenderTarget'></a>
   1181 
   1182 ---
   1183 
   1184 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1185 <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a> <a href='#SkSurface_getBackendRenderTarget'>getBackendRenderTarget</a>(<a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> backendHandleAccess)
   1186 </pre>
   1187 
   1188 Retrieves the back-end  <a href='undocumented#Render_Target'>render target</a>. If <a href='SkSurface_Reference#SkSurface'>SkSurface</a> has no back-end  <a href='undocumented#Render_Target'>render target</a>, an invalid
   1189 object is returned. Call <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a>::<a href='#GrBackendRenderTarget_isValid'>isValid</a> to determine if the result
   1190 is valid.
   1191 
   1192 The returned <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a> should be discarded if the <a href='SkSurface_Reference#SkSurface'>SkSurface</a> is drawn to
   1193 or deleted.
   1194 
   1195 ### Parameters
   1196 
   1197 <table>  <tr>    <td><a name='SkSurface_getBackendRenderTarget_backendHandleAccess'><code><strong>backendHandleAccess</strong></code></a></td>
   1198     <td>one of:  <a href='#SkSurface_kFlushRead_BackendHandleAccess'>kFlushRead_BackendHandleAccess</a>,</td>
   1199   </tr>
   1200 </table>
   1201 
   1202 <a href='#SkSurface_kFlushWrite_BackendHandleAccess'>kFlushWrite_BackendHandleAccess</a>,
   1203 <a href='#SkSurface_kDiscardWrite_BackendHandleAccess'>kDiscardWrite_BackendHandleAccess</a>
   1204 
   1205 ### Return Value
   1206 
   1207 GPU  <a href='undocumented#Render_Target'>render target</a> reference; invalid on failure
   1208 
   1209 ### See Also
   1210 
   1211 <a href='undocumented#GrBackendRenderTarget'>GrBackendRenderTarget</a> <a href='#SkSurface_BackendHandleAccess'>BackendHandleAccess</a> <a href='#SkSurface_getBackendTexture'>getBackendTexture</a>
   1212 
   1213 <a name='SkSurface_getCanvas'></a>
   1214 
   1215 ---
   1216 
   1217 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1218 <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='#SkSurface_getCanvas'>getCanvas</a>()
   1219 </pre>
   1220 
   1221 Returns <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> that draws into <a href='SkSurface_Reference#SkSurface'>SkSurface</a>. Subsequent calls return the same <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>.
   1222 <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> returned is managed and owned by <a href='SkSurface_Reference#SkSurface'>SkSurface</a>, and is deleted when <a href='SkSurface_Reference#SkSurface'>SkSurface</a>
   1223 is deleted.
   1224 
   1225 ### Return Value
   1226 
   1227 drawing <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> for <a href='SkSurface_Reference#SkSurface'>SkSurface</a>
   1228 
   1229 ### Example
   1230 
   1231 <div><fiddle-embed name="33d0c5ad5a4810e533ae1010e29f8b75"></fiddle-embed></div>
   1232 
   1233 ### See Also
   1234 
   1235 <a href='#SkSurface_makeSurface'>makeSurface</a> <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a> <a href='#SkSurface_draw'>draw</a>
   1236 
   1237 <a name='SkSurface_makeSurface'></a>
   1238 
   1239 ---
   1240 
   1241 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1242 <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkSurface_Reference#SkSurface'>SkSurface</a>&gt; <a href='#SkSurface_makeSurface'>makeSurface</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& imageInfo)
   1243 </pre>
   1244 
   1245 Returns a compatible <a href='SkSurface_Reference#SkSurface'>SkSurface</a>, or nullptr. Returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contains
   1246 the same raster, GPU, or null properties as the original. Returned <a href='SkSurface_Reference#SkSurface'>SkSurface</a>
   1247 does not share the same pixels.
   1248 
   1249 Returns nullptr if <a href='#SkSurface_makeSurface_imageInfo'>imageInfo</a> width or height are zero, or if <a href='#SkSurface_makeSurface_imageInfo'>imageInfo</a>
   1250 is incompatible with <a href='SkSurface_Reference#SkSurface'>SkSurface</a>.
   1251 
   1252 ### Parameters
   1253 
   1254 <table>  <tr>    <td><a name='SkSurface_makeSurface_imageInfo'><code><strong>imageInfo</strong></code></a></td>
   1255     <td>width, height, <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a>, <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>,</td>
   1256   </tr>
   1257 </table>
   1258 
   1259 of <a href='SkSurface_Reference#SkSurface'>SkSurface</a>; width and height must be greater than zero
   1260 
   1261 ### Return Value
   1262 
   1263 compatible <a href='SkSurface_Reference#SkSurface'>SkSurface</a> or nullptr
   1264 
   1265 ### Example
   1266 
   1267 <div><fiddle-embed name="a9889b519a26896b900da0444e423c61"></fiddle-embed></div>
   1268 
   1269 ### See Also
   1270 
   1271 <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a> <a href='#SkSurface_getCanvas'>getCanvas</a> <a href='#SkSurface_draw'>draw</a>
   1272 
   1273 <a name='SkSurface_makeImageSnapshot'></a>
   1274 
   1275 ---
   1276 
   1277 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1278 <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkImage_Reference#SkImage'>SkImage</a>&gt; <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>()
   1279 </pre>
   1280 
   1281 Returns <a href='SkImage_Reference#SkImage'>SkImage</a> capturing <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contents. Subsequent drawing to <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contents
   1282 are not captured. <a href='SkImage_Reference#SkImage'>SkImage</a> allocation is accounted for if <a href='SkSurface_Reference#SkSurface'>SkSurface</a> was created with
   1283 <a href='undocumented#SkBudgeted'>SkBudgeted</a>::<a href='#SkBudgeted_kYes'>kYes</a>.
   1284 
   1285 ### Return Value
   1286 
   1287 <a href='SkImage_Reference#SkImage'>SkImage</a> initialized with <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contents
   1288 
   1289 ### Example
   1290 
   1291 <div><fiddle-embed name="46f1fa0d95e590a64bed0140407ce5f7"></fiddle-embed></div>
   1292 
   1293 ### See Also
   1294 
   1295 <a href='#SkSurface_draw'>draw</a> <a href='#SkSurface_getCanvas'>getCanvas</a>
   1296 
   1297 <a name='SkSurface_makeImageSnapshot_2'></a>
   1298 
   1299 ---
   1300 
   1301 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1302 <a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='SkImage_Reference#SkImage'>SkImage</a>&gt; <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a>(const <a href='SkIRect_Reference#SkIRect'>SkIRect</a>& bounds)
   1303 </pre>
   1304 
   1305 Like the no-parameter version, this returns an <a href='SkImage_Reference#Image'>image</a> of the current <a href='SkSurface_Reference#Surface'>surface</a> contents.
   1306 This variant takes a rectangle specifying the subset of the <a href='SkSurface_Reference#Surface'>surface</a> that is of interest.
   1307 These bounds will be sanitized before being used.
   1308 - If bounds extends beyond the <a href='SkSurface_Reference#Surface'>surface</a>, it will be trimmed to just the intersection of
   1309 it and the <a href='SkSurface_Reference#Surface'>surface</a>.
   1310 - If bounds does not intersect the <a href='SkSurface_Reference#Surface'>surface</a>, then this returns nullptr.
   1311 - If bounds == the <a href='SkSurface_Reference#Surface'>surface</a>, then this is the same as calling the no-parameter variant.
   1312 
   1313 ### Example
   1314 
   1315 <div><fiddle-embed name="b18b8ab693b09eb70a1d22ab63790cc7"></fiddle-embed></div>
   1316 
   1317 ### See Also
   1318 
   1319 <a href='#SkSurface_draw'>draw</a> <a href='#SkSurface_getCanvas'>getCanvas</a>
   1320 
   1321 <a name='Pixels'></a>
   1322 
   1323 <a name='SkSurface_draw'></a>
   1324 
   1325 ---
   1326 
   1327 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1328 void draw(<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>* <a href='SkCanvas_Reference#Canvas'>canvas</a>, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>* <a href='SkPaint_Reference#Paint'>paint</a>)
   1329 </pre>
   1330 
   1331 Draws <a href='SkSurface_Reference#SkSurface'>SkSurface</a> contents to <a href='#SkSurface_draw_canvas'>canvas</a>, with its top-left corner at (<a href='#SkSurface_draw_x'>x</a>, <a href='#SkSurface_draw_y'>y</a>).
   1332 
   1333 If <a href='SkPaint_Reference#SkPaint'>SkPaint</a> <a href='#SkSurface_draw_paint'>paint</a> is not nullptr, apply <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='SkColor_Reference#Alpha'>alpha</a>, <a href='undocumented#SkImageFilter'>SkImageFilter</a>,
   1334 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, and <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>.
   1335 
   1336 ### Parameters
   1337 
   1338 <table>  <tr>    <td><a name='SkSurface_draw_canvas'><code><strong>canvas</strong></code></a></td>
   1339     <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a> drawn into</td>
   1340   </tr>
   1341   <tr>    <td><a name='SkSurface_draw_x'><code><strong>x</strong></code></a></td>
   1342     <td>horizontal offset in <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a></td>
   1343   </tr>
   1344   <tr>    <td><a name='SkSurface_draw_y'><code><strong>y</strong></code></a></td>
   1345     <td>vertical offset in <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a></td>
   1346   </tr>
   1347   <tr>    <td><a name='SkSurface_draw_paint'><code><strong>paint</strong></code></a></td>
   1348     <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> containing <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkImageFilter'>SkImageFilter</a>,</td>
   1349   </tr>
   1350 </table>
   1351 
   1352 and so on; or nullptr
   1353 
   1354 ### Example
   1355 
   1356 <div><fiddle-embed name="0de693f4d8dd898a60be8cfba23952be"></fiddle-embed></div>
   1357 
   1358 ### See Also
   1359 
   1360 <a href='#SkSurface_makeImageSnapshot'>makeImageSnapshot</a> <a href='#SkSurface_getCanvas'>getCanvas</a>
   1361 
   1362 <a name='SkSurface_peekPixels'></a>
   1363 
   1364 ---
   1365 
   1366 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1367 bool <a href='#SkSurface_peekPixels'>peekPixels</a>(<a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>* <a href='SkPixmap_Reference#Pixmap'>pixmap</a>)
   1368 </pre>
   1369 
   1370 Copies <a href='SkSurface_Reference#SkSurface'>SkSurface</a> <a href='undocumented#Pixel'>pixel</a> address, row bytes, and <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a> to <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>, if address
   1371 is available, and returns true. If <a href='undocumented#Pixel'>pixel</a> address is not available, return
   1372 false and leave <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a> unchanged.
   1373 
   1374 <a href='#SkSurface_peekPixels_pixmap'>pixmap</a> contents become invalid on any future change to <a href='SkSurface_Reference#SkSurface'>SkSurface</a>.
   1375 
   1376 ### Parameters
   1377 
   1378 <table>  <tr>    <td><a name='SkSurface_peekPixels_pixmap'><code><strong>pixmap</strong></code></a></td>
   1379     <td>storage for <a href='undocumented#Pixel'>pixel</a> state if pixels are readable; otherwise, ignored</td>
   1380   </tr>
   1381 </table>
   1382 
   1383 ### Return Value
   1384 
   1385 true if <a href='SkSurface_Reference#SkSurface'>SkSurface</a> has direct access to pixels
   1386 
   1387 ### Example
   1388 
   1389 <div><fiddle-embed name="8c6184f22cfe068f021704cf92a147a1"></fiddle-embed></div>
   1390 
   1391 ### See Also
   1392 
   1393 <a href='#SkSurface_readPixels'>readPixels</a> <a href='#SkSurface_writePixels'>writePixels</a>
   1394 
   1395 <a name='SkSurface_readPixels'></a>
   1396 
   1397 ---
   1398 
   1399 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1400 bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>& dst, int srcX, int srcY)
   1401 </pre>
   1402 
   1403 Copies <a href='SkRect_Reference#Rect'>Rect</a> of pixels to <a href='#SkSurface_readPixels_dst'>dst</a>.
   1404 
   1405 Source <a href='SkRect_Reference#Rect'>Rect</a> corners are (<a href='#SkSurface_readPixels_srcX'>srcX</a>, <a href='#SkSurface_readPixels_srcY'>srcY</a>) and <a href='SkSurface_Reference#Surface'>Surface</a> (<a href='#SkSurface_width'>width()</a>, <a href='#SkSurface_height'>height()</a>).
   1406 Destination <a href='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<a href='#SkSurface_readPixels_dst'>dst</a>.<a href='#SkPixmap_width'>width()</a>, <a href='#SkSurface_readPixels_dst'>dst</a>.<a href='#SkPixmap_height'>height()</a>).
   1407 Copies each readable <a href='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
   1408 converting to <a href='#SkSurface_readPixels_dst'>dst</a>.<a href='#SkPixmap_colorType'>colorType</a>() and <a href='#SkSurface_readPixels_dst'>dst</a>.<a href='#SkPixmap_alphaType'>alphaType</a>() if required.
   1409 
   1410 Pixels are readable when <a href='SkSurface_Reference#Surface'>Surface</a> is raster, or backed by a GPU.
   1411 
   1412 The destination  <a href='undocumented#Pixel_Storage'>pixel storage</a> must be allocated by the caller.
   1413 
   1414 <a href='undocumented#Pixel'>Pixel</a> values are converted only if <a href='#Image_Info_Color_Type'>Color_Type</a> and <a href='#Image_Info_Alpha_Type'>Alpha_Type</a>
   1415 do not match. Only pixels within both source and destination rectangles
   1416 are copied. <a href='#SkSurface_readPixels_dst'>dst</a> contents outside <a href='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
   1417 
   1418 Pass negative values for <a href='#SkSurface_readPixels_srcX'>srcX</a> or <a href='#SkSurface_readPixels_srcY'>srcY</a> to offset pixels across or down destination.
   1419 
   1420 Does not copy, and returns false if:
   1421 
   1422 <table>  <tr>
   1423     <td>Source and destination rectangles do not intersect.</td>
   1424   </tr>  <tr>
   1425     <td><a href='SkPixmap_Reference#Pixmap'>Pixmap</a> pixels could not be allocated.</td>
   1426   </tr>  <tr>
   1427     <td><a href='#SkSurface_readPixels_dst'>dst</a>.<a href='#SkPixmap_rowBytes'>rowBytes</a>() is too small to contain one row of pixels.</td>
   1428   </tr>
   1429 </table>
   1430 
   1431 ### Parameters
   1432 
   1433 <table>  <tr>    <td><a name='SkSurface_readPixels_dst'><code><strong>dst</strong></code></a></td>
   1434     <td>storage for pixels copied from <a href='SkSurface_Reference#Surface'>Surface</a></td>
   1435   </tr>
   1436   <tr>    <td><a name='SkSurface_readPixels_srcX'><code><strong>srcX</strong></code></a></td>
   1437     <td>offset into readable pixels on x-axis; may be negative</td>
   1438   </tr>
   1439   <tr>    <td><a name='SkSurface_readPixels_srcY'><code><strong>srcY</strong></code></a></td>
   1440     <td>offset into readable pixels on y-axis; may be negative</td>
   1441   </tr>
   1442 </table>
   1443 
   1444 ### Return Value
   1445 
   1446 true if pixels were copied
   1447 
   1448 ### Example
   1449 
   1450 <div><fiddle-embed name="9f454fb93bca6482598d198b4121f0a6"></fiddle-embed></div>
   1451 
   1452 ### See Also
   1453 
   1454 <a href='#SkSurface_peekPixels'>peekPixels</a> <a href='#SkSurface_writePixels'>writePixels</a>
   1455 
   1456 <a name='SkSurface_readPixels_2'></a>
   1457 
   1458 ---
   1459 
   1460 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1461 bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkImageInfo_Reference#SkImageInfo'>SkImageInfo</a>& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY)
   1462 </pre>
   1463 
   1464 Copies <a href='SkRect_Reference#Rect'>Rect</a> of pixels from <a href='SkCanvas_Reference#Canvas'>Canvas</a> into <a href='#SkSurface_readPixels_2_dstPixels'>dstPixels</a>.
   1465 
   1466 Source <a href='SkRect_Reference#Rect'>Rect</a> corners are (<a href='#SkSurface_readPixels_2_srcX'>srcX</a>, <a href='#SkSurface_readPixels_2_srcY'>srcY</a>) and <a href='SkSurface_Reference#Surface'>Surface</a> (<a href='#SkSurface_width'>width()</a>, <a href='#SkSurface_height'>height()</a>).
   1467 Destination <a href='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_width'>width()</a>, <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_height'>height()</a>).
   1468 Copies each readable <a href='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
   1469 converting to <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_colorType'>colorType</a>() and <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_alphaType'>alphaType</a>() if required.
   1470 
   1471 Pixels are readable when <a href='SkSurface_Reference#Surface'>Surface</a> is raster, or backed by a GPU.
   1472 
   1473 The destination  <a href='undocumented#Pixel_Storage'>pixel storage</a> must be allocated by the caller.
   1474 
   1475 <a href='undocumented#Pixel'>Pixel</a> values are converted only if <a href='#Image_Info_Color_Type'>Color_Type</a> and <a href='#Image_Info_Alpha_Type'>Alpha_Type</a>
   1476 do not match. Only pixels within both source and destination rectangles
   1477 are copied. <a href='#SkSurface_readPixels_2_dstPixels'>dstPixels</a> contents outside <a href='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
   1478 
   1479 Pass negative values for <a href='#SkSurface_readPixels_2_srcX'>srcX</a> or <a href='#SkSurface_readPixels_2_srcY'>srcY</a> to offset pixels across or down destination.
   1480 
   1481 Does not copy, and returns false if:
   1482 
   1483 <table>  <tr>
   1484     <td>Source and destination rectangles do not intersect.</td>
   1485   </tr>  <tr>
   1486     <td><a href='SkSurface_Reference#Surface'>Surface</a> pixels could not be converted to <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_colorType'>colorType</a>() or <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_alphaType'>alphaType</a>().</td>
   1487   </tr>  <tr>
   1488     <td><a href='#SkSurface_readPixels_2_dstRowBytes'>dstRowBytes</a> is too small to contain one row of pixels.</td>
   1489   </tr>
   1490 </table>
   1491 
   1492 ### Parameters
   1493 
   1494 <table>  <tr>    <td><a name='SkSurface_readPixels_2_dstInfo'><code><strong>dstInfo</strong></code></a></td>
   1495     <td>width, height, <a href='#Image_Info_Color_Type'>Color_Type</a>, and <a href='#Image_Info_Alpha_Type'>Alpha_Type</a> of <a href='#SkSurface_readPixels_2_dstPixels'>dstPixels</a></td>
   1496   </tr>
   1497   <tr>    <td><a name='SkSurface_readPixels_2_dstPixels'><code><strong>dstPixels</strong></code></a></td>
   1498     <td>storage for pixels; <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_height'>height()</a> times <a href='#SkSurface_readPixels_2_dstRowBytes'>dstRowBytes</a>, or larger</td>
   1499   </tr>
   1500   <tr>    <td><a name='SkSurface_readPixels_2_dstRowBytes'><code><strong>dstRowBytes</strong></code></a></td>
   1501     <td><a href='undocumented#Size'>size</a> of one destination row; <a href='#SkSurface_readPixels_2_dstInfo'>dstInfo</a>.<a href='#SkImageInfo_width'>width()</a> times <a href='undocumented#Pixel'>pixel</a> <a href='undocumented#Size'>size</a>, or larger</td>
   1502   </tr>
   1503   <tr>    <td><a name='SkSurface_readPixels_2_srcX'><code><strong>srcX</strong></code></a></td>
   1504     <td>offset into readable pixels on x-axis; may be negative</td>
   1505   </tr>
   1506   <tr>    <td><a name='SkSurface_readPixels_2_srcY'><code><strong>srcY</strong></code></a></td>
   1507     <td>offset into readable pixels on y-axis; may be negative</td>
   1508   </tr>
   1509 </table>
   1510 
   1511 ### Return Value
   1512 
   1513 true if pixels were copied
   1514 
   1515 ### Example
   1516 
   1517 <div><fiddle-embed name="484d60dab5d846bf28c7a4d48892324a"><div>A black <a href='undocumented#Oval'>oval</a> drawn on a red background provides an <a href='SkImage_Reference#Image'>image</a> to copy.
   1518 <a href='#SkSurface_readPixels'>readPixels</a> copies one quarter of the <a href='SkSurface_Reference#Surface'>Surface</a> into each of the four corners.
   1519 The copied quarter <a href='undocumented#Oval'>ovals</a> overdraw the original <a href='undocumented#Oval'>oval</a>.
   1520 </div></fiddle-embed></div>
   1521 
   1522 ### See Also
   1523 
   1524 <a href='#SkSurface_peekPixels'>peekPixels</a> <a href='#SkSurface_writePixels'>writePixels</a>
   1525 
   1526 <a name='SkSurface_readPixels_3'></a>
   1527 
   1528 ---
   1529 
   1530 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1531 bool <a href='#SkSurface_readPixels'>readPixels</a>(const <a href='SkBitmap_Reference#SkBitmap'>SkBitmap</a>& dst, int srcX, int srcY)
   1532 </pre>
   1533 
   1534 Copies <a href='SkRect_Reference#Rect'>Rect</a> of pixels from <a href='SkSurface_Reference#Surface'>Surface</a> into <a href='SkBitmap_Reference#Bitmap'>bitmap</a>.
   1535 
   1536 Source <a href='SkRect_Reference#Rect'>Rect</a> corners are (<a href='#SkSurface_readPixels_3_srcX'>srcX</a>, <a href='#SkSurface_readPixels_3_srcY'>srcY</a>) and <a href='SkSurface_Reference#Surface'>Surface</a> (<a href='#SkSurface_width'>width()</a>, <a href='#SkSurface_height'>height()</a>).
   1537 Destination <a href='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<a href='SkBitmap_Reference#Bitmap'>bitmap</a>.<a href='#SkSurface_width'>width()</a>, <a href='SkBitmap_Reference#Bitmap'>bitmap</a>.<a href='#SkSurface_height'>height()</a>).
   1538 Copies each readable <a href='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
   1539 converting to <a href='#SkSurface_readPixels_3_dst'>dst</a>.<a href='#SkBitmap_colorType'>colorType</a>() and <a href='#SkSurface_readPixels_3_dst'>dst</a>.<a href='#SkBitmap_alphaType'>alphaType</a>() if required.
   1540 
   1541 Pixels are readable when <a href='SkSurface_Reference#Surface'>Surface</a> is raster, or backed by a GPU.
   1542 
   1543 The destination  <a href='undocumented#Pixel_Storage'>pixel storage</a> must be allocated by the caller.
   1544 
   1545 <a href='undocumented#Pixel'>Pixel</a> values are converted only if <a href='#Image_Info_Color_Type'>Color_Type</a> and <a href='#Image_Info_Alpha_Type'>Alpha_Type</a>
   1546 do not match. Only pixels within both source and destination rectangles
   1547 are copied. <a href='#SkSurface_readPixels_3_dst'>dst</a> contents outside <a href='SkRect_Reference#Rect'>Rect</a> intersection are unchanged.
   1548 
   1549 Pass negative values for <a href='#SkSurface_readPixels_3_srcX'>srcX</a> or <a href='#SkSurface_readPixels_3_srcY'>srcY</a> to offset pixels across or down destination.
   1550 
   1551 Does not copy, and returns false if:
   1552 
   1553 <table>  <tr>
   1554     <td>Source and destination rectangles do not intersect.</td>
   1555   </tr>  <tr>
   1556     <td><a href='SkSurface_Reference#Surface'>Surface</a> pixels could not be converted to <a href='#SkSurface_readPixels_3_dst'>dst</a>.<a href='#SkBitmap_colorType'>colorType</a>() or <a href='#SkSurface_readPixels_3_dst'>dst</a>.<a href='#SkBitmap_alphaType'>alphaType</a>().</td>
   1557   </tr>  <tr>
   1558     <td><a href='#SkSurface_readPixels_3_dst'>dst</a> pixels could not be allocated.</td>
   1559   </tr>  <tr>
   1560     <td><a href='#SkSurface_readPixels_3_dst'>dst</a>.<a href='#SkBitmap_rowBytes'>rowBytes</a>() is too small to contain one row of pixels.</td>
   1561   </tr>
   1562 </table>
   1563 
   1564 ### Parameters
   1565 
   1566 <table>  <tr>    <td><a name='SkSurface_readPixels_3_dst'><code><strong>dst</strong></code></a></td>
   1567     <td>storage for pixels copied from <a href='SkSurface_Reference#Surface'>Surface</a></td>
   1568   </tr>
   1569   <tr>    <td><a name='SkSurface_readPixels_3_srcX'><code><strong>srcX</strong></code></a></td>
   1570     <td>offset into readable pixels on x-axis; may be negative</td>
   1571   </tr>
   1572   <tr>    <td><a name='SkSurface_readPixels_3_srcY'><code><strong>srcY</strong></code></a></td>
   1573     <td>offset into readable pixels on y-axis; may be negative</td>
   1574   </tr>
   1575 </table>
   1576 
   1577 ### Return Value
   1578 
   1579 true if pixels were copied
   1580 
   1581 ### Example
   1582 
   1583 <div><fiddle-embed name="2d991a231e49d1de13eeb2ba9b440e01"></fiddle-embed></div>
   1584 
   1585 ### See Also
   1586 
   1587 <a href='#SkSurface_peekPixels'>peekPixels</a> <a href='#SkSurface_writePixels'>writePixels</a>
   1588 
   1589 <a name='SkSurface_writePixels'></a>
   1590 
   1591 ---
   1592 
   1593 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1594 void <a href='#SkSurface_writePixels'>writePixels</a>(const <a href='SkPixmap_Reference#SkPixmap'>SkPixmap</a>& src, int dstX, int dstY)
   1595 </pre>
   1596 
   1597 Copies <a href='SkRect_Reference#Rect'>Rect</a> of pixels from the <a href='#SkSurface_writePixels_src'>src</a> <a href='SkPixmap_Reference#Pixmap'>Pixmap</a> to the <a href='SkSurface_Reference#Surface'>Surface</a>.
   1598 
   1599 Source <a href='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<a href='#SkSurface_writePixels_src'>src</a>.<a href='#SkPixmap_width'>width()</a>, <a href='#SkSurface_writePixels_src'>src</a>.<a href='#SkPixmap_height'>height()</a>).
   1600 Destination <a href='SkRect_Reference#Rect'>Rect</a> corners are (<a href='#SkSurface_writePixels_dstX'>dstX</a>, <a href='#SkSurface_writePixels_dstY'>dstY</a>) and
   1601 <code>(<a href='#SkSurface_writePixels_dstX'>dstX</a> + <a href='SkSurface_Reference#Surface'>Surface</a> <a href='#SkSurface_width'>width()</a>, <a href='#SkSurface_writePixels_dstY'>dstY</a> + <a href='SkSurface_Reference#Surface'>Surface</a> <a href='#SkSurface_height'>height()</a>)</code>.
   1602 
   1603 Copies each readable <a href='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
   1604 converting to <a href='SkSurface_Reference#Surface'>Surface</a> <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> if required.
   1605 
   1606 ### Parameters
   1607 
   1608 <table>  <tr>    <td><a name='SkSurface_writePixels_src'><code><strong>src</strong></code></a></td>
   1609     <td>storage for pixels to copy to <a href='SkSurface_Reference#Surface'>Surface</a></td>
   1610   </tr>
   1611   <tr>    <td><a name='SkSurface_writePixels_dstX'><code><strong>dstX</strong></code></a></td>
   1612     <td>x-axis position relative to <a href='SkSurface_Reference#Surface'>Surface</a> to begin copy; may be negative</td>
   1613   </tr>
   1614   <tr>    <td><a name='SkSurface_writePixels_dstY'><code><strong>dstY</strong></code></a></td>
   1615     <td>y-axis position relative to <a href='SkSurface_Reference#Surface'>Surface</a> to begin copy; may be negative</td>
   1616   </tr>
   1617 </table>
   1618 
   1619 ### Example
   1620 
   1621 <div><fiddle-embed name="760793bcf0ef193fa61ea03e6e8fc825"></fiddle-embed></div>
   1622 
   1623 ### See Also
   1624 
   1625 <a href='#SkSurface_readPixels'>readPixels</a> <a href='#SkSurface_peekPixels'>peekPixels</a>
   1626 
   1627 <a name='SkSurface_writePixels_2'></a>
   1628 
   1629 ---
   1630 
   1631 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1632 void <a href='#SkSurface_writePixels'>writePixels</a>(const <a href='SkBitmap_Reference#SkBitmap'>SkBitmap</a>& src, int dstX, int dstY)
   1633 </pre>
   1634 
   1635 Copies <a href='SkRect_Reference#Rect'>Rect</a> of pixels from the <a href='#SkSurface_writePixels_2_src'>src</a> <a href='SkBitmap_Reference#Bitmap'>Bitmap</a> to the <a href='SkSurface_Reference#Surface'>Surface</a>.
   1636 
   1637 Source <a href='SkRect_Reference#Rect'>Rect</a> corners are (0, 0) and (<a href='#SkSurface_writePixels_2_src'>src</a>.<a href='#SkBitmap_width'>width()</a>, <a href='#SkSurface_writePixels_2_src'>src</a>.<a href='#SkBitmap_height'>height()</a>).
   1638 Destination <a href='SkRect_Reference#Rect'>Rect</a> corners are (<a href='#SkSurface_writePixels_2_dstX'>dstX</a>, <a href='#SkSurface_writePixels_2_dstY'>dstY</a>) and
   1639 <code>(<a href='#SkSurface_writePixels_2_dstX'>dstX</a> + <a href='SkSurface_Reference#Surface'>Surface</a> <a href='#SkSurface_width'>width()</a>, <a href='#SkSurface_writePixels_2_dstY'>dstY</a> + <a href='SkSurface_Reference#Surface'>Surface</a> <a href='#SkSurface_height'>height()</a>)</code>.
   1640 
   1641 Copies each readable <a href='undocumented#Pixel'>pixel</a> intersecting both rectangles, without scaling,
   1642 converting to <a href='SkSurface_Reference#Surface'>Surface</a> <a href='SkImageInfo_Reference#SkColorType'>SkColorType</a> and <a href='SkImageInfo_Reference#SkAlphaType'>SkAlphaType</a> if required.
   1643 
   1644 ### Parameters
   1645 
   1646 <table>  <tr>    <td><a name='SkSurface_writePixels_2_src'><code><strong>src</strong></code></a></td>
   1647     <td>storage for pixels to copy to <a href='SkSurface_Reference#Surface'>Surface</a></td>
   1648   </tr>
   1649   <tr>    <td><a name='SkSurface_writePixels_2_dstX'><code><strong>dstX</strong></code></a></td>
   1650     <td>x-axis position relative to <a href='SkSurface_Reference#Surface'>Surface</a> to begin copy; may be negative</td>
   1651   </tr>
   1652   <tr>    <td><a name='SkSurface_writePixels_2_dstY'><code><strong>dstY</strong></code></a></td>
   1653     <td>y-axis position relative to <a href='SkSurface_Reference#Surface'>Surface</a> to begin copy; may be negative</td>
   1654   </tr>
   1655 </table>
   1656 
   1657 ### Example
   1658 
   1659 <div><fiddle-embed name="d77790dd3bc9f678fa4f582347fb8fba"></fiddle-embed></div>
   1660 
   1661 ### See Also
   1662 
   1663 <a href='#SkSurface_readPixels'>readPixels</a> <a href='#SkSurface_peekPixels'>peekPixels</a>
   1664 
   1665 <a name='SkSurface_props'></a>
   1666 
   1667 ---
   1668 
   1669 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1670 const <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>& <a href='#SkSurface_props'>props()</a>const
   1671 </pre>
   1672 
   1673 Returns <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a> for <a href='SkSurface_Reference#Surface'>surface</a>.
   1674 
   1675 ### Return Value
   1676 
   1677 LCD striping orientation and setting for <a href='undocumented#Device'>device</a> independent fonts
   1678 
   1679 ### Example
   1680 
   1681 <div><fiddle-embed name="13cf9e7b2894ae6e98c1fd719040bf01">
   1682 
   1683 #### Example Output
   1684 
   1685 ~~~~
   1686 surf.props(): kRGB_H_SkPixelGeometry
   1687 ~~~~
   1688 
   1689 </fiddle-embed></div>
   1690 
   1691 ### See Also
   1692 
   1693 <a href='undocumented#SkSurfaceProps'>SkSurfaceProps</a>
   1694 
   1695 <a name='Utility'></a>
   1696 
   1697 <a name='SkSurface_flush'></a>
   1698 
   1699 ---
   1700 
   1701 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1702 void <a href='#SkSurface_flush'>flush()</a>
   1703 </pre>
   1704 
   1705 Issues pending <a href='SkSurface_Reference#SkSurface'>SkSurface</a> commands to the GPU-backed API and resolves any <a href='SkSurface_Reference#SkSurface'>SkSurface</a> MSAA.
   1706 
   1707 Skia flushes as needed, so it is not necessary to call this if Skia manages
   1708 drawing and object lifetime. Call when interleaving Skia calls with native
   1709 GPU calls.
   1710 
   1711 ### See Also
   1712 
   1713 <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>
   1714 
   1715 <a name='SkSurface_flushAndSignalSemaphores'></a>
   1716 
   1717 ---
   1718 
   1719 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1720 <a href='undocumented#GrSemaphoresSubmitted'>GrSemaphoresSubmitted</a> <a href='#SkSurface_flushAndSignalSemaphores'>flushAndSignalSemaphores</a>(int numSemaphores,
   1721                                                <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a> signalSemaphores[])
   1722 </pre>
   1723 
   1724 Issues pending <a href='SkSurface_Reference#SkSurface'>SkSurface</a> commands to the GPU-backed API and resolves any <a href='SkSurface_Reference#SkSurface'>SkSurface</a> MSAA.
   1725 After issuing all commands, <a href='#SkSurface_flushAndSignalSemaphores_signalSemaphores'>signalSemaphores</a> of count <a href='#SkSurface_flushAndSignalSemaphores_numSemaphores'>numSemaphores</a> semaphores
   1726 are signaled by the GPU.
   1727 
   1728 For each <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a> in <a href='#SkSurface_flushAndSignalSemaphores_signalSemaphores'>signalSemaphores</a>:
   1729 if <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a> is initialized, the GPU back-end uses the semaphore as is;
   1730 otherwise, a new semaphore is created and initializes <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>.
   1731 
   1732 The caller must delete the semaphores created and returned in <a href='#SkSurface_flushAndSignalSemaphores_signalSemaphores'>signalSemaphores</a>.
   1733 <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a> can be deleted as soon as this function returns.
   1734 
   1735 If the back-end API is OpenGL only uninitialized  <a href='undocumented#Backend_Semaphore'>backend semaphores</a> are supported.
   1736 
   1737 If the back-end API is Vulkan semaphores may be initialized or uninitialized.
   1738 If uninitialized, created semaphores are valid only with the VkDevice
   1739 with which they were created.
   1740 
   1741 If <a href='undocumented#GrSemaphoresSubmitted'>GrSemaphoresSubmitted</a>::<a href='#GrSemaphoresSubmitted_kNo'>kNo</a> is returned, the GPU back-end did not create or
   1742 add any semaphores to signal on the GPU; the caller should not instruct the GPU
   1743 to wait on any of the semaphores.
   1744 
   1745 Pending <a href='SkSurface_Reference#Surface'>surface</a> commands are flushed regardless of the return result.
   1746 
   1747 ### Parameters
   1748 
   1749 <table>  <tr>    <td><a name='SkSurface_flushAndSignalSemaphores_numSemaphores'><code><strong>numSemaphores</strong></code></a></td>
   1750     <td><a href='undocumented#Size'>size</a> of <a href='#SkSurface_flushAndSignalSemaphores_signalSemaphores'>signalSemaphores</a> array</td>
   1751   </tr>
   1752   <tr>    <td><a name='SkSurface_flushAndSignalSemaphores_signalSemaphores'><code><strong>signalSemaphores</strong></code></a></td>
   1753     <td>array of semaphore containers</td>
   1754   </tr>
   1755 </table>
   1756 
   1757 ### Return Value
   1758 
   1759 one of: <a href='undocumented#GrSemaphoresSubmitted'>GrSemaphoresSubmitted</a>::<a href='#GrSemaphoresSubmitted_kYes'>kYes</a>, <a href='undocumented#GrSemaphoresSubmitted'>GrSemaphoresSubmitted</a>::<a href='#GrSemaphoresSubmitted_kNo'>kNo</a>
   1760 
   1761 ### See Also
   1762 
   1763 <a href='#SkSurface_wait'>wait</a> <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>
   1764 
   1765 <a name='SkSurface_wait'></a>
   1766 
   1767 ---
   1768 
   1769 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1770 bool wait(int numSemaphores, const <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>* waitSemaphores)
   1771 </pre>
   1772 
   1773 Inserts a list of GPU semaphores that the current GPU-backed API must wait on before
   1774 executing any more commands on the GPU for this <a href='SkSurface_Reference#Surface'>surface</a>. Skia will take ownership of the
   1775 underlying semaphores and delete them once they have been signaled and waited on.
   1776 If this call returns false, then the GPU back-end will not wait on any passed in semaphores,
   1777 and the client will still own the semaphores.
   1778 
   1779 ### Parameters
   1780 
   1781 <table>  <tr>    <td><a name='SkSurface_wait_numSemaphores'><code><strong>numSemaphores</strong></code></a></td>
   1782     <td><a href='undocumented#Size'>size</a> of <a href='#SkSurface_wait_waitSemaphores'>waitSemaphores</a> array</td>
   1783   </tr>
   1784   <tr>    <td><a name='SkSurface_wait_waitSemaphores'><code><strong>waitSemaphores</strong></code></a></td>
   1785     <td>array of semaphore containers</td>
   1786   </tr>
   1787 </table>
   1788 
   1789 ### Return Value
   1790 
   1791 true if GPU is waiting on semaphores
   1792 
   1793 ### See Also
   1794 
   1795 <a href='#SkSurface_flushAndSignalSemaphores'>flushAndSignalSemaphores</a> <a href='undocumented#GrBackendSemaphore'>GrBackendSemaphore</a>
   1796 
   1797 <a name='SkSurface_characterize'></a>
   1798 
   1799 ---
   1800 
   1801 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1802 bool <a href='#SkSurface_characterize'>characterize</a>(<a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a>* characterization)const
   1803 </pre>
   1804 
   1805 Initializes <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a> that can be used to perform GPU back-end
   1806 processing in a separate thread. Typically this is used to divide drawing
   1807 into multiple tiles. <a href='undocumented#SkDeferredDisplayListRecorder'>SkDeferredDisplayListRecorder</a> records the drawing commands
   1808 for each tile.
   1809 
   1810 Return true if <a href='SkSurface_Reference#SkSurface'>SkSurface</a> supports <a href='#SkSurface_characterize_characterization'>characterization</a>.  <a href='undocumented#Raster_Surface'>raster surface</a> returns false.
   1811 
   1812 ### Parameters
   1813 
   1814 <table>  <tr>    <td><a name='SkSurface_characterize_characterization'><code><strong>characterization</strong></code></a></td>
   1815     <td>properties for parallel drawing</td>
   1816   </tr>
   1817 </table>
   1818 
   1819 ### Return Value
   1820 
   1821 true if supported
   1822 
   1823 ### Example
   1824 
   1825 <div><fiddle-embed name="6de6f3ef699a72ff26da1b26b23a3316" gpu="true"></fiddle-embed></div>
   1826 
   1827 ### See Also
   1828 
   1829 <a href='#SkSurface_draw'>draw()</a> <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a> <a href='undocumented#SkDeferredDisplayList'>SkDeferredDisplayList</a>
   1830 
   1831 <a name='SkSurface_draw_2'></a>
   1832 
   1833 ---
   1834 
   1835 <pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
   1836 bool draw(<a href='undocumented#SkDeferredDisplayList'>SkDeferredDisplayList</a>* deferredDisplayList)
   1837 </pre>
   1838 
   1839 Draws   deferred display list created using <a href='undocumented#SkDeferredDisplayListRecorder'>SkDeferredDisplayListRecorder</a>.
   1840 Has no effect and returns false if <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a> stored in
   1841 <a href='#SkSurface_draw_2_deferredDisplayList'>deferredDisplayList</a> is not compatible with <a href='SkSurface_Reference#SkSurface'>SkSurface</a>.
   1842 
   1843 <a href='undocumented#Raster_Surface'>raster surface</a> returns false.
   1844 
   1845 ### Parameters
   1846 
   1847 <table>  <tr>    <td><a name='SkSurface_draw_2_deferredDisplayList'><code><strong>deferredDisplayList</strong></code></a></td>
   1848     <td>drawing commands</td>
   1849   </tr>
   1850 </table>
   1851 
   1852 ### Return Value
   1853 
   1854 false if <a href='#SkSurface_draw_2_deferredDisplayList'>deferredDisplayList</a> is not compatible
   1855 
   1856 ### Example
   1857 
   1858 <div><fiddle-embed name="46d9bacf593deaaeabd74ff42f2571a0" gpu="true" cpu="true"></fiddle-embed></div>
   1859 
   1860 ### See Also
   1861 
   1862 <a href='#SkSurface_characterize'>characterize()</a> <a href='undocumented#SkSurfaceCharacterization'>SkSurfaceCharacterization</a> <a href='undocumented#SkDeferredDisplayList'>SkDeferredDisplayList</a>
   1863 
   1864