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

Side by Side Diff: include/gpu/GrFragmentProcessor.h

Issue 820523002: initial changes to add local matrix to primitive processor (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup-ccm-above-context
Patch Set: cleanup 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 | « gm/coloremoji.cpp ('k') | include/gpu/GrPaint.h » ('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 2014 Google Inc. 2 * Copyright 2014 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 GrFragmentProcessor_DEFINED 8 #ifndef GrFragmentProcessor_DEFINED
9 #define GrFragmentProcessor_DEFINED 9 #define GrFragmentProcessor_DEFINED
10 10
11 #include "GrProcessor.h" 11 #include "GrProcessor.h"
12 12
13 class GrCoordTransform; 13 class GrCoordTransform;
14 class GrGLCaps; 14 class GrGLCaps;
15 class GrGLFragmentProcessor; 15 class GrGLFragmentProcessor;
16 class GrProcessorKeyBuilder; 16 class GrProcessorKeyBuilder;
17 17
18 /** Provides custom fragment shader code. Fragment processors receive an input c olor (vec4f) and 18 /** Provides custom fragment shader code. Fragment processors receive an input c olor (vec4f) and
19 produce an output color. They may reference textures and uniforms. They may use 19 produce an output color. They may reference textures and uniforms. They may use
20 GrCoordTransforms to receive a transformation of the local coordinates that map from local space 20 GrCoordTransforms to receive a transformation of the local coordinates that map from local space
21 to the fragment being processed. 21 to the fragment being processed.
22 */ 22 */
23 class GrFragmentProcessor : public GrProcessor { 23 class GrFragmentProcessor : public GrProcessor {
24 public: 24 public:
25 GrFragmentProcessor() 25 GrFragmentProcessor()
26 : INHERITED() 26 : INHERITED()
27 , fWillReadDstColor(false) 27 , fWillReadDstColor(false)
28 , fWillUseInputColor(true) {} 28 , fWillUseInputColor(true)
29 , fUsesLocalCoords(false) {}
29 30
30 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */ 31 /** Implemented using GLFragmentProcessor::GenKey as described in this class 's comment. */
31 virtual void getGLProcessorKey(const GrGLCaps& caps, 32 virtual void getGLProcessorKey(const GrGLCaps& caps,
32 GrProcessorKeyBuilder* b) const = 0; 33 GrProcessorKeyBuilder* b) const = 0;
33 34
34 /** Returns a new instance of the appropriate *GL* implementation class 35 /** Returns a new instance of the appropriate *GL* implementation class
35 for the given GrFragmentProcessor; caller is responsible for deleting 36 for the given GrFragmentProcessor; caller is responsible for deleting
36 the object. */ 37 the object. */
37 virtual GrGLFragmentProcessor* createGLInstance() const = 0; 38 virtual GrGLFragmentProcessor* createGLInstance() const = 0;
38 39
39 /** Human-meaningful string to identify this GrFragmentProcessor; may be emb edded 40 /** Human-meaningful string to identify this GrFragmentProcessor; may be emb edded
40 in generated shader code. */ 41 in generated shader code. */
41 virtual const char* name() const = 0; 42 virtual const char* name() const = 0;
42 43
43 int numTransforms() const { return fCoordTransforms.count(); } 44 int numTransforms() const { return fCoordTransforms.count(); }
44 45
45 /** Returns the coordinate transformation at index. index must be valid acco rding to 46 /** Returns the coordinate transformation at index. index must be valid acco rding to
46 numTransforms(). */ 47 numTransforms(). */
47 const GrCoordTransform& coordTransform(int index) const { return *fCoordTran sforms[index]; } 48 const GrCoordTransform& coordTransform(int index) const { return *fCoordTran sforms[index]; }
48 49
49 /** Will this prceossor read the destination pixel value? */ 50 /** Will this prceossor read the destination pixel value? */
50 bool willReadDstColor() const { return fWillReadDstColor; } 51 bool willReadDstColor() const { return fWillReadDstColor; }
51 52
52 /** Will this prceossor read the source color value? */ 53 /** Will this prceossor read the source color value? */
53 bool willUseInputColor() const { return fWillUseInputColor; } 54 bool willUseInputColor() const { return fWillUseInputColor; }
54 55
56 /** Do any of the coordtransforms for this processor require local coords? * /
57 bool usesLocalCoords() const { return fUsesLocalCoords; }
58
55 /** Returns true if this and other processor conservatively draw identically . It can only return 59 /** Returns true if this and other processor conservatively draw identically . It can only return
56 true when the two processor are of the same subclass (i.e. they return t he same object from 60 true when the two processor are of the same subclass (i.e. they return t he same object from
57 from getFactory()). 61 from getFactory()).
58 62
59 A return value of true from isEqual() should not be used to test whether the processor would 63 A return value of true from isEqual() should not be used to test whether the processor would
60 generate the same shader code. To test for identical code generation use getGLProcessorKey*/ 64 generate the same shader code. To test for identical code generation use getGLProcessorKey*/
61 bool isEqual(const GrFragmentProcessor& that) const { 65 bool isEqual(const GrFragmentProcessor& that) const {
62 if (this->classID() != that.classID() || 66 if (this->classID() != that.classID() ||
63 !this->hasSameTransforms(that) || 67 !this->hasSameTransforms(that) ||
64 !this->hasSameTextureAccesses(that)) { 68 !this->hasSameTextureAccesses(that)) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 * getFactory()). The processor subclass should not compare its coord transf orms as that will 127 * getFactory()). The processor subclass should not compare its coord transf orms as that will
124 * be performed automatically in the non-virtual isEqual(). 128 * be performed automatically in the non-virtual isEqual().
125 */ 129 */
126 virtual bool onIsEqual(const GrFragmentProcessor&) const = 0; 130 virtual bool onIsEqual(const GrFragmentProcessor&) const = 0;
127 131
128 bool hasSameTransforms(const GrFragmentProcessor&) const; 132 bool hasSameTransforms(const GrFragmentProcessor&) const;
129 133
130 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; 134 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
131 bool fWillReadDstColor; 135 bool fWillReadDstColor;
132 bool fWillUseInputColor; 136 bool fWillUseInputColor;
137 bool fUsesLocalCoords;
133 138
134 typedef GrProcessor INHERITED; 139 typedef GrProcessor INHERITED;
135 }; 140 };
136 141
137 #endif 142 #endif
OLDNEW
« no previous file with comments | « gm/coloremoji.cpp ('k') | include/gpu/GrPaint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698