1 /* 2 * Copyright 2016 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 */ 7 8 #ifndef GrGLOpsRenderPass_DEFINED 9 #define GrGLOpsRenderPass_DEFINED 10 11 #include "src/gpu/GrOpsRenderPass.h" 12 13 #include "src/gpu/GrOpFlushState.h" 14 #include "src/gpu/gl/GrGLGpu.h" 15 #include "src/gpu/gl/GrGLRenderTarget.h" 16 17 class GrGLGpu; 18 class GrGLRenderTarget; 19 20 class GrGLOpsRenderPass : public GrOpsRenderPass { 21 /** 22 * We do not actually buffer up draws or do any work in the this class for GL. Instead commands 23 * are immediately sent to the gpu to execute. Thus all the commands in this class are simply 24 * pass through functions to corresponding calls in the GrGLGpu class. 25 */ 26 public: GrGLOpsRenderPass(GrGLGpu * gpu)27 GrGLOpsRenderPass(GrGLGpu* gpu) : fGpu(gpu) {} 28 begin()29 void begin() override { 30 fGpu->beginCommandBuffer(fRenderTarget, fContentBounds, fOrigin, fColorLoadAndStoreInfo, 31 fStencilLoadAndStoreInfo); 32 } 33 end()34 void end() override { 35 fGpu->endCommandBuffer(fRenderTarget, fColorLoadAndStoreInfo, fStencilLoadAndStoreInfo); 36 } 37 insertEventMarker(const char * msg)38 void insertEventMarker(const char* msg) override { 39 fGpu->insertEventMarker(msg); 40 } 41 inlineUpload(GrOpFlushState * state,GrDeferredTextureUploadFn & upload)42 void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override { 43 state->doUpload(upload); 44 } 45 46 void set(GrRenderTarget*, const SkIRect& contentBounds, GrSurfaceOrigin, 47 const LoadAndStoreInfo&, const StencilLoadAndStoreInfo&); 48 reset()49 void reset() { 50 fRenderTarget = nullptr; 51 } 52 53 private: gpu()54 GrGpu* gpu() override { return fGpu; } 55 onDraw(const GrProgramInfo & programInfo,const GrMesh mesh[],int meshCount,const SkRect & bounds)56 void onDraw(const GrProgramInfo& programInfo, const GrMesh mesh[], int meshCount, 57 const SkRect& bounds) override { 58 fGpu->draw(fRenderTarget, programInfo, mesh, meshCount); 59 } 60 onClear(const GrFixedClip & clip,const SkPMColor4f & color)61 void onClear(const GrFixedClip& clip, const SkPMColor4f& color) override { 62 fGpu->clear(clip, color, fRenderTarget, fOrigin); 63 } 64 onClearStencilClip(const GrFixedClip & clip,bool insideStencilMask)65 void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override { 66 fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin); 67 } 68 69 GrGLGpu* fGpu; 70 SkIRect fContentBounds; 71 LoadAndStoreInfo fColorLoadAndStoreInfo; 72 StencilLoadAndStoreInfo fStencilLoadAndStoreInfo; 73 74 typedef GrOpsRenderPass INHERITED; 75 }; 76 77 #endif 78 79