14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
2eff3a1272e72ef04e66d1aaf22d934a59627c781shannonwoods@chromium.org// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file.
54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// main.h: Management of thread-local data.
84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#ifndef LIBGLESV2_MAIN_H_
104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#define LIBGLESV2_MAIN_H_
114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
12ea0e1af4c3db538081d776e4ec1a588ca82cb9d9alokp@chromium.org#include "common/debug.h"
134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
140b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include <GLES2/gl2.h>
150b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang#include <EGL/egl.h>
160b7eef7c469bf717f7e1b57c6273f00d88e8b1d9Geoff Lang
17486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comnamespace egl
18486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com{
19486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Display;
20486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Surface;
21486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com}
22e6842296d00cda4d731782f1e7f22006ea277c4fdaniel@transgaming.com
234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace gl
244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
25486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Context;
26486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com
274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comstruct Current
284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    Context *context;
304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    egl::Display *display;
314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com};
324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid makeCurrent(Context *context, egl::Display *display, egl::Surface *surface);
344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comContext *getContext();
369d78850211eddee0ffdd6d02d7eecbb2bbf9a854daniel@transgaming.comContext *getNonLostContext();
374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comegl::Display *getDisplay();
384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comvoid error(GLenum errorCode);
404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comtemplate<class T>
424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comconst T &error(GLenum errorCode, const T &returnValue)
434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    error(errorCode);
454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    return returnValue;
474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
49779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com}
50779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com
51486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comnamespace rx
52486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com{
53486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Renderer;
54486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com}
55486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com
56cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.comextern "C"
57cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com{
58cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com// Exported functions for use by EGL
59daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.comgl::Context *glCreateContext(int clientVersion, const gl::Context *shareContext, rx::Renderer *renderer, bool notifyResets, bool robustAccess);
60cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.comvoid glDestroyContext(gl::Context *context);
61cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.comvoid glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface);
62cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.comgl::Context *glGetCurrentContext();
63591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Langrx::Renderer *glCreateRenderer(egl::Display *display, EGLNativeDisplayType nativeDisplay, EGLint requestedDisplayType);
64cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.comvoid glDestroyRenderer(rx::Renderer *renderer);
65cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com
66cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com__eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname);
67cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.combool __stdcall glBindTexImage(egl::Surface *surface);
68cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com}
69cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com
704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif   // LIBGLESV2_MAIN_H_
71