Chromium Code Reviews| Index: src/gpu/gl/GrGLGpu.h |
| diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h |
| index b93080b70037d2b5a624b0b9996dc7b798adad12..62c21f8c080d4bebdd5f3f17128d52ba15311920 100644 |
| --- a/src/gpu/gl/GrGLGpu.h |
| +++ b/src/gpu/gl/GrGLGpu.h |
| @@ -246,9 +246,26 @@ private: |
| // ensures that such operations don't negatively interact with tracking bound textures. |
| void setScratchTextureUnit(); |
| - // 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); |
| + // Enumerates the reasons for binding an FBO. |
| + enum FBOBinding { |
| + kDraw_FBOBinding, |
| + kClear_FBOBinding, |
| + kDiscard_FBOBinding, |
| + kChangeAttachments_FBOBinding, |
| + kReadPixels_FBOBinding, |
| + kBlitSrc_FBOBinding, |
| + kBlitDst_FBOBinding, |
| + }; |
| + |
| + // binds the FBO and returns the GL enum of the framebuffer target it was bound to. |
| + GrGLenum bindFBO(FBOBinding, const GrGLFBO*); |
| + |
| + // Tracks dirty area for resolve, and tracks whether mip maps need rebuilding. bounds is the |
| + // region that may be modified. NULL means whole surface. Can be an empty rect. |
| + void markSurfaceContentsDirty(GrSurface*, const SkIRect* bounds); |
| + |
| + void setViewport(const GrGLIRect& viewport); |
| + |
|
egdaniel
2015/03/17 17:44:58
extra \n
|
| void flushStencil(const GrStencilSettings&); |
| void flushHWAAState(GrRenderTarget* rt, bool useHWAA, bool isLineDraw); |
| @@ -281,15 +298,14 @@ private: |
| bool createRenderTargetObjects(const GrSurfaceDesc&, bool budgeted, GrGLuint texID, |
| GrGLRenderTarget::IDDesc*); |
| - enum TempFBOTarget { |
| - kSrc_TempFBOTarget, |
| - kDst_TempFBOTarget |
| - }; |
| + static const FBOBinding kInvalidFBOBinding = static_cast<FBOBinding>(-1); |
| - GrGLuint bindSurfaceAsFBO(GrSurface* surface, GrGLenum fboTarget, GrGLIRect* viewport, |
| - TempFBOTarget 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); |
| - void unbindTextureFromFBO(GrGLenum fboTarget); |
| + // Must be matched with bindSurfaceAsFBOForCopy. |
| + void unbindSurfaceAsFBOForCopy(FBOBinding); |
| GrGLContext fGLContext; |
| @@ -309,10 +325,9 @@ private: |
| kUnknown_TriState |
| }; |
| - GrGLuint fTempSrcFBOID; |
| - GrGLuint fTempDstFBOID; |
| - |
| - GrGLuint fStencilClearFBOID; |
| + SkAutoTUnref<GrGLFBO> fTempSrcFBO; |
| + SkAutoTUnref<GrGLFBO> fTempDstFBO; |
| + SkAutoTUnref<GrGLFBO> fStencilClearFBO; |
| // last scissor / viewport scissor state seen by the GL. |
| struct { |
| @@ -458,9 +473,14 @@ private: |
| GrPipelineBuilder::DrawFace fHWDrawFace; |
| TriState fHWWriteToColor; |
| TriState fHWDitherEnabled; |
| - uint32_t fHWBoundRenderTargetUniqueID; |
| SkTArray<uint32_t, true> fHWBoundTextureUniqueIDs; |
| + // Track fbo binding state for GL_DRAW_FRAMEBUFFER and GL_READ_FRAMEBUFFER |
| + struct HWFBOBinding { |
| + SkAutoTUnref<const GrGLFBO> fFBO; |
| + void invalidate() { fFBO.reset(NULL); } |
| + } fHWFBOBinding[2]; |
| + |
| ///@} |
| // we record what stencil format worked last time to hopefully exit early |