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 |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 177 |
178 const GrGLShaderVar& getUniformVariable(GrGLUniformManager::UniformHandle) c
onst; | 178 const GrGLShaderVar& getUniformVariable(GrGLUniformManager::UniformHandle) c
onst; |
179 | 179 |
180 /** | 180 /** |
181 * Shortcut for getUniformVariable(u).c_str() | 181 * Shortcut for getUniformVariable(u).c_str() |
182 */ | 182 */ |
183 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { | 183 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { |
184 return this->getUniformVariable(u).c_str(); | 184 return this->getUniformVariable(u).c_str(); |
185 } | 185 } |
186 | 186 |
187 /** Add a varying variable to the current program to pass values between ver
tex and fragment | 187 /** Add a vertex attribute to the current program that is passed in from the
vertex data. |
| 188 Returns false if the attribute was already there, true otherwise. */ |
| 189 bool addAttribute(GrSLType type, const char* name); |
| 190 |
| 191 /** Add a varying variable to the current program to pass values between vert
ex and fragment |
188 shaders. If the last two parameters are non-NULL, they are filled in wit
h the name | 192 shaders. If the last two parameters are non-NULL, they are filled in wit
h the name |
189 generated. */ | 193 generated. */ |
190 void addVarying(GrSLType type, | 194 void addVarying(GrSLType type, |
191 const char* name, | 195 const char* name, |
192 const char** vsOutName = NULL, | 196 const char** vsOutName = NULL, |
193 const char** fsInName = NULL); | 197 const char** fsInName = NULL); |
194 | 198 |
195 /** Returns a variable name that represents the position of the fragment in
the FS. The position | 199 /** Returns a variable name that represents the position of the fragment in
the FS. The position |
196 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ | 200 is in device space (e.g. 0,0 is the top left and pixel centers are at ha
lf-integers). */ |
197 const char* fragmentPosition(); | 201 const char* fragmentPosition(); |
(...skipping 17 matching lines...) Expand all Loading... |
215 // TODO: move remainder of shader code generation to this class and call thi
s privately | 219 // TODO: move remainder of shader code generation to this class and call thi
s privately |
216 // Handles of sampler uniforms generated for the effect are appended to samp
lerHandles. | 220 // Handles of sampler uniforms generated for the effect are appended to samp
lerHandles. |
217 GrGLEffect* createAndEmitGLEffect( | 221 GrGLEffect* createAndEmitGLEffect( |
218 const GrEffectStage& stage, | 222 const GrEffectStage& stage, |
219 GrBackendEffectFactory::EffectKey key, | 223 GrBackendEffectFactory::EffectKey key, |
220 const char* fsInColor, // NULL means no incoming
color | 224 const char* fsInColor, // NULL means no incoming
color |
221 const char* fsOutColor, | 225 const char* fsOutColor, |
222 const char* vsInCoord, | 226 const char* vsInCoord, |
223 SkTArray<GrGLUniformManager::UniformHandle, true
>* samplerHandles); | 227 SkTArray<GrGLUniformManager::UniformHandle, true
>* samplerHandles); |
224 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } | 228 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } |
| 229 |
| 230 struct AttributePair { |
| 231 void set(int index, const SkString& name) { |
| 232 fIndex = index; fName = name; |
| 233 } |
| 234 int fIndex; |
| 235 SkString fName; |
| 236 }; |
| 237 const SkSTArray<10, AttributePair, true>& getEffectAttributes() const { |
| 238 return fEffectAttributes; |
| 239 } |
| 240 const SkString* getEffectAttributeName(int attributeIndex) const; |
| 241 |
225 // TODO: Make this do all the compiling, linking, etc. | 242 // TODO: Make this do all the compiling, linking, etc. |
226 void finished(GrGLuint programID); | 243 void finished(GrGLuint programID); |
227 | 244 |
228 const GrGLContextInfo& ctxInfo() const { return fCtxInfo; } | 245 const GrGLContextInfo& ctxInfo() const { return fCtxInfo; } |
229 | 246 |
230 private: | 247 private: |
231 void codeAppendf(ShaderType type, const char format[], va_list args); | 248 void codeAppendf(ShaderType type, const char format[], va_list args); |
232 void codeAppend(ShaderType type, const char* str); | 249 void codeAppend(ShaderType type, const char* str); |
233 | 250 |
234 typedef GrTAllocator<GrGLShaderVar> VarArray; | 251 typedef GrTAllocator<GrGLShaderVar> VarArray; |
(...skipping 28 matching lines...) Expand all Loading... |
263 SkString fFSFunctions; | 280 SkString fFSFunctions; |
264 SkString fFSHeader; | 281 SkString fFSHeader; |
265 | 282 |
266 SkString fFSCode; | 283 SkString fFSCode; |
267 SkString fVSCode; | 284 SkString fVSCode; |
268 SkString fGSCode; | 285 SkString fGSCode; |
269 | 286 |
270 bool fSetupFragPosition; | 287 bool fSetupFragPosition; |
271 GrGLUniformManager::UniformHandle fRTHeightUniform; | 288 GrGLUniformManager::UniformHandle fRTHeightUniform; |
272 | 289 |
| 290 SkSTArray<10, AttributePair, true> fEffectAttributes; |
| 291 |
273 GrGLShaderVar* fPositionVar; | 292 GrGLShaderVar* fPositionVar; |
274 }; | 293 }; |
275 | 294 |
276 #endif | 295 #endif |
OLD | NEW |