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