1 /*
2  * Copyright 2016 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.
6  */
7 
8 #include "GrTextureProxy.h"
9 
10 #include "GrTextureProvider.h"
11 #include "GrGpuResourcePriv.h"
12 
GrTextureProxy(const GrSurfaceDesc & srcDesc,SkBackingFit fit,SkBudgeted budgeted,const void *,size_t)13 GrTextureProxy::GrTextureProxy(const GrSurfaceDesc& srcDesc, SkBackingFit fit, SkBudgeted budgeted,
14                                const void* /*srcData*/, size_t /*rowBytes*/)
15     : INHERITED(srcDesc, fit, budgeted) {
16     // TODO: Handle 'srcData' here
17 }
18 
GrTextureProxy(sk_sp<GrTexture> tex)19 GrTextureProxy::GrTextureProxy(sk_sp<GrTexture> tex)
20     : INHERITED(tex->desc(), SkBackingFit::kExact,
21                 tex->resourcePriv().isBudgeted(), tex->uniqueID())
22     , fTexture(std::move(tex)) {
23 }
24 
instantiate(GrTextureProvider * texProvider)25 GrTexture* GrTextureProxy::instantiate(GrTextureProvider* texProvider) {
26     if (fTexture) {
27         return fTexture.get();
28     }
29 
30     if (SkBackingFit::kApprox == fFit) {
31         fTexture.reset(texProvider->createApproxTexture(fDesc));
32     } else {
33         fTexture.reset(texProvider->createTexture(fDesc, fBudgeted));
34     }
35 
36     return fTexture.get();
37 }
38 
Make(const GrSurfaceDesc & desc,SkBackingFit fit,SkBudgeted budgeted,const void * srcData,size_t rowBytes)39 sk_sp<GrTextureProxy> GrTextureProxy::Make(const GrSurfaceDesc& desc,
40                                            SkBackingFit fit,
41                                            SkBudgeted budgeted,
42                                            const void* srcData,
43                                            size_t rowBytes) {
44     // TODO: handle 'srcData' (we could use the wrapped version if there is data)
45     SkASSERT(!srcData && !rowBytes);
46     return sk_sp<GrTextureProxy>(new GrTextureProxy(desc, fit, budgeted, srcData, rowBytes));
47 }
48 
Make(sk_sp<GrTexture> tex)49 sk_sp<GrTextureProxy> GrTextureProxy::Make(sk_sp<GrTexture> tex) {
50     return sk_sp<GrTextureProxy>(new GrTextureProxy(std::move(tex)));
51 }
52