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

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

Issue 571163002: removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: rebase after revert Created 6 years, 3 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 | « include/gpu/GrEffect.h ('k') | src/core/SkXfermode.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 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 GrTBackendEffectFactory_DEFINED 8 #ifndef GrTBackendEffectFactory_DEFINED
9 #define GrTBackendEffectFactory_DEFINED 9 #define GrTBackendEffectFactory_DEFINED
10 10
11 #include "GrBackendEffectFactory.h" 11 #include "GrBackendEffectFactory.h"
12 #include "GrDrawEffect.h"
13 #include "gl/GrGLProgramEffects.h" 12 #include "gl/GrGLProgramEffects.h"
14 13
15 /** 14 /**
16 * Implements GrBackendEffectFactory for a GrEffect subclass as a singleton. Thi s can be used by 15 * Implements GrBackendEffectFactory for a GrEffect subclass as a singleton. Thi s can be used by
17 * most GrEffect subclasses to implement the GrEffect::getFactory() method: 16 * most GrEffect subclasses to implement the GrEffect::getFactory() method:
18 * 17 *
19 * const GrBackendEffectFactory& MyEffect::getFactory() const { 18 * const GrBackendEffectFactory& MyEffect::getFactory() const {
20 * return GrTBackendEffectFactory<MyEffect>::getInstance(); 19 * return GrTBackendEffectFactory<MyEffect>::getInstance();
21 * } 20 * }
22 * 21 *
23 * Using this class requires that the GrEffect subclass always produces the same GrGLEffect 22 * Using this class requires that the GrEffect subclass always produces the same GrGLEffect
24 * subclass. Additionally, It adds the following requirements to the GrEffect an d GrGLEffect 23 * subclass. Additionally, It adds the following requirements to the GrEffect an d GrGLEffect
25 * subclasses: 24 * subclasses:
26 * 25 *
27 * 1. The GrGLEffect used by GrEffect subclass MyEffect must be named or typedef 'ed to 26 * 1. The GrGLEffect used by GrEffect subclass MyEffect must be named or typedef 'ed to
28 * MyEffect::GLEffect. 27 * MyEffect::GLEffect.
29 * 2. MyEffect::GLEffect must have a static function: 28 * 2. MyEffect::GLEffect must have a static function:
30 * EffectKey GenKey(const GrDrawEffect, const GrGLCaps&) 29 * EffectKey GenKey(const GrEffect, const GrGLCaps&)
31 * which generates a key that maps 1 to 1 with code variations emitted by 30 * which generates a key that maps 1 to 1 with code variations emitted by
32 * MyEffect::GLEffect::emitCode(). 31 * MyEffect::GLEffect::emitCode().
33 * 3. MyEffect must have a static function: 32 * 3. MyEffect must have a static function:
34 * const char* Name() 33 * const char* Name()
35 * which returns a human-readable name for the effect. 34 * which returns a human-readable name for the effect.
36 */ 35 */
37 template <typename EffectClass> 36 template <typename EffectClass>
38 class GrTBackendEffectFactory : public GrBackendEffectFactory { 37 class GrTBackendEffectFactory : public GrBackendEffectFactory {
39 38
40 public: 39 public:
41 typedef typename EffectClass::GLEffect GLEffect; 40 typedef typename EffectClass::GLEffect GLEffect;
42 41
43 /** Returns a human-readable name for the effect. Implemented using GLEffect ::Name as described 42 /** Returns a human-readable name for the effect. Implemented using GLEffect ::Name as described
44 * in this class's comment. */ 43 * in this class's comment. */
45 virtual const char* name() const SK_OVERRIDE { return EffectClass::Name(); } 44 virtual const char* name() const SK_OVERRIDE { return EffectClass::Name(); }
46 45
47 46
48 /** Implemented using GLEffect::GenKey as described in this class's comment. */ 47 /** Implemented using GLEffect::GenKey as described in this class's comment. */
49 virtual void getGLEffectKey(const GrDrawEffect& drawEffect, 48 virtual void getGLEffectKey(const GrEffect& effect,
50 const GrGLCaps& caps, 49 const GrGLCaps& caps,
51 GrEffectKeyBuilder* b) const SK_OVERRIDE { 50 GrEffectKeyBuilder* b) const SK_OVERRIDE {
52 GLEffect::GenKey(drawEffect, caps, b); 51 GLEffect::GenKey(effect, caps, b);
53 } 52 }
54 53
55 /** Returns a new instance of the appropriate *GL* implementation class 54 /** Returns a new instance of the appropriate *GL* implementation class
56 for the given GrEffect; caller is responsible for deleting 55 for the given GrEffect; caller is responsible for deleting
57 the object. */ 56 the object. */
58 virtual GrGLEffect* createGLInstance(const GrDrawEffect& drawEffect) const S K_OVERRIDE { 57 virtual GrGLEffect* createGLInstance(const GrEffect& effect) const SK_OVERRI DE {
59 return SkNEW_ARGS(GLEffect, (*this, drawEffect)); 58 return SkNEW_ARGS(GLEffect, (*this, effect));
60 } 59 }
61 60
62 /** This class is a singleton. This function returns the single instance. */ 61 /** This class is a singleton. This function returns the single instance. */
63 static const GrBackendEffectFactory& getInstance() { 62 static const GrBackendEffectFactory& getInstance() {
64 static SkAlignedSTStorage<1, GrTBackendEffectFactory> gInstanceMem; 63 static SkAlignedSTStorage<1, GrTBackendEffectFactory> gInstanceMem;
65 static const GrTBackendEffectFactory* gInstance; 64 static const GrTBackendEffectFactory* gInstance;
66 if (!gInstance) { 65 if (!gInstance) {
67 gInstance = SkNEW_PLACEMENT(gInstanceMem.get(), 66 gInstance = SkNEW_PLACEMENT(gInstanceMem.get(),
68 GrTBackendEffectFactory); 67 GrTBackendEffectFactory);
69 } 68 }
70 return *gInstance; 69 return *gInstance;
71 } 70 }
72 71
73 protected: 72 protected:
74 GrTBackendEffectFactory() {} 73 GrTBackendEffectFactory() {}
75 }; 74 };
76 75
77 #endif 76 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrEffect.h ('k') | src/core/SkXfermode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698