[waffle] [PATCH 3/7] egl: Move each platform's setenv("EGL_PLATFORM") into core EGL code
Chad Versace
chadversary at chromium.org
Tue Oct 18 16:58:23 UTC 2016
Each EGL platform 'foo' calls setenv("EGL_PLATFORM", "foo") during
foo_platform_create(), and calls unsetenv("EGL_PLATFORM") during
foo_platform_destroy(). Move the setenv/unsetenv into the core EGL code,
into wegl_platform_init() and wegl_platform_finish().
This prepares for eventually using eglGetPlatformDisplay().
---
src/waffle/egl/wegl_platform.c | 28 ++++++++++++++++++++++++++++
src/waffle/gbm/wgbm_platform.c | 6 ------
src/waffle/wayland/wayland_platform.c | 5 -----
src/waffle/xegl/xegl_platform.c | 6 ------
4 files changed, 28 insertions(+), 17 deletions(-)
diff --git a/src/waffle/egl/wegl_platform.c b/src/waffle/egl/wegl_platform.c
index 7f030bd..d6734ee 100644
--- a/src/waffle/egl/wegl_platform.c
+++ b/src/waffle/egl/wegl_platform.c
@@ -23,6 +23,8 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
+
#include <dlfcn.h>
#include "wcore_error.h"
@@ -35,12 +37,36 @@ static const char *libEGL_filename = "libEGL.so";
static const char *libEGL_filename = "libEGL.so.1";
#endif
+static void
+setup_env(const struct wegl_platform *self)
+{
+ switch (self->egl_platform) {
+ case EGL_PLATFORM_ANDROID_KHR:
+ setenv("EGL_PLATFORM", "android", true);
+ break;
+ case EGL_PLATFORM_GBM_KHR:
+ setenv("EGL_PLATFORM", "drm", true);
+ break;
+ case EGL_PLATFORM_WAYLAND_KHR:
+ setenv("EGL_PLATFORM", "wayland", true);
+ break;
+ case EGL_PLATFORM_X11_KHR:
+ setenv("EGL_PLATFORM", "x11", true);
+ break;
+ default:
+ assert(!"bad egl_platform enum");
+ break;
+ }
+}
+
bool
wegl_platform_teardown(struct wegl_platform *self)
{
bool ok = true;
int error = 0;
+ unsetenv("EGL_PLATFORM");
+
if (self->eglHandle) {
error = dlclose(self->eglHandle);
if (error) {
@@ -114,6 +140,8 @@ wegl_platform_init(struct wegl_platform *self, EGLenum egl_platform)
#undef RETRIEVE_EGL_SYMBOL
+ setup_env(self);
+
error:
// On failure the caller of wegl_platform_init will trigger it's own
// destruction which will execute wegl_platform_teardown.
diff --git a/src/waffle/gbm/wgbm_platform.c b/src/waffle/gbm/wgbm_platform.c
index ee25a26..e598a05 100644
--- a/src/waffle/gbm/wgbm_platform.c
+++ b/src/waffle/gbm/wgbm_platform.c
@@ -23,8 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
-
#include <stdlib.h>
#include <dlfcn.h>
@@ -55,8 +53,6 @@ wgbm_platform_teardown(struct wgbm_platform *self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -120,8 +116,6 @@ wgbm_platform_init(struct wgbm_platform *self)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "drm", true);
-
self->wegl.wcore.vtbl = &wgbm_platform_vtbl;
return true;
diff --git a/src/waffle/wayland/wayland_platform.c b/src/waffle/wayland/wayland_platform.c
index 3627c88..a8fbafc 100644
--- a/src/waffle/wayland/wayland_platform.c
+++ b/src/waffle/wayland/wayland_platform.c
@@ -24,7 +24,6 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define WL_EGL_PLATFORM 1
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
#include <stdlib.h>
#include <dlfcn.h>
@@ -59,8 +58,6 @@ wayland_platform_destroy(struct wcore_platform *wc_self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -125,8 +122,6 @@ wayland_platform_create(void)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "wayland", true);
-
self->wegl.wcore.vtbl = &wayland_platform_vtbl;
return &self->wegl.wcore;
diff --git a/src/waffle/xegl/xegl_platform.c b/src/waffle/xegl/xegl_platform.c
index 66d7ed6..f39ab93 100644
--- a/src/waffle/xegl/xegl_platform.c
+++ b/src/waffle/xegl/xegl_platform.c
@@ -23,8 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#define _POSIX_C_SOURCE 200112 // glib feature macro for unsetenv()
-
#include <stdlib.h>
#include "wcore_error.h"
@@ -51,8 +49,6 @@ xegl_platform_destroy(struct wcore_platform *wc_self)
if (!self)
return true;
- unsetenv("EGL_PLATFORM");
-
if (self->linux)
ok &= linux_platform_destroy(self->linux);
@@ -79,8 +75,6 @@ xegl_platform_create(void)
if (!self->linux)
goto error;
- setenv("EGL_PLATFORM", "x11", true);
-
self->wegl.wcore.vtbl = &xegl_platform_vtbl;
return &self->wegl.wcore;
--
2.10.0
More information about the waffle
mailing list