| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2012 Google Inc. | 2  * Copyright 2012 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 GrGLShaderBuilder_DEFINED | 8 #ifndef GrGLShaderBuilder_DEFINED | 
| 9 #define GrGLShaderBuilder_DEFINED | 9 #define GrGLShaderBuilder_DEFINED | 
| 10 | 10 | 
| 11 #include "GrAllocator.h" | 11 #include "GrAllocator.h" | 
| 12 #include "GrBackendEffectFactory.h" | 12 #include "GrBackendEffectFactory.h" | 
| 13 #include "GrColor.h" | 13 #include "GrColor.h" | 
| 14 #include "GrEffect.h" | 14 #include "GrEffect.h" | 
| 15 #include "SkTypes.h" | 15 #include "SkTypes.h" | 
|  | 16 #include "gl/GrGLCoordTransform.h" | 
| 16 #include "gl/GrGLSL.h" | 17 #include "gl/GrGLSL.h" | 
| 17 #include "gl/GrGLUniformManager.h" | 18 #include "gl/GrGLUniformManager.h" | 
| 18 | 19 | 
| 19 #include <stdarg.h> | 20 #include <stdarg.h> | 
| 20 | 21 | 
| 21 class GrGLContextInfo; | 22 class GrGLContextInfo; | 
| 22 class GrEffectStage; | 23 class GrEffectStage; | 
| 23 class GrGLProgramDesc; | 24 class GrGLProgramDesc; | 
| 24 | 25 | 
| 25 /** | 26 /** | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 89                        idx); | 90                        idx); | 
| 90         } | 91         } | 
| 91 | 92 | 
| 92         uint32_t                          fConfigComponentMask; | 93         uint32_t                          fConfigComponentMask; | 
| 93         char                              fSwizzle[5]; | 94         char                              fSwizzle[5]; | 
| 94         GrGLUniformManager::UniformHandle fSamplerUniform; | 95         GrGLUniformManager::UniformHandle fSamplerUniform; | 
| 95 | 96 | 
| 96         friend class GrGLShaderBuilder; // to call init(). | 97         friend class GrGLShaderBuilder; // to call init(). | 
| 97     }; | 98     }; | 
| 98 | 99 | 
|  | 100     typedef SkTArray<GrGLCoordTransform::TransformedCoords> TransformedCoordsArr
     ay; | 
| 99     typedef SkTArray<TextureSampler> TextureSamplerArray; | 101     typedef SkTArray<TextureSampler> TextureSamplerArray; | 
| 100     typedef GrTAllocator<GrGLShaderVar> VarArray; | 102     typedef GrTAllocator<GrGLShaderVar> VarArray; | 
|  | 103     typedef GrBackendEffectFactory::EffectKey EffectKey; | 
| 101 | 104 | 
| 102     enum ShaderVisibility { | 105     enum ShaderVisibility { | 
| 103         kVertex_Visibility   = 0x1, | 106         kVertex_Visibility   = 0x1, | 
| 104         kGeometry_Visibility = 0x2, | 107         kGeometry_Visibility = 0x2, | 
| 105         kFragment_Visibility = 0x4, | 108         kFragment_Visibility = 0x4, | 
| 106     }; | 109     }; | 
| 107 | 110 | 
| 108     GrGLShaderBuilder(GrGpuGL*, | 111     GrGLShaderBuilder(GrGpuGL*, | 
| 109                       GrGLUniformManager&, | 112                       GrGLUniformManager&, | 
| 110                       const GrGLProgramDesc&, | 113                       const GrGLProgramDesc&, | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 168                         const GrGLShaderVar* args, | 171                         const GrGLShaderVar* args, | 
| 169                         const char* body, | 172                         const char* body, | 
| 170                         SkString* outName); | 173                         SkString* outName); | 
| 171 | 174 | 
| 172     /** Add input/output variable declarations (i.e. 'varying') to the fragment 
     shader. */ | 175     /** Add input/output variable declarations (i.e. 'varying') to the fragment 
     shader. */ | 
