diff options
Diffstat (limited to 'src/gpu/gl/GrGLGpu.h')
-rw-r--r-- | src/gpu/gl/GrGLGpu.h | 49 |
1 files changed, 15 insertions, 34 deletions
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h index 0ec69c0660..b93080b700 100644 --- a/src/gpu/gl/GrGLGpu.h +++ b/src/gpu/gl/GrGLGpu.h @@ -246,25 +246,9 @@ private: // ensures that such operations don't negatively interact with tracking bound textures. void setScratchTextureUnit(); - // Binds the render target, sets the viewport, tracks dirty are for resolve, and tracks whether - // mip maps need rebuilding. bounds is region that may be modified by the draw. NULL means whole - // target. Can be an empty rect. - void prepareToDrawToRenderTarget(GrGLRenderTarget*, const SkIRect* bounds); - - // On older GLs there may not be separate FBO bindings for draw and read. In that case these - // alias each other. - enum FBOBinding { - kDraw_FBOBinding, // drawing or dst of blit - kRead_FBOBinding, // src of blit, read pixels. - - kLast_FBOBinding = kRead_FBOBinding - }; - static const int kFBOBindingCnt = kLast_FBOBinding + 1; - - // binds the FBO and returns the GL enum of the framebuffer target it was bound to. - GrGLenum bindFBO(FBOBinding, const GrGLFBO*); - - void setViewport(const GrGLIRect& viewport); + // bounds is region that may be modified and therefore has to be resolved. + // NULL means whole target. Can be an empty rect. + void flushRenderTarget(GrGLRenderTarget*, const SkIRect* bounds); void flushStencil(const GrStencilSettings&); void flushHWAAState(GrRenderTarget* rt, bool useHWAA, bool isLineDraw); @@ -297,14 +281,15 @@ private: bool createRenderTargetObjects(const GrSurfaceDesc&, bool budgeted, GrGLuint texID, GrGLRenderTarget::IDDesc*); - static const FBOBinding kInvalidFBOBinding = static_cast<FBOBinding>(-1); + enum TempFBOTarget { + kSrc_TempFBOTarget, + kDst_TempFBOTarget + }; - // Binds a surface as an FBO. A temporary FBO ID may be used if the surface is not already - // a render target. Afterwards unbindSurfaceAsFBOForCopy must be called with the value returned. - FBOBinding bindSurfaceAsFBOForCopy(GrSurface*, FBOBinding, GrGLIRect* viewport); + GrGLuint bindSurfaceAsFBO(GrSurface* surface, GrGLenum fboTarget, GrGLIRect* viewport, + TempFBOTarget tempFBOTarget); - // Must be matched with bindSurfaceAsFBOForCopy. - void unbindSurfaceAsFBOForCopy(FBOBinding); + void unbindTextureFromFBO(GrGLenum fboTarget); GrGLContext fGLContext; @@ -324,9 +309,10 @@ private: kUnknown_TriState }; - SkAutoTUnref<GrGLFBO> fTempSrcFBO; - SkAutoTUnref<GrGLFBO> fTempDstFBO; - SkAutoTUnref<GrGLFBO> fStencilClearFBO; + GrGLuint fTempSrcFBOID; + GrGLuint fTempDstFBOID; + + GrGLuint fStencilClearFBOID; // last scissor / viewport scissor state seen by the GL. struct { @@ -472,14 +458,9 @@ private: GrPipelineBuilder::DrawFace fHWDrawFace; TriState fHWWriteToColor; TriState fHWDitherEnabled; + uint32_t fHWBoundRenderTargetUniqueID; SkTArray<uint32_t, true> fHWBoundTextureUniqueIDs; - // Track fbo binding state. - struct HWFBOBinding { - SkAutoTUnref<const GrGLFBO> fFBO; - void invalidate() { fFBO.reset(NULL); } - } fHWFBOBinding[kFBOBindingCnt]; - ///@} // we record what stencil format worked last time to hopefully exit early |