• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
26 class SkNativeGLContext : public SkGLContextHelper {
27 public:
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 
60 protected:
61     virtual const GrGLInterface* createGLContext() SK_OVERRIDE;
62     virtual void destroyGLContext() SK_OVERRIDE;
63 
64 private:
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