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

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

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

Powered by Google App Engine
This is Rietveld 408576698