1#ifndef DMGpuSupport_DEFINED
2#define DMGpuSupport_DEFINED
3
4// Provides Ganesh to DM,
5// or if it's not available, fakes it enough so most code doesn't have to know that.
6
7#include "SkSurface.h"
8
9#if SK_SUPPORT_GPU
10
11// Ganesh is available.  Yippee!
12
13#  include "GrContext.h"
14#  include "GrContextFactory.h"
15
16namespace DM {
17
18static const bool kGPUDisabled = false;
19
20static inline SkSurface* NewGpuSurface(GrContextFactory* grFactory,
21                                       GrContextFactory::GLContextType type,
22                                       GrGLStandard gpuAPI,
23                                       SkImageInfo info,
24                                       int samples) {
25    return SkSurface::NewRenderTarget(grFactory->get(type, gpuAPI), info, samples, NULL);
26}
27
28}  // namespace DM
29
30#else// !SK_SUPPORT_GPU
31
32// Ganesh is not available.  Fake it.
33
34enum GrGLStandard {
35    kNone_GrGLStandard,
36    kGL_GrGLStandard,
37    kGLES_GrGLStandard
38};
39
40class GrContextFactory {
41public:
42    typedef int GLContextType;
43
44    static const GLContextType kANGLE_GLContextType  = 0,
45                               kDebug_GLContextType  = 0,
46                               kMESA_GLContextType   = 0,
47                               kNVPR_GLContextType   = 0,
48                               kNative_GLContextType = 0,
49                               kNull_GLContextType   = 0;
50    void destroyContexts() {}
51
52    void abandonContexts() {}
53};
54
55namespace DM {
56
57static const bool kGPUDisabled = true;
58
59static inline SkSurface* NewGpuSurface(GrContextFactory*,
60                                       GrContextFactory::GLContextType,
61                                       GrGLStandard,
62                                       SkImageInfo,
63                                       int) {
64    return NULL;
65}
66
67}  // namespace DM
68
69#endif//SK_SUPPORT_GPU
70
71#endif//DMGpuSupport_DEFINED
72