1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/**************************************************************************
2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * All Rights Reserved.
5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * copy of this software and associated documentation files (the
8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * "Software"), to deal in the Software without restriction, including
9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * without limitation the rights to use, copy, modify, merge, publish,
10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * distribute, sub license, and/or sell copies of the Software, and to
11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * permit persons to whom the Software is furnished to do so, subject to
12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * the following conditions:
13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The above copyright notice and this permission notice (including the
15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * next paragraph) shall be included in all copies or substantial portions
16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * of the Software.
17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * DEALINGS IN THE SOFTWARE.
25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu *
26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu **************************************************************************/
27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu
2940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#ifndef EGLCURRENT_INCLUDED
3040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#define EGLCURRENT_INCLUDED
3140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
3294cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu
3340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#include "egltypedefs.h"
3440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
3540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
36310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_ALL_BITS \
37310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu   (EGL_OPENGL_ES_BIT   | \
38310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu    EGL_OPENVG_BIT      | \
39310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu    EGL_OPENGL_ES2_BIT  | \
40310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu    EGL_OPENGL_BIT)
41310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu
42310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu
43310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_FIRST_API EGL_OPENGL_ES_API
44310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_LAST_API EGL_OPENGL_API
45310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_NUM_APIS (_EGL_API_LAST_API - _EGL_API_FIRST_API + 1)
4640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
4740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
4840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/**
4940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Per-thread info
5040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */
5140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstruct _egl_thread_info
5240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{
5340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul   EGLint LastError;
54310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu   _EGLContext *CurrentContexts[_EGL_API_NUM_APIS];
5540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul   /* use index for fast access to current context */
5640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul   EGLint CurrentAPIIndex;
5740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul};
5840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
5940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
6040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/**
61310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu * Return true if a client API enum is recognized.
6240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */
6340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLBoolean
6440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglIsApiValid(EGLenum api)
6540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{
66310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu   return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API);
6740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul}
6840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
6940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
7040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/**
7140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Convert a client API enum to an index, for use by thread info.
7240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * The client API enum is assumed to be valid.
7340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */
7440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLint
7540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglConvertApiToIndex(EGLenum api)
7640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{
77310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu   return api - _EGL_API_FIRST_API;
7840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul}
7940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
8040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
8140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/**
8240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Convert an index, used by thread info, to a client API enum.
8340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * The index is assumed to be valid.
8440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */
8540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLenum
8640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglConvertApiFromIndex(EGLint idx)
8740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{
88310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu   return _EGL_API_FIRST_API + idx;
8940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul}
9040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
9140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
92897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC _EGLThreadInfo *
9340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglGetCurrentThread(void);
9440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
9540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
9640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulextern void
9740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglDestroyCurrentThread(void);
9840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
9940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
10040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulextern EGLBoolean
10140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglIsCurrentThreadDummy(void);
10240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
10340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
104897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC _EGLContext *
1056f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu_eglGetAPIContext(EGLenum api);
1066f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu
1076f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu
1086f6f3e4227855c87a78a717bce7374a7d64172ceChia-I WuPUBLIC _EGLContext *
10940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglGetCurrentContext(void);
11040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
11140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
112897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean
11340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglError(EGLint errCode, const char *msg);
11440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
11540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul
11640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#endif /* EGLCURRENT_INCLUDED */
117