blob: 1d792ab9a4bccdb1db84e14c84b45c9a6a85215e [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrGLTexture_DEFINED
#define GrGLTexture_DEFINED
#include "include/gpu/ganesh/SkImageGanesh.h"
#include "src/gpu/ganesh/GrGpu.h"
#include "src/gpu/ganesh/GrTexture.h"
#include "src/gpu/ganesh/gl/GrGLTypesPriv.h"
#include "src/gpu/ganesh/gl/GrGLUtil.h"
class GrGLGpu;
class GrGLTexture : public GrTexture {
public:
struct Desc {
SkISize fSize = {-1, -1};
GrGLenum fTarget = 0;
GrGLuint fID = 0;
GrGLFormat fFormat = GrGLFormat::kUnknown;
GrBackendObjectOwnership fOwnership = GrBackendObjectOwnership::kOwned;
skgpu::Protected fIsProtected = skgpu::Protected::kNo;
};
static GrTextureType TextureTypeFromTarget(GrGLenum textureTarget);
GrGLTexture(GrGLGpu*, skgpu::Budgeted, const Desc&, GrMipmapStatus, std::string_view label);
~GrGLTexture() override {}
GrBackendTexture getBackendTexture() const override;
GrBackendFormat backendFormat() const override;
// TODO: Remove once clients are no longer calling this.
void textureParamsModified() override { fParameters->invalidate(); }
GrGLTextureParameters* parameters() { return fParameters.get(); }
GrGLuint textureID() const { return fID; }
GrGLenum target() const;
GrGLFormat format() const { return fFormat; }
bool hasBaseLevelBeenBoundToFBO() const { return fBaseLevelHasBeenBoundToFBO; }
void baseLevelWasBoundToFBO() { fBaseLevelHasBeenBoundToFBO = true; }
static sk_sp<GrGLTexture> MakeWrapped(GrGLGpu*,
GrMipmapStatus,
const Desc&,
sk_sp<GrGLTextureParameters>,
GrWrapCacheable, GrIOType,
std::string_view label);
void dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const override;
protected:
// Constructor for subclasses.
GrGLTexture(GrGLGpu*,
const Desc&,
sk_sp<GrGLTextureParameters>,
GrMipmapStatus,
std::string_view label);
// Constructor for instances wrapping backend objects.
GrGLTexture(GrGLGpu*,
const Desc&,
GrMipmapStatus,
sk_sp<GrGLTextureParameters>,
GrWrapCacheable,
GrIOType,
std::string_view label);
void init(const Desc&);
void onAbandon() override;
void onRelease() override;
bool onStealBackendTexture(GrBackendTexture*, SkImages::BackendTextureReleaseProc*) override;
void onSetLabel() override;
private:
sk_sp<GrGLTextureParameters> fParameters;
GrGLuint fID;
GrGLFormat fFormat;
GrBackendObjectOwnership fTextureIDOwnership;
bool fBaseLevelHasBeenBoundToFBO = false;
using INHERITED = GrTexture;
};
#endif