1
2/*
3 * Copyright 2011 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 SkNativeGLContext_DEFINED
9#define SkNativeGLContext_DEFINED
10
11#include "SkGLContextHelper.h"
12
13#if defined(SK_BUILD_FOR_MAC)
14    #include <OpenGL/OpenGL.h>
15#elif defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_NACL)
16    #include <GLES2/gl2.h>
17    #include <EGL/egl.h>
18#elif defined(SK_BUILD_FOR_UNIX)
19    #include <X11/Xlib.h>
20    #include <GL/glx.h>
21#elif defined(SK_BUILD_FOR_WIN32)
22    #include <windows.h>
23    #include <GL/GL.h>
24#endif
25
26class SkNativeGLContext : public SkGLContextHelper {
27public:
28    SkNativeGLContext();
29
30    virtual ~SkNativeGLContext();
31
32    virtual void makeCurrent() const SK_OVERRIDE;
33    virtual void swapBuffers() const SK_OVERRIDE;
34
35    class AutoContextRestore {
36    public:
37        AutoContextRestore();
38        ~AutoContextRestore();
39
40    private:
41    #if defined(SK_BUILD_FOR_MAC)
42        CGLContextObj fOldCGLContext;
43    #elif defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_NACL)
44        EGLContext fOldEGLContext;
45        EGLDisplay fOldDisplay;
46        EGLSurface fOldSurface;
47    #elif defined(SK_BUILD_FOR_UNIX)
48        GLXContext fOldGLXContext;
49        Display* fOldDisplay;
50        GLXDrawable fOldDrawable;
51    #elif defined(SK_BUILD_FOR_WIN32)
52        HDC fOldHDC;
53        HGLRC fOldHGLRC;
54
55    #elif defined(SK_BUILD_FOR_IOS)
56        void* fEAGLContext;
57    #endif
58    };
59
60protected:
61    virtual const GrGLInterface* createGLContext() SK_OVERRIDE;
62    virtual void destroyGLContext() SK_OVERRIDE;
63
64private:
65#if defined(SK_BUILD_FOR_MAC)
66    CGLContextObj fContext;
67#elif defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_NACL)
68    EGLContext fContext;
69    EGLDisplay fDisplay;
70    EGLSurface fSurface;
71#elif defined(SK_BUILD_FOR_UNIX)
72    GLXContext fContext;
73    Display* fDisplay;
74    Pixmap fPixmap;
75    GLXPixmap fGlxPixmap;
76#elif defined(SK_BUILD_FOR_WIN32)
77    HWND fWindow;
78    HDC fDeviceContext;
79    HGLRC fGlRenderContext;
80    static ATOM gWC;
81#elif defined(SK_BUILD_FOR_IOS)
82    void* fEAGLContext;
83#endif
84};
85
86#endif
87