blob: fae0c76c6de618a5c5ba04ad20897b3981ae39bd [file] [log] [blame]
reed@google.comac10a2d2010-12-22 21:39:39 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2010 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@google.comac10a2d2010-12-22 21:39:39 +00006 */
7
reed@google.comac10a2d2010-12-22 21:39:39 +00008#ifndef SkGr_DEFINED
9#define SkGr_DEFINED
10
bsalomonf276ac52015-10-09 13:36:42 -070011#include "GrColor.h"
joshualitt9bc39542015-08-12 12:57:54 -070012#include "GrTextureAccess.h"
bsalomonf276ac52015-10-09 13:36:42 -070013#include "SkColor.h"
14#include "SkColorPriv.h"
15#include "SkFilterQuality.h"
16#include "SkImageInfo.h"
reed@google.comac10a2d2010-12-22 21:39:39 +000017
brianosmana6359362016-03-21 06:55:37 -070018class GrCaps;
Brian Osmanc68d4aa2016-09-30 11:41:59 -040019class GrColorSpaceXform;
bsalomonf276ac52015-10-09 13:36:42 -070020class GrContext;
21class GrTexture;
22class GrTextureParams;
23class SkBitmap;
reed@google.comac10a2d2010-12-22 21:39:39 +000024
reed@google.comac10a2d2010-12-22 21:39:39 +000025////////////////////////////////////////////////////////////////////////////////
26// Sk to Gr Type conversions
27
bsalomonf1b7a1d2015-09-28 06:26:28 -070028static inline GrColor SkColorToPremulGrColor(SkColor c) {
rileya@google.com24f3ad12012-07-18 21:47:40 +000029 SkPMColor pm = SkPreMultiplyColor(c);
30 unsigned r = SkGetPackedR32(pm);
31 unsigned g = SkGetPackedG32(pm);
32 unsigned b = SkGetPackedB32(pm);
33 unsigned a = SkGetPackedA32(pm);
34 return GrColorPackRGBA(r, g, b, a);
35}
36
bsalomonf1b7a1d2015-09-28 06:26:28 -070037static inline GrColor SkColorToUnpremulGrColor(SkColor c) {
38 unsigned r = SkColorGetR(c);
39 unsigned g = SkColorGetG(c);
40 unsigned b = SkColorGetB(c);
41 unsigned a = SkColorGetA(c);
42 return GrColorPackRGBA(r, g, b, a);
43}
44
Brian Osman72ae4312016-10-20 16:53:45 -040045/** Transform an SkColor (sRGB bytes) to GrColor4f for the specified color space. */
46GrColor4f SkColorToPremulGrColor4f(SkColor c, SkColorSpace* dstColorSpace);
47GrColor4f SkColorToUnpremulGrColor4f(SkColor c, SkColorSpace* dstColorSpace);
48
49/**
50 * As above, but with explicit control over the linearization and gamut xform steps.
51 * Typically used when you have easy access to a pre-computed xform.
52 */
Brian Osmanc68d4aa2016-09-30 11:41:59 -040053GrColor4f SkColorToPremulGrColor4f(SkColor c, bool gammaCorrect, GrColorSpaceXform* gamutXform);
54GrColor4f SkColorToUnpremulGrColor4f(SkColor c, bool gammaCorrect, GrColorSpaceXform* gamutXform);
55
bsalomonf1b7a1d2015-09-28 06:26:28 -070056static inline GrColor SkColorToOpaqueGrColor(SkColor c) {
57 unsigned r = SkColorGetR(c);
58 unsigned g = SkColorGetG(c);
59 unsigned b = SkColorGetB(c);
60 return GrColorPackRGBA(r, g, b, 0xFF);
61}
62
63/** Replicates the SkColor's alpha to all four channels of the GrColor. */
64static inline GrColor SkColorAlphaToGrColor(SkColor c) {
dandov9de5b512014-06-10 14:38:28 -070065 U8CPU a = SkColorGetA(c);
66 return GrColorPackRGBA(a, a, a, a);
67}
68
bsalomonae4738f2015-09-15 15:33:27 -070069static inline SkPMColor GrColorToSkPMColor(GrColor c) {
70 GrColorIsPMAssert(c);
71 return SkPackARGB32(GrColorUnpackA(c), GrColorUnpackR(c), GrColorUnpackG(c), GrColorUnpackB(c));
72}
73
74static inline GrColor SkPMColorToGrColor(SkPMColor c) {
75 return GrColorPackRGBA(SkGetPackedR32(c), SkGetPackedG32(c), SkGetPackedB32(c),
76 SkGetPackedA32(c));
77}
78
rileya@google.com24f3ad12012-07-18 21:47:40 +000079////////////////////////////////////////////////////////////////////////////////
bsalomon045802d2015-10-20 07:58:01 -070080/** Returns a texture representing the bitmap that is compatible with the GrTextureParams. The
81 texture is inserted into the cache (unless the bitmap is marked volatile) and can be
82 retrieved again via this function. */
brianosman982eb7f2016-06-06 13:10:58 -070083GrTexture* GrRefCachedBitmapTexture(GrContext*, const SkBitmap&, const GrTextureParams&,
Brian Osman7b8400d2016-11-08 17:08:54 -050084 SkDestinationSurfaceColorMode);
bsalomon045802d2015-10-20 07:58:01 -070085
reedc7ec7c92016-07-25 08:29:10 -070086sk_sp<GrTexture> GrMakeCachedBitmapTexture(GrContext*, const SkBitmap&, const GrTextureParams&,
Brian Osman7b8400d2016-11-08 17:08:54 -050087 SkDestinationSurfaceColorMode);
reedc7ec7c92016-07-25 08:29:10 -070088
bsalomonf276ac52015-10-09 13:36:42 -070089// TODO: Move SkImageInfo2GrPixelConfig to SkGrPriv.h (requires cleanup to SkWindow its subclasses).
brianosmanb109b8c2016-06-16 13:03:24 -070090GrPixelConfig SkImageInfo2GrPixelConfig(SkColorType, SkAlphaType, const SkColorSpace*,
91 const GrCaps&);
bsalomonf276ac52015-10-09 13:36:42 -070092
brianosmana6359362016-03-21 06:55:37 -070093static inline GrPixelConfig SkImageInfo2GrPixelConfig(const SkImageInfo& info, const GrCaps& caps) {
brianosmanb109b8c2016-06-16 13:03:24 -070094 return SkImageInfo2GrPixelConfig(info.colorType(), info.alphaType(), info.colorSpace(), caps);
bsalomonf276ac52015-10-09 13:36:42 -070095}
96
97GrTextureParams::FilterMode GrSkFilterQualityToGrFilterMode(SkFilterQuality paintFilterQuality,
98 const SkMatrix& viewM,
99 const SkMatrix& localM,
100 bool* doBicubic);
reed43fe6182015-09-08 08:37:36 -0700101
reed@google.comac10a2d2010-12-22 21:39:39 +0000102#endif