Mesa EGL
The current version of EGL in Mesa implements EGL 1.4. More information about EGL can be found at - -http://www.khronos.org/egl/.
+ +https://www.khronos.org/egl/.The Mesa's implementation of EGL uses a driver architecture. The main
library (libEGL
) is window system neutral. It provides the EGL
@@ -36,7 +44,7 @@ the driver for your hardware. For example
The main library and OpenGL is enabled by default. The first two options above enables OpenGL ES 1.x and 2.x. The last two -options enables the listed classic and and Gallium drivers respectively.
+options enables the listed classic and Gallium drivers respectively. @@ -52,65 +60,62 @@ or more EGL drivers.There are several options that control the build of EGL at configuration time
--
-
--enable-egl
+-
+
--enable-egl
+-
By default, EGL is enabled. When disabled, the main library and the drivers will not be built.
-
+
---with-egl-driver-dir
+ +--with-egl-driver-dir
The directory EGL drivers should be installed to. If not specified, EGL drivers will be installed to
-${libdir}/egl
.
-
---enable-gallium-egl
+ -Enable the optional
- -egl_gallium
driver.
-
---with-egl-platforms
+ +--with-platforms
List the platforms (window systems) to support. Its argument is a comma -seprated string such as
+the main library to decide the native platform.--with-egl-platforms=x11,drm
. It decides +separated string such as--with-platforms=x11,drm
. It decides the platforms a driver may support. The first listed platform is also used by -the main library to decide the native platform: the platform the EGL native -types such asEGLNativeDisplayType
or -EGLNativeWindowType
defined for.The available platforms are
-x11
,drm
, -fbdev
, andgdi
. Thegdi
platform can -only be built with SCons. Unless for special needs, the build system should +wayland
,surfaceless
,android
, +andhaiku
. +Theandroid
platform can either be built as a system +component, part of AOSP, usingAndroid.mk
files, or +cross-compiled using appropriateconfigure
options. +Thehaiku
platform can only be built with SCons. +Unless for special needs, the build system should select the right platforms automatically.
+
---enable-gles1
and--enable-gles2
+ +--enable-gles1
+--enable-gles2
These options enable OpenGL ES support in OpenGL. The result is one big internal library that supports multiple APIs.
-
+
---enable-shared-glapi
+ +--enable-shared-glapi
By default,
-libGL
has its own copy oflibglapi
. This options makeslibGL
use the sharedlibglapi
. This is required if applications mix OpenGL and OpenGL ES.
+
---enable-openvg
- -OpenVG must be explicitly enabled by this option.
- -
-
-
Use EGL
@@ -124,70 +129,37 @@ mesa/demos repository.There are several environment variables that control the behavior of EGL at runtime
--
-
EGL_DRIVERS_PATH
- -By default, the main library will look for drivers in the directory where -the drivers are installed to. This variable specifies a list of -colon-separated directories where the main library will look for drivers, in -addition to the default directory. This variable is ignored for setuid/setgid -binaries.
- -This variable is usually set to test an uninstalled build. For example, one -may set
- -- $ export LD_LIBRARY_PATH=$mesa/lib - $ export EGL_DRIVERS_PATH=$mesa/lib/egl -
- -to test a build without installation
- -
-
-EGL_DRIVER
- -This variable specifies a full path to or the name of an EGL driver. It -forces the specified EGL driver to be loaded. It comes in handy when one wants -to test a specific driver. This variable is ignored for setuid/setgid -binaries.
- -
-
-EGL_PLATFORM
+-
+
EGL_PLATFORM
+-
This variable specifies the native platform. The valid values are the same -as those for
+--with-egl-platforms
. When the variable is not set, +as those for--with-platforms
. When the variable is not set, the main library uses the first platform listed in ---with-egl-platforms
as the native platform.--with-platforms
as the native platform.Extensions like
-EGL_MESA_drm_display
define new functions to create displays for non-native platforms. These extensions are usually used by applications that support non-native platforms. Setting this variable is probably required only for some of the demos found in mesa/demo repository.
+
-EGL_LOG_LEVEL
+ +EGL_LOG_LEVEL
This changes the log level of the main library and the drivers. The valid values are:
-debug
,info
,warning
, andfatal
.
-
-EGL_SOFTWARE
- -For drivers that support both hardware and software rendering, setting this -variable to true forces the use of software rendering.
- -
-
EGL Drivers
--
-
egl_dri2
+-
+
egl_dri2
+-
This driver supports both
x11
anddrm
platforms. It functions as a DRI driver loader. Forx11
support, it talks to @@ -195,52 +167,17 @@ the X server directly using (XCB-)DRI2 protocol.This driver can share DRI drivers with
-libGL
.
-
-egl_gallium
- -This driver is based on Gallium3D. It supports all rendering APIs and -hardwares supported by Gallium3D. It is the only driver that supports OpenVG. -The supported platforms are X11, DRM, FBDEV, and GDI.
- -This driver comes with its own hardware drivers -(
- -pipe_<hw>
) and client API modules -(st_<api>
).
-
-egl_glx
- -This driver provides a wrapper to GLX. It uses exclusively GLX to implement -the EGL API. It supports both direct and indirect rendering when the GLX does. -It is accelerated when the GLX is. As such, it cannot provide functions that -is not available in GLX or GLX extensions.
-
-
Packaging
The ABI between the main library and its drivers are not stable. Nor is
-there a plan to stabilize it at the moment. Of the EGL drivers,
-egl_gallium
has its own hardware drivers and client API modules.
-They are considered internal to egl_gallium
and there is also no
-stable ABI between them. These should be kept in mind when packaging for
-distribution.
Generally, egl_dri2
is preferred over egl_gallium
-when the system already has DRI drivers. As egl_gallium
is loaded
-before egl_dri2
when both are available, egl_gallium
-is disabled by default.
Developers
-The sources of the main library and the classic drivers can be found at
-src/egl/
. The sources of the egl
state tracker can
-be found at src/gallium/state_trackers/egl/
.
The suggested way to learn to write a EGL driver is to see how other drivers
-are written. egl_glx
should be a good reference. It works in any
-environment that has GLX support, and it is simpler than most drivers.
The sources of the main library and drivers can be found at
+src/egl/
.
Lifetime of Display Resources
@@ -249,8 +186,8 @@ longer than the display that creates them.In EGL, when a display is terminated through eglTerminate
, all
display resources should be destroyed. Similarly, when a thread is released
-throught eglReleaseThread
, all current display resources should be
-released. Another way to destory or release resources is through functions
+through eglReleaseThread
, all current display resources should be
+released. Another way to destroy or release resources is through functions
such as eglDestroySurface
or eglMakeCurrent
.
When a resource that is current to some thread is destroyed, the resource
@@ -316,5 +253,6 @@ not be called with the sample display at the same time. If a driver has access
to an EGLDisplay
without going through the EGL APIs, the driver
should as well lock the display before using it.
+