1ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#ifndef GrTexture_DEFINED
10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#define GrTexture_DEFINED
11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
127d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com#include "GrSurface.h"
1326e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com#include "SkPoint.h"
14686bcb871b8425603b9accbf72e27a9309f786d8bsalomon@google.com#include "GrRenderTarget.h"
15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
16a1e5795279bd085496fa04c59e588f440bf30457robertphillips@google.comclass GrResourceKey;
17b8670998a59d305cd22a3c0cbdc6e075b0a37a6ebsalomon@google.comclass GrTextureParams;
18e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.orgclass GrTextureImpl;
19ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
207d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.comclass GrTexture : public GrSurface {
21ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.compublic:
2215c0fea699b25343fe6f49668a5632866e1a0306robertphillips@google.com    /**
23c6cf72381b212eb21e61d5c5e14247b483a77753bsalomon@google.com     *  Approximate number of bytes used by the texture
24ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com     */
2511c6b39cfa24f812ceb115589f51a60a56ef14fecommit-bot@chromium.org    virtual size_t gpuMemorySize() const SK_OVERRIDE;
26ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
270342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com    // GrSurface overrides
287d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    virtual bool readPixels(int left, int top, int width, int height,
290342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                            GrPixelConfig config,
300342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                            void* buffer,
310342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                            size_t rowBytes = 0,
320342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                            uint32_t pixelOpsFlags = 0) SK_OVERRIDE;
336f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com
347d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    virtual void writePixels(int left, int top, int width, int height,
350342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                             GrPixelConfig config,
360342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                             const void* buffer,
370342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                             size_t rowBytes = 0,
380342a85091fd430c90a142d155dc9642aa729d9ebsalomon@google.com                             uint32_t pixelOpsFlags = 0) SK_OVERRIDE;
397d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com
407d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    virtual GrTexture* asTexture() SK_OVERRIDE { return this; }
417d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    virtual const GrTexture* asTexture() const SK_OVERRIDE { return this; }
42e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    virtual GrRenderTarget* asRenderTarget() SK_OVERRIDE { return fRenderTarget.get(); }
43e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    virtual const GrRenderTarget* asRenderTarget() const SK_OVERRIDE { return fRenderTarget.get(); }
44669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com
45669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com    /**
46e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     * Convert from texels to normalized texture coords for POT textures only. Please don't add
47e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     * new callsites for these functions. They are slated for removal.
487d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com     */
49972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org    SkFixed normalizeFixedX(SkFixed x) const {
50f9dae780c2c46a1f08adbbe8de2faaba091254d4tfarina        SkASSERT(SkIsPow2(fDesc.fWidth));
51fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com        return x >> fShiftFixedX;
527d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    }
53972f9cd7a063d0544f8c919fd12b9a3adbd12b24commit-bot@chromium.org    SkFixed normalizeFixedY(SkFixed y) const {
54f9dae780c2c46a1f08adbbe8de2faaba091254d4tfarina        SkASSERT(SkIsPow2(fDesc.fHeight));
55fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com        return y >> fShiftFixedY;
567d501ab502e861f2b2367b10a701b8449241558erobertphillips@google.com    }
57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
58ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    /**
59ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com     *  Return the native ID or handle to the texture, depending on the
6008afc843c074429a9848d8d165e6b898e3e7d371bsalomon@google.com     *  platform. e.g. on OpenGL, return the texture ID.
61ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com     */
6208afc843c074429a9848d8d165e6b898e3e7d371bsalomon@google.com    virtual GrBackendObject getTextureHandle() const = 0;
63ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
6459e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org    /**
65e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     * This function indicates that the texture parameters (wrap mode, filtering, ...) have been
66e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     * changed externally to Skia.
6759e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org     */
68e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    virtual void textureParamsModified() = 0;
69e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    SK_ATTR_DEPRECATED("Renamed to textureParamsModified.")
70e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    void invalidateCachedState() { this->textureParamsModified(); }
71e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
72e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    /**
73e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     * Informational texture flags. This will be moved to the private GrTextureImpl class soon.
74e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org     */
75e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    enum FlagBits {
76e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        kFirstBit = (kLastPublic_GrTextureFlagBit << 1),
77e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
78e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        /**
79e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org         * This texture should be returned to the texture cache when
80e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org         * it is no longer reffed
81e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org         */
82e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        kReturnToCache_FlagBit        = kFirstBit,
83e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    };
84e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
85e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    void resetFlag(GrTextureFlags flags) {
86e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        fDesc.fFlags = fDesc.fFlags & ~flags;
87e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
8859e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org
89515dcd36032997ce335daa0163c6d67e851bcad1commit-bot@chromium.org#ifdef SK_DEBUG
90ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    void validate() const {
91ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        this->INHERITED::validate();
9232716283420df90644c8b8114308f7967aa91d9frobertphillips@google.com
9332716283420df90644c8b8114308f7967aa91d9frobertphillips@google.com        this->validateDesc();
94ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
95ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#endif
9603087072483378a43f7b3f7a47944614187275ebrobertphillips@google.com
97e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    GrTextureImpl* impl() { return reinterpret_cast<GrTextureImpl*>(this); }
98e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    const GrTextureImpl* impl() const { return reinterpret_cast<const GrTextureImpl*>(this); }
99a1e5795279bd085496fa04c59e588f440bf30457robertphillips@google.com
1006dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.comprotected:
101686bcb871b8425603b9accbf72e27a9309f786d8bsalomon@google.com    // A texture refs its rt representation but not vice-versa. It is up to
102686bcb871b8425603b9accbf72e27a9309f786d8bsalomon@google.com    // the subclass constructor to initialize this pointer.
103686bcb871b8425603b9accbf72e27a9309f786d8bsalomon@google.com    SkAutoTUnref<GrRenderTarget> fRenderTarget;
1046dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.com
1053cb406bb88f5aa09cf9f5a9554b4b1314cf1a2eesenorblanco@chromium.org    GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc)
1063cb406bb88f5aa09cf9f5a9554b4b1314cf1a2eesenorblanco@chromium.org    : INHERITED(gpu, isWrapped, desc)
107e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    , fRenderTarget(NULL) {
1086dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.com        // only make sense if alloc size is pow2
109b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com        fShiftFixedX = 31 - SkCLZ(fDesc.fWidth);
110b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com        fShiftFixedY = 31 - SkCLZ(fDesc.fHeight);
1116dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.com    }
112e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
113686bcb871b8425603b9accbf72e27a9309f786d8bsalomon@google.com    virtual ~GrTexture();
114cee661af926cc977addc6e039b7022975a448acebsalomon@google.com
1156dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.com    // GrResource overrides
11615c0fea699b25343fe6f49668a5632866e1a0306robertphillips@google.com    virtual void onRelease() SK_OVERRIDE;
11715c0fea699b25343fe6f49668a5632866e1a0306robertphillips@google.com    virtual void onAbandon() SK_OVERRIDE;
1186dcf499d3578eff9ab5aead0d195fc0cb02c796bbsalomon@google.com
11932716283420df90644c8b8114308f7967aa91d9frobertphillips@google.com    void validateDesc() const;
12032716283420df90644c8b8114308f7967aa91d9frobertphillips@google.com
1211c13c9668a889e56a0c85b51b9f28139c25b76ffbsalomon@google.comprivate:
122e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    virtual void internal_dispose() const SK_OVERRIDE;
123bd465d141be875278d6bbc06becfdbb4acbbf557commit-bot@chromium.org
12459e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org    // these two shift a fixed-point value into normalized coordinates
12559e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org    // for this texture if the texture is power of two sized.
12659e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org    int                 fShiftFixedX;
12759e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org    int                 fShiftFixedY;
12859e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org
129e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    typedef GrSurface INHERITED;
130e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org};
131bd465d141be875278d6bbc06becfdbb4acbbf557commit-bot@chromium.org
132e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.orgclass GrTextureImpl : public GrTexture {
133e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.orgpublic:
134e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    SK_DECLARE_INST_COUNT(GrTextureImpl)
13559e7d238522145e00357c54d71a4216b279faf1ccommit-bot@chromium.org
136e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    void setFlag(GrTextureFlags flags) {
137e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        fDesc.fFlags = fDesc.fFlags | flags;
138e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
139e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    void resetFlag(GrTextureFlags flags) {
140e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        fDesc.fFlags = fDesc.fFlags & ~flags;
141e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
142e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    bool isSetFlag(GrTextureFlags flags) const {
143e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        return 0 != (fDesc.fFlags & flags);
144e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
145e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
146e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    void dirtyMipMaps(bool mipMapsDirty);
147e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
148e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    bool mipMapsAreDirty() const {
149e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        return kValid_MipMapsStatus != fMipMapsStatus;
150e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
151e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
152e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    bool hasMipMaps() const {
153e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        return kNotAllocated_MipMapsStatus != fMipMapsStatus;
154e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
155e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
156e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    static GrResourceKey ComputeKey(const GrGpu* gpu,
157e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org                                    const GrTextureParams* params,
158e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org                                    const GrTextureDesc& desc,
159e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org                                    const GrCacheID& cacheID);
160e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    static GrResourceKey ComputeScratchKey(const GrTextureDesc& desc);
161e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    static bool NeedsResizing(const GrResourceKey& key);
162e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    static bool NeedsBilerp(const GrResourceKey& key);
163e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
164e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.orgprotected:
165e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    GrTextureImpl(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc)
166e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    : INHERITED(gpu, isWrapped, desc)
167e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    , fMipMapsStatus(kNotAllocated_MipMapsStatus) {
168e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    }
169e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
170e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.orgprivate:
171e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    enum MipMapsStatus {
172e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        kNotAllocated_MipMapsStatus,
173e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        kAllocated_MipMapsStatus,
174e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org        kValid_MipMapsStatus
175e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    };
176e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
177e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    MipMapsStatus       fMipMapsStatus;
178e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
179e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org    typedef GrTexture INHERITED;
180ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com};
181ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
18226e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com/**
18326e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com * Represents a texture that is intended to be accessed in device coords with an offset.
18426e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com */
18526e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.comclass GrDeviceCoordTexture {
18626e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.compublic:
18726e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrDeviceCoordTexture() { fOffset.set(0, 0); }
18826e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
18926e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrDeviceCoordTexture(const GrDeviceCoordTexture& other) {
19026e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        *this = other;
19126e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    }
19226e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
19326e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrDeviceCoordTexture(GrTexture* texture, const SkIPoint& offset)
19426e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        : fTexture(SkSafeRef(texture))
19526e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        , fOffset(offset) {
19626e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    }
19726e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
19826e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrDeviceCoordTexture& operator=(const GrDeviceCoordTexture& other) {
19926e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        fTexture.reset(SkSafeRef(other.fTexture.get()));
20026e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        fOffset = other.fOffset;
20126e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        return *this;
20226e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    }
20326e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
20426e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    const SkIPoint& offset() const { return fOffset; }
20526e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
20626e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    void setOffset(const SkIPoint& offset) { fOffset = offset; }
20726e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    void setOffset(int ox, int oy) { fOffset.set(ox, oy); }
20826e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
20926e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrTexture* texture() const { return fTexture.get(); }
21026e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
21126e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    GrTexture* setTexture(GrTexture* texture) {
21226e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        fTexture.reset(SkSafeRef(texture));
21326e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com        return texture;
21426e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    }
215e49157f0838c615b10da0ef2b297c742da662e34commit-bot@chromium.org
21626e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.comprivate:
21726e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    SkAutoTUnref<GrTexture> fTexture;
21826e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com    SkIPoint                fOffset;
21926e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com};
22026e18b593ab65e4d92dfbce92579d8bc180d4c2cbsalomon@google.com
221ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#endif
222