1//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// main.h: Management of thread-local data.
8
9#ifndef LIBEGL_MAIN_H_
10#define LIBEGL_MAIN_H_
11
12#include <EGL/egl.h>
13#include <EGL/eglext.h>
14
15namespace egl
16{
17struct Current
18{
19    EGLint error;
20    EGLenum API;
21    EGLDisplay display;
22    EGLSurface drawSurface;
23    EGLSurface readSurface;
24};
25
26void setCurrentError(EGLint error);
27EGLint getCurrentError();
28
29void setCurrentAPI(EGLenum API);
30EGLenum getCurrentAPI();
31
32void setCurrentDisplay(EGLDisplay dpy);
33EGLDisplay getCurrentDisplay();
34
35void setCurrentDrawSurface(EGLSurface surface);
36EGLSurface getCurrentDrawSurface();
37
38void setCurrentReadSurface(EGLSurface surface);
39EGLSurface getCurrentReadSurface();
40
41void error(EGLint errorCode);
42
43template<class T>
44const T &error(EGLint errorCode, const T &returnValue)
45{
46    error(errorCode);
47
48    return returnValue;
49}
50
51template<class T>
52const T &success(const T &returnValue)
53{
54    egl::setCurrentError(EGL_SUCCESS);
55
56    return returnValue;
57}
58
59}
60
61#endif  // LIBEGL_MAIN_H_
62