Subversion Repositories Kolibri OS

Rev

Go to most recent revision | 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.  
  33. #include "egltypedefs.h"
  34.  
  35.  
  36. #define _EGL_API_ALL_BITS \
  37.    (EGL_OPENGL_ES_BIT   | \
  38.     EGL_OPENVG_BIT      | \
  39.     EGL_OPENGL_ES2_BIT  | \
  40.     EGL_OPENGL_ES3_BIT_KHR | \
  41.     EGL_OPENGL_BIT)
  42.  
  43.  
  44. #define _EGL_API_FIRST_API EGL_OPENGL_ES_API
  45. #define _EGL_API_LAST_API EGL_OPENGL_API
  46. #define _EGL_API_NUM_APIS (_EGL_API_LAST_API - _EGL_API_FIRST_API + 1)
  47.  
  48.  
  49. /**
  50.  * Per-thread info
  51.  */
  52. struct _egl_thread_info
  53. {
  54.    EGLint LastError;
  55.    _EGLContext *CurrentContexts[_EGL_API_NUM_APIS];
  56.    /* use index for fast access to current context */
  57.    EGLint CurrentAPIIndex;
  58. };
  59.  
  60.  
  61. /**
  62.  * Return true if a client API enum is recognized.
  63.  */
  64. static INLINE EGLBoolean
  65. _eglIsApiValid(EGLenum api)
  66. {
  67.    return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API);
  68. }
  69.  
  70.  
  71. /**
  72.  * Convert a client API enum to an index, for use by thread info.
  73.  * The client API enum is assumed to be valid.
  74.  */
  75. static INLINE EGLint
  76. _eglConvertApiToIndex(EGLenum api)
  77. {
  78.    return api - _EGL_API_FIRST_API;
  79. }
  80.  
  81.  
  82. /**
  83.  * Convert an index, used by thread info, to a client API enum.
  84.  * The index is assumed to be valid.
  85.  */
  86. static INLINE EGLenum
  87. _eglConvertApiFromIndex(EGLint idx)
  88. {
  89.    return _EGL_API_FIRST_API + idx;
  90. }
  91.  
  92.  
  93. PUBLIC _EGLThreadInfo *
  94. _eglGetCurrentThread(void);
  95.  
  96.  
  97. extern void
  98. _eglDestroyCurrentThread(void);
  99.  
  100.  
  101. extern EGLBoolean
  102. _eglIsCurrentThreadDummy(void);
  103.  
  104.  
  105. PUBLIC _EGLContext *
  106. _eglGetAPIContext(EGLenum api);
  107.  
  108.  
  109. PUBLIC _EGLContext *
  110. _eglGetCurrentContext(void);
  111.  
  112.  
  113. PUBLIC EGLBoolean
  114. _eglError(EGLint errCode, const char *msg);
  115.  
  116.  
  117. #endif /* EGLCURRENT_INCLUDED */
  118.