11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifndef SkNativeGLContext_DEFINED 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SkNativeGLContext_DEFINED 101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkGLContext.h" 121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if defined(SK_BUILD_FOR_MAC) 141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <AGL/agl.h> 151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_ANDROID) 171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <GLES2/gl2.h> 181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <EGL/egl.h> 191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_UNIX) 201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <X11/Xlib.h> 211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <GL/glx.h> 221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_WIN32) 231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <Windows.h> 241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #include <GL/GL.h> 251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkNativeGLContext : public SkGLContext { 281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic: 291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkNativeGLContext(); 301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual ~SkNativeGLContext(); 321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void makeCurrent() const SK_OVERRIDE; 341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger class AutoContextRestore { 361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger public: 371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger AutoContextRestore(); 381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger ~AutoContextRestore(); 391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger private: 411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #if defined(SK_BUILD_FOR_MAC) 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger AGLContext fOldAGLContext; 431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #elif defined(SK_BUILD_FOR_UNIX) 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GLXContext fOldGLXContext; 451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger Display* fOldDisplay; 461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GLXDrawable fOldDrawable; 471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #elif defined(SK_BUILD_FOR_WIN32) 481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger HDC fOldHDC; 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger HGLRC fOldHGLRC; 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #elif defined(SK_BUILD_FOR_ANDROID) 511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLContext fOldEGLContext; 521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLDisplay fOldDisplay; 531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLSurface fOldSurface; 541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger #endif 551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger }; 561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprotected: 581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual const GrGLInterface* createGLContext() SK_OVERRIDE; 591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void destroyGLContext() SK_OVERRIDE; 601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if defined(SK_BUILD_FOR_MAC) 631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger AGLContext fContext; 641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_UNIX) 651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GLXContext fContext; 661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger Display* fDisplay; 671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger Pixmap fPixmap; 681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GLXPixmap fGlxPixmap; 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_WIN32) 701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger HWND fWindow; 711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger HDC fDeviceContext; 721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger HGLRC fGlRenderContext; 731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static ATOM gWC; 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#elif defined(SK_BUILD_FOR_ANDROID) 751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLContext fContext; 761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLDisplay fDisplay; 771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger EGLSurface fSurface; 781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 82