Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  21.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  23.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  24.  * DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28.  
  29. #ifndef EGLCURRENT_INCLUDED
  30. #define EGLCURRENT_INCLUDED
  31.  
  32. #include "c99_compat.h"
  33.  
  34. #include "egltypedefs.h"
  35.  
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #define _EGL_API_ALL_BITS \
  42.    (EGL_OPENGL_ES_BIT   | \
  43.     EGL_OPENVG_BIT      | \
  44.     EGL_OPENGL_ES2_BIT  | \
  45.     EGL_OPENGL_ES3_BIT_KHR | \
  46.     EGL_OPENGL_BIT)
  47.  
  48.  
  49. #define _EGL_API_FIRST_API EGL_OPENGL_ES_API
  50. #define _EGL_API_LAST_API EGL_OPENGL_API
  51. #define _EGL_API_NUM_APIS (_EGL_API_LAST_API - _EGL_API_FIRST_API + 1)
  52.  
  53.  
  54. /**
  55.  * Per-thread info
  56.  */
  57. struct _egl_thread_info
  58. {
  59.    EGLint LastError;
  60.    _EGLContext *CurrentContexts[_EGL_API_NUM_APIS];
  61.    /* use index for fast access to current context */
  62.    EGLint CurrentAPIIndex;
  63. };
  64.  
  65.  
  66. /**
  67.  * Return true if a client API enum is recognized.
  68.  */
  69. static inline EGLBoolean
  70. _eglIsApiValid(EGLenum api)
  71. {
  72.    return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API);
  73. }
  74.  
  75.  
  76. /**
  77.  * Convert a client API enum to an index, for use by thread info.
  78.  * The client API enum is assumed to be valid.
  79.  */
  80. static inline EGLint
  81. _eglConvertApiToIndex(EGLenum api)
  82. {
  83.    return api - _EGL_API_FIRST_API;
  84. }
  85.  
  86.  
  87. /**
  88.  * Convert an index, used by thread info, to a client API enum.
  89.  * The index is assumed to be valid.
  90.  */
  91. static inline EGLenum
  92. _eglConvertApiFromIndex(EGLint idx)
  93. {
  94.    return _EGL_API_FIRST_API + idx;
  95. }
  96.  
  97.  
  98. extern _EGLThreadInfo *
  99. _eglGetCurrentThread(void);
  100.  
  101.  
  102. extern void
  103. _eglDestroyCurrentThread(void);
  104.  
  105.  
  106. extern EGLBoolean
  107. _eglIsCurrentThreadDummy(void);
  108.  
  109.  
  110. extern _EGLContext *
  111. _eglGetAPIContext(EGLenum api);
  112.  
  113.  
  114. extern _EGLContext *
  115. _eglGetCurrentContext(void);
  116.  
  117.  
  118. extern EGLBoolean
  119. _eglError(EGLint errCode, const char *msg);
  120.  
  121.  
  122. #ifdef __cplusplus
  123. }
  124. #endif
  125.  
  126. #endif /* EGLCURRENT_INCLUDED */
  127.