
/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#ifndef SkNativeGLContext_DEFINED
#define SkNativeGLContext_DEFINED

#include "SkGLContextHelper.h"

/* This struct is taken from a mesa demo.  Please update as required */
static const struct { int major, minor; } gl_versions[] = {
   {1, 0},
   {1, 1},
   {1, 2},
   {1, 3},
   {1, 4},
   {1, 5},
   {2, 0},
   {2, 1},
   {3, 0},
   {3, 1},
   {3, 2},
   {3, 3},
   {4, 0},
   {4, 1},
   {4, 2},
   {4, 3},
   {4, 4},
   {0, 0} /* end of list */
};
#define NUM_GL_VERSIONS SK_ARRAY_COUNT(gl_versions)

#if defined(SK_BUILD_FOR_MAC)
    #include <OpenGL/OpenGL.h>
#elif SK_EGL
    #include <GLES2/gl2.h>
    #include <EGL/egl.h>
#elif defined(SK_BUILD_FOR_UNIX)
    #include <X11/Xlib.h>
    #include <GL/glx.h>
#elif defined(SK_BUILD_FOR_WIN32)
    #include <windows.h>
    #include <GL/GL.h>
    #include "SkWGL.h"
#endif

class SkNativeGLContext : public SkGLContextHelper {
public:
    SkNativeGLContext();

    virtual ~SkNativeGLContext();

    virtual void makeCurrent() const SK_OVERRIDE;
    virtual void swapBuffers() const SK_OVERRIDE;

    class AutoContextRestore {
    public:
        AutoContextRestore();
        ~AutoContextRestore();

    private:
    #if defined(SK_BUILD_FOR_MAC)
        CGLContextObj fOldCGLContext;
    #elif SK_EGL
        EGLContext fOldEGLContext;
        EGLDisplay fOldDisplay;
        EGLSurface fOldSurface;
    #elif defined(SK_BUILD_FOR_UNIX)
        GLXContext fOldGLXContext;
        Display* fOldDisplay;
        GLXDrawable fOldDrawable;
    #elif defined(SK_BUILD_FOR_WIN32)
        HDC fOldHDC;
        HGLRC fOldHGLRC;

    #elif defined(SK_BUILD_FOR_IOS)
        void* fEAGLContext;
    #endif
    };

protected:
    virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE;
    virtual void destroyGLContext() SK_OVERRIDE;

private:
#if defined(SK_BUILD_FOR_MAC)
    CGLContextObj fContext;
#elif SK_EGL
    EGLContext fContext;
    EGLDisplay fDisplay;
    EGLSurface fSurface;
#elif defined(SK_BUILD_FOR_UNIX)
    GLXContext fContext;
    Display* fDisplay;
    Pixmap fPixmap;
    GLXPixmap fGlxPixmap;
#elif defined(SK_BUILD_FOR_WIN32)
    HWND fWindow;
    HDC fDeviceContext;
    HGLRC fGlRenderContext;
    static ATOM gWC;
    SkWGLPbufferContext* fPbufferContext;
#elif defined(SK_BUILD_FOR_IOS)
    void* fEAGLContext;
#endif
};

#endif
