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