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

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

Issue 761563002: First step to moving vertex attributes to the geometryProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: adding test to ignore Created 6 years 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
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.cpp ('k') | src/gpu/GrDrawState.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 * 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 GrDrawState_DEFINED 8 #ifndef GrDrawState_DEFINED
9 #define GrDrawState_DEFINED 9 #define GrDrawState_DEFINED
10 10
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 * GrDrawState encompasses more than GrPaint. Aspects of GrDrawState that ha ve no GrPaint 63 * GrDrawState encompasses more than GrPaint. Aspects of GrDrawState that ha ve no GrPaint
64 * equivalents are set to default values with the exception of vertex attrib ute state which 64 * equivalents are set to default values with the exception of vertex attrib ute state which
65 * is unmodified by this function and clipping which will be enabled. 65 * is unmodified by this function and clipping which will be enabled.
66 */ 66 */
67 void setFromPaint(const GrPaint& , const SkMatrix& viewMatrix, GrRenderTarge t*); 67 void setFromPaint(const GrPaint& , const SkMatrix& viewMatrix, GrRenderTarge t*);
68 68
69 /////////////////////////////////////////////////////////////////////////// 69 ///////////////////////////////////////////////////////////////////////////
70 /// @name Vertex Attributes 70 /// @name Vertex Attributes
71 //// 71 ////
72 72
73 enum { 73 // TODO when we move this info off of GrGeometryProcessor, delete these
74 kMaxVertexAttribCnt = kLast_GrVertexAttribBinding + 4,
75 };
76
77 const GrVertexAttrib* getVertexAttribs() const { return fVAPtr; }
78 int getVertexAttribCount() const { return fVACount; }
79
80 size_t getVertexStride() const { return fVAStride; }
81
82 bool hasLocalCoordAttribute() const { 74 bool hasLocalCoordAttribute() const {
83 return -1 != fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttri bBinding]; 75 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has LocalCoords();
84 } 76 }
85 bool hasColorVertexAttribute() const { 77 bool hasColorVertexAttribute() const {
86 return -1 != fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBind ing]; 78 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has VertexColor();
87 } 79 }
88 bool hasCoverageVertexAttribute() const { 80 bool hasCoverageVertexAttribute() const {
89 return -1 != fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribB inding]; 81 return this->hasGeometryProcessor() && this->getGeometryProcessor()->has VertexCoverage();
90 } 82 }
91 83
92 const int* getFixedFunctionVertexAttribIndices() const {
93 return fFixedFunctionVertexAttribIndices;
94 }
95
96 bool validateVertexAttribs() const;
97
98 /**
99 * The format of vertices is represented as an array of GrVertexAttribs, wit h each representing
100 * the type of the attribute, its offset, and semantic binding (see GrVertex Attrib in
101 * GrTypesPriv.h).
102 *
103 * The mapping of attributes with kEffect bindings to GrProcessor inputs is specified when
104 * setEffect is called.
105 */
106
107 /**
108 * Sets vertex attributes for next draw. The object driving the templatizat ion
109 * should be a global GrVertexAttrib array that is never changed.
110 *
111 * @param count the number of attributes being set, limited to kMaxVer texAttribCnt.
112 * @param stride the number of bytes between successive vertex data.
113 */
114 template <const GrVertexAttrib A[]> void setVertexAttribs(int count, size_t stride) {
115 this->internalSetVertexAttribs(A, count, stride);
116 }
117
118 /**
119 * Sets default vertex attributes for next draw. The default is a single at tribute:
120 * {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribType}
121 */
122 void setDefaultVertexAttribs();
123
124 /**
125 * Helper to save/restore vertex attribs
126 */
127 class AutoVertexAttribRestore {
128 public:
129 AutoVertexAttribRestore(GrDrawState* drawState);
130
131 ~AutoVertexAttribRestore() { fDrawState->internalSetVertexAttribs(fVAPt r, fVACount,
132 fVASt ride); }
133
134 private:
135 GrDrawState* fDrawState;
136 const GrVertexAttrib* fVAPtr;
137 int fVACount;
138 size_t fVAStride;
139 };
140
141 /// @} 84 /// @}
142 85
143 /** 86 /**
144 * Depending on features available in the underlying 3D API and the color bl end mode requested 87 * Depending on features available in the underlying 3D API and the color bl end mode requested
145 * it may or may not be possible to correctly blend with fractional pixel co verage generated by 88 * it may or may not be possible to correctly blend with fractional pixel co verage generated by
146 * the fragment shader. 89 * the fragment shader.
147 * 90 *
148 * This function considers the current draw state and the draw target's capa bilities to 91 * This function considers the current draw state and the draw target's capa bilities to
149 * determine whether coverage can be handled correctly. This function assume s that the caller 92 * determine whether coverage can be handled correctly. This function assume s that the caller
150 * intends to specify fractional pixel coverage (via setCoverage(), through a coverage vertex 93 * intends to specify fractional pixel coverage (via setCoverage(), through a coverage vertex
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 * stages and results are stored in fCoverageProcInfo. 701 * stages and results are stored in fCoverageProcInfo.
759 */ 702 */
760 void calcCoverageInvariantOutput() const; 703 void calcCoverageInvariantOutput() const;
761 704
762 void onReset(const SkMatrix* initialViewMatrix); 705 void onReset(const SkMatrix* initialViewMatrix);
763 706
764 // Some of the auto restore objects assume that no effects are removed durin g their lifetime. 707 // Some of the auto restore objects assume that no effects are removed durin g their lifetime.
765 // This is used to assert that this condition holds. 708 // This is used to assert that this condition holds.
766 SkDEBUGCODE(int fBlockEffectRemovalCnt;) 709 SkDEBUGCODE(int fBlockEffectRemovalCnt;)
767 710
768 void internalSetVertexAttribs(const GrVertexAttrib attribs[], int count, siz e_t stride);
769
770 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; 711 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray;
771 712
772 SkAutoTUnref<GrRenderTarget> fRenderTarget; 713 SkAutoTUnref<GrRenderTarget> fRenderTarget;
773 GrColor fColor; 714 GrColor fColor;
774 SkMatrix fViewMatrix; 715 SkMatrix fViewMatrix;
775 GrColor fBlendConstant; 716 GrColor fBlendConstant;
776 uint32_t fFlagBits; 717 uint32_t fFlagBits;
777 const GrVertexAttrib* fVAPtr;
778 int fVACount;
779 size_t fVAStride;
780 GrStencilSettings fStencilSettings; 718 GrStencilSettings fStencilSettings;
781 uint8_t fCoverage; 719 uint8_t fCoverage;
782 DrawFace fDrawFace; 720 DrawFace fDrawFace;
783 GrBlendCoeff fSrcBlend; 721 GrBlendCoeff fSrcBlend;
784 GrBlendCoeff fDstBlend; 722 GrBlendCoeff fDstBlend;
785 SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor; 723 SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
786 FragmentStageArray fColorStages; 724 FragmentStageArray fColorStages;
787 FragmentStageArray fCoverageStages; 725 FragmentStageArray fCoverageStages;
788 uint32_t fHints; 726 uint32_t fHints;
789 727
790 // This is simply a different representation of info in fVertexAttribs and t hus does
791 // not need to be compared in op==.
792 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt ];
793
794 mutable GrProcOptInfo fColorProcInfo; 728 mutable GrProcOptInfo fColorProcInfo;
795 mutable GrProcOptInfo fCoverageProcInfo; 729 mutable GrProcOptInfo fCoverageProcInfo;
796 mutable bool fColorProcInfoValid; 730 mutable bool fColorProcInfoValid;
797 mutable bool fCoverageProcInfoValid; 731 mutable bool fCoverageProcInfoValid;
798 732
799 friend class GrOptDrawState; 733 friend class GrOptDrawState;
800 }; 734 };
801 735
802 #endif 736 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.cpp ('k') | src/gpu/GrDrawState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698