| 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 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 * Copies a pixel rectangle from one surface to another. This call may final
ize | 449 * Copies a pixel rectangle from one surface to another. This call may final
ize |
| 450 * reserved vertex/index data (as though a draw call was made). The src pixe
ls | 450 * reserved vertex/index data (as though a draw call was made). The src pixe
ls |
| 451 * copied are specified by srcRect. They are copied to a rect of the same | 451 * copied are specified by srcRect. They are copied to a rect of the same |
| 452 * size in dst with top left at dstPoint. If the src rect is clipped by the | 452 * size in dst with top left at dstPoint. If the src rect is clipped by the |
| 453 * src bounds then pixel values in the dst rect corresponding to area clipp
ed | 453 * src bounds then pixel values in the dst rect corresponding to area clipp
ed |
| 454 * by the src rect are not overwritten. This method can fail and return fals
e | 454 * by the src rect are not overwritten. This method can fail and return fals
e |
| 455 * depending on the type of surface, configs, etc, and the backend-specific | 455 * depending on the type of surface, configs, etc, and the backend-specific |
| 456 * limitations. If rect is clipped out entirely by the src or dst bounds the
n | 456 * limitations. If rect is clipped out entirely by the src or dst bounds the
n |
| 457 * true is returned since there is no actual copy necessary to succeed. | 457 * true is returned since there is no actual copy necessary to succeed. |
| 458 */ | 458 */ |
| 459 bool copySurface(GrSurface* dst, | 459 virtual bool copySurface(GrSurface* dst, |
| 460 GrSurface* src, | 460 GrSurface* src, |
| 461 const SkIRect& srcRect, | 461 const SkIRect& srcRect, |
| 462 const SkIPoint& dstPoint); | 462 const SkIPoint& dstPoint); |
| 463 /** | 463 /** |
| 464 * Function that determines whether a copySurface call would succeed without | 464 * Function that determines whether a copySurface call would succeed without |
| 465 * performing the copy. | 465 * performing the copy. |
| 466 */ | 466 */ |
| 467 bool canCopySurface(GrSurface* dst, | 467 virtual bool canCopySurface(GrSurface* dst, |
| 468 GrSurface* src, | 468 GrSurface* src, |
| 469 const SkIRect& srcRect, | 469 const SkIRect& srcRect, |
| 470 const SkIPoint& dstPoint); | 470 const SkIPoint& dstPoint); |
| 471 | 471 |
| 472 /** | 472 /** |
| 473 * This is can be called before allocating a texture to be a dst for copySur
face. It will | 473 * This is can be called before allocating a texture to be a dst for copySur
face. It will |
| 474 * populate the origin, config, and flags fields of the desc such that copyS
urface is more | 474 * populate the origin, config, and flags fields of the desc such that copyS
urface is more |
| 475 * likely to succeed and be efficient. | 475 * likely to succeed and be efficient. |
| 476 */ | 476 */ |
| 477 virtual void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* des
c); | 477 virtual void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* des
c); |
| 478 | 478 |
| 479 | 479 |
| 480 /** | 480 /** |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 case kArray_GeometrySrcType: | 737 case kArray_GeometrySrcType: |
| 738 return src.fIndexCount; | 738 return src.fIndexCount; |
| 739 case kBuffer_GeometrySrcType: | 739 case kBuffer_GeometrySrcType: |
| 740 return static_cast<int>(src.fIndexBuffer->gpuMemorySize() / size
of(uint16_t)); | 740 return static_cast<int>(src.fIndexBuffer->gpuMemorySize() / size
of(uint16_t)); |
| 741 default: | 741 default: |
| 742 SkFAIL("Unexpected Index Source."); | 742 SkFAIL("Unexpected Index Source."); |
| 743 return 0; | 743 return 0; |
| 744 } | 744 } |
| 745 } | 745 } |
| 746 | 746 |
| 747 // This method is called by copySurface The srcRect is guaranteed to be ent
irely within the | |
| 748 // src bounds. Likewise, the dst rect implied by dstPoint and srcRect's widt
h and height falls | |
| 749 // entirely within the dst. The default implementation will draw a rect from
the src to the | |
| 750 // dst if the src is a texture and the dst is a render target and fail other
wise. | |
| 751 virtual bool onCopySurface(GrSurface* dst, | |
| 752 GrSurface* src, | |
| 753 const SkIRect& srcRect, | |
| 754 const SkIPoint& dstPoint); | |
| 755 | |
| 756 // Called to determine whether an onCopySurface call would succeed or not. T
his is useful for | |
| 757 // proxy subclasses to test whether the copy would succeed without executing
it yet. Derived | |
| 758 // classes must keep this consistent with their implementation of onCopySurf
ace(). The inputs | |
| 759 // are the same as onCopySurface(), i.e. srcRect and dstPoint are clipped to
be inside the src | |
| 760 // and dst bounds. | |
| 761 virtual bool onCanCopySurface(GrSurface* dst, | |
| 762 GrSurface* src, | |
| 763 const SkIRect& srcRect, | |
| 764 const SkIPoint& dstPoint); | |
| 765 | |
| 766 GrContext* getContext() { return fContext; } | 747 GrContext* getContext() { return fContext; } |
| 767 const GrContext* getContext() const { return fContext; } | 748 const GrContext* getContext() const { return fContext; } |
| 768 | 749 |
| 769 // A subclass may override this function if it wishes to be notified when th
e clip is changed. | 750 // A subclass may override this function if it wishes to be notified when th
e clip is changed. |
| 770 // The override should call INHERITED::clipWillBeSet(). | 751 // The override should call INHERITED::clipWillBeSet(). |
| 771 virtual void clipWillBeSet(const GrClipData* clipData); | 752 virtual void clipWillBeSet(const GrClipData* clipData); |
| 772 | 753 |
| 773 // subclasses must call this in their destructors to ensure all vertex | 754 // subclasses must call this in their destructors to ensure all vertex |
| 774 // and index sources have been released (including those held by | 755 // and index sources have been released (including those held by |
| 775 // pushGeometrySource()) | 756 // pushGeometrySource()) |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 918 // indicate non-indexed drawing. | 899 // indicate non-indexed drawing. |
| 919 bool checkDraw(GrPrimitiveType type, int startVertex, | 900 bool checkDraw(GrPrimitiveType type, int startVertex, |
| 920 int startIndex, int vertexCount, | 901 int startIndex, int vertexCount, |
| 921 int indexCount) const; | 902 int indexCount) const; |
| 922 // called when setting a new vert/idx source to unref prev vb/ib | 903 // called when setting a new vert/idx source to unref prev vb/ib |
| 923 void releasePreviousVertexSource(); | 904 void releasePreviousVertexSource(); |
| 924 void releasePreviousIndexSource(); | 905 void releasePreviousIndexSource(); |
| 925 | 906 |
| 926 // Check to see if this set of draw commands has been sent out | 907 // Check to see if this set of draw commands has been sent out |
| 927 virtual bool isIssued(uint32_t drawID) { return true; } | 908 virtual bool isIssued(uint32_t drawID) { return true; } |
| 928 virtual GrClipMaskManager* getClipMaskManager() = 0; | 909 virtual GrClipMaskManager* clipMaskManager() = 0; |
| 929 | 910 |
| 930 enum { | 911 enum { |
| 931 kPreallocGeoSrcStateStackCnt = 4, | 912 kPreallocGeoSrcStateStackCnt = 4, |
| 932 }; | 913 }; |
| 933 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; | 914 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; |
| 934 const GrClipData* fClip; | 915 const GrClipData* fClip; |
| 935 GrDrawState* fDrawState; | 916 GrDrawState* fDrawState; |
| 936 GrDrawState fDefaultDraw
State; | 917 GrDrawState fDefaultDraw
State; |
| 937 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. | 918 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. |
| 938 GrContext* fContext; | 919 GrContext* fContext; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 virtual void purgeResources() SK_OVERRIDE { | 955 virtual void purgeResources() SK_OVERRIDE { |
| 975 // The clip mask manager can rebuild all its clip masks so just | 956 // The clip mask manager can rebuild all its clip masks so just |
| 976 // get rid of them all. | 957 // get rid of them all. |
| 977 fClipMaskManager.purgeResources(); | 958 fClipMaskManager.purgeResources(); |
| 978 }; | 959 }; |
| 979 | 960 |
| 980 protected: | 961 protected: |
| 981 GrClipMaskManager fClipMaskManager; | 962 GrClipMaskManager fClipMaskManager; |
| 982 | 963 |
| 983 private: | 964 private: |
| 984 GrClipMaskManager* getClipMaskManager() { return &fClipMaskManager; } | 965 GrClipMaskManager* clipMaskManager() { return &fClipMaskManager; } |
| 985 | 966 |
| 986 typedef GrDrawTarget INHERITED; | 967 typedef GrDrawTarget INHERITED; |
| 987 }; | 968 }; |
| 988 | 969 |
| 989 #endif | 970 #endif |
| OLD | NEW |