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 bound status of the surface */
19 EGLBoolean BoundToTexture
;
23 EGLint Type
; /* one of EGL_WINDOW_BIT, EGL_PIXMAP_BIT or EGL_PBUFFER_BIT */
25 EGLint TextureFormat
, TextureTarget
;
26 EGLint MipmapTexture
, MipmapLevel
;
29 /* If type == EGL_SCREEN_BIT: */
30 EGLint VisibleRefCount
; /* number of screens I'm displayed on */
32 #ifdef EGL_VERSION_1_2
33 EGLint SwapBehavior
; /* one of EGL_BUFFER_PRESERVED/DESTROYED */
34 EGLint HorizontalResolution
, VerticalResolution
;
36 EGLint RenderBuffer
; /* EGL_BACK_BUFFER or EGL_SINGLE_BUFFER */
37 EGLint AlphaFormat
; /* EGL_ALPHA_FORMAT_NONPRE or EGL_ALPHA_FORMAT_PRE */
38 EGLint Colorspace
; /* EGL_COLORSPACE_sRGB or EGL_COLORSPACE_LINEAR */
39 #endif /* EGL_VERSION_1_2 */
44 _eglInitSurface(_EGLDriver
*drv
, _EGLSurface
*surf
, EGLint type
,
45 _EGLConfig
*config
, const EGLint
*attrib_list
);
49 _eglSwapBuffers(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
);
53 _eglCopyBuffers(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, NativePixmapType target
);
57 _eglQuerySurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint attribute
, EGLint
*value
);
61 _eglCreateWindowSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, NativeWindowType window
, const EGLint
*attrib_list
);
65 _eglCreatePixmapSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, NativePixmapType pixmap
, const EGLint
*attrib_list
);
69 _eglCreatePbufferSurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLConfig
*conf
, const EGLint
*attrib_list
);
73 _eglDestroySurface(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
);
77 _eglSurfaceAttrib(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint attribute
, EGLint value
);
81 _eglBindTexImage(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint buffer
);
85 _eglReleaseTexImage(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint buffer
);
89 _eglSwapInterval(_EGLDriver
*drv
, _EGLDisplay
*dpy
, _EGLSurface
*surf
, EGLint interval
);
92 #ifdef EGL_VERSION_1_2
95 _eglCreatePbufferFromClientBuffer(_EGLDriver
*drv
, _EGLDisplay
*dpy
,
96 EGLenum buftype
, EGLClientBuffer buffer
,
97 _EGLConfig
*conf
, const EGLint
*attrib_list
);
99 #endif /* EGL_VERSION_1_2 */
103 * Return true if the surface is bound to a thread.
104 * A surface bound to a texutre is not considered bound by
107 static INLINE EGLBoolean
108 _eglIsSurfaceBound(_EGLSurface
*surf
)
110 return (surf
->Binding
!= NULL
);
115 * Link a surface to a display and return the handle of the link.
116 * The handle can be passed to client directly.
118 static INLINE EGLSurface
119 _eglLinkSurface(_EGLSurface
*surf
, _EGLDisplay
*dpy
)
121 _eglLinkResource(&surf
->Resource
, _EGL_RESOURCE_SURFACE
, dpy
);
122 return (EGLSurface
) surf
;
127 * Unlink a linked surface from its display.
128 * Accessing an unlinked surface should generate EGL_BAD_SURFACE error.
131 _eglUnlinkSurface(_EGLSurface
*surf
)
133 _eglUnlinkResource(&surf
->Resource
, _EGL_RESOURCE_SURFACE
);
138 * Lookup a handle to find the linked surface.
139 * Return NULL if the handle has no corresponding linked surface.
141 static INLINE _EGLSurface
*
142 _eglLookupSurface(EGLSurface surface
, _EGLDisplay
*dpy
)
144 _EGLResource
*res
= (_EGLResource
*) surface
;
145 _EGLSurface
*surf
= (_EGLSurface
*) surface
;
146 if (!res
|| !dpy
|| !_eglCheckResource(res
, _EGL_RESOURCE_SURFACE
, dpy
))
153 * Return the handle of a linked surface, or EGL_NO_SURFACE.
155 static INLINE EGLSurface
156 _eglGetSurfaceHandle(_EGLSurface
*surf
)
158 _EGLResource
*res
= (_EGLResource
*) surf
;
159 return (res
&& _eglIsResourceLinked(res
)) ?
160 (EGLSurface
) surf
: EGL_NO_SURFACE
;
165 * Return true if the surface is linked to a display.
167 static INLINE EGLBoolean
168 _eglIsSurfaceLinked(_EGLSurface
*surf
)
170 _EGLResource
*res
= (_EGLResource
*) surf
;
171 return (res
&& _eglIsResourceLinked(res
));
175 #endif /* EGLSURFACE_INCLUDED */