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

Side by Side Diff: src/gpu/gl/GrGLProgramEffects.h

Issue 212753002: Use fixed function pipeline only when drawing paths (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 8 months 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/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.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 2013 Google Inc. 2 * Copyright 2013 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 GrGLProgramEffects_DEFINED 8 #ifndef GrGLProgramEffects_DEFINED
9 #define GrGLProgramEffects_DEFINED 9 #define GrGLProgramEffects_DEFINED
10 10
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 private: 230 private:
231 GrGLFullShaderBuilder* fBuilder; 231 GrGLFullShaderBuilder* fBuilder;
232 SkAutoTDelete<GrGLVertexProgramEffects> fProgramEffects; 232 SkAutoTDelete<GrGLVertexProgramEffects> fProgramEffects;
233 233
234 typedef GrGLProgramEffectsBuilder INHERITED; 234 typedef GrGLProgramEffectsBuilder INHERITED;
235 }; 235 };
236 236
237 //////////////////////////////////////////////////////////////////////////////// 237 ////////////////////////////////////////////////////////////////////////////////
238 238
239 /** 239 /**
240 * This is a GrGLProgramEffects implementation that does coord transforms with t he the built-in GL 240 * This is a GrGLProgramEffects implementation that does coord transforms with
241 * TexGen functionality. 241 * the the NV_path_rendering PathTexGen functionality.
242 */ 242 */
243 class GrGLTexGenProgramEffects : public GrGLProgramEffects { 243 class GrGLPathTexGenProgramEffects : public GrGLProgramEffects {
244 public: 244 public:
245 virtual void setData(GrGpuGL*, 245 virtual void setData(GrGpuGL*,
246 const GrGLUniformManager&, 246 const GrGLUniformManager&,
247 const GrEffectStage* effectStages[]) SK_OVERRIDE; 247 const GrEffectStage* effectStages[]) SK_OVERRIDE;
248 248
249 private: 249 private:
250 friend class GrGLTexGenProgramEffectsBuilder; 250 friend class GrGLPathTexGenProgramEffectsBuilder;
251 251
252 GrGLTexGenProgramEffects(int reserveCount) 252 GrGLPathTexGenProgramEffects(int reserveCount)
253 : INHERITED(reserveCount) 253 : INHERITED(reserveCount)
254 , fTransforms(reserveCount) { 254 , fTransforms(reserveCount) {
255 } 255 }
256 256
257 /** 257 /**
258 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called 258 * Helper for GrGLProgramEffectsBuilder::emitEfffect(). This method is meant to only be called
259 * during the construction phase. 259 * during the construction phase.
260 */ 260 */
261 void emitEffect(GrGLFragmentOnlyShaderBuilder*, 261 void emitEffect(GrGLFragmentOnlyShaderBuilder*,
262 const GrEffectStage&, 262 const GrEffectStage&,
263 GrGLProgramEffects::EffectKey, 263 GrGLProgramEffects::EffectKey,
264 const char* outColor, 264 const char* outColor,
265 const char* inColor, 265 const char* inColor,
266 int stageIndex); 266 int stageIndex);
267 267
268 /** 268 /**
269 * Helper for emitEffect(). Allocates texture units from the builder for eac h transform in an 269 * Helper for emitEffect(). Allocates texture units from the builder for eac h transform in an
270 * effect. The transforms all use adjacent texture units. They either use tw o or three of the 270 * effect. The transforms all use adjacent texture units. They either use tw o or three of the
271 * coordinates at a given texture unit, depending on if they need perspectiv e interpolation. 271 * coordinates at a given texture unit, depending on if they need perspectiv e interpolation.
272 * The expressions to access the transformed coords (i.e. 'vec2(gl_TexCoord[ 0])') as well as the 272 * The expressions to access the transformed coords (i.e. 'vec2(gl_TexCoord[ 0])') as well as the
273 * types are appended to the TransformedCoordsArray* object, which is in tur n passed to the 273 * types are appended to the TransformedCoordsArray* object, which is in tur n passed to the
274 * effect's emitCode() function. 274 * effect's emitCode() function.
275 */ 275 */
276 void setupTexGen(GrGLFragmentOnlyShaderBuilder*, 276 void setupPathTexGen(GrGLFragmentOnlyShaderBuilder*,
277 const GrEffectRef&, 277 const GrEffectRef&,
278 EffectKey, 278 EffectKey,
279 TransformedCoordsArray*); 279 TransformedCoordsArray*);
280 280
281 /** 281 /**
282 * Helper for setData(). Sets the TexGen state for each transform in an effe ct. 282 * Helper for setData(). Sets the PathTexGen state for each transform in an effect.
283 */ 283 */
284 void setTexGenState(GrGpuGL*, const GrDrawEffect&, int effectIdx); 284 void setPathTexGenState(GrGpuGL*, const GrDrawEffect&, int effectIdx);
285 285
286 struct Transforms { 286 struct Transforms {
287 Transforms(EffectKey transformKey, int texCoordIndex) 287 Transforms(EffectKey transformKey, int texCoordIndex)
288 : fTransformKey(transformKey), fTexCoordIndex(texCoordIndex) {} 288 : fTransformKey(transformKey), fTexCoordIndex(texCoordIndex) {}
289 EffectKey fTransformKey; 289 EffectKey fTransformKey;
290 int fTexCoordIndex; 290 int fTexCoordIndex;
291 }; 291 };
292 292
293 SkTArray<Transforms> fTransforms; 293 SkTArray<Transforms> fTransforms;
294 294
295 typedef GrGLProgramEffects INHERITED; 295 typedef GrGLProgramEffects INHERITED;
296 }; 296 };
297 297
298 /** 298 /**
299 * This class is used to construct a GrGLTexGenProgramEffects* object. 299 * This class is used to construct a GrGLPathTexGenProgramEffects* object.
300 */ 300 */
301 class GrGLTexGenProgramEffectsBuilder : public GrGLProgramEffectsBuilder { 301 class GrGLPathTexGenProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
302 public: 302 public:
303 GrGLTexGenProgramEffectsBuilder(GrGLFragmentOnlyShaderBuilder*, int reserveC ount); 303 GrGLPathTexGenProgramEffectsBuilder(GrGLFragmentOnlyShaderBuilder*, int rese rveCount);
304 virtual ~GrGLTexGenProgramEffectsBuilder() { } 304 virtual ~GrGLPathTexGenProgramEffectsBuilder() { }
305 305
306 virtual void emitEffect(const GrEffectStage&, 306 virtual void emitEffect(const GrEffectStage&,
307 GrGLProgramEffects::EffectKey, 307 GrGLProgramEffects::EffectKey,
308 const char* outColor, 308 const char* outColor,
309 const char* inColor, 309 const char* inColor,
310 int stageIndex) SK_OVERRIDE; 310 int stageIndex) SK_OVERRIDE;
311 311
312 /** 312 /**
313 * Finalizes the building process and returns the effect array. After this c all, the builder 313 * Finalizes the building process and returns the effect array. After this c all, the builder
314 * becomes invalid. 314 * becomes invalid.
315 */ 315 */
316 GrGLProgramEffects* finish() { return fProgramEffects.detach(); } 316 GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
317 317
318 private: 318 private:
319 GrGLFragmentOnlyShaderBuilder* fBuilder; 319 GrGLFragmentOnlyShaderBuilder* fBuilder;
320 SkAutoTDelete<GrGLTexGenProgramEffects> fProgramEffects; 320 SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects;
321 321
322 typedef GrGLProgramEffectsBuilder INHERITED; 322 typedef GrGLProgramEffectsBuilder INHERITED;
323 }; 323 };
324 324
325 #endif 325 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698