| 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 |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 | 456 |
| 457 /** | 457 /** |
| 458 * Release any resources that are cached but not currently in use. This | 458 * Release any resources that are cached but not currently in use. This |
| 459 * is intended to give an application some recourse when resources are low. | 459 * is intended to give an application some recourse when resources are low. |
| 460 */ | 460 */ |
| 461 virtual void purgeResources() {}; | 461 virtual void purgeResources() {}; |
| 462 | 462 |
| 463 /** | 463 /** |
| 464 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo
w. | 464 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo
w. |
| 465 */ | 465 */ |
| 466 void executeDraw(const DrawInfo& info) { this->onDraw(info); } | 466 void executeDraw(const DrawInfo& info, |
| 467 const GrClipMaskManager::ScissorState& scissorState) { |
| 468 this->onDraw(info, scissorState); |
| 469 } |
| 470 |
| 471 /** |
| 472 * For subclass internal use to invoke a call to onStencilPath(). |
| 473 */ |
| 474 void executeStencilPath(const GrPath* path, |
| 475 const GrClipMaskManager::ScissorState& scissorState, |
| 476 const GrStencilSettings& stencilSettings) { |
| 477 this->onStencilPath(path, scissorState, stencilSettings); |
| 478 } |
| 467 | 479 |
| 468 /** | 480 /** |
| 469 * For subclass internal use to invoke a call to onDrawPath(). | 481 * For subclass internal use to invoke a call to onDrawPath(). |
| 470 */ | 482 */ |
| 471 void executeDrawPath(const GrPath* path, GrPathRendering::FillType fill, | 483 void executeDrawPath(const GrPath* path, |
| 484 const GrClipMaskManager::ScissorState& scissorState, |
| 485 const GrStencilSettings& stencilSettings, |
| 472 const GrDeviceCoordTexture* dstCopy) { | 486 const GrDeviceCoordTexture* dstCopy) { |
| 473 this->onDrawPath(path, fill, dstCopy); | 487 this->onDrawPath(path, scissorState, stencilSettings, dstCopy); |
| 474 } | 488 } |
| 475 | 489 |
| 476 /** | 490 /** |
| 477 * For subclass internal use to invoke a call to onDrawPaths(). | 491 * For subclass internal use to invoke a call to onDrawPaths(). |
| 478 */ | 492 */ |
| 479 void executeDrawPaths(const GrPathRange* pathRange, | 493 void executeDrawPaths(const GrPathRange* pathRange, |
| 480 const uint32_t indices[], int count, | 494 const uint32_t indices[], |
| 481 const float transforms[], PathTransformType transforms
Type, | 495 int count, |
| 482 GrPathRendering::FillType fill, | 496 const float transforms[], |
| 497 PathTransformType transformsType, |
| 498 const GrClipMaskManager::ScissorState& scissorState, |
| 499 const GrStencilSettings& stencilSettings, |
| 483 const GrDeviceCoordTexture* dstCopy) { | 500 const GrDeviceCoordTexture* dstCopy) { |
| 484 this->onDrawPaths(pathRange, indices, count, transforms, transformsType,
fill, dstCopy); | 501 this->onDrawPaths(pathRange, indices, count, transforms, transformsType, |
| 502 scissorState, stencilSettings, dstCopy); |
| 485 } | 503 } |
| 486 | 504 |
| 487 //////////////////////////////////////////////////////////////////////////// | 505 //////////////////////////////////////////////////////////////////////////// |
| 488 | 506 |
| 489 /** | 507 /** |
| 490 * See AutoStateRestore below. | 508 * See AutoStateRestore below. |
| 491 */ | 509 */ |
| 492 enum ASRInit { | 510 enum ASRInit { |
| 493 kPreserve_ASRInit, | 511 kPreserve_ASRInit, |
| 494 kReset_ASRInit | 512 kReset_ASRInit |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 bool isIssued() { return fDrawTarget && fDrawTarget->isIssued(fDrawID);
} | 683 bool isIssued() { return fDrawTarget && fDrawTarget->isIssued(fDrawID);
} |
| 666 | 684 |
| 667 private: | 685 private: |
| 668 GrDrawTarget* fDrawTarget; | 686 GrDrawTarget* fDrawTarget; |
| 669 uint32_t fDrawID; // this may wrap, but we're doing direct compa
rison | 687 uint32_t fDrawID; // this may wrap, but we're doing direct compa
rison |
| 670 // so that should be okay | 688 // so that should be okay |
| 671 }; | 689 }; |
| 672 | 690 |
| 673 virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); } | 691 virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); } |
| 674 | 692 |
| 693 |
| 694 bool programUnitTest(int maxStages); |
| 695 |
| 675 protected: | 696 protected: |
| 676 // Extend access to GrDrawState::convertToPEndeingExec to subclasses. | 697 // Extend access to GrDrawState::convertToPEndeingExec to subclasses. |
| 677 void convertDrawStateToPendingExec(GrDrawState* ds) { | 698 void convertDrawStateToPendingExec(GrDrawState* ds) { |
| 678 ds->convertToPendingExec(); | 699 ds->convertToPendingExec(); |
| 679 } | 700 } |
| 680 | 701 |
| 681 enum GeometrySrcType { | 702 enum GeometrySrcType { |
| 682 kNone_GeometrySrcType, //<! src has not been specified | 703 kNone_GeometrySrcType, //<! src has not been specified |
| 683 kReserved_GeometrySrcType, //<! src was set using reserve*Space | 704 kReserved_GeometrySrcType, //<! src was set using reserve*Space |
| 684 kBuffer_GeometrySrcType //<! src was set using set*SourceToBuffer | 705 kBuffer_GeometrySrcType //<! src was set using set*SourceToBuffer |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 // implemented by subclass to allocate space for reserved geom | 850 // implemented by subclass to allocate space for reserved geom |
| 830 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void**
vertices) = 0; | 851 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void**
vertices) = 0; |
| 831 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0; | 852 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0; |
| 832 // implemented by subclass to handle release of reserved geom space | 853 // implemented by subclass to handle release of reserved geom space |
| 833 virtual void releaseReservedVertexSpace() = 0; | 854 virtual void releaseReservedVertexSpace() = 0; |
| 834 virtual void releaseReservedIndexSpace() = 0; | 855 virtual void releaseReservedIndexSpace() = 0; |
| 835 // subclass overrides to be notified just before geo src state is pushed/pop
ped. | 856 // subclass overrides to be notified just before geo src state is pushed/pop
ped. |
| 836 virtual void geometrySourceWillPush() = 0; | 857 virtual void geometrySourceWillPush() = 0; |
| 837 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) =
0; | 858 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) =
0; |
| 838 // subclass called to perform drawing | 859 // subclass called to perform drawing |
| 839 virtual void onDraw(const DrawInfo&) = 0; | 860 virtual void onDraw(const DrawInfo&, const GrClipMaskManager::ScissorState&)
= 0; |
| 840 // Implementation of drawRect. The geometry src and vertex attribs will alre
ady | 861 // Implementation of drawRect. The geometry src and vertex attribs will alre
ady |
| 841 // be saved before this is called and restored afterwards. A subclass may ov
erride | 862 // be saved before this is called and restored afterwards. A subclass may ov
erride |
| 842 // this to perform more optimal rect rendering. Its draws should be funneled
through | 863 // this to perform more optimal rect rendering. Its draws should be funneled
through |
| 843 // one of the public GrDrawTarget draw methods (e.g. drawNonIndexed, | 864 // one of the public GrDrawTarget draw methods (e.g. drawNonIndexed, |
| 844 // drawIndexedInstances, ...). The base class draws a two triangle fan using | 865 // drawIndexedInstances, ...). The base class draws a two triangle fan using |
| 845 // drawNonIndexed from reserved vertex space. | 866 // drawNonIndexed from reserved vertex space. |
| 846 virtual void onDrawRect(const SkRect& rect, | 867 virtual void onDrawRect(const SkRect& rect, |
| 847 const SkRect* localRect, | 868 const SkRect* localRect, |
| 848 const SkMatrix* localMatrix); | 869 const SkMatrix* localMatrix); |
| 849 | 870 |
| 850 virtual void onStencilPath(const GrPath*, GrPathRendering::FillType) = 0; | 871 virtual void onStencilPath(const GrPath*, |
| 851 virtual void onDrawPath(const GrPath*, GrPathRendering::FillType, | 872 const GrClipMaskManager::ScissorState&, |
| 873 const GrStencilSettings&) = 0; |
| 874 virtual void onDrawPath(const GrPath*, |
| 875 const GrClipMaskManager::ScissorState&, |
| 876 const GrStencilSettings&, |
| 852 const GrDeviceCoordTexture* dstCopy) = 0; | 877 const GrDeviceCoordTexture* dstCopy) = 0; |
| 853 virtual void onDrawPaths(const GrPathRange*, | 878 virtual void onDrawPaths(const GrPathRange*, |
| 854 const uint32_t indices[], int count, | 879 const uint32_t indices[], |
| 855 const float transforms[], PathTransformType, | 880 int count, |
| 856 GrPathRendering::FillType, const GrDeviceCoordTextu
re*) = 0; | 881 const float transforms[], |
| 882 PathTransformType, |
| 883 const GrClipMaskManager::ScissorState&, |
| 884 const GrStencilSettings&, |
| 885 const GrDeviceCoordTexture*) = 0; |
| 857 | 886 |
| 858 virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect, | 887 virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect, |
| 859 GrRenderTarget* renderTarget) = 0; | 888 GrRenderTarget* renderTarget) = 0; |
| 860 | 889 |
| 861 | 890 |
| 862 virtual void didAddGpuTraceMarker() = 0; | 891 virtual void didAddGpuTraceMarker() = 0; |
| 863 virtual void didRemoveGpuTraceMarker() = 0; | 892 virtual void didRemoveGpuTraceMarker() = 0; |
| 864 | 893 |
| 865 // helpers for reserving vertex and index space. | 894 // helpers for reserving vertex and index space. |
| 866 bool reserveVertexSpace(size_t vertexSize, | 895 bool reserveVertexSpace(size_t vertexSize, |
| 867 int vertexCount, | 896 int vertexCount, |
| 868 void** vertices); | 897 void** vertices); |
| 869 bool reserveIndexSpace(int indexCount, void** indices); | 898 bool reserveIndexSpace(int indexCount, void** indices); |
| 870 | 899 |
| 871 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to | 900 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to |
| 872 // indicate non-indexed drawing. | 901 // indicate non-indexed drawing. |
| 873 bool checkDraw(GrPrimitiveType type, int startVertex, | 902 bool checkDraw(GrPrimitiveType type, int startVertex, |
| 874 int startIndex, int vertexCount, | 903 int startIndex, int vertexCount, |
| 875 int indexCount) const; | 904 int indexCount) const; |
| 876 // called when setting a new vert/idx source to unref prev vb/ib | 905 // called when setting a new vert/idx source to unref prev vb/ib |
| 877 void releasePreviousVertexSource(); | 906 void releasePreviousVertexSource(); |
| 878 void releasePreviousIndexSource(); | 907 void releasePreviousIndexSource(); |
| 879 | 908 |
| 880 // Check to see if this set of draw commands has been sent out | 909 // Check to see if this set of draw commands has been sent out |
| 881 virtual bool isIssued(uint32_t drawID) { return true; } | 910 virtual bool isIssued(uint32_t drawID) { return true; } |
| 911 void getPathStencilSettingsForFilltype(GrPathRendering::FillType, GrStencilS
ettings*); |
| 882 virtual GrClipMaskManager* clipMaskManager() = 0; | 912 virtual GrClipMaskManager* clipMaskManager() = 0; |
| 913 virtual bool setupClip(const SkRect* devBounds, |
| 914 GrDrawState::AutoRestoreEffects* are, |
| 915 GrDrawState::AutoRestoreStencil* ars, |
| 916 GrClipMaskManager::ScissorState* scissorState) = 0; |
| 883 | 917 |
| 884 enum { | 918 enum { |
| 885 kPreallocGeoSrcStateStackCnt = 4, | 919 kPreallocGeoSrcStateStackCnt = 4, |
| 886 }; | 920 }; |
| 887 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; | 921 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; |
| 888 const GrClipData* fClip; | 922 const GrClipData* fClip; |
| 889 GrDrawState* fDrawState; | 923 GrDrawState* fDrawState; |
| 890 GrDrawState fDefaultDraw
State; | 924 GrDrawState fDefaultDraw
State; |
| 891 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. | 925 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. |
| 892 GrContext* fContext; | 926 GrContext* fContext; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 930 // get rid of them all. | 964 // get rid of them all. |
| 931 fClipMaskManager.purgeResources(); | 965 fClipMaskManager.purgeResources(); |
| 932 }; | 966 }; |
| 933 | 967 |
| 934 protected: | 968 protected: |
| 935 GrClipMaskManager fClipMaskManager; | 969 GrClipMaskManager fClipMaskManager; |
| 936 | 970 |
| 937 private: | 971 private: |
| 938 GrClipMaskManager* clipMaskManager() { return &fClipMaskManager; } | 972 GrClipMaskManager* clipMaskManager() { return &fClipMaskManager; } |
| 939 | 973 |
| 974 virtual bool setupClip(const SkRect* devBounds, |
| 975 GrDrawState::AutoRestoreEffects* are, |
| 976 GrDrawState::AutoRestoreStencil* ars, |
| 977 GrClipMaskManager::ScissorState* scissorState) SK_OVE
RRIDE; |
| 978 |
| 940 typedef GrDrawTarget INHERITED; | 979 typedef GrDrawTarget INHERITED; |
| 941 }; | 980 }; |
| 942 | 981 |
| 943 #endif | 982 #endif |
| OLD | NEW |