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