| 173     GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } | 176     GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } | 
| 174 | 177 | 
| 175     /** Generates a EffectKey for the shader code based on the texture access pa
     rameters and the | 178     /** Generates a EffectKey for the shader code based on the texture access pa
     rameters and the | 
| 176         capabilities of the GL context.  This is useful for keying the shader pr
     ograms that may | 179         capabilities of the GL context.  This is useful for keying the shader pr
     ograms that may | 
| 177         have multiple representations, based on the type/format of textures used
     . */ | 180         have multiple representations, based on the type/format of textures used
     . */ | 
| 178     static GrBackendEffectFactory::EffectKey KeyForTextureAccess(const GrTexture
     Access&, | 181     static EffectKey KeyForTextureAccess(const GrTextureAccess&, const GrGLCaps&
     ); | 
| 179                                                                  const GrGLCaps&
     ); |  | 
| 180 | 182 | 
| 181     typedef uint8_t DstReadKey; | 183     typedef uint8_t DstReadKey; | 
| 182     typedef uint8_t FragPosKey; | 184     typedef uint8_t FragPosKey; | 
| 183 | 185 | 
| 184     /**  Returns a key for adding code to read the copy-of-dst color in service 
     of effects that | 186     /**  Returns a key for adding code to read the copy-of-dst color in service 
     of effects that | 
| 185          require reading the dst. It must not return 0 because 0 indicates that 
     there is no dst | 187          require reading the dst. It must not return 0 because 0 indicates that 
     there is no dst | 
| 186          copy read at all (in which case this function should not be called). */ | 188          copy read at all (in which case this function should not be called). */ | 
| 187     static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); | 189     static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); | 
| 188 | 190 | 
| 189     /** Returns a key for reading the fragment location. This should only be cal
     led if there is an | 191     /** Returns a key for reading the fragment location. This should only be cal
     led if there is an | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 218         return fUniformManager.getBuilderUniform(fUniforms, u).fVariable; | 220         return fUniformManager.getBuilderUniform(fUniforms, u).fVariable; | 
| 219     } | 221     } | 
| 220 | 222 | 
| 221     /** | 223     /** | 
| 222      * Shortcut for getUniformVariable(u).c_str() | 224      * Shortcut for getUniformVariable(u).c_str() | 
| 223      */ | 225      */ | 
| 224     const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { | 226     const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { | 
| 225         return this->getUniformVariable(u).c_str(); | 227         return this->getUniformVariable(u).c_str(); | 
| 226     } | 228     } | 
| 227 | 229 | 
|  | 230     /** | 
|  | 231      * This returns a variable name to access the 2D, perspective correct versio
     n of the coords in | 
|  | 232      * the fragment shader. If the coordinates at index are 3-dimensional, it im
     mediately emits a | 
|  | 233      * perspective divide into the fragment shader (xy / z) to convert them to 2
     D. | 
|  | 234      */ | 
|  | 235     SkString ensureFSCoords2D(const TransformedCoordsArray&, int index); | 
|  | 236 | 
| 228     /** Returns a variable name that represents the position of the fragment in 
     the FS. The position | 237     /** Returns a variable name that represents the position of the fragment in 
     the FS. The position | 
| 229         is in device space (e.g. 0,0 is the top left and pixel centers are at ha
     lf-integers). */ | 238         is in device space (e.g. 0,0 is the top left and pixel centers are at ha
     lf-integers). */ | 
