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