OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrDrawTarget_DEFINED | 8 #ifndef GrDrawTarget_DEFINED |
9 #define GrDrawTarget_DEFINED | 9 #define GrDrawTarget_DEFINED |
10 | 10 |
11 #include "GrClip.h" | 11 #include "GrClip.h" |
12 #include "GrClipMaskManager.h" | 12 #include "GrClipMaskManager.h" |
13 #include "GrContext.h" | 13 #include "GrContext.h" |
14 #include "GrPathProcessor.h" | 14 #include "GrPathProcessor.h" |
15 #include "GrPrimitiveProcessor.h" | 15 #include "GrPrimitiveProcessor.h" |
16 #include "GrIndexBuffer.h" | 16 #include "GrIndexBuffer.h" |
17 #include "GrPathRendering.h" | 17 #include "GrPathRendering.h" |
18 #include "GrPipelineBuilder.h" | 18 #include "GrPipelineBuilder.h" |
| 19 #include "GrPipeline.h" |
19 #include "GrTraceMarker.h" | 20 #include "GrTraceMarker.h" |
20 #include "GrVertexBuffer.h" | 21 #include "GrVertexBuffer.h" |
21 #include "GrXferProcessor.h" | 22 #include "GrXferProcessor.h" |
22 | 23 |
23 #include "SkClipStack.h" | 24 #include "SkClipStack.h" |
24 #include "SkMatrix.h" | 25 #include "SkMatrix.h" |
25 #include "SkPath.h" | 26 #include "SkPath.h" |
26 #include "SkStrokeRec.h" | 27 #include "SkStrokeRec.h" |
27 #include "SkTArray.h" | 28 #include "SkTArray.h" |
28 #include "SkTLazy.h" | 29 #include "SkTLazy.h" |
29 #include "SkTypes.h" | 30 #include "SkTypes.h" |
30 #include "SkXfermode.h" | 31 #include "SkXfermode.h" |
31 | 32 |
32 class GrClip; | 33 class GrClip; |
33 class GrCaps; | 34 class GrCaps; |
34 class GrPath; | 35 class GrPath; |
35 class GrPathRange; | 36 class GrPathRange; |
36 class GrPipeline; | |
37 | 37 |
38 class GrDrawTarget : public SkRefCnt { | 38 class GrDrawTarget : public SkRefCnt { |
39 public: | 39 public: |
40 | 40 |
41 | 41 |
42 typedef GrPathRange::PathIndexType PathIndexType; | 42 typedef GrPathRange::PathIndexType PathIndexType; |
43 typedef GrPathRendering::PathTransformType PathTransformType; | 43 typedef GrPathRendering::PathTransformType PathTransformType; |
44 | 44 |
45 /////////////////////////////////////////////////////////////////////////// | 45 /////////////////////////////////////////////////////////////////////////// |
46 | 46 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 const SkIRect& srcRect, | 193 const SkIRect& srcRect, |
194 const SkIPoint& dstPoint); | 194 const SkIPoint& dstPoint); |
195 /** | 195 /** |
196 * Release any resources that are cached but not currently in use. This | 196 * Release any resources that are cached but not currently in use. This |
197 * is intended to give an application some recourse when resources are low. | 197 * is intended to give an application some recourse when resources are low. |
198 */ | 198 */ |
199 virtual void purgeResources() {}; | 199 virtual void purgeResources() {}; |
200 | 200 |
201 bool programUnitTest(GrContext* owner, int maxStages); | 201 bool programUnitTest(GrContext* owner, int maxStages); |
202 | 202 |
| 203 struct PipelineInfo { |
| 204 PipelineInfo(const GrPipelineBuilder* pipelineBuilder, const GrScissorSt
ate* scissor, |
| 205 const GrPrimitiveProcessor* primProc, |
| 206 const SkRect* devBounds, GrDrawTarget* target); |
| 207 |
| 208 PipelineInfo(const GrPipelineBuilder* pipelineBuilder, const GrScissorSt
ate* scissor, |
| 209 const GrBatch* batch, const SkRect* devBounds, |
| 210 GrDrawTarget* target); |
| 211 |
| 212 bool valid() const { return SkToBool(fArgs.fPipelineBuilder); } |
| 213 |
| 214 const GrPipeline::CreateArgs& pipelineCreateArgs() const { |
| 215 SkASSERT(this->valid()); |
| 216 return fArgs; |
| 217 } |
| 218 |
| 219 bool willColorBlendWithDst(const GrPrimitiveProcessor* primProc) const { |
| 220 SkASSERT(this->valid()); |
| 221 return fArgs.fPipelineBuilder->willColorBlendWithDst(primProc); |
| 222 } |
| 223 private: |
| 224 GrPipeline::CreateArgs fArgs; |
| 225 }; |
| 226 |
203 protected: | 227 protected: |
204 friend class GrCommandBuilder; // for PipelineInfo | |
205 friend class GrInOrderCommandBuilder; // for PipelineInfo | |
206 friend class GrReorderCommandBuilder; // for PipelineInfo | |
207 friend class GrTargetCommands; // for PipelineInfo | |
208 | 228 |
209 GrGpu* getGpu() { return fGpu; } | 229 GrGpu* getGpu() { return fGpu; } |
210 const GrGpu* getGpu() const { return fGpu; } | 230 const GrGpu* getGpu() const { return fGpu; } |
211 | 231 |
212 const GrTraceMarkerSet& getActiveTraceMarkers() { return fActiveTraceMarkers
; } | 232 const GrTraceMarkerSet& getActiveTraceMarkers() { return fActiveTraceMarkers
; } |
213 | 233 |
214 // Makes a copy of the dst if it is necessary for the draw. Returns false if
a copy is required | 234 // Makes a copy of the dst if it is necessary for the draw. Returns false if
a copy is required |
215 // but couldn't be made. Otherwise, returns true. This method needs to be p
rotected because it | 235 // but couldn't be made. Otherwise, returns true. This method needs to be p
rotected because it |
216 // needs to be accessed by GLPrograms to setup a correct drawstate | 236 // needs to be accessed by GLPrograms to setup a correct drawstate |
217 bool setupDstReadIfNecessary(const GrPipelineBuilder&, | 237 bool setupDstReadIfNecessary(const GrPipelineBuilder&, |
218 const GrProcOptInfo& colorPOI, | 238 const GrProcOptInfo& colorPOI, |
219 const GrProcOptInfo& coveragePOI, | 239 const GrProcOptInfo& coveragePOI, |
220 GrXferProcessor::DstTexture*, | 240 GrXferProcessor::DstTexture*, |
221 const SkRect* drawBounds); | 241 const SkRect* drawBounds); |
222 | 242 |
223 struct PipelineInfo { | |
224 PipelineInfo(const GrPipelineBuilder& pipelineBuilder, GrScissorState* s
cissor, | |
225 const GrPrimitiveProcessor* primProc, | |
226 const SkRect* devBounds, GrDrawTarget* target); | |
227 | |
228 PipelineInfo(const GrPipelineBuilder& pipelineBuilder, GrScissorState* s
cissor, | |
229 const GrBatch* batch, const SkRect* devBounds, | |
230 GrDrawTarget* target); | |
231 | |
232 bool willColorBlendWithDst(const GrPrimitiveProcessor* primProc) const { | |
233 return fPipelineBuilder->willColorBlendWithDst(primProc); | |
234 } | |
235 private: | |
236 friend class GrDrawTarget; | |
237 | |
238 bool mustSkipDraw() const { return (NULL == fPipelineBuilder); } | |
239 | |
240 const GrPipelineBuilder* fPipelineBuilder; | |
241 GrScissorState* fScissor; | |
242 GrProcOptInfo fColorPOI; | |
243 GrProcOptInfo fCoveragePOI; | |
244 GrXferProcessor::DstTexture fDstTexture; | |
245 }; | |
246 | |
247 const GrPipeline* setupPipeline(const PipelineInfo&, void* pipelineAddr, | |
248 GrPipelineOptimizations*); | |
249 | |
250 private: | 243 private: |
251 virtual void onReset() = 0; | 244 virtual void onReset() = 0; |
252 | 245 |
253 virtual void onFlush() = 0; | 246 virtual void onFlush() = 0; |
254 | 247 |
255 virtual void onDrawBatch(GrBatch*, const PipelineInfo&) = 0; | 248 virtual void onDrawBatch(GrBatch*) = 0; |
256 virtual void onStencilPath(const GrPipelineBuilder&, | 249 virtual void onStencilPath(const GrPipelineBuilder&, |
257 const GrPathProcessor*, | 250 const GrPathProcessor*, |
258 const GrPath*, | 251 const GrPath*, |
259 const GrScissorState&, | 252 const GrScissorState&, |
260 const GrStencilSettings&) = 0; | 253 const GrStencilSettings&) = 0; |
261 virtual void onDrawPath(const GrPathProcessor*, | 254 virtual void onDrawPath(const GrPathProcessor*, |
262 const GrPath*, | 255 const GrPath*, |
263 const GrStencilSettings&, | 256 const GrStencilSettings&, |
264 const PipelineInfo&) = 0; | 257 const PipelineInfo&) = 0; |
265 virtual void onDrawPaths(const GrPathProcessor*, | 258 virtual void onDrawPaths(const GrPathProcessor*, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 bool setupClip(const GrPipelineBuilder&, | 335 bool setupClip(const GrPipelineBuilder&, |
343 GrPipelineBuilder::AutoRestoreFragmentProcessorState*, | 336 GrPipelineBuilder::AutoRestoreFragmentProcessorState*, |
344 GrPipelineBuilder::AutoRestoreStencil*, | 337 GrPipelineBuilder::AutoRestoreStencil*, |
345 GrScissorState* scissorState, | 338 GrScissorState* scissorState, |
346 const SkRect* devBounds) override; | 339 const SkRect* devBounds) override; |
347 | 340 |
348 typedef GrDrawTarget INHERITED; | 341 typedef GrDrawTarget INHERITED; |
349 }; | 342 }; |
350 | 343 |
351 #endif | 344 #endif |
OLD | NEW |