gfx/skia/trunk/include/gpu/GrTexture.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     2 /*
     3  * Copyright 2011 Google Inc.
     4  *
     5  * Use of this source code is governed by a BSD-style license that can be
     6  * found in the LICENSE file.
     7  */
     9 #ifndef GrTexture_DEFINED
    10 #define GrTexture_DEFINED
    12 #include "GrSurface.h"
    13 #include "SkPoint.h"
    14 #include "GrRenderTarget.h"
    16 class GrResourceKey;
    17 class GrTextureParams;
    19 class GrTexture : public GrSurface {
    21 public:
    22     SK_DECLARE_INST_COUNT(GrTexture)
    23     // from GrResource
    24     /**
    25      * Informational texture flags
    26      */
    27     enum FlagBits {
    28         kFirstBit = (kLastPublic_GrTextureFlagBit << 1),
    30         /**
    31          * This texture should be returned to the texture cache when
    32          * it is no longer reffed
    33          */
    34         kReturnToCache_FlagBit        = kFirstBit,
    35     };
    37     void setFlag(GrTextureFlags flags) {
    38         fDesc.fFlags = fDesc.fFlags | flags;
    39     }
    40     void resetFlag(GrTextureFlags flags) {
    41         fDesc.fFlags = fDesc.fFlags & ~flags;
    42     }
    43     bool isSetFlag(GrTextureFlags flags) const {
    44         return 0 != (fDesc.fFlags & flags);
    45     }
    47     void dirtyMipMaps(bool mipMapsDirty) {
    48         fMipMapsDirty = mipMapsDirty;
    49     }
    51     bool mipMapsAreDirty() const {
    52         return fMipMapsDirty;
    53     }
    55     /**
    56      *  Approximate number of bytes used by the texture
    57      */
    58     virtual size_t sizeInBytes() const SK_OVERRIDE {
    59         return (size_t) fDesc.fWidth *
    60                         fDesc.fHeight *
    61                         GrBytesPerPixel(fDesc.fConfig);
    62     }
    64     // GrSurface overrides
    65     virtual bool readPixels(int left, int top, int width, int height,
    66                             GrPixelConfig config,
    67                             void* buffer,
    68                             size_t rowBytes = 0,
    69                             uint32_t pixelOpsFlags = 0) SK_OVERRIDE;
    71     virtual void writePixels(int left, int top, int width, int height,
    72                              GrPixelConfig config,
    73                              const void* buffer,
    74                              size_t rowBytes = 0,
    75                              uint32_t pixelOpsFlags = 0) SK_OVERRIDE;
    77     /**
    78      * @return this texture
    79      */
    80     virtual GrTexture* asTexture() SK_OVERRIDE { return this; }
    81     virtual const GrTexture* asTexture() const SK_OVERRIDE { return this; }
    83     /**
    84      * Retrieves the render target underlying this texture that can be passed to
    85      * GrGpu::setRenderTarget().
    86      *
    87      * @return    handle to render target or NULL if the texture is not a
    88      *            render target
    89      */
    90     virtual GrRenderTarget* asRenderTarget() SK_OVERRIDE {
    91         return fRenderTarget.get();
    92     }
    93     virtual const GrRenderTarget* asRenderTarget() const SK_OVERRIDE {
    94         return fRenderTarget.get();
    95     }
    97     // GrTexture
    98     /**
    99      * Convert from texels to normalized texture coords for POT textures
   100      * only.
   101      */
   102     GrFixed normalizeFixedX(GrFixed x) const {
   103         SkASSERT(GrIsPow2(fDesc.fWidth));
   104         return x >> fShiftFixedX;
   105     }
   106     GrFixed normalizeFixedY(GrFixed y) const {
   107         SkASSERT(GrIsPow2(fDesc.fHeight));
   108         return y >> fShiftFixedY;
   109     }
   111     /**
   112      *  Return the native ID or handle to the texture, depending on the
   113      *  platform. e.g. on OpenGL, return the texture ID.
   114      */
   115     virtual GrBackendObject getTextureHandle() const = 0;
   117     /**
   118      *  Call this when the state of the native API texture object is
   119      *  altered directly, without being tracked by skia.
   120      */
   121     virtual void invalidateCachedState() = 0;
   123 #ifdef SK_DEBUG
   124     void validate() const {
   125         this->INHERITED::validate();
   127         this->validateDesc();
   128     }
   129 #endif
   131     static GrResourceKey ComputeKey(const GrGpu* gpu,
   132                                     const GrTextureParams* params,
   133                                     const GrTextureDesc& desc,
   134                                     const GrCacheID& cacheID);
   135     static GrResourceKey ComputeScratchKey(const GrTextureDesc& desc);
   136     static bool NeedsResizing(const GrResourceKey& key);
   137     static bool NeedsBilerp(const GrResourceKey& key);
   139 protected:
   140     // A texture refs its rt representation but not vice-versa. It is up to
   141     // the subclass constructor to initialize this pointer.
   142     SkAutoTUnref<GrRenderTarget> fRenderTarget;
   144     GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc)
   145     : INHERITED(gpu, isWrapped, desc)
   146     , fRenderTarget(NULL)
   147     , fMipMapsDirty(true) {
   149         // only make sense if alloc size is pow2
   150         fShiftFixedX = 31 - SkCLZ(fDesc.fWidth);
   151         fShiftFixedY = 31 - SkCLZ(fDesc.fHeight);
   152     }
   153     virtual ~GrTexture();
   155     // GrResource overrides
   156     virtual void onRelease() SK_OVERRIDE;
   157     virtual void onAbandon() SK_OVERRIDE;
   159     void validateDesc() const;
   161 private:
   162     // these two shift a fixed-point value into normalized coordinates
   163     // for this texture if the texture is power of two sized.
   164     int                 fShiftFixedX;
   165     int                 fShiftFixedY;
   167     bool                fMipMapsDirty;
   169     virtual void internal_dispose() const SK_OVERRIDE;
   171     typedef GrSurface INHERITED;
   172 };
   174 /**
   175  * Represents a texture that is intended to be accessed in device coords with an offset.
   176  */
   177 class GrDeviceCoordTexture {
   178 public:
   179     GrDeviceCoordTexture() { fOffset.set(0, 0); }
   181     GrDeviceCoordTexture(const GrDeviceCoordTexture& other) {
   182         *this = other;
   183     }
   185     GrDeviceCoordTexture(GrTexture* texture, const SkIPoint& offset)
   186         : fTexture(SkSafeRef(texture))
   187         , fOffset(offset) {
   188     }
   190     GrDeviceCoordTexture& operator=(const GrDeviceCoordTexture& other) {
   191         fTexture.reset(SkSafeRef(other.fTexture.get()));
   192         fOffset = other.fOffset;
   193         return *this;
   194     }
   196     const SkIPoint& offset() const { return fOffset; }
   198     void setOffset(const SkIPoint& offset) { fOffset = offset; }
   199     void setOffset(int ox, int oy) { fOffset.set(ox, oy); }
   201     GrTexture* texture() const { return fTexture.get(); }
   203     GrTexture* setTexture(GrTexture* texture) {
   204         fTexture.reset(SkSafeRef(texture));
   205         return texture;
   206     }
   207 private:
   208     SkAutoTUnref<GrTexture> fTexture;
   209     SkIPoint                fOffset;
   210 };
   212 #endif

mercurial