gfx/skia/trunk/src/gpu/gl/GrGLRenderTarget.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /*
     2  * Copyright 2011 Google Inc.
     3  *
     4  * Use of this source code is governed by a BSD-style license that can be
     5  * found in the LICENSE file.
     6  */
     9 #ifndef GrGLRenderTarget_DEFINED
    10 #define GrGLRenderTarget_DEFINED
    12 #include "GrGLIRect.h"
    13 #include "GrRenderTarget.h"
    14 #include "SkScalar.h"
    16 class GrGpuGL;
    17 class GrGLTexture;
    18 class GrGLTexID;
    20 class GrGLRenderTarget : public GrRenderTarget {
    22 public:
    23     // set fTexFBOID to this value to indicate that it is multisampled but
    24     // Gr doesn't know how to resolve it.
    25     enum { kUnresolvableFBOID = 0 };
    27     struct Desc {
    28         GrGLuint         fRTFBOID;
    29         GrGLuint         fTexFBOID;
    30         GrGLuint         fMSColorRenderbufferID;
    31         bool             fIsWrapped;
    32         GrPixelConfig    fConfig;
    33         int              fSampleCnt;
    34         GrSurfaceOrigin  fOrigin;
    35         bool             fCheckAllocation;
    36     };
    38     // creates a GrGLRenderTarget associated with a texture
    39     GrGLRenderTarget(GrGpuGL*          gpu,
    40                      const Desc&       desc,
    41                      const GrGLIRect&  viewport,
    42                      GrGLTexID*        texID,
    43                      GrGLTexture*      texture);
    45     // creates an independent GrGLRenderTarget
    46     GrGLRenderTarget(GrGpuGL*          gpu,
    47                      const Desc&       desc,
    48                      const GrGLIRect&  viewport);
    50     virtual ~GrGLRenderTarget() { this->release(); }
    52     void setViewport(const GrGLIRect& rect) { fViewport = rect; }
    53     const GrGLIRect& getViewport() const { return fViewport; }
    55     // The following two functions return the same ID when a
    56     // texture/render target is multisampled, and different IDs when
    57     // it is.
    58     // FBO ID used to render into
    59     GrGLuint renderFBOID() const { return fRTFBOID; }
    60     // FBO ID that has texture ID attached.
    61     GrGLuint textureFBOID() const { return fTexFBOID; }
    63     // override of GrRenderTarget
    64     virtual GrBackendObject getRenderTargetHandle() const {
    65         return this->renderFBOID();
    66     }
    67     virtual GrBackendObject getRenderTargetResolvedHandle() const {
    68         return this->textureFBOID();
    69     }
    70     virtual ResolveType getResolveType() const {
    72         if (!this->isMultisampled() ||
    73             fRTFBOID == fTexFBOID) {
    74             // catches FBO 0 and non MSAA case
    75             return kAutoResolves_ResolveType;
    76         } else if (kUnresolvableFBOID == fTexFBOID) {
    77             return kCantResolve_ResolveType;
    78         } else {
    79             return kCanResolve_ResolveType;
    80         }
    81     }
    83 protected:
    84     // override of GrResource
    85     virtual void onAbandon() SK_OVERRIDE;
    86     virtual void onRelease() SK_OVERRIDE;
    88 private:
    89     GrGLuint      fRTFBOID;
    90     GrGLuint      fTexFBOID;
    92     GrGLuint      fMSColorRenderbufferID;
    94     // when we switch to this render target we want to set the viewport to
    95     // only render to to content area (as opposed to the whole allocation) and
    96     // we want the rendering to be at top left (GL has origin in bottom left)
    97     GrGLIRect fViewport;
    99     // non-NULL if this RT was created by Gr with an associated GrGLTexture.
   100     SkAutoTUnref<GrGLTexID> fTexIDObj;
   102     void init(const Desc& desc, const GrGLIRect& viewport, GrGLTexID* texID);
   104     typedef GrRenderTarget INHERITED;
   105 };
   107 #endif

mercurial