Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: src/gpu/GrDrawTarget.h

Issue 685883003: Clip in grdrawtarget (Closed) Base URL: https://skia.googlesource.com/skia.git@drawtarget_on_clip_manager
Patch Set: dm cleaned up Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 475
476 /** 476 /**
477 * Release any resources that are cached but not currently in use. This 477 * Release any resources that are cached but not currently in use. This
478 * is intended to give an application some recourse when resources are low. 478 * is intended to give an application some recourse when resources are low.
479 */ 479 */
480 virtual void purgeResources() {}; 480 virtual void purgeResources() {};
481 481
482 /** 482 /**
483 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo w. 483 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo w.
484 */ 484 */
485 void executeDraw(const DrawInfo& info) { this->onDraw(info); } 485 void executeDraw(const DrawInfo& info,
486 const GrClipMaskManager::ScissorState& scissorState) {
487 this->onDraw(info, scissorState);
488 }
489
490 /**
491 * For subclass internal use to invoke a call to onStencilPath().
492 */
493 void executeStencilPath(const GrPath* path,
494 const GrClipMaskManager::ScissorState& scissorState,
495 const GrStencilSettings& stencilSettings) {
496 this->onStencilPath(path, scissorState, stencilSettings);
497 }
486 498
487 /** 499 /**
488 * For subclass internal use to invoke a call to onDrawPath(). 500 * For subclass internal use to invoke a call to onDrawPath().
489 */ 501 */
490 void executeDrawPath(const GrPath* path, GrPathRendering::FillType fill, 502 void executeDrawPath(const GrPath* path,
503 const GrClipMaskManager::ScissorState& scissorState,
504 const GrStencilSettings& stencilSettings,
491 const GrDeviceCoordTexture* dstCopy) { 505 const GrDeviceCoordTexture* dstCopy) {
492 this->onDrawPath(path, fill, dstCopy); 506 this->onDrawPath(path, scissorState, stencilSettings, dstCopy);
493 } 507 }
494 508
495 /** 509 /**
496 * For subclass internal use to invoke a call to onDrawPaths(). 510 * For subclass internal use to invoke a call to onDrawPaths().
497 */ 511 */
498 void executeDrawPaths(const GrPathRange* pathRange, 512 void executeDrawPaths(const GrPathRange* pathRange,
499 const uint32_t indices[], int count, 513 const uint32_t indices[],
500 const float transforms[], PathTransformType transforms Type, 514 int count,
501 GrPathRendering::FillType fill, 515 const float transforms[],
516 PathTransformType transformsType,
517 const GrClipMaskManager::ScissorState& scissorState,
518 const GrStencilSettings& stencilSettings,
502 const GrDeviceCoordTexture* dstCopy) { 519 const GrDeviceCoordTexture* dstCopy) {
503 this->onDrawPaths(pathRange, indices, count, transforms, transformsType, fill, dstCopy); 520 this->onDrawPaths(pathRange, indices, count, transforms, transformsType,
521 scissorState, stencilSettings, dstCopy);
504 } 522 }
505 523
506 //////////////////////////////////////////////////////////////////////////// 524 ////////////////////////////////////////////////////////////////////////////
507 525
508 /** 526 /**
509 * See AutoStateRestore below. 527 * See AutoStateRestore below.
510 */ 528 */
511 enum ASRInit { 529 enum ASRInit {
512 kPreserve_ASRInit, 530 kPreserve_ASRInit,
513 kReset_ASRInit 531 kReset_ASRInit
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 bool isIssued() { return fDrawTarget && fDrawTarget->isIssued(fDrawID); } 702 bool isIssued() { return fDrawTarget && fDrawTarget->isIssued(fDrawID); }
685 703
686 private: 704 private:
687 GrDrawTarget* fDrawTarget; 705 GrDrawTarget* fDrawTarget;
688 uint32_t fDrawID; // this may wrap, but we're doing direct compa rison 706 uint32_t fDrawID; // this may wrap, but we're doing direct compa rison
689 // so that should be okay 707 // so that should be okay
690 }; 708 };
691 709
692 virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); } 710 virtual DrawToken getCurrentDrawToken() { return DrawToken(this, 0); }
693 711
712
713 bool programUnitTest(int maxStages);
714
694 protected: 715 protected:
695 // Extend access to GrDrawState::convertToPEndeingExec to subclasses. 716 // Extend access to GrDrawState::convertToPEndeingExec to subclasses.
696 void convertDrawStateToPendingExec(GrDrawState* ds) { 717 void convertDrawStateToPendingExec(GrDrawState* ds) {
697 ds->convertToPendingExec(); 718 ds->convertToPendingExec();
698 } 719 }
699 720
700 enum GeometrySrcType { 721 enum GeometrySrcType {
701 kNone_GeometrySrcType, //<! src has not been specified 722 kNone_GeometrySrcType, //<! src has not been specified
702 kReserved_GeometrySrcType, //<! src was set using reserve*Space 723 kReserved_GeometrySrcType, //<! src was set using reserve*Space
703 kArray_GeometrySrcType, //<! src was set using set*SourceToArray 724 kArray_GeometrySrcType, //<! src was set using set*SourceToArray
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 // subclass must consume array contents when set 877 // subclass must consume array contents when set
857 virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCou nt) = 0; 878 virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCou nt) = 0;
858 virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) = 0; 879 virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) = 0;
859 // subclass is notified that geom source will be set away from an array 880 // subclass is notified that geom source will be set away from an array
860 virtual void releaseVertexArray() = 0; 881 virtual void releaseVertexArray() = 0;
861 virtual void releaseIndexArray() = 0; 882 virtual void releaseIndexArray() = 0;
862 // subclass overrides to be notified just before geo src state is pushed/pop ped. 883 // subclass overrides to be notified just before geo src state is pushed/pop ped.
863 virtual void geometrySourceWillPush() = 0; 884 virtual void geometrySourceWillPush() = 0;
864 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) = 0; 885 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) = 0;
865 // subclass called to perform drawing 886 // subclass called to perform drawing
866 virtual void onDraw(const DrawInfo&) = 0; 887 virtual void onDraw(const DrawInfo&, const GrClipMaskManager::ScissorState&) = 0;
867 // Implementation of drawRect. The geometry src and vertex attribs will alre ady 888 // Implementation of drawRect. The geometry src and vertex attribs will alre ady
868 // be saved before this is called and restored afterwards. A subclass may ov erride 889 // be saved before this is called and restored afterwards. A subclass may ov erride
869 // this to perform more optimal rect rendering. Its draws should be funneled through 890 // this to perform more optimal rect rendering. Its draws should be funneled through
870 // one of the public GrDrawTarget draw methods (e.g. drawNonIndexed, 891 // one of the public GrDrawTarget draw methods (e.g. drawNonIndexed,
871 // drawIndexedInstances, ...). The base class draws a two triangle fan using 892 // drawIndexedInstances, ...). The base class draws a two triangle fan using
872 // drawNonIndexed from reserved vertex space. 893 // drawNonIndexed from reserved vertex space.
873 virtual void onDrawRect(const SkRect& rect, 894 virtual void onDrawRect(const SkRect& rect,
874 const SkRect* localRect, 895 const SkRect* localRect,
875 const SkMatrix* localMatrix); 896 const SkMatrix* localMatrix);
876 897
877 virtual void onStencilPath(const GrPath*, GrPathRendering::FillType) = 0; 898 virtual void onStencilPath(const GrPath*,
878 virtual void onDrawPath(const GrPath*, GrPathRendering::FillType, 899 const GrClipMaskManager::ScissorState&,
900 const GrStencilSettings&) = 0;
901 virtual void onDrawPath(const GrPath*,
902 const GrClipMaskManager::ScissorState&,
903 const GrStencilSettings&,
879 const GrDeviceCoordTexture* dstCopy) = 0; 904 const GrDeviceCoordTexture* dstCopy) = 0;
880 virtual void onDrawPaths(const GrPathRange*, 905 virtual void onDrawPaths(const GrPathRange*,
881 const uint32_t indices[], int count, 906 const uint32_t indices[],
882 const float transforms[], PathTransformType, 907 int count,
883 GrPathRendering::FillType, const GrDeviceCoordTextu re*) = 0; 908 const float transforms[],
909 PathTransformType,
910 const GrClipMaskManager::ScissorState&,
911 const GrStencilSettings&,
912 const GrDeviceCoordTexture*) = 0;
884 913
885 virtual void didAddGpuTraceMarker() = 0; 914 virtual void didAddGpuTraceMarker() = 0;
886 virtual void didRemoveGpuTraceMarker() = 0; 915 virtual void didRemoveGpuTraceMarker() = 0;
887 916
888 // helpers for reserving vertex and index space. 917 // helpers for reserving vertex and index space.
889 bool reserveVertexSpace(size_t vertexSize, 918 bool reserveVertexSpace(size_t vertexSize,
890 int vertexCount, 919 int vertexCount,
891 void** vertices); 920 void** vertices);
892 bool reserveIndexSpace(int indexCount, void** indices); 921 bool reserveIndexSpace(int indexCount, void** indices);
893 922
894 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to 923 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to
895 // indicate non-indexed drawing. 924 // indicate non-indexed drawing.
896 bool checkDraw(GrPrimitiveType type, int startVertex, 925 bool checkDraw(GrPrimitiveType type, int startVertex,
897 int startIndex, int vertexCount, 926 int startIndex, int vertexCount,
898 int indexCount) const; 927 int indexCount) const;
899 // called when setting a new vert/idx source to unref prev vb/ib 928 // called when setting a new vert/idx source to unref prev vb/ib
900 void releasePreviousVertexSource(); 929 void releasePreviousVertexSource();
901 void releasePreviousIndexSource(); 930 void releasePreviousIndexSource();
902 931
903 // Check to see if this set of draw commands has been sent out 932 // Check to see if this set of draw commands has been sent out
904 virtual bool isIssued(uint32_t drawID) { return true; } 933 virtual bool isIssued(uint32_t drawID) { return true; }
934 void getPathStencilSettingsForFilltype(GrPathRendering::FillType, GrStencilS ettings*);
905 virtual GrClipMaskManager* clipMaskManager() = 0; 935 virtual GrClipMaskManager* clipMaskManager() = 0;
936 virtual bool setupClip(const SkRect* devBounds,
937 GrDrawState::AutoRestoreEffects* are,
938 GrDrawState::AutoRestoreStencil* ars,
939 GrClipMaskManager::ScissorState* scissorState) = 0;
906 940
907 enum { 941 enum {
908 kPreallocGeoSrcStateStackCnt = 4, 942 kPreallocGeoSrcStateStackCnt = 4,
909 }; 943 };
910 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState Stack; 944 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState Stack;
911 const GrClipData* fClip; 945 const GrClipData* fClip;
912 GrDrawState* fDrawState; 946 GrDrawState* fDrawState;
913 GrDrawState fDefaultDraw State; 947 GrDrawState fDefaultDraw State;
914 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get. 948 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get.
915 GrContext* fContext; 949 GrContext* fContext;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 // get rid of them all. 987 // get rid of them all.
954 fClipMaskManager.purgeResources(); 988 fClipMaskManager.purgeResources();
955 }; 989 };
956 990
957 protected: 991 protected:
958 GrClipMaskManager fClipMaskManager; 992 GrClipMaskManager fClipMaskManager;
959 993
960 private: 994 private:
961 GrClipMaskManager* clipMaskManager() { return &fClipMaskManager; } 995 GrClipMaskManager* clipMaskManager() { return &fClipMaskManager; }
962 996
997 virtual bool setupClip(const SkRect* devBounds,
998 GrDrawState::AutoRestoreEffects* are,
999 GrDrawState::AutoRestoreStencil* ars,
1000 GrClipMaskManager::ScissorState* scissorState) SK_OVE RRIDE;
1001
963 typedef GrDrawTarget INHERITED; 1002 typedef GrDrawTarget INHERITED;
964 }; 1003 };
965 1004
966 #endif 1005 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698