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

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

Issue 13314002: Add support for reading the dst pixel value in an effect. Use in a new effect for the kDarken xfer … (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Revert whitespace/comment changes accidentally made in GrGLProgramDesc.cpp Created 7 years, 8 months 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 | Annotate | Revision Log
« no previous file with comments | « src/core/SkXfermode.cpp ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef GrDrawTarget_DEFINED 10 #ifndef GrDrawTarget_DEFINED
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 void adjustStartVertex(int vertexOffset); 648 void adjustStartVertex(int vertexOffset);
649 // shifts the start index 649 // shifts the start index
650 void adjustStartIndex(int indexOffset); 650 void adjustStartIndex(int indexOffset);
651 651
652 void setDevBounds(const SkRect& bounds) { 652 void setDevBounds(const SkRect& bounds) {
653 fDevBoundsStorage = bounds; 653 fDevBoundsStorage = bounds;
654 fDevBounds = &fDevBoundsStorage; 654 fDevBounds = &fDevBoundsStorage;
655 } 655 }
656 const SkRect* getDevBounds() const { return fDevBounds; } 656 const SkRect* getDevBounds() const { return fDevBounds; }
657 657
658 // NULL if no copy of the dst is needed for the draw.
659 const GrDeviceCoordTexture* getDstCopy() const {
660 if (NULL != fDstCopy.texture()) {
661 return &fDstCopy;
662 } else {
663 return NULL;
664 }
665 }
666
658 private: 667 private:
659 DrawInfo() { fDevBounds = NULL; } 668 DrawInfo() { fDevBounds = NULL; }
660 669
661 friend class GrDrawTarget; 670 friend class GrDrawTarget;
662 671
663 GrPrimitiveType fPrimitiveType; 672 GrPrimitiveType fPrimitiveType;
664 673
665 int fStartVertex; 674 int fStartVertex;
666 int fStartIndex; 675 int fStartIndex;
667 int fVertexCount; 676 int fVertexCount;
668 int fIndexCount; 677 int fIndexCount;
669 678
670 int fInstanceCount; 679 int fInstanceCount;
671 int fVerticesPerInstance; 680 int fVerticesPerInstance;
672 int fIndicesPerInstance; 681 int fIndicesPerInstance;
673 682
674 SkRect fDevBoundsStorage; 683 SkRect fDevBoundsStorage;
675 SkRect* fDevBounds; 684 SkRect* fDevBounds;
685
686 GrDeviceCoordTexture fDstCopy;
676 }; 687 };
677 688
678 private: 689 private:
679 // A subclass can optionally overload this function to be notified before 690 // A subclass can optionally overload this function to be notified before
680 // vertex and index space is reserved. 691 // vertex and index space is reserved.
681 virtual void willReserveVertexAndIndexSpace(int vertexCount, int indexCount) {} 692 virtual void willReserveVertexAndIndexSpace(int vertexCount, int indexCount) {}
682 693
683 // implemented by subclass to allocate space for reserved geom 694 // implemented by subclass to allocate space for reserved geom
684 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void** vertices) = 0; 695 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void** vertices) = 0;
685 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0; 696 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0;
(...skipping 21 matching lines...) Expand all
707 718
708 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to 719 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to
709 // indicate non-indexed drawing. 720 // indicate non-indexed drawing.
710 bool checkDraw(GrPrimitiveType type, int startVertex, 721 bool checkDraw(GrPrimitiveType type, int startVertex,
711 int startIndex, int vertexCount, 722 int startIndex, int vertexCount,
712 int indexCount) const; 723 int indexCount) const;
713 // called when setting a new vert/idx source to unref prev vb/ib 724 // called when setting a new vert/idx source to unref prev vb/ib
714 void releasePreviousVertexSource(); 725 void releasePreviousVertexSource();
715 void releasePreviousIndexSource(); 726 void releasePreviousIndexSource();
716 727
728 // Makes a copy of the dst if it is necessary for the draw. Returns false if a copy is required
729 // but couldn't be made. Otherwise, returns true.
730 bool setupDstReadIfNecessary(DrawInfo* info);
731
717 enum { 732 enum {
718 kPreallocGeoSrcStateStackCnt = 4, 733 kPreallocGeoSrcStateStackCnt = 4,
719 }; 734 };
720 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState Stack; 735 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState Stack;
721 const GrClipData* fClip; 736 const GrClipData* fClip;
722 GrDrawState* fDrawState; 737 GrDrawState* fDrawState;
723 GrDrawState fDefaultDraw State; 738 GrDrawState fDefaultDraw State;
724 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get. 739 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get.
725 GrContext* fContext; 740 GrContext* fContext;
726 741
727 typedef GrRefCnt INHERITED; 742 typedef GrRefCnt INHERITED;
728 }; 743 };
729 744
730 #endif 745 #endif
OLDNEW
« no previous file with comments | « src/core/SkXfermode.cpp ('k') | src/gpu/GrDrawTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698