diff options
| -rw-r--r-- | progs/egl/.gitignore | 1 | ||||
| -rw-r--r-- | progs/egl/Makefile | 6 | ||||
| -rw-r--r-- | progs/egl/eglscreen.c | 116 | 
3 files changed, 123 insertions, 0 deletions
| diff --git a/progs/egl/.gitignore b/progs/egl/.gitignore index 497b0ebbe3..793c6c0f61 100644 --- a/progs/egl/.gitignore +++ b/progs/egl/.gitignore @@ -3,6 +3,7 @@ demo2  demo3  eglgears  eglinfo +eglscreen  egltri  peglgears  xeglgears diff --git a/progs/egl/Makefile b/progs/egl/Makefile index f31c21e87e..e1fdb1ce63 100644 --- a/progs/egl/Makefile +++ b/progs/egl/Makefile @@ -15,6 +15,7 @@ PROGRAMS = \  	egltri \  	eglinfo \  	eglgears \ +	eglscreen \  	peglgears \  	xeglgears \  	xegl_tri @@ -69,6 +70,11 @@ eglgears: eglgears.o $(TOP)/$(LIB_DIR)/libEGL.so  eglgears.o: eglgears.c $(HEADERS)  	$(CC) -c $(CFLAGS) -I$(TOP)/include eglgears.c +eglscreen: eglscreen.o $(TOP)/$(LIB_DIR)/libEGL.so +	$(CC) $(CFLAGS) $(LDFLAGS) eglscreen.o -L$(TOP)/$(LIB_DIR) -lEGL -lGL $(LIBDRM_LIB) $(APP_LIB_DEPS) -o $@ + +eglscreen.o: eglscreen.c $(HEADERS) +	$(CC) -c $(CFLAGS) -I$(TOP)/include eglscreen.c  peglgears: peglgears.o $(TOP)/$(LIB_DIR)/libEGL.so  	$(CC) $(CFLAGS) peglgears.o -L$(TOP)/$(LIB_DIR) -lEGL -lGL $(LIBDRM_LIB) $(APP_LIB_DEPS) -o $@ diff --git a/progs/egl/eglscreen.c b/progs/egl/eglscreen.c new file mode 100644 index 0000000000..f3b7f04f96 --- /dev/null +++ b/progs/egl/eglscreen.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved. + *  + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + *  + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + *  + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Stolen from eglgears + * + * Creates a surface and show that on the first screen + */ + +#define EGL_EGLEXT_PROTOTYPES + +#include <assert.h> +#include <math.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <GL/gl.h> +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#define MAX_CONFIGS 10 +#define MAX_MODES 100 + +int +main(int argc, char *argv[]) +{ +	int maj, min; +	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, chosenMode; +	EGLint width = 0, height = 0; + +	d = eglGetDisplay((EGLNativeDisplayType)"!EGL_i915"); +	assert(d); + +	if (!eglInitialize(d, &maj, &min)) { +		printf("eglscreen: eglInitialize failed\n"); +		exit(1); +	} + +	printf("eglscreen: EGL version = %d.%d\n", maj, min); +	printf("eglscreen: EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR)); + +	/* XXX use ChooseConfig */ +	eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs); +	eglGetScreensMESA(d, &screen, 1, &count); + +	if (!eglGetModesMESA(d, screen, mode, MAX_MODES, &count) || count == 0) { +		printf("eglscreen: eglGetModesMESA failed!\n"); +		return 0; +	} + +	/* Print list of modes, and find the one to use */ +	printf("eglscreen: Found %d modes:\n", count); +	for (i = 0; i < count; i++) { +		EGLint w, h; +		eglGetModeAttribMESA(d, mode[i], EGL_WIDTH, &w); +		eglGetModeAttribMESA(d, mode[i], EGL_HEIGHT, &h); +		printf("%3d: %d x %d\n", i, w, h); +		if (w > width && h > height) { +			width = w; +			height = h; +			chosenMode = i; +		} +	} +	printf("eglscreen: Using screen mode/size %d: %d x %d\n", chosenMode, width, height); + +	/* build up screenAttribs array */ +	i = 0; +	screenAttribs[i++] = EGL_WIDTH; +	screenAttribs[i++] = width; +	screenAttribs[i++] = EGL_HEIGHT; +	screenAttribs[i++] = height; +	screenAttribs[i++] = EGL_NONE; + +	screen_surf = eglCreateScreenSurfaceMESA(d, configs[0], screenAttribs); +	if (screen_surf == EGL_NO_SURFACE) { +		printf("eglscreen: Failed to create screen surface\n"); +		return 0; +	} + +	b = eglShowScreenSurfaceMESA(d, screen, screen_surf, mode[chosenMode]); +	if (!b) { +		printf("eglscreen: Show surface failed\n"); +		return 0; +	} + +	eglDestroySurface(d, screen_surf); +	eglTerminate(d); + +	return 0; +} | 
