1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * 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 GrTexture_DEFINED
- #define GrTexture_DEFINED
- #include "GrBackendSurface.h"
- #include "GrSamplerState.h"
- #include "GrSurface.h"
- #include "SkImage.h"
- #include "SkPoint.h"
- #include "SkRefCnt.h"
- #include "../private/GrTypesPriv.h"
- class GrTexturePriv;
- class GrTexture : virtual public GrSurface {
- public:
- GrTexture* asTexture() override { return this; }
- const GrTexture* asTexture() const override { return this; }
- virtual GrBackendTexture getBackendTexture() const = 0;
- /**
- * This function indicates that the texture parameters (wrap mode, filtering, ...) have been
- * changed externally to Skia.
- */
- virtual void textureParamsModified() = 0;
- /**
- * This function steals the backend texture from a uniquely owned GrTexture with no pending
- * IO, passing it out to the caller. The GrTexture is deleted in the process.
- *
- * Note that if the GrTexture is not uniquely owned (no other refs), or has pending IO, this
- * function will fail.
- */
- static bool StealBackendTexture(sk_sp<GrTexture>&&,
- GrBackendTexture*,
- SkImage::BackendTextureReleaseProc*);
- #ifdef SK_DEBUG
- void validate() const {
- this->INHERITED::validate();
- }
- #endif
- virtual void setRelease(sk_sp<GrReleaseProcHelper> releaseHelper) = 0;
- // These match the definitions in SkImage, from whence they came.
- // TODO: Either move Chrome over to new api or remove their need to call this on GrTexture
- typedef void* ReleaseCtx;
- typedef void (*ReleaseProc)(ReleaseCtx);
- void setRelease(ReleaseProc proc, ReleaseCtx ctx) {
- sk_sp<GrReleaseProcHelper> helper(new GrReleaseProcHelper(proc, ctx));
- this->setRelease(std::move(helper));
- }
- /** Access methods that are only to be used within Skia code. */
- inline GrTexturePriv texturePriv();
- inline const GrTexturePriv texturePriv() const;
- protected:
- GrTexture(GrGpu*, const GrSurfaceDesc&, GrTextureType, GrMipMapsStatus);
- virtual bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) = 0;
- private:
- void computeScratchKey(GrScratchKey*) const override;
- size_t onGpuMemorySize() const override;
- void markMipMapsDirty();
- void markMipMapsClean();
- GrTextureType fTextureType;
- GrMipMapsStatus fMipMapsStatus;
- int fMaxMipMapLevel;
- friend class GrTexturePriv;
- typedef GrSurface INHERITED;
- };
- #endif
|