Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include "GrStagedProcessor.h" | 12 #include "GrStagedProcessor.h" |
| 13 | 13 |
| 14 class GrCoordTransform; | 14 class GrCoordTransform; |
| 15 class GrGLSLCaps; | 15 class GrGLSLCaps; |
| 16 class GrGLFragmentProcessor; | 16 class GrGLFragmentProcessor; |
| 17 class GrProcessorKeyBuilder; | 17 class GrProcessorKeyBuilder; |
| 18 | 18 |
| 19 /** Provides custom fragment shader code. Fragment processors receive an input c olor (vec4f) and | 19 /** Provides custom fragment shader code. Fragment processors receive an input c olor (vec4f) and |
| 20 produce an output color. They may reference textures and uniforms. They may use | 20 produce an output color. They may reference textures and uniforms. They may use |
| 21 GrCoordTransforms to receive a transformation of the local coordinates that map from local space | 21 GrCoordTransforms to receive a transformation of the local coordinates that map from local space |
| 22 to the fragment being processed. | 22 to the fragment being processed. |
| 23 */ | 23 */ |
| 24 class GrFragmentProcessor : public GrProcessor { | 24 class GrFragmentProcessor : public GrProcessor { |
| 25 public: | 25 public: |
| 26 GrFragmentProcessor() | 26 GrFragmentProcessor() |
| 27 : INHERITED() | 27 : INHERITED() |
| 28 , fUsesLocalCoords(false) {} | 28 , fUsesLocalCoords(false) |
| 29 , fNumTexturesExclChildren(0) | |
| 30 , fNumTransformsExclChildren(0) {} | |
| 29 | 31 |
| 30 GrGLFragmentProcessor* createGLInstance() const; | 32 GrGLFragmentProcessor* createGLInstance() const; |
| 31 | 33 |
| 32 /** Human-meaningful string to identify this GrFragmentProcessor; may be emb edded | 34 /** Human-meaningful string to identify this GrFragmentProcessor; may be emb edded |
| 33 in generated shader code. */ | 35 in generated shader code. */ |
| 34 virtual const char* name() const = 0; | 36 virtual const char* name() const = 0; |
| 35 | 37 |
| 36 void getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) con st { | 38 void getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) con st { |
| 37 this->onGetGLProcessorKey(caps, b); | 39 this->onGetGLProcessorKey(caps, b); |
| 38 for (int i = 0; i < fChildProcessors.count(); ++i) { | 40 for (int i = 0; i < fChildProcessors.count(); ++i) { |
| 39 fChildProcessors[i].processor()->getGLProcessorKey(caps, b); | 41 fChildProcessors[i].processor()->getGLProcessorKey(caps, b); |
| 40 } | 42 } |
| 41 } | 43 } |
| 42 | 44 |
| 45 int numTexturesExclChildren() const { return fNumTexturesExclChildren; } | |
|
tomhudson
2015/08/18 19:36:11
nit: abbreviation in API smells bad - but I can un
bsalomon
2015/08/19 14:22:17
Nonrecursive?
I can't come up with anything I rea
| |
| 46 | |
| 47 int numTransformsExclChildren() const { return fNumTransformsExclChildren; } | |
| 48 | |
| 43 int numTransforms() const { return fCoordTransforms.count(); } | 49 int numTransforms() const { return fCoordTransforms.count(); } |
| 44 | 50 |
| 45 /** Returns the coordinate transformation at index. index must be valid acco rding to | 51 /** Returns the coordinate transformation at index. index must be valid acco rding to |
| 46 numTransforms(). */ | 52 numTransforms(). */ |
| 47 const GrCoordTransform& coordTransform(int index) const { return *fCoordTran sforms[index]; } | 53 const GrCoordTransform& coordTransform(int index) const { return *fCoordTran sforms[index]; } |
| 48 | 54 |
| 49 const SkTArray<const GrCoordTransform*, true>& coordTransforms() const { | 55 const SkTArray<const GrCoordTransform*, true>& coordTransforms() const { |
| 50 return fCoordTransforms; | 56 return fCoordTransforms; |
| 51 } | 57 } |
| 52 | 58 |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 77 * This function is used to perform optimizations. When called the invarient Ouput param | 83 * This function is used to perform optimizations. When called the invarient Ouput param |
| 78 * indicate whether the input components to this processor in the FS will ha ve known values. | 84 * indicate whether the input components to this processor in the FS will ha ve known values. |
| 79 * In inout the validFlags member is a bitfield of GrColorComponentFlags. Th e isSingleComponent | 85 * In inout the validFlags member is a bitfield of GrColorComponentFlags. Th e isSingleComponent |
| 80 * member indicates whether the input will be 1 or 4 bytes. The function upd ates the members of | 86 * member indicates whether the input will be 1 or 4 bytes. The function upd ates the members of |
| 81 * inout to indicate known values of its output. A component of the color me mber only has | 87 * inout to indicate known values of its output. A component of the color me mber only has |
| 82 * meaning if the corresponding bit in validFlags is set. | 88 * meaning if the corresponding bit in validFlags is set. |
| 83 */ | 89 */ |
| 84 void computeInvariantOutput(GrInvariantOutput* inout) const; | 90 void computeInvariantOutput(GrInvariantOutput* inout) const; |
| 85 | 91 |
| 86 protected: | 92 protected: |
| 93 void addTextureAccess(const GrTextureAccess* textureAccess) override; | |
| 94 | |
| 87 /** | 95 /** |
| 88 * Fragment Processor subclasses call this from their constructor to registe r coordinate | 96 * Fragment Processor subclasses call this from their constructor to registe r coordinate |
| 89 * transformations. Coord transforms provide a mechanism for a processor to receive coordinates | 97 * transformations. Coord transforms provide a mechanism for a processor to receive coordinates |
| 90 * in their FS code. The matrix expresses a transformation from local space. For a given | 98 * in their FS code. The matrix expresses a transformation from local space. For a given |
| 91 * fragment the matrix will be applied to the local coordinate that maps to the fragment. | 99 * fragment the matrix will be applied to the local coordinate that maps to the fragment. |
| 92 * | 100 * |
| 93 * When the transformation has perspective, the transformed coordinates will have | 101 * When the transformation has perspective, the transformed coordinates will have |
| 94 * 3 components. Otherwise they'll have 2. | 102 * 3 components. Otherwise they'll have 2. |
| 95 * | 103 * |
| 96 * This must only be called from the constructor because GrProcessors are im mutable. The | 104 * This must only be called from the constructor because GrProcessors are im mutable. The |
| 97 * processor subclass manages the lifetime of the transformations (this func tion only stores a | 105 * processor subclass manages the lifetime of the transformations (this func tion only stores a |
| 98 * pointer). The GrCoordTransform is typically a member field of the GrProce ssor subclass. | 106 * pointer). The GrCoordTransform is typically a member field of the GrProce ssor subclass. |
| 99 * | 107 * |
| 100 * A processor subclass that has multiple methods of construction should alw ays add its coord | 108 * A processor subclass that has multiple methods of construction should alw ays add its coord |
| 101 * transforms in a consistent order. The non-virtual implementation of isEqu al() automatically | 109 * transforms in a consistent order. The non-virtual implementation of isEqu al() automatically |
| 102 * compares transforms and will assume they line up across the two processor instances. | 110 * compares transforms and will assume they line up across the two processor instances. |
| 103 */ | 111 */ |
| 104 void addCoordTransform(const GrCoordTransform*); | 112 void addCoordTransform(const GrCoordTransform*); |
| 105 | 113 |
| 106 /** | 114 /** |
| 107 * FragmentProcessor subclasses call this from their constructor to register any child | 115 * FragmentProcessor subclasses call this from their constructor to register any child |
| 108 * FragmentProcessors they have. | 116 * FragmentProcessors they have. This must be called AFTER all texture acces ses and coord |
| 117 * transforms have been added. | |
| 109 * This is for processors whose shader code will be composed of nested proce ssors whose output | 118 * This is for processors whose shader code will be composed of nested proce ssors whose output |
| 110 * colors will be combined somehow to produce its output color. Registering these child | 119 * colors will be combined somehow to produce its output color. Registering these child |
| 111 * processors will allow the ProgramBuilder to automatically handle their tr ansformed coords and | 120 * processors will allow the ProgramBuilder to automatically handle their tr ansformed coords and |
| 112 * texture accesses and mangle their uniform and output color names. | 121 * texture accesses and mangle their uniform and output color names. |
| 113 */ | 122 */ |
| 114 int registerChildProcessor(const GrFragmentProcessor* child); | 123 int registerChildProcessor(const GrFragmentProcessor* child); |
| 115 | 124 |
| 116 /** | 125 /** |
| 117 * Subclass implements this to support getConstantColorComponents(...). | 126 * Subclass implements this to support getConstantColorComponents(...). |
| 118 * | 127 * |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 * [b1,b2,c1] [d1,e1,e2,e3,f1,f2] | 170 * [b1,b2,c1] [d1,e1,e2,e3,f1,f2] |
| 162 * / / \ | 171 * / / \ |
| 163 * / / \ | 172 * / / \ |
| 164 * (C) (E) (F) | 173 * (C) (E) (F) |
| 165 * [c1] [e1,e2,e3] [f1,f2] | 174 * [c1] [e1,e2,e3] [f1,f2] |
| 166 * | 175 * |
| 167 * The same goes for fTextureAccesses with textures. | 176 * The same goes for fTextureAccesses with textures. |
| 168 */ | 177 */ |
| 169 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; | 178 SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms; |
| 170 | 179 |
| 180 int fNumTexturesExclChildren; | |
| 181 int fNumTransformsExclChildren; | |
| 182 | |
| 171 SkTArray<GrFragmentStage, false> fChildProcessors; | 183 SkTArray<GrFragmentStage, false> fChildProcessors; |
| 172 | 184 |
| 173 typedef GrProcessor INHERITED; | 185 typedef GrProcessor INHERITED; |
| 174 }; | 186 }; |
| 175 | 187 |
| 176 #endif | 188 #endif |
| OLD | NEW |