1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2011 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrGLTexture_DEFINED 8*c8dee2aaSAndroid Build Coastguard Worker #define GrGLTexture_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrBackendSurface.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/SkImageGanesh.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrTexture.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTypesPriv.h" 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker #include <string_view> 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class GrGLGpu; 23*c8dee2aaSAndroid Build Coastguard Worker class SkTraceMemoryDump; 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker class GrGLTexture : public GrTexture { 26*c8dee2aaSAndroid Build Coastguard Worker public: 27*c8dee2aaSAndroid Build Coastguard Worker struct Desc { 28*c8dee2aaSAndroid Build Coastguard Worker SkISize fSize = {-1, -1}; 29*c8dee2aaSAndroid Build Coastguard Worker GrGLenum fTarget = 0; 30*c8dee2aaSAndroid Build Coastguard Worker GrGLuint fID = 0; 31*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat fFormat = GrGLFormat::kUnknown; 32*c8dee2aaSAndroid Build Coastguard Worker GrBackendObjectOwnership fOwnership = GrBackendObjectOwnership::kOwned; 33*c8dee2aaSAndroid Build Coastguard Worker skgpu::Protected fIsProtected = skgpu::Protected::kNo; 34*c8dee2aaSAndroid Build Coastguard Worker }; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker static GrTextureType TextureTypeFromTarget(GrGLenum textureTarget); 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture(GrGLGpu*, skgpu::Budgeted, const Desc&, GrMipmapStatus, std::string_view label); 39*c8dee2aaSAndroid Build Coastguard Worker ~GrGLTexture()40*c8dee2aaSAndroid Build Coastguard Worker ~GrGLTexture() override {} 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture getBackendTexture() const override; 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat backendFormat() const override; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker // TODO: Remove once clients are no longer calling this. textureParamsModified()47*c8dee2aaSAndroid Build Coastguard Worker void textureParamsModified() override { fParameters->invalidate(); } 48*c8dee2aaSAndroid Build Coastguard Worker parameters()49*c8dee2aaSAndroid Build Coastguard Worker GrGLTextureParameters* parameters() { return fParameters.get(); } 50*c8dee2aaSAndroid Build Coastguard Worker textureID()51*c8dee2aaSAndroid Build Coastguard Worker GrGLuint textureID() const { return fID; } 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker GrGLenum target() const; 54*c8dee2aaSAndroid Build Coastguard Worker format()55*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format() const { return fFormat; } 56*c8dee2aaSAndroid Build Coastguard Worker hasBaseLevelBeenBoundToFBO()57*c8dee2aaSAndroid Build Coastguard Worker bool hasBaseLevelBeenBoundToFBO() const { return fBaseLevelHasBeenBoundToFBO; } baseLevelWasBoundToFBO()58*c8dee2aaSAndroid Build Coastguard Worker void baseLevelWasBoundToFBO() { fBaseLevelHasBeenBoundToFBO = true; } 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrGLTexture> MakeWrapped(GrGLGpu*, 61*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 62*c8dee2aaSAndroid Build Coastguard Worker const Desc&, 63*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters>, 64*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, GrIOType, 65*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override; 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker protected: 70*c8dee2aaSAndroid Build Coastguard Worker // Constructor for subclasses. 71*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture(GrGLGpu*, 72*c8dee2aaSAndroid Build Coastguard Worker const Desc&, 73*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters>, 74*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 75*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker // Constructor for instances wrapping backend objects. 78*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture(GrGLGpu*, 79*c8dee2aaSAndroid Build Coastguard Worker const Desc&, 80*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 81*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters>, 82*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, 83*c8dee2aaSAndroid Build Coastguard Worker GrIOType, 84*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 85*c8dee2aaSAndroid Build Coastguard Worker 86*c8dee2aaSAndroid Build Coastguard Worker void init(const Desc&); 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker void onAbandon() override; 89*c8dee2aaSAndroid Build Coastguard Worker void onRelease() override; 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker bool onStealBackendTexture(GrBackendTexture*, SkImages::BackendTextureReleaseProc*) override; 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Worker void onSetLabel() override; 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker private: 96*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters> fParameters; 97*c8dee2aaSAndroid Build Coastguard Worker GrGLuint fID; 98*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat fFormat; 99*c8dee2aaSAndroid Build Coastguard Worker GrBackendObjectOwnership fTextureIDOwnership; 100*c8dee2aaSAndroid Build Coastguard Worker bool fBaseLevelHasBeenBoundToFBO = false; 101*c8dee2aaSAndroid Build Coastguard Worker 102*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrTexture; 103*c8dee2aaSAndroid Build Coastguard Worker }; 104*c8dee2aaSAndroid Build Coastguard Worker 105*c8dee2aaSAndroid Build Coastguard Worker #endif 106