1 /*
2 * Copyright 2015 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 "GrGLTextureRenderTarget.h"
9 #include "GrContext.h"
10 #include "GrContextPriv.h"
11 #include "GrGLGpu.h"
12 #include "GrTexturePriv.h"
13 #include "SkTraceMemoryDump.h"
14
GrGLTextureRenderTarget(GrGLGpu * gpu,SkBudgeted budgeted,const GrSurfaceDesc & desc,const GrGLTexture::IDDesc & texIDDesc,const GrGLRenderTarget::IDDesc & rtIDDesc,GrMipMapsStatus mipMapsStatus)15 GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
16 SkBudgeted budgeted,
17 const GrSurfaceDesc& desc,
18 const GrGLTexture::IDDesc& texIDDesc,
19 const GrGLRenderTarget::IDDesc& rtIDDesc,
20 GrMipMapsStatus mipMapsStatus)
21 : GrSurface(gpu, desc)
22 , GrGLTexture(gpu, desc, texIDDesc, mipMapsStatus)
23 , GrGLRenderTarget(gpu, desc, texIDDesc.fInfo.fFormat, rtIDDesc) {
24 this->registerWithCache(budgeted);
25 }
26
GrGLTextureRenderTarget(GrGLGpu * gpu,const GrSurfaceDesc & desc,const GrGLTexture::IDDesc & texIDDesc,const GrGLRenderTarget::IDDesc & rtIDDesc,GrWrapCacheable cacheable,GrMipMapsStatus mipMapsStatus)27 GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
28 const GrSurfaceDesc& desc,
29 const GrGLTexture::IDDesc& texIDDesc,
30 const GrGLRenderTarget::IDDesc& rtIDDesc,
31 GrWrapCacheable cacheable,
32 GrMipMapsStatus mipMapsStatus)
33 : GrSurface(gpu, desc)
34 , GrGLTexture(gpu, desc, texIDDesc, mipMapsStatus)
35 , GrGLRenderTarget(gpu, desc, texIDDesc.fInfo.fFormat, rtIDDesc) {
36 this->registerWithCacheWrapped(cacheable);
37 }
38
dumpMemoryStatistics(SkTraceMemoryDump * traceMemoryDump) const39 void GrGLTextureRenderTarget::dumpMemoryStatistics(
40 SkTraceMemoryDump* traceMemoryDump) const {
41 #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK
42 // Delegate to the base classes
43 GrGLRenderTarget::dumpMemoryStatistics(traceMemoryDump);
44 GrGLTexture::dumpMemoryStatistics(traceMemoryDump);
45 #else
46 SkString resourceName = this->getResourceName();
47 resourceName.append("/texture_renderbuffer");
48 this->dumpMemoryStatisticsPriv(traceMemoryDump, resourceName, "RenderTarget",
49 this->gpuMemorySize());
50 #endif
51 }
52
canAttemptStencilAttachment() const53 bool GrGLTextureRenderTarget::canAttemptStencilAttachment() const {
54 // The RT FBO of GrGLTextureRenderTarget is never created from a
55 // wrapped FBO, so we only care about the flag.
56 return !this->getGpu()->getContext()->priv().caps()->avoidStencilBuffers();
57 }
58
MakeWrapped(GrGLGpu * gpu,const GrSurfaceDesc & desc,const GrGLTexture::IDDesc & texIDDesc,const GrGLRenderTarget::IDDesc & rtIDDesc,GrWrapCacheable cacheable,GrMipMapsStatus mipMapsStatus)59 sk_sp<GrGLTextureRenderTarget> GrGLTextureRenderTarget::MakeWrapped(
60 GrGLGpu* gpu, const GrSurfaceDesc& desc, const GrGLTexture::IDDesc& texIDDesc,
61 const GrGLRenderTarget::IDDesc& rtIDDesc, GrWrapCacheable cacheable,
62 GrMipMapsStatus mipMapsStatus) {
63 return sk_sp<GrGLTextureRenderTarget>(
64 new GrGLTextureRenderTarget(gpu, desc, texIDDesc, rtIDDesc, cacheable, mipMapsStatus));
65 }
66
onGpuMemorySize() const67 size_t GrGLTextureRenderTarget::onGpuMemorySize() const {
68 return GrSurface::ComputeSize(this->config(), this->width(), this->height(),
69 this->numSamplesOwnedPerPixel(),
70 this->texturePriv().mipMapped());
71 }
72