OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 GrGpu_DEFINED | 8 #ifndef GrGpu_DEFINED |
9 #define GrGpu_DEFINED | 9 #define GrGpu_DEFINED |
10 | 10 |
11 #include "GrDrawTarget.h" | 11 #include "GrDrawTarget.h" |
12 #include "GrClipMaskManager.h" | 12 #include "GrClipMaskManager.h" |
13 #include "SkPath.h" | 13 #include "SkPath.h" |
14 | 14 |
15 class GrContext; | 15 class GrContext; |
16 class GrGpuObject; | 16 class GrGpuObject; |
17 class GrIndexBufferAllocPool; | 17 class GrIndexBufferAllocPool; |
18 class GrPath; | 18 class GrPath; |
| 19 class GrPathRange; |
19 class GrPathRenderer; | 20 class GrPathRenderer; |
20 class GrPathRendererChain; | 21 class GrPathRendererChain; |
21 class GrStencilBuffer; | 22 class GrStencilBuffer; |
22 class GrVertexBufferAllocPool; | 23 class GrVertexBufferAllocPool; |
23 | 24 |
24 class GrGpu : public GrDrawTarget { | 25 class GrGpu : public GrDrawTarget { |
25 public: | 26 public: |
26 | 27 |
27 /** | 28 /** |
28 * Additional blend coefficients for dual source blending, not exposed | 29 * Additional blend coefficients for dual source blending, not exposed |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 */ | 132 */ |
132 GrIndexBuffer* createIndexBuffer(size_t size, bool dynamic); | 133 GrIndexBuffer* createIndexBuffer(size_t size, bool dynamic); |
133 | 134 |
134 /** | 135 /** |
135 * Creates a path object that can be stenciled using stencilPath(). It is | 136 * Creates a path object that can be stenciled using stencilPath(). It is |
136 * only legal to call this if the caps report support for path stenciling. | 137 * only legal to call this if the caps report support for path stenciling. |
137 */ | 138 */ |
138 GrPath* createPath(const SkPath& path, const SkStrokeRec& stroke); | 139 GrPath* createPath(const SkPath& path, const SkStrokeRec& stroke); |
139 | 140 |
140 /** | 141 /** |
| 142 * Creates a path range object that can be used to draw multiple paths via |
| 143 * drawPaths(). It is only legal to call this if the caps report support for |
| 144 * path rendering. |
| 145 */ |
| 146 GrPathRange* createPathRange(size_t size, const SkStrokeRec&); |
| 147 |
| 148 /** |
141 * Returns an index buffer that can be used to render quads. | 149 * Returns an index buffer that can be used to render quads. |
142 * Six indices per quad: 0, 1, 2, 0, 2, 3, etc. | 150 * Six indices per quad: 0, 1, 2, 0, 2, 3, etc. |
143 * The max number of quads can be queried using GrIndexBuffer::maxQuads(). | 151 * The max number of quads can be queried using GrIndexBuffer::maxQuads(). |
144 * Draw with kTriangles_GrPrimitiveType | 152 * Draw with kTriangles_GrPrimitiveType |
145 * @ return the quad index buffer | 153 * @ return the quad index buffer |
146 */ | 154 */ |
147 const GrIndexBuffer* getQuadIndexBuffer() const; | 155 const GrIndexBuffer* getQuadIndexBuffer() const; |
148 | 156 |
149 /** | 157 /** |
150 * Resolves MSAA. | 158 * Resolves MSAA. |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 virtual GrTexture* onCreateTexture(const GrTextureDesc& desc, | 433 virtual GrTexture* onCreateTexture(const GrTextureDesc& desc, |
426 const void* srcData, | 434 const void* srcData, |
427 size_t rowBytes) = 0; | 435 size_t rowBytes) = 0; |
428 virtual GrTexture* onCreateCompressedTexture(const GrTextureDesc& desc, | 436 virtual GrTexture* onCreateCompressedTexture(const GrTextureDesc& desc, |
429 const void* srcData) = 0; | 437 const void* srcData) = 0; |
430 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) = 0; | 438 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) = 0; |
431 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge
tDesc&) = 0; | 439 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge
tDesc&) = 0; |
432 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0; | 440 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0; |
433 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0; | 441 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0; |
434 virtual GrPath* onCreatePath(const SkPath& path, const SkStrokeRec&) = 0; | 442 virtual GrPath* onCreatePath(const SkPath& path, const SkStrokeRec&) = 0; |
| 443 virtual GrPathRange* onCreatePathRange(size_t size, const SkStrokeRec&) = 0; |
435 | 444 |
436 // overridden by backend-specific derived class to perform the clear and | 445 // overridden by backend-specific derived class to perform the clear and |
437 // clearRect. NULL rect means clear whole target. If canIgnoreRect is | 446 // clearRect. NULL rect means clear whole target. If canIgnoreRect is |
438 // true, it is okay to perform a full clear instead of a partial clear | 447 // true, it is okay to perform a full clear instead of a partial clear |
439 virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect)
= 0; | 448 virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect)
= 0; |
440 | 449 |
441 // overridden by backend-specific derived class to perform the draw call. | 450 // overridden by backend-specific derived class to perform the draw call. |
442 virtual void onGpuDraw(const DrawInfo&) = 0; | 451 virtual void onGpuDraw(const DrawInfo&) = 0; |
443 | 452 |
444 // overridden by backend-specific derived class to perform the path stencili
ng. | 453 // overridden by backend-specific derived class to perform the path stencili
ng. |
445 virtual void onGpuStencilPath(const GrPath*, SkPath::FillType) = 0; | 454 virtual void onGpuStencilPath(const GrPath*, SkPath::FillType) = 0; |
446 virtual void onGpuDrawPath(const GrPath*, SkPath::FillType) = 0; | 455 virtual void onGpuDrawPath(const GrPath*, SkPath::FillType) = 0; |
447 virtual void onGpuDrawPaths(int, const GrPath**, const SkMatrix*, | 456 virtual void onGpuDrawPaths(const GrPathRange*, |
448 SkPath::FillType, SkStrokeRec::Style) = 0; | 457 const uint32_t indices[], int count, |
| 458 const float transforms[], PathTransformType, |
| 459 SkPath::FillType) = 0; |
449 | 460 |
450 // overridden by backend-specific derived class to perform the read pixels. | 461 // overridden by backend-specific derived class to perform the read pixels. |
451 virtual bool onReadPixels(GrRenderTarget* target, | 462 virtual bool onReadPixels(GrRenderTarget* target, |
452 int left, int top, int width, int height, | 463 int left, int top, int width, int height, |
453 GrPixelConfig, | 464 GrPixelConfig, |
454 void* buffer, | 465 void* buffer, |
455 size_t rowBytes) = 0; | 466 size_t rowBytes) = 0; |
456 | 467 |
457 // overridden by backend-specific derived class to perform the texture updat
e | 468 // overridden by backend-specific derived class to perform the texture updat
e |
458 virtual bool onWriteTexturePixels(GrTexture* texture, | 469 virtual bool onWriteTexturePixels(GrTexture* texture, |
(...skipping 22 matching lines...) Expand all Loading... |
481 virtual void clearStencil() = 0; | 492 virtual void clearStencil() = 0; |
482 | 493 |
483 // Given a rt, find or create a stencil buffer and attach it | 494 // Given a rt, find or create a stencil buffer and attach it |
484 bool attachStencilBufferToRenderTarget(GrRenderTarget* target); | 495 bool attachStencilBufferToRenderTarget(GrRenderTarget* target); |
485 | 496 |
486 // GrDrawTarget overrides | 497 // GrDrawTarget overrides |
487 virtual void onDraw(const DrawInfo&) SK_OVERRIDE; | 498 virtual void onDraw(const DrawInfo&) SK_OVERRIDE; |
488 virtual void onStencilPath(const GrPath*, SkPath::FillType) SK_OVERRIDE; | 499 virtual void onStencilPath(const GrPath*, SkPath::FillType) SK_OVERRIDE; |
489 virtual void onDrawPath(const GrPath*, SkPath::FillType, | 500 virtual void onDrawPath(const GrPath*, SkPath::FillType, |
490 const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; | 501 const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; |
491 virtual void onDrawPaths(int, const GrPath**, const SkMatrix*, | 502 virtual void onDrawPaths(const GrPathRange*, |
492 SkPath::FillType, SkStrokeRec::Style, | 503 const uint32_t indices[], int count, |
493 const GrDeviceCoordTexture* dstCopy) SK_OVERRIDE; | 504 const float transforms[], PathTransformType, |
| 505 SkPath::FillType, const GrDeviceCoordTexture*) SK_O
VERRIDE; |
494 | 506 |
495 // readies the pools to provide vertex/index data. | 507 // readies the pools to provide vertex/index data. |
496 void prepareVertexPool(); | 508 void prepareVertexPool(); |
497 void prepareIndexPool(); | 509 void prepareIndexPool(); |
498 | 510 |
499 void resetContext() { | 511 void resetContext() { |
500 // We call this because the client may have messed with the | 512 // We call this because the client may have messed with the |
501 // stencil buffer. Perhaps we should detect whether it is a | 513 // stencil buffer. Perhaps we should detect whether it is a |
502 // internally created stencil buffer and if so skip the invalidate. | 514 // internally created stencil buffer and if so skip the invalidate. |
503 fClipMaskManager.invalidateStencilMask(); | 515 fClipMaskManager.invalidateStencilMask(); |
(...skipping 23 matching lines...) Expand all Loading... |
527 // these are mutable so they can be created on-demand | 539 // these are mutable so they can be created on-demand |
528 mutable GrIndexBuffer* fQuadInd
exBuffer; | 540 mutable GrIndexBuffer* fQuadInd
exBuffer; |
529 // Used to abandon/release all resources created by this GrGpu. TODO: Move t
his | 541 // Used to abandon/release all resources created by this GrGpu. TODO: Move t
his |
530 // functionality to GrResourceCache. | 542 // functionality to GrResourceCache. |
531 ObjectList fObjectL
ist; | 543 ObjectList fObjectL
ist; |
532 | 544 |
533 typedef GrDrawTarget INHERITED; | 545 typedef GrDrawTarget INHERITED; |
534 }; | 546 }; |
535 | 547 |
536 #endif | 548 #endif |
OLD | NEW |