diff --git a/src/egl/eglut/eglut.c b/src/egl/eglut/eglut.c index 2ee6f15..f6a2ad4 100644 --- a/src/egl/eglut/eglut.c +++ b/src/egl/eglut/eglut.c @@ -76,8 +76,9 @@ _eglutNow(void) static void _eglutDestroyWindow(struct eglut_window *win) { - if (_eglut->surface_type != EGL_PBUFFER_BIT && - _eglut->surface_type != EGL_SCREEN_BIT_MESA) + + if (_eglut->surface_type == EGL_WINDOW_BIT || + _eglut->surface_type == EGL_PIXMAP_BIT) eglDestroySurface(_eglut->dpy, win->surface); _eglutNativeFiniWindow(win); @@ -175,7 +176,9 @@ _eglutCreateWindow(const char *title, int x, int y, int w, int h) win->config, win->native.u.pixmap, NULL); break; case EGL_PBUFFER_BIT: +#ifdef EGL_MESA_screen_surface case EGL_SCREEN_BIT_MESA: +#endif win->surface = win->native.u.surface; break; default: @@ -289,8 +292,10 @@ eglutDestroyWindow(int win) if (window->index != win) return; +#ifdef EGL_MESA_screen_surface /* XXX it causes some bug in st/egl KMS backend */ if ( _eglut->surface_type != EGL_SCREEN_BIT_MESA) +#endif eglMakeCurrent(_eglut->dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); _eglutDestroyWindow(_eglut->current); diff --git a/src/egl/eglut/eglut_screen.c b/src/egl/eglut/eglut_screen.c index 021a8f1..094a4e2 100644 --- a/src/egl/eglut/eglut_screen.c +++ b/src/egl/eglut/eglut_screen.c @@ -35,26 +35,33 @@ #define MAX_MODES 100 +#ifdef EGL_MESA_screen_surface static EGLScreenMESA kms_screen; static EGLModeMESA kms_mode; static EGLint kms_width, kms_height; +#endif void _eglutNativeInitDisplay(void) { +#ifdef EGL_MESA_screen_surface _eglut->native_dpy = EGL_DEFAULT_DISPLAY; _eglut->surface_type = EGL_SCREEN_BIT_MESA; +#endif } void _eglutNativeFiniDisplay(void) { +#ifdef EGL_MESA_screen_surface kms_screen = 0; kms_mode = 0; kms_width = 0; kms_height = 0; +#endif } +#ifdef EGL_MESA_screen_surface static void init_kms(void) { @@ -94,19 +101,23 @@ init_kms(void) kms_width = width; kms_height = height; } +#endif void _eglutNativeInitWindow(struct eglut_window *win, const char *title, int x, int y, int w, int h) { +#ifdef EGL_MESA_screen_surface EGLint surf_attribs[16]; EGLint i; +#endif const char *exts; exts = eglQueryString(_eglut->dpy, EGL_EXTENSIONS); if (!exts || !strstr(exts, "EGL_MESA_screen_surface")) _eglutFatal("EGL_MESA_screen_surface is not supported\n"); +#ifdef EGL_MESA_screen_surface init_kms(); i = 0; @@ -128,14 +139,17 @@ _eglutNativeInitWindow(struct eglut_window *win, const char *title, win->native.width = kms_width; win->native.height = kms_height; +#endif } void _eglutNativeFiniWindow(struct eglut_window *win) { +#ifdef EGL_MESA_screen_surface eglShowScreenSurfaceMESA(_eglut->dpy, kms_screen, EGL_NO_SURFACE, 0); eglDestroySurface(_eglut->dpy, win->native.u.surface); +#endif } void diff --git a/src/egl/opengl/demo1.c b/src/egl/opengl/demo1.c index d892734..3a3564c 100644 --- a/src/egl/opengl/demo1.c +++ b/src/egl/opengl/demo1.c @@ -18,6 +18,7 @@ static void TestScreens(EGLDisplay dpy) { +#ifdef EGL_MESA_screen_surface #define MAX 8 EGLScreenMESA screens[MAX]; EGLint numScreens; @@ -28,6 +29,7 @@ TestScreens(EGLDisplay dpy) for (i = 0; i < numScreens; i++) { printf(" Screen %d handle: %d\n", i, (int) screens[i]); } +#endif } /** diff --git a/src/egl/opengl/demo2.c b/src/egl/opengl/demo2.c index 71a1a31..209cb4f 100644 --- a/src/egl/opengl/demo2.c +++ b/src/egl/opengl/demo2.c @@ -16,6 +16,7 @@ /*#define FRONTBUFFER*/ +#ifdef EGL_MESA_screen_surface static void _subset_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat r, GLfloat g, GLfloat b) { @@ -95,12 +96,13 @@ TestScreens(EGLDisplay dpy) printf(" Screen %d handle: %d\n", i, (int) screens[i]); } } - +#endif int main(int argc, char *argv[]) { int maj, min; +#ifdef EGL_MESA_screen_surface EGLContext ctx; EGLSurface pbuffer, screen_surf; EGLConfig configs[10]; @@ -115,6 +117,7 @@ main(int argc, char *argv[]) EGLModeMESA mode; EGLScreenMESA screen; EGLint count; +#endif EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY); assert(d); @@ -132,6 +135,7 @@ main(int argc, char *argv[]) exit(1); } +#ifdef EGL_MESA_screen_surface eglGetConfigs(d, configs, 10, &numConfigs); printf("Got %d EGL configs:\n", numConfigs); for (i = 0; i < numConfigs; i++) { @@ -211,6 +215,7 @@ main(int argc, char *argv[]) eglDestroySurface(d, pbuffer); eglDestroyContext(d, ctx); eglTerminate(d); +#endif return 0; } diff --git a/src/egl/opengl/demo3.c b/src/egl/opengl/demo3.c index f84ca23..31b5d8b 100644 --- a/src/egl/opengl/demo3.c +++ b/src/egl/opengl/demo3.c @@ -46,7 +46,7 @@ GLubyte OpenGL_bits[] = { 0x3e, 0x00, 0x00, 0xf8, 0x0c, 0x00, }; - +#ifdef EGL_MESA_screen_surface static void Init(void) { @@ -551,11 +551,13 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height) fclose(f); } } +#endif int main(int argc, char *argv[]) { int maj, min; +#ifdef EGL_MESA_screen_surface EGLContext ctx; EGLSurface screen_surf; EGLConfig configs[10]; @@ -566,6 +568,7 @@ main(int argc, char *argv[]) const GLubyte *bitmap; EGLint screenAttribs[32]; EGLint i; +#endif EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY); assert(d); @@ -583,6 +586,7 @@ main(int argc, char *argv[]) exit(1); } +#ifdef EGL_MESA_screen_surface eglGetConfigs(d, configs, 10, &numConfigs); eglGetScreensMESA(d, &screen, 1, &count); eglGetModesMESA(d, screen, &mode, 1, &count); @@ -642,6 +646,7 @@ main(int argc, char *argv[]) eglDestroySurface(d, screen_surf); eglDestroyContext(d, ctx); eglTerminate(d); +#endif return 0; } diff --git a/src/egl/opengl/eglscreen.c b/src/egl/opengl/eglscreen.c index ba91087..82bb2aa 100644 --- a/src/egl/opengl/eglscreen.c +++ b/src/egl/opengl/eglscreen.c @@ -44,19 +44,20 @@ int main(int argc, char *argv[]) { int maj, min; +#ifdef EGL_MESA_screen_surface EGLSurface screen_surf; EGLConfig configs[MAX_CONFIGS]; EGLint numConfigs, i; EGLBoolean b; - EGLDisplay d; EGLint screenAttribs[10]; EGLModeMESA mode[MAX_MODES]; EGLScreenMESA screen; EGLint count; EGLint chosenMode = 0; EGLint width = 0, height = 0; +#endif - d = eglGetDisplay(EGL_DEFAULT_DISPLAY); + EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY); assert(d); if (!eglInitialize(d, &maj, &min)) { @@ -67,6 +68,7 @@ main(int argc, char *argv[]) printf("eglscreen: EGL version = %d.%d\n", maj, min); printf("eglscreen: EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR)); +#ifdef EGL_MESA_screen_surface /* XXX use ChooseConfig */ eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs); eglGetScreensMESA(d, &screen, 1, &count); @@ -115,6 +117,7 @@ main(int argc, char *argv[]) eglDestroySurface(d, screen_surf); eglTerminate(d); +#endif return 0; }