| 230     const char* fragmentPosition(); | 239     const char* fragmentPosition(); | 
| 231 | 240 | 
| 232     /** Returns the color of the destination pixel. This may be NULL if no effec
     t advertised | 241     /** Returns the color of the destination pixel. This may be NULL if no effec
     t advertised | 
| 233         that it will read the destination. */ | 242         that it will read the destination. */ | 
| 234     const char* dstColor(); | 243     const char* dstColor(); | 
| 235 | 244 | 
| 236     /** | 245     /** | 
| 237      * Interfaces used by GrGLProgram. | 246      * Interfaces used by GrGLProgram. | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 248      * generated from effectStages[i]. An entry in effectStages can be NULL, in 
     which case it is | 257      * generated from effectStages[i]. An entry in effectStages can be NULL, in 
     which case it is | 
| 249      * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
     en it is skipped. | 258      * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
     en it is skipped. | 
| 250      * inOutFSColor specifies the input color to the first stage and is updated 
     to be the | 259      * inOutFSColor specifies the input color to the first stage and is updated 
     to be the | 
| 251      * output color of the last stage. fsInOutColorKnownValue specifies whether 
     the input color | 260      * output color of the last stage. fsInOutColorKnownValue specifies whether 
     the input color | 
| 252      * has a known constant value and is updated to refer to the status of the o
     utput color. | 261      * has a known constant value and is updated to refer to the status of the o
     utput color. | 
| 253      * The handles to texture samplers for effectStage[i] are added to effectSam
     plerHandles[i]. The | 262      * The handles to texture samplers for effectStage[i] are added to effectSam
     plerHandles[i]. The | 
| 254      * glEffects array is updated to contain the GrGLEffect generated for each e
     ntry in | 263      * glEffects array is updated to contain the GrGLEffect generated for each e
     ntry in | 
| 255      * effectStages. | 264      * effectStages. | 
| 256      */ | 265      */ | 
| 257     void emitEffects(const GrEffectStage* effectStages[], | 266     void emitEffects(const GrEffectStage* effectStages[], | 
| 258                      const GrBackendEffectFactory::EffectKey effectKeys[], | 267                      const EffectKey effectKeys[], | 
| 259                      int effectCnt, | 268                      int effectCnt, | 
| 260                      SkString*  inOutFSColor, | 269                      SkString*  inOutFSColor, | 
| 261                      GrSLConstantVec* fsInOutColorKnownValue, | 270                      GrSLConstantVec* fsInOutColorKnownValue, | 
|  | 271                      SkTArray<GrGLCoordTransform, false>* effectCoordTransformAr
     rays[], | 
| 262                      SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
     mplerHandles[], | 272                      SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
     mplerHandles[], | 
| 263                      GrGLEffect* glEffects[]); | 273                      GrGLEffect* glEffects[]); | 
| 264 | 274 | 
| 265     const char* getColorOutputName() const; | 275     const char* getColorOutputName() const; | 
| 266     const char* enableSecondaryOutput(); | 276     const char* enableSecondaryOutput(); | 
| 267 | 277 | 
| 268     GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
     ghtUniform; } | 278     GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
     ghtUniform; } | 
| 269     GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { | 279     GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { | 
| 270         return fDstCopyTopLeftUniform; | 280         return fDstCopyTopLeftUniform; | 
| 271     } | 281     } | 
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 489     GrGLUniformManager::UniformHandle   fDstCopyScaleUniform; | 499     GrGLUniformManager::UniformHandle   fDstCopyScaleUniform; | 
| 490     GrGLUniformManager::UniformHandle   fColorUniform; | 500     GrGLUniformManager::UniformHandle   fColorUniform; | 
| 491     GrGLUniformManager::UniformHandle   fCoverageUniform; | 501     GrGLUniformManager::UniformHandle   fCoverageUniform; | 
| 492 | 502 | 
| 493     bool                                fTopLeftFragPosRead; | 503     bool                                fTopLeftFragPosRead; | 
| 494 | 504 | 
| 495     SkAutoTDelete<VertexBuilder>        fVertexBuilder; | 505     SkAutoTDelete<VertexBuilder>        fVertexBuilder; | 
| 496 }; | 506 }; | 
| 497 | 507 | 
| 498 #endif | 508 #endif | 
| OLD | NEW | 
|---|