Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2008 VMware, Inc.
  4.  * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
  5.  * Copyright 2010 LunarG, Inc.
  6.  * All Rights Reserved.
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a
  9.  * copy of this software and associated documentation files (the
  10.  * "Software"), to deal in the Software without restriction, including
  11.  * without limitation the rights to use, copy, modify, merge, publish,
  12.  * distribute, sub license, and/or sell copies of the Software, and to
  13.  * permit persons to whom the Software is furnished to do so, subject to
  14.  * the following conditions:
  15.  *
  16.  * The above copyright notice and this permission notice (including the
  17.  * next paragraph) shall be included in all copies or substantial portions
  18.  * of the Software.
  19.  *
  20.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  23.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  24.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  25.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  26.  * DEALINGS IN THE SOFTWARE.
  27.  *
  28.  **************************************************************************/
  29.  
  30.  
  31. #ifndef EGLSURFACE_INCLUDED
  32. #define EGLSURFACE_INCLUDED
  33.  
  34. #include "c99_compat.h"
  35.  
  36. #include "egltypedefs.h"
  37. #include "egldisplay.h"
  38.  
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. /**
  45.  * "Base" class for device driver surfaces.
  46.  */
  47. struct _egl_surface
  48. {
  49.    /* A surface is a display resource */
  50.    _EGLResource Resource;
  51.  
  52.    /* The context that is currently bound to the surface */
  53.    _EGLContext *CurrentContext;
  54.  
  55.    _EGLConfig *Config;
  56.  
  57.    EGLint Type; /* one of EGL_WINDOW_BIT, EGL_PIXMAP_BIT or EGL_PBUFFER_BIT */
  58.  
  59.    /* attributes set by attribute list */
  60.    EGLint Width, Height;
  61.    EGLenum TextureFormat;
  62.    EGLenum TextureTarget;
  63.    EGLBoolean MipmapTexture;
  64.    EGLBoolean LargestPbuffer;
  65.    EGLenum RenderBuffer;
  66.    EGLenum VGAlphaFormat;
  67.    EGLenum VGColorspace;
  68.  
  69.    /* attributes set by eglSurfaceAttrib */
  70.    EGLint MipmapLevel;
  71.    EGLenum MultisampleResolve;
  72.    EGLenum SwapBehavior;
  73.  
  74.    EGLint HorizontalResolution, VerticalResolution;
  75.    EGLint AspectRatio;
  76.  
  77.    EGLint SwapInterval;
  78.  
  79.    /* True if the surface is bound to an OpenGL ES texture */
  80.    EGLBoolean BoundToTexture;
  81.  
  82.    EGLBoolean PostSubBufferSupportedNV;
  83. };
  84.  
  85.  
  86. extern EGLBoolean
  87. _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
  88.                 _EGLConfig *config, const EGLint *attrib_list);
  89.  
  90.  
  91. extern EGLBoolean
  92. _eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint *value);
  93.  
  94.  
  95. extern EGLBoolean
  96. _eglSurfaceAttrib(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint attribute, EGLint value);
  97.  
  98.  
  99. extern EGLBoolean
  100. _eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint buffer);
  101.  
  102. extern EGLBoolean
  103. _eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer);
  104.  
  105.  
  106. extern EGLBoolean
  107. _eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, EGLint interval);
  108.  
  109.  
  110. /**
  111.  * Increment reference count for the surface.
  112.  */
  113. static inline _EGLSurface *
  114. _eglGetSurface(_EGLSurface *surf)
  115. {
  116.    if (surf)
  117.       _eglGetResource(&surf->Resource);
  118.    return surf;
  119. }
  120.  
  121.  
  122. /**
  123.  * Decrement reference count for the surface.
  124.  */
  125. static inline EGLBoolean
  126. _eglPutSurface(_EGLSurface *surf)
  127. {
  128.    return (surf) ? _eglPutResource(&surf->Resource) : EGL_FALSE;
  129. }
  130.  
  131.  
  132. /**
  133.  * Link a surface to its display and return the handle of the link.
  134.  * The handle can be passed to client directly.
  135.  */
  136. static inline EGLSurface
  137. _eglLinkSurface(_EGLSurface *surf)
  138. {
  139.    _eglLinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE);
  140.    return (EGLSurface) surf;
  141. }
  142.  
  143.  
  144. /**
  145.  * Unlink a linked surface from its display.
  146.  * Accessing an unlinked surface should generate EGL_BAD_SURFACE error.
  147.  */
  148. static inline void
  149. _eglUnlinkSurface(_EGLSurface *surf)
  150. {
  151.    _eglUnlinkResource(&surf->Resource, _EGL_RESOURCE_SURFACE);
  152. }
  153.  
  154.  
  155. /**
  156.  * Lookup a handle to find the linked surface.
  157.  * Return NULL if the handle has no corresponding linked surface.
  158.  */
  159. static inline _EGLSurface *
  160. _eglLookupSurface(EGLSurface surface, _EGLDisplay *dpy)
  161. {
  162.    _EGLSurface *surf = (_EGLSurface *) surface;
  163.    if (!dpy || !_eglCheckResource((void *) surf, _EGL_RESOURCE_SURFACE, dpy))
  164.       surf = NULL;
  165.    return surf;
  166. }
  167.  
  168.  
  169. /**
  170.  * Return the handle of a linked surface, or EGL_NO_SURFACE.
  171.  */
  172. static inline EGLSurface
  173. _eglGetSurfaceHandle(_EGLSurface *surf)
  174. {
  175.    _EGLResource *res = (_EGLResource *) surf;
  176.    return (res && _eglIsResourceLinked(res)) ?
  177.       (EGLSurface) surf : EGL_NO_SURFACE;
  178. }
  179.  
  180.  
  181. #ifdef __cplusplus
  182. }
  183. #endif
  184.  
  185. #endif /* EGLSURFACE_INCLUDED */
  186.