1 
2 /*
3  * Copyright 2012 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 #ifndef SkANGLEGLContext_DEFINED
9 #define SkANGLEGLContext_DEFINED
10 
11 #if SK_ANGLE
12 
13 #include "gl/SkGLContext.h"
14 
15 class SkANGLEGLContext : public SkGLContext {
16 public:
17     ~SkANGLEGLContext() override;
18 #ifdef SK_BUILD_FOR_WIN
CreateDirectX()19     static SkANGLEGLContext* CreateDirectX() {
20         SkANGLEGLContext* ctx = new SkANGLEGLContext(false);
21         if (!ctx->isValid()) {
22             delete ctx;
23             return NULL;
24         }
25         return ctx;
26     }
27 #endif
CreateOpenGL()28     static SkANGLEGLContext* CreateOpenGL() {
29         SkANGLEGLContext* ctx = new SkANGLEGLContext(true);
30         if (!ctx->isValid()) {
31             delete ctx;
32             return NULL;
33         }
34         return ctx;
35     }
36 
37     GrEGLImage texture2DToEGLImage(GrGLuint texID) const override;
38     void destroyEGLImage(GrEGLImage) const override;
39     GrGLuint eglImageToExternalTexture(GrEGLImage) const override;
40     SkGLContext* createNew() const override;
41 
42     // The param is an EGLNativeDisplayType and the return is an EGLDispay.
43     static void* GetD3DEGLDisplay(void* nativeDisplay, bool useGLBackend);
44 
45 private:
46     SkANGLEGLContext(bool preferGLBackend);
47     void destroyGLContext();
48 
49     void onPlatformMakeCurrent() const override;
50     void onPlatformSwapBuffers() const override;
51     GrGLFuncPtr onPlatformGetProcAddress(const char* name) const override;
52 
53     void* fContext;
54     void* fDisplay;
55     void* fSurface;
56     bool  fIsGLBackend;
57 };
58 
59 #endif
60 
61 #endif
62