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 GrGLGpuCommandBuffer_DEFINED 9 #define GrGLGpuCommandBuffer_DEFINED 10 11 #include "GrGpuCommandBuffer.h" 12 13 #include "GrGLGpu.h" 14 #include "GrGLRenderTarget.h" 15 #include "GrOpFlushState.h" 16 17 class GrGLGpu; 18 class GrGLRenderTarget; 19 20 class GrGLGpuTextureCommandBuffer : public GrGpuTextureCommandBuffer { 21 public: GrGLGpuTextureCommandBuffer(GrGLGpu * gpu,GrTexture * texture,GrSurfaceOrigin origin)22 GrGLGpuTextureCommandBuffer(GrGLGpu* gpu, GrTexture* texture, GrSurfaceOrigin origin) 23 : INHERITED(texture, origin) 24 , fGpu(gpu) { 25 } 26 ~GrGLGpuTextureCommandBuffer()27 ~GrGLGpuTextureCommandBuffer() override {} 28 submit()29 void submit() override {} 30 copy(GrSurface * src,GrSurfaceOrigin srcOrigin,const SkIRect & srcRect,const SkIPoint & dstPoint)31 void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect, 32 const SkIPoint& dstPoint) override { 33 fGpu->copySurface(fTexture, fOrigin, src, srcOrigin, srcRect, dstPoint); 34 } 35 insertEventMarker(const char * msg)36 void insertEventMarker(const char* msg) override { 37 fGpu->insertEventMarker(msg); 38 } 39 40 private: 41 GrGLGpu* fGpu; 42 43 typedef GrGpuTextureCommandBuffer INHERITED; 44 }; 45 46 class GrGLGpuRTCommandBuffer : public GrGpuRTCommandBuffer { 47 /** 48 * We do not actually buffer up draws or do any work in the this class for GL. Instead commands 49 * are immediately sent to the gpu to execute. Thus all the commands in this class are simply 50 * pass through functions to corresponding calls in the GrGLGpu class. 51 */ 52 public: GrGLGpuRTCommandBuffer(GrGLGpu * gpu,GrRenderTarget * rt,GrSurfaceOrigin origin,const GrGpuRTCommandBuffer::LoadAndStoreInfo & colorInfo,const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo & stencilInfo)53 GrGLGpuRTCommandBuffer(GrGLGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, 54 const GrGpuRTCommandBuffer::LoadAndStoreInfo& colorInfo, 55 const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo& stencilInfo) 56 : INHERITED(rt, origin) 57 , fGpu(gpu) 58 , fColorLoadAndStoreInfo(colorInfo) 59 , fStencilLoadAndStoreInfo(stencilInfo) { 60 } 61 ~GrGLGpuRTCommandBuffer()62 ~GrGLGpuRTCommandBuffer() override {} 63 64 void begin() override; end()65 void end() override {} 66 discard()67 void discard() override { } 68 insertEventMarker(const char * msg)69 void insertEventMarker(const char* msg) override { 70 fGpu->insertEventMarker(msg); 71 } 72 inlineUpload(GrOpFlushState * state,GrDeferredTextureUploadFn & upload)73 void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override { 74 state->doUpload(upload); 75 } 76 copy(GrSurface * src,GrSurfaceOrigin srcOrigin,const SkIRect & srcRect,const SkIPoint & dstPoint)77 void copy(GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect, 78 const SkIPoint& dstPoint) override { 79 fGpu->copySurface(fRenderTarget, fOrigin, src, srcOrigin, srcRect, dstPoint); 80 } 81 submit()82 void submit() override {} 83 84 private: gpu()85 GrGpu* gpu() override { return fGpu; } 86 onDraw(const GrPipeline & pipeline,const GrPrimitiveProcessor & primProc,const GrMesh mesh[],const GrPipeline::DynamicState dynamicStates[],int meshCount,const SkRect & bounds)87 void onDraw(const GrPipeline& pipeline, 88 const GrPrimitiveProcessor& primProc, 89 const GrMesh mesh[], 90 const GrPipeline::DynamicState dynamicStates[], 91 int meshCount, 92 const SkRect& bounds) override { 93 SkASSERT(pipeline.renderTarget() == fRenderTarget); 94 fGpu->draw(pipeline, primProc, mesh, dynamicStates, meshCount); 95 } 96 onClear(const GrFixedClip & clip,GrColor color)97 void onClear(const GrFixedClip& clip, GrColor color) override { 98 fGpu->clear(clip, color, fRenderTarget, fOrigin); 99 } 100 onClearStencilClip(const GrFixedClip & clip,bool insideStencilMask)101 void onClearStencilClip(const GrFixedClip& clip, bool insideStencilMask) override { 102 fGpu->clearStencilClip(clip, insideStencilMask, fRenderTarget, fOrigin); 103 } 104 105 GrGLGpu* fGpu; 106 GrGpuRTCommandBuffer::LoadAndStoreInfo fColorLoadAndStoreInfo; 107 GrGpuRTCommandBuffer::StencilLoadAndStoreInfo fStencilLoadAndStoreInfo; 108 109 typedef GrGpuRTCommandBuffer INHERITED; 110 }; 111 112 #endif 113 114