2b23c4bf31
PS5: Removes SkDestinationSurfaceColorMode, tracking of mipmap mode on GrTexture, sRGB decode state per-texture. Because we were often choosing sRGB configs for RGB color types, legacy rendering would then be incorrect (too dark). So... PS7: Stops ever using sRGB pixel configs when translating image info or color type. Also removes a bunch of GrCaps bits and a GrContextOption that are no longer relevant. PS9: Adjusts surface creation unit test expectations, and changes the raster rules accordingly. At this point, sRGB configs are (obviously) going to be broken. Locally, I ran 8888, gl, and the gbr- versions of both. Across all GMs x configs, there are 13 diffs. 12 are GMs that create surfaces with a color-space attached (and thus, the offscreen is no longer getting sRGB pixel config). The only remainder constructs an SkPictureImageGenerator, (with an attached color space) and renders it to the gbr-gl canvas, which triggers a a tagged surface inside the generator. Bug: skia: Change-Id: Ie5edfa157dd799f3121e8173fc4f97f6c8ed6789 Reviewed-on: https://skia-review.googlesource.com/131282 Commit-Queue: Brian Osman <brianosman@google.com> Reviewed-by: Mike Klein <mtklein@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
89 lines
2.7 KiB
C++
89 lines
2.7 KiB
C++
|
|
/*
|
|
* 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&, GrSLType samplerType,
|
|
GrSamplerState::Filter highestFilterMode, GrMipMapsStatus);
|
|
|
|
virtual bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) = 0;
|
|
|
|
private:
|
|
void computeScratchKey(GrScratchKey*) const override;
|
|
size_t onGpuMemorySize() const override;
|
|
void markMipMapsDirty();
|
|
void markMipMapsClean();
|
|
|
|
GrSLType fSamplerType;
|
|
GrSamplerState::Filter fHighestFilterMode;
|
|
GrMipMapsStatus fMipMapsStatus;
|
|
int fMaxMipMapLevel;
|
|
friend class GrTexturePriv;
|
|
|
|
typedef GrSurface INHERITED;
|
|
};
|
|
|
|
#endif
|