1 #ifndef EGLSURFACE_INCLUDED
2 #define EGLSURFACE_INCLUDED
5 #include "egltypedefs.h"
6 #include "egldisplay.h"
10 * "Base" class for device driver surfaces.
14 /* A surface is a display resource */
15 _EGLResource Resource
;
17 /* The context that is currently bound to the surface */
18 _EGLContext
*CurrentContext
;
22 EGLint Type
; /* one of EGL_WINDOW_BIT, EGL_PIXMAP_BIT or EGL_PBUFFER_BIT */
24 EGLint TextureFormat
, TextureTarget
;
25 EGLint MipmapTexture
, MipmapLevel
;
28 /* True if the surface is bound to an OpenGL ES texture */
29 EGLBoolean BoundToTexture
;
31 #ifdef EGL_VERSION_1_2
32 EGLint SwapBehavior
; /* one of EGL_BUFFER_PRESERVED/DESTROYED */
33 EGLint HorizontalResolution
, VerticalResolution
;
35 EGLint RenderBuffer
; /* EGL_BACK_BUFFER or EGL_SINGLE_BUFFER */
36 EGLint AlphaFormat
; /* EGL_ALPHA_FORMAT_NONPRE or EGL_ALPHA_FORMAT_PRE */
37 EGLint Colorspace
; /* EGL_COLORSPACE_sRGB or EGL_COLORSPACE_LINEAR */
38 #endif /* EGL_VERSION_1_2 */
43 _eglInitSurface(_EGLDriver
*drv
, _EGLSurface
*surf
, EGLint type
,
44 _EGLConfig
*config
, const EGLint
*attrib_list
);
48 _eglSwapBuffers(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
);
52 _eglCopyBuffers(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLNativePixmapType target
);
56 _eglQuerySurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint attribute
, EGLint
*value
);
60 _eglCreateWindowSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, EGLNativeWindowType window
, const EGLint
*attrib_list
);
64 _eglCreatePixmapSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, EGLNativePixmapType pixmap
, const EGLint
*attrib_list
);
68 _eglCreatePbufferSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, const EGLint
*attrib_list
);
72 _eglDestroySurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
);
76 _eglSurfaceAttrib(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint attribute
, EGLint value
);
80 _eglBindTexImage(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint buffer
);
84 _eglReleaseTexImage(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint buffer
);
88 _eglSwapInterval(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint interval
);
91 #ifdef EGL_VERSION_1_2
94 _eglCreatePbufferFromClientBuffer(_EGLDriver
*drv
, _EGLDisplay
*dpy
,
95 EGLenum buftype
, EGLClientBuffer buffer
,
96 _EGLConfig
*conf
, const EGLint
*attrib_list
);
98 #endif /* EGL_VERSION_1_2 */
102 * Return true if there is a context bound to the surface.
104 static INLINE EGLBoolean
105 _eglIsSurfaceBound(_EGLSurface
*surf
)
107 return (surf
->CurrentContext
!= NULL
);
112 * Link a surface to a display and return the handle of the link.
113 * The handle can be passed to client directly.
115 static INLINE EGLSurface
116 _eglLinkSurface(_EGLSurface
*surf
, _EGLDisplay
*dpy
)
118 _eglLinkResource(&surf
->Resource
, _EGL_RESOURCE_SURFACE
, dpy
);
119 return (EGLSurface
) surf
;
124 * Unlink a linked surface from its display.
125 * Accessing an unlinked surface should generate EGL_BAD_SURFACE error.
128 _eglUnlinkSurface(_EGLSurface
*surf
)
130 _eglUnlinkResource(&surf
->Resource
, _EGL_RESOURCE_SURFACE
);
135 * Lookup a handle to find the linked surface.
136 * Return NULL if the handle has no corresponding linked surface.
138 static INLINE _EGLSurface
*
139 _eglLookupSurface(EGLSurface surface
, _EGLDisplay
*dpy
)
141 _EGLSurface
*surf
= (_EGLSurface
*) surface
;
142 if (!dpy
|| !_eglCheckResource((void *) surf
, _EGL_RESOURCE_SURFACE
, dpy
))
149 * Return the handle of a linked surface, or EGL_NO_SURFACE.
151 static INLINE EGLSurface
152 _eglGetSurfaceHandle(_EGLSurface
*surf
)
154 _EGLResource
*res
= (_EGLResource
*) surf
;
155 return (res
&& _eglIsResourceLinked(res
)) ?
156 (EGLSurface
) surf
: EGL_NO_SURFACE
;
161 * Return true if the surface is linked to a display.
163 static INLINE EGLBoolean
164 _eglIsSurfaceLinked(_EGLSurface
*surf
)
166 _EGLResource
*res
= (_EGLResource
*) surf
;
167 return (res
&& _eglIsResourceLinked(res
));
171 #endif /* EGLSURFACE_INCLUDED */