Home | History | Annotate | Download | only in gpu
      1 
      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  */
      8 
      9 
     10 #include "GrRenderTarget.h"
     11 
     12 #include "GrContext.h"
     13 #include "GrGpu.h"
     14 #include "GrRenderTargetPriv.h"
     15 #include "GrStencilAttachment.h"
     16 
     17 void GrRenderTarget::discard() {
     18     // go through context so that all necessary flushing occurs
     19     GrContext* context = this->getContext();
     20     if (NULL == context) {
     21         return;
     22     }
     23     context->discardRenderTarget(this);
     24 }
     25 
     26 void GrRenderTarget::flagAsNeedingResolve(const SkIRect* rect) {
     27     if (kCanResolve_ResolveType == getResolveType()) {
     28         if (rect) {
     29             fResolveRect.join(*rect);
     30             if (!fResolveRect.intersect(0, 0, this->width(), this->height())) {
     31                 fResolveRect.setEmpty();
     32             }
     33         } else {
     34             fResolveRect.setLTRB(0, 0, this->width(), this->height());
     35         }
     36     }
     37 }
     38 
     39 void GrRenderTarget::overrideResolveRect(const SkIRect rect) {
     40     fResolveRect = rect;
     41     if (fResolveRect.isEmpty()) {
     42         fResolveRect.setLargestInverted();
     43     } else {
     44         if (!fResolveRect.intersect(0, 0, this->width(), this->height())) {
     45             fResolveRect.setLargestInverted();
     46         }
     47     }
     48 }
     49 
     50 void GrRenderTarget::onRelease() {
     51     this->renderTargetPriv().didAttachStencilAttachment(NULL);
     52 
     53     INHERITED::onRelease();
     54 }
     55 
     56 void GrRenderTarget::onAbandon() {
     57     this->renderTargetPriv().didAttachStencilAttachment(NULL);
     58 
     59     INHERITED::onAbandon();
     60 }
     61 
     62 ///////////////////////////////////////////////////////////////////////////////
     63 
     64 void GrRenderTargetPriv::didAttachStencilAttachment(GrStencilAttachment* stencilAttachment) {
     65     SkRefCnt_SafeAssign(fRenderTarget->fStencilAttachment, stencilAttachment);
     66 }
     67 
     68 GrStencilAttachment* GrRenderTargetPriv::attachStencilAttachment() const {
     69     if (fRenderTarget->fStencilAttachment) {
     70         return fRenderTarget->fStencilAttachment;
     71     }
     72     if (!fRenderTarget->wasDestroyed() && fRenderTarget->canAttemptStencilAttachment()) {
     73         fRenderTarget->getGpu()->attachStencilAttachmentToRenderTarget(fRenderTarget);
     74     }
     75     return fRenderTarget->fStencilAttachment;
     76 }
     77