145580d3e3024c1536e8e1b2017b704805442b634Brian Osman/*
245580d3e3024c1536e8e1b2017b704805442b634Brian Osman * Copyright 2016 Google Inc.
345580d3e3024c1536e8e1b2017b704805442b634Brian Osman *
445580d3e3024c1536e8e1b2017b704805442b634Brian Osman * Use of this source code is governed by a BSD-style license that can be
545580d3e3024c1536e8e1b2017b704805442b634Brian Osman * found in the LICENSE file.
645580d3e3024c1536e8e1b2017b704805442b634Brian Osman */
745580d3e3024c1536e8e1b2017b704805442b634Brian Osman
845580d3e3024c1536e8e1b2017b704805442b634Brian Osman#ifndef GrTextureContext_DEFINED
945580d3e3024c1536e8e1b2017b704805442b634Brian Osman#define GrTextureContext_DEFINED
1045580d3e3024c1536e8e1b2017b704805442b634Brian Osman
1145580d3e3024c1536e8e1b2017b704805442b634Brian Osman#include "GrSurfaceContext.h"
1245580d3e3024c1536e8e1b2017b704805442b634Brian Osman#include "../private/GrTextureProxy.h"
1345580d3e3024c1536e8e1b2017b704805442b634Brian Osman
1445580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass GrContext;
1545580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass GrDrawingManager;
1645580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass GrSurface;
1745580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass GrTextureOpList;
1845580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass GrTextureProxy;
1945580d3e3024c1536e8e1b2017b704805442b634Brian Osmanstruct SkIPoint;
2045580d3e3024c1536e8e1b2017b704805442b634Brian Osmanstruct SkIRect;
2145580d3e3024c1536e8e1b2017b704805442b634Brian Osman
2245580d3e3024c1536e8e1b2017b704805442b634Brian Osman/**
2345580d3e3024c1536e8e1b2017b704805442b634Brian Osman * A helper object to orchestrate commands (currently just copies) for GrSurfaces that are
2445580d3e3024c1536e8e1b2017b704805442b634Brian Osman * GrTextures and not GrRenderTargets.
2545580d3e3024c1536e8e1b2017b704805442b634Brian Osman */
2645580d3e3024c1536e8e1b2017b704805442b634Brian Osmanclass SK_API GrTextureContext : public GrSurfaceContext {
2745580d3e3024c1536e8e1b2017b704805442b634Brian Osmanpublic:
2845580d3e3024c1536e8e1b2017b704805442b634Brian Osman    ~GrTextureContext() override;
2945580d3e3024c1536e8e1b2017b704805442b634Brian Osman
30f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    GrSurfaceProxy* asSurfaceProxy() override { return fTextureProxy.get(); }
31f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    const GrSurfaceProxy* asSurfaceProxy() const override { return fTextureProxy.get(); }
32f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    sk_sp<GrSurfaceProxy> asSurfaceProxyRef() override { return fTextureProxy; }
33f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips
34f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    GrTextureProxy* asTextureProxy() override { return fTextureProxy.get(); }
35e252f08982b0c747cd4d34c00ce413ab1005e99aGreg Daniel    const GrTextureProxy* asTextureProxy() const override { return fTextureProxy.get(); }
36f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    sk_sp<GrTextureProxy> asTextureProxyRef() override { return fTextureProxy; }
37f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips
38f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    GrRenderTargetProxy* asRenderTargetProxy() override;
39f200a90f3e58ce20753420cadced850d7d00dca1Robert Phillips    sk_sp<GrRenderTargetProxy> asRenderTargetProxyRef() override;
402734136b68cfb5fbde5a5929a203d5e26f4afc25Robert Phillips
4145580d3e3024c1536e8e1b2017b704805442b634Brian Osmanprotected:
422c86249465c28a532c8be55b6ba497021e3110ecRobert Phillips    GrTextureContext(GrContext*, GrDrawingManager*, sk_sp<GrTextureProxy>,
432c86249465c28a532c8be55b6ba497021e3110ecRobert Phillips                     sk_sp<SkColorSpace>, GrAuditTrail*, GrSingleOwner*);
4445580d3e3024c1536e8e1b2017b704805442b634Brian Osman
452de8cfadc34cd92a6f99659fa565c137b386fa5fRobert Phillips    SkDEBUGCODE(void validate() const override;)
4645580d3e3024c1536e8e1b2017b704805442b634Brian Osman
4745580d3e3024c1536e8e1b2017b704805442b634Brian Osmanprivate:
4845580d3e3024c1536e8e1b2017b704805442b634Brian Osman    friend class GrDrawingManager; // for ctor
4945580d3e3024c1536e8e1b2017b704805442b634Brian Osman
502de8cfadc34cd92a6f99659fa565c137b386fa5fRobert Phillips    GrOpList* getOpList() override;
5145580d3e3024c1536e8e1b2017b704805442b634Brian Osman
5245580d3e3024c1536e8e1b2017b704805442b634Brian Osman    sk_sp<GrTextureProxy>        fTextureProxy;
5345580d3e3024c1536e8e1b2017b704805442b634Brian Osman
5445580d3e3024c1536e8e1b2017b704805442b634Brian Osman    // In MDB-mode the GrOpList can be closed by some other renderTargetContext that has picked
5545580d3e3024c1536e8e1b2017b704805442b634Brian Osman    // it up. For this reason, the GrOpList should only ever be accessed via 'getOpList'.
56dc83b892a0ae431c5fe123a7e6873d63264bd64cRobert Phillips    sk_sp<GrTextureOpList>       fOpList;
57e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips
58e2f7d1899d890c2f08571e1bd6c7fa2c5ea1be0bRobert Phillips    typedef GrSurfaceContext INHERITED;
5945580d3e3024c1536e8e1b2017b704805442b634Brian Osman};
6045580d3e3024c1536e8e1b2017b704805442b634Brian Osman
6145580d3e3024c1536e8e1b2017b704805442b634Brian Osman#endif
62