summaryrefslogtreecommitdiff
path: root/progs/egl/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'progs/egl/opengl')
-rw-r--r--progs/egl/opengl/.gitignore13
-rw-r--r--progs/egl/opengl/Makefile79
-rw-r--r--progs/egl/opengl/demo1.c147
-rw-r--r--progs/egl/opengl/demo2.c216
-rw-r--r--progs/egl/opengl/demo3.c647
-rw-r--r--progs/egl/opengl/eglgears.c305
-rw-r--r--progs/egl/opengl/eglinfo.c223
-rw-r--r--progs/egl/opengl/eglscreen.c120
-rw-r--r--progs/egl/opengl/egltri.c141
-rw-r--r--progs/egl/opengl/peglgears.c451
-rw-r--r--progs/egl/opengl/xeglgears.c954
-rw-r--r--progs/egl/opengl/xeglthreads.c775
12 files changed, 0 insertions, 4071 deletions
diff --git a/progs/egl/opengl/.gitignore b/progs/egl/opengl/.gitignore
deleted file mode 100644
index 49c3a511f3..0000000000
--- a/progs/egl/opengl/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-demo1
-demo2
-demo3
-eglgears_x11
-eglgears_screen
-eglinfo
-eglscreen
-egltri_x11
-egltri_screen
-peglgears
-xeglbindtex
-xeglgears
-xeglthreads
diff --git a/progs/egl/opengl/Makefile b/progs/egl/opengl/Makefile
deleted file mode 100644
index a49255bbb2..0000000000
--- a/progs/egl/opengl/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-# progs/egl/Makefile
-
-TOP = ../../..
-include $(TOP)/configs/current
-
-
-INCLUDE_DIRS = -I$(TOP)/include $(X11_CFLAGS)
-
-HEADERS = $(TOP)/include/GLES/egl.h
-LIB_DEP = $(TOP)/$(LIB_DIR)/$(EGL_LIB_NAME)
-
-LIBS = -L$(TOP)/$(LIB_DIR) -l$(EGL_LIB) -l$(GL_LIB) -lm
-
-EGLUT_DIR = $(TOP)/progs/egl/eglut
-
-EGLUT_DEMOS = \
- eglgears \
- egltri
-
-EGLUT_X11_DEMOS := $(addsuffix _x11,$(EGLUT_DEMOS))
-EGLUT_SCREEN_DEMOS := $(addsuffix _screen,$(EGLUT_DEMOS))
-
-PROGRAMS = \
- demo1 \
- demo2 \
- demo3 \
- eglinfo \
- eglscreen \
- peglgears \
- xeglgears \
- xeglthreads
-
-
-.c.o:
- $(CC) -c $(INCLUDE_DIRS) -I$(EGLUT_DIR) $(CFLAGS) $< -o $@
-
-
-
-default: $(PROGRAMS) $(EGLUT_X11_DEMOS) $(EGLUT_SCREEN_DEMOS)
-
-demo1: demo1.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(LIBDRM_LIB)
-
-demo2: demo2.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(LIBDRM_LIB)
-
-demo3: demo3.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(LIBDRM_LIB)
-
-eglinfo: eglinfo.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS)
-
-eglscreen: eglscreen.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(LIBDRM_LIB)
-
-peglgears: peglgears.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(LIBDRM_LIB) -lm
-
-xeglgears: xeglgears.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) -lm $(X11_LIBS)
-
-xeglthreads: xeglthreads.o $(HEADERS) $(LIB_DEP)
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) -lpthread -lm $(X11_LIBS)
-
-# define the rules for EGLUT demos
-define eglut-demo-rule
-$(1)_x11 $(1)_screen: $(1)_%: $(1).o $(EGLUT_DIR)/libeglut-%.a $(LIB_DEP)
-endef
-$(foreach demo, $(EGLUT_DEMOS), $(eval $(call eglut-demo-rule,$(demo))))
-
-# build EGLUT demos
-$(EGLUT_X11_DEMOS):
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -L$(EGLUT_DIR) -leglut-$* $(LIBS) $(X11_LIBS)
-$(EGLUT_SCREEN_DEMOS):
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -L$(EGLUT_DIR) -leglut-$* $(LIBS)
-
-clean:
- -rm -f *.o *~
- -rm -f $(PROGRAMS) $(EGLUT_X11_DEMOS) $(EGLUT_SCREEN_DEMOS)
diff --git a/progs/egl/opengl/demo1.c b/progs/egl/opengl/demo1.c
deleted file mode 100644
index d892734ee5..0000000000
--- a/progs/egl/opengl/demo1.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Exercise EGL API functions
- */
-
-#define EGL_EGLEXT_PROTOTYPES
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-/**
- * Test EGL_MESA_screen_surface functions
- */
-static void
-TestScreens(EGLDisplay dpy)
-{
-#define MAX 8
- EGLScreenMESA screens[MAX];
- EGLint numScreens;
- EGLint i;
-
- eglGetScreensMESA(dpy, screens, MAX, &numScreens);
- printf("Found %d screens\n", numScreens);
- for (i = 0; i < numScreens; i++) {
- printf(" Screen %d handle: %d\n", i, (int) screens[i]);
- }
-}
-
-/**
- * Print table of all available configurations.
- */
-static void
-PrintConfigs(EGLDisplay d, EGLConfig *configs, EGLint numConfigs)
-{
- EGLint i;
-
- printf("Configurations:\n");
- printf(" bf lv d st colorbuffer dp st supported \n");
- printf(" id sz l b ro r g b a th cl surfaces \n");
- printf("----------------------------------------------\n");
- for (i = 0; i < numConfigs; i++) {
- EGLint id, size, level;
- EGLint red, green, blue, alpha;
- EGLint depth, stencil;
- EGLint surfaces;
- EGLint doubleBuf = 1, stereo = 0;
- char surfString[100] = "";
-
- eglGetConfigAttrib(d, configs[i], EGL_CONFIG_ID, &id);
- eglGetConfigAttrib(d, configs[i], EGL_BUFFER_SIZE, &size);
- eglGetConfigAttrib(d, configs[i], EGL_LEVEL, &level);
-
- eglGetConfigAttrib(d, configs[i], EGL_RED_SIZE, &red);
- eglGetConfigAttrib(d, configs[i], EGL_GREEN_SIZE, &green);
- eglGetConfigAttrib(d, configs[i], EGL_BLUE_SIZE, &blue);
- eglGetConfigAttrib(d, configs[i], EGL_ALPHA_SIZE, &alpha);
- eglGetConfigAttrib(d, configs[i], EGL_DEPTH_SIZE, &depth);
- eglGetConfigAttrib(d, configs[i], EGL_STENCIL_SIZE, &stencil);
- eglGetConfigAttrib(d, configs[i], EGL_SURFACE_TYPE, &surfaces);
-
- if (surfaces & EGL_WINDOW_BIT)
- strcat(surfString, "win,");
- if (surfaces & EGL_PBUFFER_BIT)
- strcat(surfString, "pb,");
- if (surfaces & EGL_PIXMAP_BIT)
- strcat(surfString, "pix,");
- if (strlen(surfString) > 0)
- surfString[strlen(surfString) - 1] = 0;
-
- printf("0x%02x %2d %2d %c %c %2d %2d %2d %2d %2d %2d %-12s\n",
- id, size, level,
- doubleBuf ? 'y' : '.',
- stereo ? 'y' : '.',
- red, green, blue, alpha,
- depth, stencil, surfString);
- }
-}
-
-
-
-int
-main(int argc, char *argv[])
-{
- int maj, min;
- EGLContext ctx;
- EGLSurface pbuffer;
- EGLConfig *configs;
- EGLint numConfigs;
- EGLBoolean b;
- const EGLint pbufAttribs[] = {
- EGL_WIDTH, 500,
- EGL_HEIGHT, 500,
- EGL_NONE
- };
-
- EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- assert(d);
-
- if (!eglInitialize(d, &maj, &min)) {
- printf("demo: eglInitialize failed\n");
- exit(1);
- }
-
- printf("EGL version = %d.%d\n", maj, min);
- printf("EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR));
-
- eglGetConfigs(d, NULL, 0, &numConfigs);
- configs = malloc(sizeof(*configs) *numConfigs);
- eglGetConfigs(d, configs, numConfigs, &numConfigs);
-
- PrintConfigs(d, configs, numConfigs);
-
- eglBindAPI(EGL_OPENGL_API);
- ctx = eglCreateContext(d, configs[0], EGL_NO_CONTEXT, NULL);
- if (ctx == EGL_NO_CONTEXT) {
- printf("failed to create context\n");
- return 0;
- }
-
- pbuffer = eglCreatePbufferSurface(d, configs[0], pbufAttribs);
- if (pbuffer == EGL_NO_SURFACE) {
- printf("failed to create pbuffer\n");
- return 0;
- }
-
- free(configs);
-
- b = eglMakeCurrent(d, pbuffer, pbuffer, ctx);
- if (!b) {
- printf("make current failed\n");
- return 0;
- }
-
- b = eglMakeCurrent(d, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
- TestScreens(d);
-
- eglDestroySurface(d, pbuffer);
- eglDestroyContext(d, ctx);
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/demo2.c b/progs/egl/opengl/demo2.c
deleted file mode 100644
index b9e92f62ac..0000000000
--- a/progs/egl/opengl/demo2.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Exercise EGL API functions
- */
-
-#define EGL_EGLEXT_PROTOTYPES
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <GLES/gl.h>
-
-/*#define FRONTBUFFER*/
-
-static void _subset_Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
- GLfloat r, GLfloat g, GLfloat b)
-{
- GLfloat v[4][2], c[4][4];
- int i;
-
- v[0][0] = x1; v[0][1] = y1;
- v[1][0] = x2; v[1][1] = y1;
- v[2][0] = x2; v[2][1] = y2;
- v[3][0] = x1; v[3][1] = y2;
-
- for (i = 0; i < 4; i++) {
- c[i][0] = r;
- c[i][1] = g;
- c[i][2] = b;
- c[i][3] = 1.0;
- }
-
- glVertexPointer(2, GL_FLOAT, 0, v);
- glColorPointer(4, GL_FLOAT, 0, v);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
-}
-
-
-static void redraw(EGLDisplay dpy, EGLSurface surf, int rot)
-{
- GLfloat r, g, b;
-
- printf("Redraw event\n");
-
- glClearColor( rand()/(float)RAND_MAX,
- rand()/(float)RAND_MAX,
- rand()/(float)RAND_MAX,
- 1);
-
- glClear( GL_COLOR_BUFFER_BIT );
-
- r = rand()/(float)RAND_MAX;
- g = rand()/(float)RAND_MAX;
- b = rand()/(float)RAND_MAX;
-
- glPushMatrix();
- glRotatef(rot, 0, 0, 1);
- glScalef(.5, .5, .5);
- _subset_Rectf( -1, -1, 1, 1, r, g, b );
- glPopMatrix();
-
-#ifdef FRONTBUFFER
- glFlush();
-#else
- eglSwapBuffers( dpy, surf );
-#endif
- glFinish();
-}
-
-
-/**
- * Test EGL_MESA_screen_surface functions
- */
-static void
-TestScreens(EGLDisplay dpy)
-{
-#define MAX 8
- EGLScreenMESA screens[MAX];
- EGLint numScreens;
- EGLint i;
-
- eglGetScreensMESA(dpy, screens, MAX, &numScreens);
- printf("Found %d screens\n", numScreens);
- for (i = 0; i < numScreens; i++) {
- printf(" Screen %d handle: %d\n", i, (int) screens[i]);
- }
-}
-
-
-int
-main(int argc, char *argv[])
-{
- int maj, min;
- EGLContext ctx;
- EGLSurface pbuffer, screen_surf;
- EGLConfig configs[10];
- EGLint numConfigs, i;
- EGLBoolean b;
- const EGLint pbufAttribs[] = {
- EGL_WIDTH, 500,
- EGL_HEIGHT, 500,
- EGL_NONE
- };
- EGLint screenAttribs[32];
- EGLModeMESA mode;
- EGLScreenMESA screen;
- EGLint count;
-
- EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- assert(d);
-
- if (!eglInitialize(d, &maj, &min)) {
- printf("demo: eglInitialize failed\n");
- exit(1);
- }
-
- printf("EGL version = %d.%d\n", maj, min);
- printf("EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR));
- if (!strstr(eglQueryString(d, EGL_EXTENSIONS),
- "EGL_MESA_screen_surface")) {
- printf("EGL_MESA_screen_surface is not supported\n");
- exit(1);
- }
-
- eglGetConfigs(d, configs, 10, &numConfigs);
- printf("Got %d EGL configs:\n", numConfigs);
- for (i = 0; i < numConfigs; i++) {
- EGLint id, red, depth;
- eglGetConfigAttrib(d, configs[i], EGL_CONFIG_ID, &id);
- eglGetConfigAttrib(d, configs[i], EGL_RED_SIZE, &red);
- eglGetConfigAttrib(d, configs[i], EGL_DEPTH_SIZE, &depth);
- printf("%2d: Red Size = %d Depth Size = %d\n", id, red, depth);
- }
-
- eglGetScreensMESA(d, &screen, 1, &count);
- eglGetModesMESA(d, screen, &mode, 1, &count);
-
- eglBindAPI(EGL_OPENGL_API);
- ctx = eglCreateContext(d, configs[0], EGL_NO_CONTEXT, NULL);
- if (ctx == EGL_NO_CONTEXT) {
- printf("failed to create context\n");
- return 0;
- }
-
- pbuffer = eglCreatePbufferSurface(d, configs[0], pbufAttribs);
- if (pbuffer == EGL_NO_SURFACE) {
- printf("failed to create pbuffer\n");
- return 0;
- }
-
- b = eglMakeCurrent(d, pbuffer, pbuffer, ctx);
- if (!b) {
- printf("make current failed\n");
- return 0;
- }
-
- b = eglMakeCurrent(d, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
- i = 0;
- screenAttribs[i++] = EGL_WIDTH;
- eglGetModeAttribMESA(d, mode, EGL_WIDTH, &screenAttribs[i++]);
- screenAttribs[i++] = EGL_HEIGHT;
- eglGetModeAttribMESA(d, mode, EGL_HEIGHT, &screenAttribs[i++]);
- screenAttribs[i] = EGL_NONE;
-
- screen_surf = eglCreateScreenSurfaceMESA(d, configs[0], screenAttribs);
- if (screen_surf == EGL_NO_SURFACE) {
- printf("failed to create screen surface\n");
- return 0;
- }
-
- eglShowScreenSurfaceMESA(d, screen, screen_surf, mode);
-
- b = eglMakeCurrent(d, screen_surf, screen_surf, ctx);
- if (!b) {
- printf("make current failed\n");
- return 0;
- }
-
- glViewport(0, 0, 1024, 768);
-
- glClearColor( 0,
- 1.0,
- 0,
- 1);
-
- glClear( GL_COLOR_BUFFER_BIT );
-
-
- TestScreens(d);
-
- glShadeModel( GL_FLAT );
-
- for (i = 0; i < 6; i++) {
- redraw(d, screen_surf, i*10 );
-
- printf("sleep(1)\n");
- sleep(1);
- }
-
- eglDestroySurface(d, pbuffer);
- eglDestroyContext(d, ctx);
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/demo3.c b/progs/egl/opengl/demo3.c
deleted file mode 100644
index 64b9ee652c..0000000000
--- a/progs/egl/opengl/demo3.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * Exercise EGL API functions
- */
-
-#define EGL_EGLEXT_PROTOTYPES
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <GL/gl.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-
-#define PIXEL_CENTER(x) ((long)(x) + 0.5)
-
-#define GAP 10
-#define ROWS 3
-#define COLS 4
-
-#define OPENGL_WIDTH 48
-#define OPENGL_HEIGHT 13
-
-
-GLenum rgb, doubleBuffer, windType;
-GLint windW, windH;
-
-GLenum mode1, mode2;
-GLint boxW, boxH;
-GLubyte OpenGL_bits[] = {
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x7f, 0xfb, 0xff, 0xff, 0xff, 0x01,
- 0x7f, 0xfb, 0xff, 0xff, 0xff, 0x01,
- 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x3e, 0x8f, 0xb7, 0xf9, 0xfc, 0x01,
- 0x63, 0xdb, 0xb0, 0x8d, 0x0d, 0x00,
- 0x63, 0xdb, 0xb7, 0x8d, 0x0d, 0x00,
- 0x63, 0xdb, 0xb6, 0x8d, 0x0d, 0x00,
- 0x63, 0x8f, 0xf3, 0xcc, 0x0d, 0x00,
- 0x63, 0x00, 0x00, 0x0c, 0x4c, 0x0a,
- 0x63, 0x00, 0x00, 0x0c, 0x4c, 0x0e,
- 0x63, 0x00, 0x00, 0x8c, 0xed, 0x0e,
- 0x3e, 0x00, 0x00, 0xf8, 0x0c, 0x00,
-};
-
-
-static void Init(void)
-{
-
- mode1 = GL_TRUE;
- mode2 = GL_TRUE;
-}
-
-static void Reshape(int width, int height)
-{
-
- windW = (GLint)width;
- windH = (GLint)height;
-}
-
-#if 0
-static void RotateColorMask(void)
-{
- static GLint rotation = 0;
-
- rotation = (rotation + 1) & 0x3;
- switch (rotation) {
- case 0:
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- glIndexMask( 0xff );
- break;
- case 1:
- glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE);
- glIndexMask(0xFE);
- break;
- case 2:
- glColorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_TRUE);
- glIndexMask(0xFD);
- break;
- case 3:
- glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE);
- glIndexMask(0xFB);
- break;
- }
-}
-#endif
-
-static void Viewport(GLint row, GLint column)
-{
- GLint x, y;
-
- boxW = (windW - (COLS + 1) * GAP) / COLS;
- boxH = (windH - (ROWS + 1) * GAP) / ROWS;
-
- x = GAP + column * (boxW + GAP);
- y = GAP + row * (boxH + GAP);
-
- glViewport(x, y, boxW, boxH);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-boxW/2, boxW/2, -boxH/2, boxH/2, 0.0, 1.0);
- glMatrixMode(GL_MODELVIEW);
-
- glEnable(GL_SCISSOR_TEST);
- glScissor(x, y, boxW, boxH);
-}
-
-enum {
- COLOR_BLACK = 0,
- COLOR_RED,
- COLOR_GREEN,
- COLOR_YELLOW,
- COLOR_BLUE,
- COLOR_MAGENTA,
- COLOR_CYAN,
- COLOR_WHITE
-};
-
-static float RGBMap[9][3] = {
- {0, 0, 0},
- {1, 0, 0},
- {0, 1, 0},
- {1, 1, 0},
- {0, 0, 1},
- {1, 0, 1},
- {0, 1, 1},
- {1, 1, 1},
- {0.5, 0.5, 0.5}
-};
-
-static void SetColor(int c)
-{
- glColor3fv(RGBMap[c]);
-}
-
-static void Point(void)
-{
- GLint i;
-
- glBegin(GL_POINTS);
- SetColor(COLOR_WHITE);
- glVertex2i(0, 0);
- for (i = 1; i < 8; i++) {
- GLint j = i * 2;
- SetColor(COLOR_BLACK+i);
- glVertex2i(-j, -j);
- glVertex2i(-j, 0);
- glVertex2i(-j, j);
- glVertex2i(0, j);
- glVertex2i(j, j);
- glVertex2i(j, 0);
- glVertex2i(j, -j);
- glVertex2i(0, -j);
- }
- glEnd();
-}
-
-static void Lines(void)
-{
- GLint i;
-
- glPushMatrix();
-
- glTranslatef(-12, 0, 0);
- for (i = 1; i < 8; i++) {
- SetColor(COLOR_BLACK+i);
- glBegin(GL_LINES);
- glVertex2i(-boxW/4, -boxH/4);
- glVertex2i(boxW/4, boxH/4);
- glEnd();
- glTranslatef(4, 0, 0);
- }
-
- glPopMatrix();
-
- glBegin(GL_LINES);
- glVertex2i(0, 0);
- glEnd();
-}
-
-static void LineStrip(void)
-{
-
- glBegin(GL_LINE_STRIP);
- SetColor(COLOR_RED);
- glVertex2f(PIXEL_CENTER(-boxW/4), PIXEL_CENTER(-boxH/4));
- SetColor(COLOR_GREEN);
- glVertex2f(PIXEL_CENTER(-boxW/4), PIXEL_CENTER(boxH/4));
- SetColor(COLOR_BLUE);
- glVertex2f(PIXEL_CENTER(boxW/4), PIXEL_CENTER(boxH/4));
- SetColor(COLOR_WHITE);
- glVertex2f(PIXEL_CENTER(boxW/4), PIXEL_CENTER(-boxH/4));
- glEnd();
-
- glBegin(GL_LINE_STRIP);
- glVertex2i(0, 0);
- glEnd();
-}
-
-static void LineLoop(void)
-{
-
- glBegin(GL_LINE_LOOP);
- SetColor(COLOR_RED);
- glVertex2f(PIXEL_CENTER(-boxW/4), PIXEL_CENTER(-boxH/4));
- SetColor(COLOR_GREEN);
- glVertex2f(PIXEL_CENTER(-boxW/4), PIXEL_CENTER(boxH/4));
- SetColor(COLOR_BLUE);
- glVertex2f(PIXEL_CENTER(boxW/4), PIXEL_CENTER(boxH/4));
- SetColor(COLOR_WHITE);
- glVertex2f(PIXEL_CENTER(boxW/4), PIXEL_CENTER(-boxH/4));
- glEnd();
-
- glEnable(GL_LOGIC_OP);
- glLogicOp(GL_XOR);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE);
-
- SetColor(COLOR_MAGENTA);
- glBegin(GL_LINE_LOOP);
- glVertex2f(PIXEL_CENTER(-boxW/8), PIXEL_CENTER(-boxH/8));
- glVertex2f(PIXEL_CENTER(-boxW/8), PIXEL_CENTER(boxH/8));
- glEnd();
- glBegin(GL_LINE_LOOP);
- glVertex2f(PIXEL_CENTER(-boxW/8), PIXEL_CENTER(boxH/8+5));
- glVertex2f(PIXEL_CENTER(boxW/8), PIXEL_CENTER(boxH/8+5));
- glEnd();
- glDisable(GL_LOGIC_OP);
- glDisable(GL_BLEND);
-
- SetColor(COLOR_GREEN);
- glBegin(GL_POINTS);
- glVertex2i(0, 0);
- glEnd();
-
- glBegin(GL_LINE_LOOP);
- glVertex2i(0, 0);
- glEnd();
-}
-
-static void Bitmap(void)
-{
-
- glBegin(GL_LINES);
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/2, 0);
- glVertex2i(boxW/2, 0);
- glVertex2i(0, -boxH/2);
- glVertex2i(0, boxH/2);
- SetColor(COLOR_RED);
- glVertex2i(0, -3);
- glVertex2i(0, -3+OPENGL_HEIGHT);
- SetColor(COLOR_BLUE);
- glVertex2i(0, -3);
- glVertex2i(OPENGL_WIDTH, -3);
- glEnd();
-
- SetColor(COLOR_GREEN);
-
- glPixelStorei(GL_UNPACK_LSB_FIRST, GL_TRUE);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-
- glRasterPos2i(0, 0);
- glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, 0, 3, 0.0, 0.0, OpenGL_bits);
-}
-
-static void Triangles(void)
-{
-
- glBegin(GL_TRIANGLES);
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, -boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/8, -boxH/16);
- SetColor(COLOR_BLUE);
- glVertex2i(boxW/8, -boxH/16);
-
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/8, boxH/16);
- SetColor(COLOR_BLUE);
- glVertex2i(boxW/8, boxH/16);
- glEnd();
-
- glBegin(GL_TRIANGLES);
- glVertex2i(0, 0);
- glVertex2i(-100, 100);
- glEnd();
-}
-
-static void TriangleStrip(void)
-{
-
- glBegin(GL_TRIANGLE_STRIP);
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, -boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/4, boxH/4);
- SetColor(COLOR_BLUE);
- glVertex2i(0, -boxH/4);
- SetColor(COLOR_WHITE);
- glVertex2i(0, boxH/4);
- SetColor(COLOR_CYAN);
- glVertex2i(boxW/4, -boxH/4);
- SetColor(COLOR_YELLOW);
- glVertex2i(boxW/4, boxH/4);
- glEnd();
-
- glBegin(GL_TRIANGLE_STRIP);
- glVertex2i(0, 0);
- glVertex2i(-100, 100);
- glEnd();
-}
-
-static void TriangleFan(void)
-{
- GLint vx[8][2];
- GLint x0, y0, x1, y1, x2, y2, x3, y3;
- GLint i;
-
- y0 = -boxH/4;
- y1 = y0 + boxH/2/3;
- y2 = y1 + boxH/2/3;
- y3 = boxH/4;
- x0 = -boxW/4;
- x1 = x0 + boxW/2/3;
- x2 = x1 + boxW/2/3;
- x3 = boxW/4;
-
- vx[0][0] = x0; vx[0][1] = y1;
- vx[1][0] = x0; vx[1][1] = y2;
- vx[2][0] = x1; vx[2][1] = y3;
- vx[3][0] = x2; vx[3][1] = y3;
- vx[4][0] = x3; vx[4][1] = y2;
- vx[5][0] = x3; vx[5][1] = y1;
- vx[6][0] = x2; vx[6][1] = y0;
- vx[7][0] = x1; vx[7][1] = y0;
-
- glBegin(GL_TRIANGLE_FAN);
- SetColor(COLOR_WHITE);
- glVertex2i(0, 0);
- for (i = 0; i < 8; i++) {
- SetColor(COLOR_WHITE-i);
- glVertex2iv(vx[i]);
- }
- glEnd();
-
- glBegin(GL_TRIANGLE_FAN);
- glVertex2i(0, 0);
- glVertex2i(-100, 100);
- glEnd();
-}
-
-static void Rect(void)
-{
-
- SetColor(COLOR_GREEN);
- glRecti(-boxW/4, -boxH/4, boxW/4, boxH/4);
-}
-
-static void PolygonFunc(void)
-{
- GLint vx[8][2];
- GLint x0, y0, x1, y1, x2, y2, x3, y3;
- GLint i;
-
- y0 = -boxH/4;
- y1 = y0 + boxH/2/3;
- y2 = y1 + boxH/2/3;
- y3 = boxH/4;
- x0 = -boxW/4;
- x1 = x0 + boxW/2/3;
- x2 = x1 + boxW/2/3;
- x3 = boxW/4;
-
- vx[0][0] = x0; vx[0][1] = y1;
- vx[1][0] = x0; vx[1][1] = y2;
- vx[2][0] = x1; vx[2][1] = y3;
- vx[3][0] = x2; vx[3][1] = y3;
- vx[4][0] = x3; vx[4][1] = y2;
- vx[5][0] = x3; vx[5][1] = y1;
- vx[6][0] = x2; vx[6][1] = y0;
- vx[7][0] = x1; vx[7][1] = y0;
-
- glBegin(GL_POLYGON);
- for (i = 0; i < 8; i++) {
- SetColor(COLOR_WHITE-i);
- glVertex2iv(vx[i]);
- }
- glEnd();
-
- glBegin(GL_POLYGON);
- glVertex2i(0, 0);
- glVertex2i(100, 100);
- glEnd();
-}
-
-static void Quads(void)
-{
-
- glBegin(GL_QUADS);
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, -boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/8, -boxH/16);
- SetColor(COLOR_BLUE);
- glVertex2i(boxW/8, -boxH/16);
- SetColor(COLOR_WHITE);
- glVertex2i(boxW/4, -boxH/4);
-
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/8, boxH/16);
- SetColor(COLOR_BLUE);
- glVertex2i(boxW/8, boxH/16);
- SetColor(COLOR_WHITE);
- glVertex2i(boxW/4, boxH/4);
- glEnd();
-
- glBegin(GL_QUADS);
- glVertex2i(0, 0);
- glVertex2i(100, 100);
- glVertex2i(-100, 100);
- glEnd();
-}
-
-static void QuadStrip(void)
-{
-
- glBegin(GL_QUAD_STRIP);
- SetColor(COLOR_GREEN);
- glVertex2i(-boxW/4, -boxH/4);
- SetColor(COLOR_RED);
- glVertex2i(-boxW/4, boxH/4);
- SetColor(COLOR_BLUE);
- glVertex2i(0, -boxH/4);
- SetColor(COLOR_WHITE);
- glVertex2i(0, boxH/4);
- SetColor(COLOR_CYAN);
- glVertex2i(boxW/4, -boxH/4);
- SetColor(COLOR_YELLOW);
- glVertex2i(boxW/4, boxH/4);
- glEnd();
-
- glBegin(GL_QUAD_STRIP);
- glVertex2i(0, 0);
- glVertex2i(100, 100);
- glVertex2i(-100, 100);
- glEnd();
-}
-
-static void Draw(EGLDisplay dpy, EGLSurface surf)
-{
-
- glViewport(0, 0, windW, windH);
- glDisable(GL_SCISSOR_TEST);
-
- glPushAttrib(GL_COLOR_BUFFER_BIT);
-
- glColorMask(1, 1, 1, 1);
- glIndexMask(~0);
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- glPopAttrib();
-
- if (mode1) {
- glShadeModel(GL_SMOOTH);
- } else {
- glShadeModel(GL_FLAT);
- }
-
- if (mode2) {
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- } else {
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- }
-
- Viewport(0, 0); Point();
- Viewport(0, 1); Lines();
- Viewport(0, 2); LineStrip();
- Viewport(0, 3); LineLoop();
-
- Viewport(1, 0); Bitmap();
-
- Viewport(1, 1); TriangleFan();
- Viewport(1, 2); Triangles();
- Viewport(1, 3); TriangleStrip();
-
- Viewport(2, 0); Rect();
- Viewport(2, 1); PolygonFunc();
- Viewport(2, 2); Quads();
- Viewport(2, 3); QuadStrip();
-
- glFlush();
-
- if (doubleBuffer) {
- eglSwapBuffers(dpy, surf);
- }
-}
-
-static void
-write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
-{
- const int binary = 0;
- FILE *f = fopen( filename, "w" );
- if (f) {
- int i, x, y;
- const GLubyte *ptr = buffer;
- if (binary) {
- fprintf(f,"P6\n");
- fprintf(f,"# ppm-file created by osdemo.c\n");
- fprintf(f,"%i %i\n", width,height);
- fprintf(f,"255\n");
- fclose(f);
- f = fopen( filename, "ab" ); /* reopen in binary append mode */
- for (y=height-1; y>=0; y--) {
- for (x=0; x<width; x++) {
- i = (y*width + x) * 4;
- fputc(ptr[i], f); /* write red */
- fputc(ptr[i+1], f); /* write green */
- fputc(ptr[i+2], f); /* write blue */
- }
- }
- }
- else {
- /*ASCII*/
- int counter = 0;
- fprintf(f,"P3\n");
- fprintf(f,"# ascii ppm file created by osdemo.c\n");
- fprintf(f,"%i %i\n", width, height);
- fprintf(f,"255\n");
- for (y=height-1; y>=0; y--) {
- for (x=0; x<width; x++) {
- i = (y*width + x) * 4;
- fprintf(f, " %3d %3d %3d", ptr[i], ptr[i+1], ptr[i+2]);
- counter++;
- if (counter % 5 == 0)
- fprintf(f, "\n");
- }
- }
- }
- fclose(f);
- }
-}
-
-int
-main(int argc, char *argv[])
-{
- int maj, min;
- EGLContext ctx;
- EGLSurface screen_surf;
- EGLConfig configs[10];
- EGLScreenMESA screen;
- EGLModeMESA mode;
- EGLint numConfigs, count;
- EGLBoolean b;
- const GLubyte *bitmap;
- EGLint screenAttribs[32];
- EGLint i;
-
- EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- assert(d);
-
- if (!eglInitialize(d, &maj, &min)) {
- printf("demo: eglInitialize failed\n");
- exit(1);
- }
-
- printf("EGL version = %d.%d\n", maj, min);
- printf("EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR));
- if (!strstr(eglQueryString(d, EGL_EXTENSIONS),
- "EGL_MESA_screen_surface")) {
- printf("EGL_MESA_screen_surface is not supported\n");
- exit(1);
- }
-
- eglGetConfigs(d, configs, 10, &numConfigs);
- eglGetScreensMESA(d, &screen, 1, &count);
- eglGetModesMESA(d, screen, &mode, 1, &count);
-
- eglBindAPI(EGL_OPENGL_API);
- ctx = eglCreateContext(d, configs[0], EGL_NO_CONTEXT, NULL);
- if (ctx == EGL_NO_CONTEXT) {
- printf("failed to create context\n");
- return 0;
- }
-
- i = 0;
- screenAttribs[i++] = EGL_WIDTH;
- eglGetModeAttribMESA(d, mode, EGL_WIDTH, &screenAttribs[i++]);
- screenAttribs[i++] = EGL_HEIGHT;
- eglGetModeAttribMESA(d, mode, EGL_HEIGHT, &screenAttribs[i++]);
- screenAttribs[i] = EGL_NONE;
-
- screen_surf = eglCreateScreenSurfaceMESA(d, configs[0], screenAttribs);
- if (screen_surf == EGL_NO_SURFACE) {
- printf("failed to create screen surface\n");
- return 0;
- }
-
- eglShowScreenSurfaceMESA(d, screen, screen_surf, mode);
-
- b = eglMakeCurrent(d, screen_surf, screen_surf, ctx);
- if (!b) {
- printf("make current failed\n");
- return 0;
- }
- glViewport(0, 0, 1024, 768);
-
-
- Init();
- Reshape(1024, 768);
-
- /* some drivers crash when rendering to front buffer */
-#if 0
- glDrawBuffer( GL_FRONT );
- glClearColor( 0, 1.0, 0, 1);
-
- glClear( GL_COLOR_BUFFER_BIT );
-#endif
-
- doubleBuffer = 1;
- glDrawBuffer( GL_BACK );
-
- Draw(d, screen_surf);
- sleep(2);
-
- /* TODO EGL_KHR_lock_surface */
- bitmap = NULL;
- if (bitmap)
- write_ppm("dump.ppm", bitmap, 1024, 768);
-
- eglDestroySurface(d, screen_surf);
- eglDestroyContext(d, ctx);
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/eglgears.c b/progs/egl/opengl/eglgears.c
deleted file mode 100644
index 430deb26e5..0000000000
--- a/progs/egl/opengl/eglgears.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * This is a port of the infamous "glxgears" demo to straight EGL
- * Port by Dane Rushton 10 July 2005
- *
- * No command line options.
- * Program runs for 5 seconds then exits, outputing framerate to console
- */
-
-#include <math.h>
-#include <GL/gl.h>
-#include <EGL/egl.h>
-
-#include "eglut.h"
-
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-/*
- *
- * Draw a gear wheel. You'll probably want to call this function when
- * building a display list since we do a lot of trig here.
- *
- * Input: inner_radius - radius of hole at center
- * outer_radius - radius at center of teeth
- * width - width of gear
- * teeth - number of teeth
- * tooth_depth - depth of tooth
- */
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
- GLint teeth, GLfloat tooth_depth)
-{
- GLint i;
- GLfloat r0, r1, r2;
- GLfloat angle, da;
- GLfloat u, v, len;
-
- r0 = inner_radius;
- r1 = outer_radius - tooth_depth / 2.0;
- r2 = outer_radius + tooth_depth / 2.0;
-
- da = 2.0 * M_PI / teeth / 4.0;
-
- glShadeModel(GL_FLAT);
-
- glNormal3f(0.0, 0.0, 1.0);
-
- /* draw front face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- if (i < teeth) {
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- }
- glEnd();
-
- /* draw front sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- glEnd();
-
- glNormal3f(0.0, 0.0, -1.0);
-
- /* draw back face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- if (i < teeth) {
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- }
- }
- glEnd();
-
- /* draw back sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- }
- glEnd();
-
- /* draw outward faces of teeth */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- u = r2 * cos(angle + da) - r1 * cos(angle);
- v = r2 * sin(angle + da) - r1 * sin(angle);
- len = sqrt(u * u + v * v);
- u /= len;
- v /= len;
- glNormal3f(v, -u, 0.0);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
- v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
- glNormal3f(v, -u, 0.0);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- }
-
- glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
- glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
- glEnd();
-
- glShadeModel(GL_SMOOTH);
-
- /* draw inside radius cylinder */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glNormal3f(-cos(angle), -sin(angle), 0.0);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- }
- glEnd();
-}
-
-
-static void
-draw(void)
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotatef(view_rotx, 1.0, 0.0, 0.0);
- glRotatef(view_roty, 0.0, 1.0, 0.0);
- glRotatef(view_rotz, 0.0, 0.0, 1.0);
-
- glPushMatrix();
- glTranslatef(-3.0, -2.0, 0.0);
- glRotatef(angle, 0.0, 0.0, 1.0);
- glCallList(gear1);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(3.1, -2.0, 0.0);
- glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
- glCallList(gear2);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(-3.1, 4.2, 0.0);
- glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
- glCallList(gear3);
- glPopMatrix();
-
- glPopMatrix();
-}
-
-
-static void
-idle(void)
-{
- static double t0 = -1.;
- double dt, t = eglutGet(EGLUT_ELAPSED_TIME) / 1000.0;
- if (t0 < 0.0)
- t0 = t;
- dt = t - t0;
- t0 = t;
-
- angle += 70.0 * dt; /* 70 degrees per second */
- angle = fmod(angle, 360.0); /* prevents eventual overflow */
-
- eglutPostRedisplay();
-}
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
- GLfloat h = (GLfloat) height / (GLfloat) width;
-
- glViewport(0, 0, (GLint) width, (GLint) height);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -40.0);
-}
-
-
-
-static void
-init(void)
-{
- static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
- static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
- static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
- static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
-
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glEnable(GL_CULL_FACE);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
-
- /* make the gears */
- gear1 = glGenLists(1);
- glNewList(gear1, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
- gear(1.0, 4.0, 1.0, 20, 0.7);
- glEndList();
-
- gear2 = glGenLists(1);
- glNewList(gear2, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
- gear(0.5, 2.0, 2.0, 10, 0.7);
- glEndList();
-
- gear3 = glGenLists(1);
- glNewList(gear3, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
- gear(1.3, 2.0, 0.5, 10, 0.7);
- glEndList();
-
- glEnable(GL_NORMALIZE);
-}
-
-int
-main(int argc, char *argv[])
-{
- eglutInitWindowSize(300, 300);
- eglutInitAPIMask(EGLUT_OPENGL_BIT);
- eglutInit(argc, argv);
-
- eglutCreateWindow("eglgears");
-
- eglutIdleFunc(idle);
- eglutReshapeFunc(reshape);
- eglutDisplayFunc(draw);
-
- init();
- glDrawBuffer(GL_BACK);
-
- eglutMainLoop();
-
- return 0;
-}
diff --git a/progs/egl/opengl/eglinfo.c b/progs/egl/opengl/eglinfo.c
deleted file mode 100644
index 961fd9ccc7..0000000000
--- a/progs/egl/opengl/eglinfo.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * eglinfo - like glxinfo but for EGL
- *
- * Brian Paul
- * 11 March 2005
- *
- * Copyright (C) 2005 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.
- */
-
-#define EGL_EGLEXT_PROTOTYPES
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define MAX_CONFIGS 1000
-#define MAX_MODES 1000
-#define MAX_SCREENS 10
-
-/* These are X visual types, so if you're running eglinfo under
- * something not X, they probably don't make sense. */
-static const char *vnames[] = { "SG", "GS", "SC", "PC", "TC", "DC" };
-
-/**
- * Print table of all available configurations.
- */
-static void
-PrintConfigs(EGLDisplay d)
-{
- EGLConfig configs[MAX_CONFIGS];
- EGLint numConfigs, i;
-
- eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs);
-
- printf("Configurations:\n");
- printf(" bf lv colorbuffer dp st ms vis cav bi renderable supported\n");
- printf(" id sz l r g b a th cl ns b id eat nd gl es es2 vg surfaces \n");
- printf("---------------------------------------------------------------------\n");
- for (i = 0; i < numConfigs; i++) {
- EGLint id, size, level;
- EGLint red, green, blue, alpha;
- EGLint depth, stencil;
- EGLint renderable, surfaces;
- EGLint vid, vtype, caveat, bindRgb, bindRgba;
- EGLint samples, sampleBuffers;
- char surfString[100] = "";
-
- eglGetConfigAttrib(d, configs[i], EGL_CONFIG_ID, &id);
- eglGetConfigAttrib(d, configs[i], EGL_BUFFER_SIZE, &size);
- eglGetConfigAttrib(d, configs[i], EGL_LEVEL, &level);
-
- eglGetConfigAttrib(d, configs[i], EGL_RED_SIZE, &red);
- eglGetConfigAttrib(d, configs[i], EGL_GREEN_SIZE, &green);
- eglGetConfigAttrib(d, configs[i], EGL_BLUE_SIZE, &blue);
- eglGetConfigAttrib(d, configs[i], EGL_ALPHA_SIZE, &alpha);
- eglGetConfigAttrib(d, configs[i], EGL_DEPTH_SIZE, &depth);
- eglGetConfigAttrib(d, configs[i], EGL_STENCIL_SIZE, &stencil);
- eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_ID, &vid);
- eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_TYPE, &vtype);
-
- eglGetConfigAttrib(d, configs[i], EGL_CONFIG_CAVEAT, &caveat);
- eglGetConfigAttrib(d, configs[i], EGL_BIND_TO_TEXTURE_RGB, &bindRgb);
- eglGetConfigAttrib(d, configs[i], EGL_BIND_TO_TEXTURE_RGBA, &bindRgba);
- eglGetConfigAttrib(d, configs[i], EGL_RENDERABLE_TYPE, &renderable);
- eglGetConfigAttrib(d, configs[i], EGL_SURFACE_TYPE, &surfaces);
-
- eglGetConfigAttrib(d, configs[i], EGL_SAMPLES, &samples);
- eglGetConfigAttrib(d, configs[i], EGL_SAMPLE_BUFFERS, &sampleBuffers);
-
- if (surfaces & EGL_WINDOW_BIT)
- strcat(surfString, "win,");
- if (surfaces & EGL_PBUFFER_BIT)
- strcat(surfString, "pb,");
- if (surfaces & EGL_PIXMAP_BIT)
- strcat(surfString, "pix,");
-#ifdef EGL_MESA_screen_surface
- if (surfaces & EGL_SCREEN_BIT_MESA)
- strcat(surfString, "scrn,");
-#endif
- if (strlen(surfString) > 0)
- surfString[strlen(surfString) - 1] = 0;
-
- printf("0x%02x %2d %2d %2d %2d %2d %2d %2d %2d %2d%2d 0x%02x%s ",
- id, size, level,
- red, green, blue, alpha,
- depth, stencil,
- samples, sampleBuffers, vid, vtype < 6 ? vnames[vtype] : "--");
- printf(" %c %c %c %c %c %c %s\n",
- (caveat != EGL_NONE) ? 'y' : ' ',
- (bindRgba) ? 'a' : (bindRgb) ? 'y' : ' ',
- (renderable & EGL_OPENGL_BIT) ? 'y' : ' ',
- (renderable & EGL_OPENGL_ES_BIT) ? 'y' : ' ',
- (renderable & EGL_OPENGL_ES2_BIT) ? 'y' : ' ',
- (renderable & EGL_OPENVG_BIT) ? 'y' : ' ',
- surfString);
- }
-}
-
-
-/**
- * Print table of all available configurations.
- */
-static void
-PrintModes(EGLDisplay d)
-{
-#ifdef EGL_MESA_screen_surface
- const char *extensions = eglQueryString(d, EGL_EXTENSIONS);
- if (strstr(extensions, "EGL_MESA_screen_surface")) {
- EGLScreenMESA screens[MAX_SCREENS];
- EGLint numScreens = 1, scrn;
- EGLModeMESA modes[MAX_MODES];
-
- eglGetScreensMESA(d, screens, MAX_SCREENS, &numScreens);
- printf("Number of Screens: %d\n\n", numScreens);
-
- for (scrn = 0; scrn < numScreens; scrn++) {
- EGLint numModes, i;
-
- eglGetModesMESA(d, screens[scrn], modes, MAX_MODES, &numModes);
-
- printf("Screen %d Modes:\n", scrn);
- printf(" id width height refresh name\n");
- printf("-----------------------------------------\n");
- for (i = 0; i < numModes; i++) {
- EGLint id, w, h, r;
- const char *str;
- eglGetModeAttribMESA(d, modes[i], EGL_MODE_ID_MESA, &id);
- eglGetModeAttribMESA(d, modes[i], EGL_WIDTH, &w);
- eglGetModeAttribMESA(d, modes[i], EGL_HEIGHT, &h);
- eglGetModeAttribMESA(d, modes[i], EGL_REFRESH_RATE_MESA, &r);
- str = eglQueryModeStringMESA(d, modes[i]);
- printf("0x%02x %5d %5d %.3f %s\n", id, w, h, r / 1000.0, str);
- }
- }
- }
-#endif
-}
-
-static void
-PrintExtensions(EGLDisplay d)
-{
- const char *extensions, *p, *end, *next;
- int column;
-
- printf("EGL extensions string:\n");
-
- extensions = eglQueryString(d, EGL_EXTENSIONS);
-
- column = 0;
- end = extensions + strlen(extensions);
-
- for (p = extensions; p < end; p = next + 1) {
- next = strchr(p, ' ');
- if (next == NULL)
- next = end;
-
- if (column > 0 && column + next - p + 1 > 70) {
- printf("\n");
- column = 0;
- }
- if (column == 0)
- printf(" ");
- else
- printf(" ");
- column += next - p + 1;
-
- printf("%.*s", (int) (next - p), p);
-
- p = next + 1;
- }
-
- if (column > 0)
- printf("\n");
-}
-
-int
-main(int argc, char *argv[])
-{
- int maj, min;
- EGLDisplay d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-
- if (!eglInitialize(d, &maj, &min)) {
- printf("eglinfo: eglInitialize failed\n");
- exit(1);
- }
-
- printf("EGL API version: %d.%d\n", maj, min);
- printf("EGL vendor string: %s\n", eglQueryString(d, EGL_VENDOR));
- printf("EGL version string: %s\n", eglQueryString(d, EGL_VERSION));
-#ifdef EGL_VERSION_1_2
- printf("EGL client APIs: %s\n", eglQueryString(d, EGL_CLIENT_APIS));
-#endif
-
- PrintExtensions(d);
-
- PrintConfigs(d);
-
- PrintModes(d);
-
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/eglscreen.c b/progs/egl/opengl/eglscreen.c
deleted file mode 100644
index 520f76ea03..0000000000
--- a/progs/egl/opengl/eglscreen.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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 <unistd.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;
- EGLint chosenMode = 0;
- EGLint width = 0, height = 0;
-
- d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- 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;
- }
-
- usleep(5000000);
-
- eglDestroySurface(d, screen_surf);
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/egltri.c b/progs/egl/opengl/egltri.c
deleted file mode 100644
index fb1dde3529..0000000000
--- a/progs/egl/opengl/egltri.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-/*
- * Draw a triangle with X/EGL.
- * Brian Paul
- * 3 June 2008
- */
-
-
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <GL/gl.h>
-
-#include "eglut.h"
-
-
-static GLfloat view_rotx = 0.0, view_roty = 0.0, view_rotz = 0.0;
-
-
-static void
-draw(void)
-{
- static const GLfloat verts[3][2] = {
- { -1, -1 },
- { 1, -1 },
- { 0, 1 }
- };
- static const GLfloat colors[3][3] = {
- { 1, 0, 0 },
- { 0, 1, 0 },
- { 0, 0, 1 }
- };
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotatef(view_rotx, 1, 0, 0);
- glRotatef(view_roty, 0, 1, 0);
- glRotatef(view_rotz, 0, 0, 1);
-
- {
- glVertexPointer(2, GL_FLOAT, 0, verts);
- glColorPointer(3, GL_FLOAT, 0, colors);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
-
- glDrawArrays(GL_TRIANGLES, 0, 3);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- }
-
- glPopMatrix();
-}
-
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
- GLfloat ar = (GLfloat) width / (GLfloat) height;
-
- glViewport(0, 0, (GLint) width, (GLint) height);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-ar, ar, -1, 1, 5.0, 60.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -10.0);
-}
-
-
-static void
-init(void)
-{
- glClearColor(0.4, 0.4, 0.4, 0.0);
-}
-
-
-static void
-special_key(int special)
-{
- switch (special) {
- case EGLUT_KEY_LEFT:
- view_roty += 5.0;
- break;
- case EGLUT_KEY_RIGHT:
- view_roty -= 5.0;
- break;
- case EGLUT_KEY_UP:
- view_rotx += 5.0;
- break;
- case EGLUT_KEY_DOWN:
- view_rotx -= 5.0;
- break;
- default:
- break;
- }
-}
-
-int
-main(int argc, char *argv[])
-{
- eglutInitWindowSize(300, 300);
- eglutInitAPIMask(EGLUT_OPENGL_BIT);
- eglutInit(argc, argv);
-
- eglutCreateWindow("egltri");
-
- eglutReshapeFunc(reshape);
- eglutDisplayFunc(draw);
- eglutSpecialFunc(special_key);
-
- init();
-
- eglutMainLoop();
-
- return 0;
-}
diff --git a/progs/egl/opengl/peglgears.c b/progs/egl/opengl/peglgears.c
deleted file mode 100644
index 212d1acf69..0000000000
--- a/progs/egl/opengl/peglgears.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * This is a port of the infamous "glxgears" demo to straight EGL
- * Port by Dane Rushton 10 July 2005
- *
- * No command line options.
- * Program runs for 5 seconds then exits, outputing framerate to console
- */
-
-#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
-
-#define BENCHMARK
-
-#ifdef BENCHMARK
-
-/* XXX this probably isn't very portable */
-
-#include <sys/time.h>
-#include <unistd.h>
-
-/* return current time (in seconds) */
-static double
-current_time(void)
-{
- struct timeval tv;
-#ifdef __VMS
- (void) gettimeofday(&tv, NULL );
-#else
- struct timezone tz;
- (void) gettimeofday(&tv, &tz);
-#endif
- return (double) tv.tv_sec + tv.tv_usec / 1000000.0;
-}
-
-#else /*BENCHMARK*/
-
-/* dummy */
-static double
-current_time(void)
-{
- /* update this function for other platforms! */
- static double t = 0.0;
- static int warn = 1;
- if (warn) {
- fprintf(stderr, "Warning: current_time() not implemented!!\n");
- warn = 0;
- }
- return t += 1.0;
-}
-
-#endif /*BENCHMARK*/
-
-
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-
-static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-#if 0
-static GLfloat eyesep = 5.0; /* Eye separation. */
-static GLfloat fix_point = 40.0; /* Fixation point distance. */
-static GLfloat left, right, asp; /* Stereo frustum params. */
-#endif
-
-
-/*
- *
- * Draw a gear wheel. You'll probably want to call this function when
- * building a display list since we do a lot of trig here.
- *
- * Input: inner_radius - radius of hole at center
- * outer_radius - radius at center of teeth
- * width - width of gear
- * teeth - number of teeth
- * tooth_depth - depth of tooth
- */
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
- GLint teeth, GLfloat tooth_depth)
-{
- GLint i;
- GLfloat r0, r1, r2;
- GLfloat angle, da;
- GLfloat u, v, len;
-
- r0 = inner_radius;
- r1 = outer_radius - tooth_depth / 2.0;
- r2 = outer_radius + tooth_depth / 2.0;
-
- da = 2.0 * M_PI / teeth / 4.0;
-
- glShadeModel(GL_FLAT);
-
- glNormal3f(0.0, 0.0, 1.0);
-
- /* draw front face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- if (i < teeth) {
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- }
- glEnd();
-
- /* draw front sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- glEnd();
-
- glNormal3f(0.0, 0.0, -1.0);
-
- /* draw back face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- if (i < teeth) {
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- }
- }
- glEnd();
-
- /* draw back sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- }
- glEnd();
-
- /* draw outward faces of teeth */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- u = r2 * cos(angle + da) - r1 * cos(angle);
- v = r2 * sin(angle + da) - r1 * sin(angle);
- len = sqrt(u * u + v * v);
- u /= len;
- v /= len;
- glNormal3f(v, -u, 0.0);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
- v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
- glNormal3f(v, -u, 0.0);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- }
-
- glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
- glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
- glEnd();
-
- glShadeModel(GL_SMOOTH);
-
- /* draw inside radius cylinder */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glNormal3f(-cos(angle), -sin(angle), 0.0);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- }
- glEnd();
-}
-
-
-static void
-draw(void)
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotatef(view_rotx, 1.0, 0.0, 0.0);
- glRotatef(view_roty, 0.0, 1.0, 0.0);
- glRotatef(view_rotz, 0.0, 0.0, 1.0);
-
- glPushMatrix();
- glTranslatef(-3.0, -2.0, 0.0);
- glRotatef(angle, 0.0, 0.0, 1.0);
- glCallList(gear1);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(3.1, -2.0, 0.0);
- glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
- glCallList(gear2);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(-3.1, 4.2, 0.0);
- glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
- glCallList(gear3);
- glPopMatrix();
-
- glPopMatrix();
-}
-
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
- GLfloat h = (GLfloat) height / (GLfloat) width;
-
- glViewport(0, 0, (GLint) width, (GLint) height);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -40.0);
-}
-
-
-
-static void
-init(void)
-{
- static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
- static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
- static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
- static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
-
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glEnable(GL_CULL_FACE);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
-
- /* make the gears */
- gear1 = glGenLists(1);
- glNewList(gear1, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
- gear(1.0, 4.0, 1.0, 20, 0.7);
- glEndList();
-
- gear2 = glGenLists(1);
- glNewList(gear2, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
- gear(0.5, 2.0, 2.0, 10, 0.7);
- glEndList();
-
- gear3 = glGenLists(1);
- glNewList(gear3, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
- gear(1.3, 2.0, 0.5, 10, 0.7);
- glEndList();
-
- glEnable(GL_NORMALIZE);
-}
-
-
-
-
-static void run_gears(EGLDisplay dpy, EGLSurface surf, int ttr)
-{
- double st = current_time();
- double ct = st;
- int frames = 0;
- GLfloat seconds, fps;
-
- while (ct - st < ttr)
- {
- double tt = current_time();
- double dt = tt - ct;
- ct = tt;
-
- /* advance rotation for next frame */
- angle += 70.0 * dt; /* 70 degrees per second */
- if (angle > 3600.0)
- angle -= 3600.0;
-
- draw();
-
- eglSwapBuffers(dpy, surf);
-
-
- frames++;
- }
-
- seconds = ct - st;
- fps = frames / seconds;
- printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds, fps);
-
-}
-
-
-int
-main(int argc, char *argv[])
-{
- int major, minor;
- EGLContext ctx;
- EGLSurface surface;
- EGLConfig configs[MAX_CONFIGS];
- EGLint numConfigs, i;
- EGLBoolean b;
- EGLDisplay d;
- EGLint screenAttribs[10];
- GLboolean printInfo = GL_FALSE;
- EGLint width = 300, height = 300;
-
- /* parse cmd line args */
- for (i = 1; i < argc; i++)
- {
- if (strcmp(argv[i], "-info") == 0)
- {
- printInfo = GL_TRUE;
- }
- else
- printf("Warning: unknown parameter: %s\n", argv[i]);
- }
-
- /* DBR : Create EGL context/surface etc */
- d = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- assert(d);
-
- if (!eglInitialize(d, &major, &minor)) {
- printf("peglgears: eglInitialize failed\n");
- return 0;
- }
-
- printf("peglgears: EGL version = %d.%d\n", major, minor);
- printf("peglgears: EGL_VENDOR = %s\n", eglQueryString(d, EGL_VENDOR));
-
- eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs);
-
- eglBindAPI(EGL_OPENGL_API);
-
- ctx = eglCreateContext(d, configs[0], EGL_NO_CONTEXT, NULL);
- if (ctx == EGL_NO_CONTEXT) {
- printf("peglgears: failed to create context\n");
- return 0;
- }
-
- /* build up screenAttribs array */
- i = 0;
- screenAttribs[i++] = EGL_WIDTH;
- screenAttribs[i++] = width;
- screenAttribs[i++] = EGL_HEIGHT;
- screenAttribs[i++] = height;
- screenAttribs[i++] = EGL_NONE;
-
- surface = eglCreatePbufferSurface(d, configs[0], screenAttribs);
- if (surface == EGL_NO_SURFACE) {
- printf("peglgears: failed to create pbuffer surface\n");
- return 0;
- }
-
- b = eglMakeCurrent(d, surface, surface, ctx);
- if (!b) {
- printf("peglgears: make current failed\n");
- return 0;
- }
-
- if (printInfo)
- {
- printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
- printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
- printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
- printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
- }
-
- init();
- reshape(width, height);
-
- glDrawBuffer( GL_BACK );
-
- run_gears(d, surface, 5.0);
-
- eglDestroySurface(d, surface);
- eglDestroyContext(d, ctx);
- eglTerminate(d);
-
- return 0;
-}
diff --git a/progs/egl/opengl/xeglgears.c b/progs/egl/opengl/xeglgears.c
deleted file mode 100644
index a6a977d9ff..0000000000
--- a/progs/egl/opengl/xeglgears.c
+++ /dev/null
@@ -1,954 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * Ported to X/EGL/GLES. XXX Actually, uses full OpenGL ATM.
- * Brian Paul
- * 30 May 2008
- */
-
-/*
- * Command line options:
- * -info print GL implementation information
- *
- */
-
-
-#define GL_GLEXT_PROTOTYPES
-#define EGL_EGLEXT_PROTOTYPES
-
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-#include <GL/gl.h>
-#include <EGL/egl.h>
-
-#include <EGL/eglext.h>
-
-
-#define BENCHMARK
-
-#ifdef BENCHMARK
-
-/* XXX this probably isn't very portable */
-
-#include <sys/time.h>
-#include <unistd.h>
-
-/* return current time (in seconds) */
-static double
-current_time(void)
-{
- struct timeval tv;
-#ifdef __VMS
- (void) gettimeofday(&tv, NULL );
-#else
- struct timezone tz;
- (void) gettimeofday(&tv, &tz);
-#endif
- return (double) tv.tv_sec + tv.tv_usec / 1000000.0;
-}
-
-#else /*BENCHMARK*/
-
-/* dummy */
-static double
-current_time(void)
-{
- /* update this function for other platforms! */
- static double t = 0.0;
- static int warn = 1;
- if (warn) {
- fprintf(stderr, "Warning: current_time() not implemented!!\n");
- warn = 0;
- }
- return t += 1.0;
-}
-
-#endif /*BENCHMARK*/
-
-
-
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-
-static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
-static GLint gear1, gear2, gear3;
-static GLfloat angle = 0.0;
-
-/*
- *
- * Draw a gear wheel. You'll probably want to call this function when
- * building a display list since we do a lot of trig here.
- *
- * Input: inner_radius - radius of hole at center
- * outer_radius - radius at center of teeth
- * width - width of gear
- * teeth - number of teeth
- * tooth_depth - depth of tooth
- */
-static void
-gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
- GLint teeth, GLfloat tooth_depth)
-{
- GLint i;
- GLfloat r0, r1, r2;
- GLfloat angle, da;
- GLfloat u, v, len;
-
- r0 = inner_radius;
- r1 = outer_radius - tooth_depth / 2.0;
- r2 = outer_radius + tooth_depth / 2.0;
-
- da = 2.0 * M_PI / teeth / 4.0;
-
- glShadeModel(GL_FLAT);
-
- glNormal3f(0.0, 0.0, 1.0);
-
- /* draw front face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- if (i < teeth) {
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- }
- glEnd();
-
- /* draw front sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- }
- glEnd();
-
- glNormal3f(0.0, 0.0, -1.0);
-
- /* draw back face */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- if (i < teeth) {
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- }
- }
- glEnd();
-
- /* draw back sides of teeth */
- glBegin(GL_QUADS);
- da = 2.0 * M_PI / teeth / 4.0;
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- }
- glEnd();
-
- /* draw outward faces of teeth */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i < teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
-
- glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
- glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
- u = r2 * cos(angle + da) - r1 * cos(angle);
- v = r2 * sin(angle + da) - r1 * sin(angle);
- len = sqrt(u * u + v * v);
- u /= len;
- v /= len;
- glNormal3f(v, -u, 0.0);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
- glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- width * 0.5);
- glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
- -width * 0.5);
- u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
- v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
- glNormal3f(v, -u, 0.0);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- width * 0.5);
- glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
- -width * 0.5);
- glNormal3f(cos(angle), sin(angle), 0.0);
- }
-
- glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
- glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
-
- glEnd();
-
- glShadeModel(GL_SMOOTH);
-
- /* draw inside radius cylinder */
- glBegin(GL_QUAD_STRIP);
- for (i = 0; i <= teeth; i++) {
- angle = i * 2.0 * M_PI / teeth;
- glNormal3f(-cos(angle), -sin(angle), 0.0);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
- glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
- }
- glEnd();
-}
-
-
-static void
-draw(void)
-{
- glClearColor(0.2, 0.2, 0.2, 0.2);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotatef(view_rotx, 1.0, 0.0, 0.0);
- glRotatef(view_roty, 0.0, 1.0, 0.0);
- glRotatef(view_rotz, 0.0, 0.0, 1.0);
-
- glPushMatrix();
- glTranslatef(-3.0, -2.0, 0.0);
- glRotatef(angle, 0.0, 0.0, 1.0);
- glCallList(gear1);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(3.1, -2.0, 0.0);
- glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
- glCallList(gear2);
- glPopMatrix();
-
- glPushMatrix();
- glTranslatef(-3.1, 4.2, 0.0);
- glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
- glCallList(gear3);
- glPopMatrix();
-
- glPopMatrix();
-}
-
-
-/* new window size or exposure */
-static void
-reshape(int width, int height)
-{
- GLfloat ar = (GLfloat) width / (GLfloat) height;
-
- glViewport(0, 0, (GLint) width, (GLint) height);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-ar, ar, -1, 1, 5.0, 60.0);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -40.0);
-}
-
-
-
-static void
-init(void)
-{
- static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
- static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
- static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
- static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
-
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glEnable(GL_CULL_FACE);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
-
- /* make the gears */
- gear1 = glGenLists(1);
- glNewList(gear1, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
- gear(1.0, 4.0, 1.0, 20, 0.7);
- glEndList();
-
- gear2 = glGenLists(1);
- glNewList(gear2, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
- gear(0.5, 2.0, 2.0, 10, 0.7);
- glEndList();
-
- gear3 = glGenLists(1);
- glNewList(gear3, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
- gear(1.3, 2.0, 0.5, 10, 0.7);
- glEndList();
-
- glEnable(GL_NORMALIZE);
-}
-
-
-struct egl_manager {
- EGLNativeDisplayType xdpy;
- EGLNativeWindowType xwin;
- EGLNativePixmapType xpix;
-
- EGLDisplay dpy;
- EGLConfig conf;
- EGLContext ctx;
-
- EGLSurface win;
- EGLSurface pix;
- EGLSurface pbuf;
- EGLImageKHR image;
-
- EGLBoolean verbose;
- EGLint major, minor;
-
- GC gc;
- GLuint fbo;
-};
-
-static struct egl_manager *
-egl_manager_new(EGLNativeDisplayType xdpy, const EGLint *attrib_list,
- EGLBoolean verbose)
-{
- struct egl_manager *eman;
- const char *ver;
- EGLint num_conf;
-
- eman = calloc(1, sizeof(*eman));
- if (!eman)
- return NULL;
-
- eman->verbose = verbose;
- eman->xdpy = xdpy;
-
- eman->dpy = eglGetDisplay(eman->xdpy);
- if (eman->dpy == EGL_NO_DISPLAY) {
- printf("eglGetDisplay() failed\n");
- free(eman);
- return NULL;
- }
-
- if (!eglInitialize(eman->dpy, &eman->major, &eman->minor)) {
- printf("eglInitialize() failed\n");
- free(eman);
- return NULL;
- }
-
- ver = eglQueryString(eman->dpy, EGL_VERSION);
- printf("EGL_VERSION = %s\n", ver);
-
- if (!eglChooseConfig(eman->dpy, attrib_list, &eman->conf, 1, &num_conf) ||
- !num_conf) {
- printf("eglChooseConfig() failed\n");
- eglTerminate(eman->dpy);
- free(eman);
- return NULL;
- }
-
- eman->ctx = eglCreateContext(eman->dpy, eman->conf, EGL_NO_CONTEXT, NULL);
- if (eman->ctx == EGL_NO_CONTEXT) {
- printf("eglCreateContext() failed\n");
- eglTerminate(eman->dpy);
- free(eman);
- return NULL;
- }
-
- return eman;
-}
-
-static EGLBoolean
-egl_manager_create_window(struct egl_manager *eman, const char *name,
- EGLint w, EGLint h, EGLBoolean need_surface,
- EGLBoolean fullscreen, const EGLint *attrib_list)
-{
- XVisualInfo vinfo_template, *vinfo = NULL;
- EGLint val, num_vinfo;
- Window root;
- XSetWindowAttributes attrs;
- unsigned long mask;
- EGLint x = 0, y = 0;
-
- if (!eglGetConfigAttrib(eman->dpy, eman->conf,
- EGL_NATIVE_VISUAL_ID, &val)) {
- printf("eglGetConfigAttrib() failed\n");
- return EGL_FALSE;
- }
- if (val) {
- vinfo_template.visualid = (VisualID) val;
- vinfo = XGetVisualInfo(eman->xdpy, VisualIDMask, &vinfo_template, &num_vinfo);
- }
- /* try harder if window surface is not needed */
- if (!vinfo && !need_surface &&
- eglGetConfigAttrib(eman->dpy, eman->conf, EGL_BUFFER_SIZE, &val)) {
- if (val == 32)
- val = 24;
- vinfo_template.depth = val;
- vinfo = XGetVisualInfo(eman->xdpy, VisualDepthMask, &vinfo_template, &num_vinfo);
- }
-
- if (!vinfo) {
- printf("XGetVisualInfo() failed\n");
- return EGL_FALSE;
- }
-
- root = DefaultRootWindow(eman->xdpy);
- if (fullscreen) {
- x = y = 0;
- w = DisplayWidth(eman->xdpy, DefaultScreen(eman->xdpy));
- h = DisplayHeight(eman->xdpy, DefaultScreen(eman->xdpy));
- }
-
- /* window attributes */
- attrs.background_pixel = 0;
- attrs.border_pixel = 0;
- attrs.colormap = XCreateColormap(eman->xdpy, root, vinfo->visual, AllocNone);
- attrs.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
- attrs.override_redirect = fullscreen;
- mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect;
-
- eman->xwin = XCreateWindow(eman->xdpy, root, x, y, w, h,
- 0, vinfo->depth, InputOutput,
- vinfo->visual, mask, &attrs);
- XFree(vinfo);
-
- /* set hints and properties */
- {
- XSizeHints sizehints;
- sizehints.x = x;
- sizehints.y = y;
- sizehints.width = w;
- sizehints.height = h;
- sizehints.flags = USSize | USPosition;
- XSetNormalHints(eman->xdpy, eman->xwin, &sizehints);
- XSetStandardProperties(eman->xdpy, eman->xwin, name, name,
- None, (char **)NULL, 0, &sizehints);
- }
-
- if (need_surface) {
- eman->win = eglCreateWindowSurface(eman->dpy, eman->conf,
- eman->xwin, attrib_list);
- if (eman->win == EGL_NO_SURFACE) {
- printf("eglCreateWindowSurface() failed\n");
- XDestroyWindow(eman->xdpy, eman->xwin);
- eman->xwin = None;
- return EGL_FALSE;
- }
- }
-
- eman->gc = XCreateGC(eman->xdpy, eman->xwin, 0, NULL);
-
- XMapWindow(eman->xdpy, eman->xwin);
-
- return EGL_TRUE;
-}
-
-static EGLBoolean
-egl_manager_create_pixmap(struct egl_manager *eman, EGLNativeWindowType xwin,
- EGLBoolean need_surface, const EGLint *attrib_list)
-{
- XWindowAttributes attrs;
-
- if (!XGetWindowAttributes(eman->xdpy, xwin, &attrs)) {
- printf("XGetWindowAttributes() failed\n");
- return EGL_FALSE;
- }
-
- eman->xpix = XCreatePixmap(eman->xdpy, xwin,
- attrs.width, attrs.height, attrs.depth);
-
- if (need_surface) {
- eman->pix = eglCreatePixmapSurface(eman->dpy, eman->conf,
- eman->xpix, attrib_list);
- if (eman->pix == EGL_NO_SURFACE) {
- printf("eglCreatePixmapSurface() failed\n");
- XFreePixmap(eman->xdpy, eman->xpix);
- eman->xpix = None;
- return EGL_FALSE;
- }
- }
-
- return EGL_TRUE;
-}
-
-static EGLBoolean
-egl_manager_create_pbuffer(struct egl_manager *eman, const EGLint *attrib_list)
-{
- eman->pbuf = eglCreatePbufferSurface(eman->dpy, eman->conf, attrib_list);
- if (eman->pbuf == EGL_NO_SURFACE) {
- printf("eglCreatePbufferSurface() failed\n");
- return EGL_FALSE;
- }
-
- return EGL_TRUE;
-}
-
-static void
-egl_manager_destroy(struct egl_manager *eman)
-{
- eglMakeCurrent(eman->dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- eglTerminate(eman->dpy);
-
- if (eman->xwin != None)
- XDestroyWindow(eman->xdpy, eman->xwin);
- if (eman->xpix != None)
- XFreePixmap(eman->xdpy, eman->xpix);
-
- XFreeGC(eman->xdpy, eman->gc);
-
- free(eman);
-}
-
-enum {
- GEARS_WINDOW,
- GEARS_PIXMAP,
- GEARS_PIXMAP_TEXTURE,
- GEARS_PBUFFER,
- GEARS_PBUFFER_TEXTURE,
- GEARS_RENDERBUFFER
-};
-
-static void
-texture_gears(struct egl_manager *eman, int surface_type)
-{
- static const GLint verts[12] =
- { -5, -6, -10, 5, -6, -10, -5, 4, 10, 5, 4, 10 };
- static const GLint tex_coords[8] = { 0, 0, 1, 0, 0, 1, 1, 1 };
-
- eglMakeCurrent(eman->dpy, eman->win, eman->win, eman->ctx);
-
- glClearColor(0, 0, 0, 0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glEnable(GL_TEXTURE_2D);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glVertexPointer(3, GL_INT, 0, verts);
- glTexCoordPointer(2, GL_INT, 0, tex_coords);
-
- if (surface_type == GEARS_PBUFFER_TEXTURE)
- eglBindTexImage(eman->dpy, eman->pbuf, EGL_BACK_BUFFER);
-
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisable(GL_TEXTURE_2D);
-
- if (surface_type == GEARS_PBUFFER_TEXTURE)
- eglReleaseTexImage(eman->dpy, eman->pbuf, EGL_BACK_BUFFER);
-
- eglSwapBuffers(eman->dpy, eman->win);
-}
-
-static void
-copy_gears(struct egl_manager *eman,
- EGLint tile_w, EGLint tile_h, EGLint w, EGLint h)
-{
- int x, y;
-
- eglWaitClient();
-
- for (x = 0; x < w; x += tile_w) {
- for (y = 0; y < h; y += tile_h) {
-
- XCopyArea(eman->xdpy, eman->xpix, eman->xwin, eman->gc,
- 0, 0, tile_w, tile_h, x, y);
- }
- }
-}
-
-static void
-event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
-{
- int window_w = w, window_h = h;
-
- if (surface_type == EGL_PBUFFER_BIT)
- printf("there will be no screen update if "
- "eglCopyBuffers() is not implemented\n");
-
- while (1) {
- while (XPending(eman->xdpy) > 0) {
- XEvent event;
- XNextEvent(eman->xdpy, &event);
- switch (event.type) {
- case Expose:
- /* we'll redraw below */
- break;
- case ConfigureNotify:
- window_w = event.xconfigure.width;
- window_h = event.xconfigure.height;
- if (surface_type == EGL_WINDOW_BIT)
- reshape(window_w, window_h);
- break;
- case KeyPress:
- {
- char buffer[10];
- int r, code;
- code = XLookupKeysym(&event.xkey, 0);
- if (code == XK_Left) {
- view_roty += 5.0;
- }
- else if (code == XK_Right) {
- view_roty -= 5.0;
- }
- else if (code == XK_Up) {
- view_rotx += 5.0;
- }
- else if (code == XK_Down) {
- view_rotx -= 5.0;
- }
- else {
- r = XLookupString(&event.xkey, buffer, sizeof(buffer),
- NULL, NULL);
- if (buffer[0] == 27) {
- /* escape */
- return;
- }
- }
- }
- }
- }
-
- {
- static int frames = 0;
- static double tRot0 = -1.0, tRate0 = -1.0;
- double dt, t = current_time();
- if (tRot0 < 0.0)
- tRot0 = t;
- dt = t - tRot0;
- tRot0 = t;
-
- /* advance rotation for next frame */
- angle += 70.0 * dt; /* 70 degrees per second */
- if (angle > 3600.0)
- angle -= 3600.0;
-
- switch (surface_type) {
- case GEARS_WINDOW:
- draw();
- eglSwapBuffers(eman->dpy, eman->win);
- break;
-
- case GEARS_PBUFFER:
- draw();
- if (!eglCopyBuffers(eman->dpy, eman->pbuf, eman->xpix))
- break;
- copy_gears(eman, w, h, window_w, window_h);
- break;
-
- case GEARS_PBUFFER_TEXTURE:
- eglMakeCurrent(eman->dpy, eman->pbuf, eman->pbuf, eman->ctx);
- draw();
- texture_gears(eman, surface_type);
- break;
-
- case GEARS_PIXMAP:
- draw();
- copy_gears(eman, w, h, window_w, window_h);
- break;
-
- case GEARS_PIXMAP_TEXTURE:
- eglMakeCurrent(eman->dpy, eman->pix, eman->pix, eman->ctx);
- draw();
- texture_gears(eman, surface_type);
- break;
-
- case GEARS_RENDERBUFFER:
- glBindFramebuffer(GL_FRAMEBUFFER_EXT, eman->fbo);
- draw();
- glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
- texture_gears(eman, surface_type);
- break;
- }
-
- frames++;
-
- if (tRate0 < 0.0)
- tRate0 = t;
- if (t - tRate0 >= 5.0) {
- GLfloat seconds = t - tRate0;
- GLfloat fps = frames / seconds;
- printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds,
- fps);
- tRate0 = t;
- frames = 0;
- }
- }
- }
-}
-
-
-static void
-usage(void)
-{
- printf("Usage:\n");
- printf(" -display <displayname> set the display to run on\n");
- printf(" -fullscreen run in fullscreen mode\n");
- printf(" -info display OpenGL renderer info\n");
- printf(" -pixmap use pixmap surface\n");
- printf(" -pixmap-texture use pixmap surface and texture using EGLImage\n");
- printf(" -pbuffer use pbuffer surface and eglCopyBuffers\n");
- printf(" -pbuffer-texture use pbuffer surface and eglBindTexImage\n");
- printf(" -renderbuffer renderbuffer as EGLImage and bind as texture from\n");
-}
-
-static const char *names[] = {
- "window",
- "pixmap",
- "pixmap_texture",
- "pbuffer",
- "pbuffer_texture",
- "renderbuffer"
-};
-
-int
-main(int argc, char *argv[])
-{
- const int winWidth = 300, winHeight = 300;
- Display *x_dpy;
- char *dpyName = NULL;
- struct egl_manager *eman;
- EGLint attribs[] = {
- EGL_SURFACE_TYPE, EGL_WINDOW_BIT, /* may be changed later */
- EGL_RED_SIZE, 1,
- EGL_GREEN_SIZE, 1,
- EGL_BLUE_SIZE, 1,
- EGL_DEPTH_SIZE, 1,
- EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
- EGL_NONE
- };
- char win_title[] = "xeglgears (window/pixmap/pbuffer)";
- EGLint surface_type = GEARS_WINDOW;
- GLboolean printInfo = GL_FALSE;
- GLboolean fullscreen = GL_FALSE;
- EGLBoolean ret;
- GLuint texture, color_rb, depth_rb;
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-display") == 0) {
- dpyName = argv[i+1];
- i++;
- }
- else if (strcmp(argv[i], "-info") == 0) {
- printInfo = GL_TRUE;
- }
- else if (strcmp(argv[i], "-fullscreen") == 0) {
- fullscreen = GL_TRUE;
- }
- else if (strcmp(argv[i], "-pixmap") == 0) {
- surface_type = GEARS_PIXMAP;
- attribs[1] = EGL_PIXMAP_BIT;
- }
- else if (strcmp(argv[i], "-pixmap-texture") == 0) {
- surface_type = GEARS_PIXMAP_TEXTURE;
- attribs[1] = EGL_PIXMAP_BIT;
- }
- else if (strcmp(argv[i], "-pbuffer") == 0) {
- surface_type = GEARS_PBUFFER;
- attribs[1] = EGL_PBUFFER_BIT;
- }
- else if (strcmp(argv[i], "-pbuffer-texture") == 0) {
- surface_type = GEARS_PBUFFER_TEXTURE;
- attribs[1] = EGL_PBUFFER_BIT;
- }
- else if (strcmp(argv[i], "-renderbuffer") == 0) {
- surface_type = GEARS_RENDERBUFFER;
- }
- else {
- usage();
- return -1;
- }
- }
-
- x_dpy = XOpenDisplay(dpyName);
- if (!x_dpy) {
- printf("Error: couldn't open display %s\n",
- dpyName ? dpyName : getenv("DISPLAY"));
- return -1;
- }
-
- eglBindAPI(EGL_OPENGL_API);
-
- eman = egl_manager_new(x_dpy, attribs, printInfo);
- if (!eman) {
- XCloseDisplay(x_dpy);
- return -1;
- }
-
- snprintf(win_title, sizeof(win_title),
- "xeglgears (%s)", names[surface_type]);
-
- ret = egl_manager_create_window(eman, win_title, winWidth, winHeight,
- EGL_TRUE, fullscreen, NULL);
- if (!ret)
- return -1;
-
- /* create surface(s) */
- switch (surface_type) {
- case GEARS_WINDOW:
- if (ret)
- ret = eglMakeCurrent(eman->dpy, eman->win, eman->win, eman->ctx);
- break;
- case GEARS_PIXMAP:
- case GEARS_PIXMAP_TEXTURE:
- ret = egl_manager_create_pixmap(eman, eman->xwin, EGL_TRUE, NULL);
- if (surface_type == GEARS_PIXMAP_TEXTURE)
- eman->image = eglCreateImageKHR (eman->dpy, eman->ctx,
- EGL_NATIVE_PIXMAP_KHR,
- (EGLClientBuffer) eman->xpix, NULL);
- if (ret)
- ret = eglMakeCurrent(eman->dpy, eman->pix, eman->pix, eman->ctx);
- break;
- case GEARS_PBUFFER:
- case GEARS_PBUFFER_TEXTURE:
- {
- EGLint pbuf_attribs[] = {
- EGL_WIDTH, winWidth,
- EGL_HEIGHT, winHeight,
- EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB,
- EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
- EGL_NONE
- };
- ret = (egl_manager_create_pixmap(eman, eman->xwin,
- EGL_TRUE, NULL) &&
- egl_manager_create_pbuffer(eman, pbuf_attribs));
- if (ret)
- ret = eglMakeCurrent(eman->dpy, eman->pbuf, eman->pbuf, eman->ctx);
- }
- break;
-
-
- case GEARS_RENDERBUFFER:
- ret = eglMakeCurrent(eman->dpy, eman->win, eman->win, eman->ctx);
- if (ret == EGL_FALSE)
- printf("failed to make context current\n");
-
- glGenFramebuffers(1, &eman->fbo);
- glBindFramebuffer(GL_FRAMEBUFFER_EXT, eman->fbo);
-
- glGenRenderbuffers(1, &color_rb);
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, color_rb);
- glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_RGBA, winWidth, winHeight);
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
- GL_COLOR_ATTACHMENT0_EXT,
- GL_RENDERBUFFER_EXT,
- color_rb);
-
- eman->image = eglCreateImageKHR(eman->dpy, eman->ctx,
- EGL_GL_RENDERBUFFER_KHR,
- (EGLClientBuffer) color_rb, NULL);
-
- glGenRenderbuffers(1, &depth_rb);
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_rb);
- glRenderbufferStorage(GL_RENDERBUFFER_EXT,
- GL_DEPTH_COMPONENT, winWidth, winHeight);
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
- GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT,
- depth_rb);
-
- if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE) {
- printf("framebuffer not complete\n");
- exit(1);
- }
-
- break;
-
- default:
- ret = EGL_FALSE;
- break;
- }
-
- switch (surface_type) {
- case GEARS_PIXMAP_TEXTURE:
- case GEARS_RENDERBUFFER:
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eman->image);
- break;
- case GEARS_PBUFFER_TEXTURE:
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- break;
- }
-
- if (!ret) {
- egl_manager_destroy(eman);
- XCloseDisplay(x_dpy);
- return -1;
- }
-
- if (printInfo) {
- printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
- printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
- printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
- }
-
- init();
-
- /* Set initial projection/viewing transformation.
- * We can't be sure we'll get a ConfigureNotify event when the window
- * first appears.
- */
- reshape(winWidth, winHeight);
-
- event_loop(eman, surface_type, winWidth, winHeight);
-
- glDeleteLists(gear1, 1);
- glDeleteLists(gear2, 1);
- glDeleteLists(gear3, 1);
-
- egl_manager_destroy(eman);
- XCloseDisplay(x_dpy);
-
- return 0;
-}
diff --git a/progs/egl/opengl/xeglthreads.c b/progs/egl/opengl/xeglthreads.c
deleted file mode 100644
index 5787faecb9..0000000000
--- a/progs/egl/opengl/xeglthreads.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * Copyright (C) 2000 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.
- *
- * Ported to EGL by Chia-I Wu <olvaffe@gmail.com>
- */
-
-
-/*
- * This program tests EGL thread safety.
- * Command line options:
- * -p Open a display connection for each thread
- * -l Enable application-side locking
- * -n <num threads> Number of threads to create (default is 2)
- * -display <display name> Specify X display (default is $DISPLAY)
- * -t Use texture mapping
- *
- * Brian Paul 20 July 2000
- */
-
-
-/*
- * Notes:
- * - Each thread gets its own EGL context.
- *
- * - The EGL contexts share texture objects.
- *
- * - When 't' is pressed to update the texture image, the window/thread which
- * has input focus is signalled to change the texture. The other threads
- * should see the updated texture the next time they call glBindTexture.
- */
-
-
-#if defined(PTHREADS) /* defined by Mesa on Linux and other platforms */
-
-#include <assert.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <GL/gl.h>
-#include <EGL/egl.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-
-
-/*
- * Each window/thread/context:
- */
-struct winthread {
- Display *Dpy;
- int Index;
- pthread_t Thread;
- Window Win;
- EGLDisplay Display;
- EGLContext Context;
- EGLSurface Surface;
- float Angle;
- int WinWidth, WinHeight;
- GLboolean NewSize;
- GLboolean Initialized;
- GLboolean MakeNewTexture;
-};
-
-
-#define MAX_WINTHREADS 100
-static struct winthread WinThreads[MAX_WINTHREADS];
-static int NumWinThreads = 0;
-static volatile GLboolean ExitFlag = GL_FALSE;
-
-static GLboolean MultiDisplays = 0;
-static GLboolean Locking = 0;
-static GLboolean Texture = GL_FALSE;
-static GLuint TexObj = 12;
-static GLboolean Animate = GL_TRUE;
-
-static pthread_mutex_t Mutex;
-static pthread_cond_t CondVar;
-static pthread_mutex_t CondMutex;
-
-
-static void
-Error(const char *msg)
-{
- fprintf(stderr, "Error: %s\n", msg);
- exit(1);
-}
-
-
-static void
-signal_redraw(void)
-{
- pthread_mutex_lock(&CondMutex);
- pthread_cond_broadcast(&CondVar);
- pthread_mutex_unlock(&CondMutex);
-}
-
-
-static void
-MakeNewTexture(struct winthread *wt)
-{
-#define TEX_SIZE 128
- static float step = 0.0;
- GLfloat image[TEX_SIZE][TEX_SIZE][4];
- GLint width;
- int i, j;
-
- for (j = 0; j < TEX_SIZE; j++) {
- for (i = 0; i < TEX_SIZE; i++) {
- float dt = 5.0 * (j - 0.5 * TEX_SIZE) / TEX_SIZE;
- float ds = 5.0 * (i - 0.5 * TEX_SIZE) / TEX_SIZE;
- float r = dt * dt + ds * ds + step;
- image[j][i][0] =
- image[j][i][1] =
- image[j][i][2] = 0.75 + 0.25 * cos(r);
- image[j][i][3] = 1.0;
- }
- }
-
- step += 0.5;
-
- glBindTexture(GL_TEXTURE_2D, TexObj);
-
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
- if (width) {
- assert(width == TEX_SIZE);
- /* sub-tex replace */
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, TEX_SIZE, TEX_SIZE,
- GL_RGBA, GL_FLOAT, image);
- }
- else {
- /* create new */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEX_SIZE, TEX_SIZE, 0,
- GL_RGBA, GL_FLOAT, image);
- }
-}
-
-
-
-/* draw a colored cube */
-static void
-draw_object(void)
-{
- glPushMatrix();
- glScalef(0.75, 0.75, 0.75);
-
- glColor3f(1, 0, 0);
-
- if (Texture) {
- glBindTexture(GL_TEXTURE_2D, TexObj);
- glEnable(GL_TEXTURE_2D);
- }
- else {
- glDisable(GL_TEXTURE_2D);
- }
-
- glBegin(GL_QUADS);
-
- /* -X */
- glColor3f(0, 1, 1);
- glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
- glTexCoord2f(1, 0); glVertex3f(-1, 1, -1);
- glTexCoord2f(1, 1); glVertex3f(-1, 1, 1);
- glTexCoord2f(0, 1); glVertex3f(-1, -1, 1);
-
- /* +X */
- glColor3f(1, 0, 0);
- glTexCoord2f(0, 0); glVertex3f(1, -1, -1);
- glTexCoord2f(1, 0); glVertex3f(1, 1, -1);
- glTexCoord2f(1, 1); glVertex3f(1, 1, 1);
- glTexCoord2f(0, 1); glVertex3f(1, -1, 1);
-
- /* -Y */
- glColor3f(1, 0, 1);
- glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
- glTexCoord2f(1, 0); glVertex3f( 1, -1, -1);
- glTexCoord2f(1, 1); glVertex3f( 1, -1, 1);
- glTexCoord2f(0, 1); glVertex3f(-1, -1, 1);
-
- /* +Y */
- glColor3f(0, 1, 0);
- glTexCoord2f(0, 0); glVertex3f(-1, 1, -1);
- glTexCoord2f(1, 0); glVertex3f( 1, 1, -1);
- glTexCoord2f(1, 1); glVertex3f( 1, 1, 1);
- glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);
-
- /* -Z */
- glColor3f(1, 1, 0);
- glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
- glTexCoord2f(1, 0); glVertex3f( 1, -1, -1);
- glTexCoord2f(1, 1); glVertex3f( 1, 1, -1);
- glTexCoord2f(0, 1); glVertex3f(-1, 1, -1);
-
- /* +Y */
- glColor3f(0, 0, 1);
- glTexCoord2f(0, 0); glVertex3f(-1, -1, 1);
- glTexCoord2f(1, 0); glVertex3f( 1, -1, 1);
- glTexCoord2f(1, 1); glVertex3f( 1, 1, 1);
- glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);
-
- glEnd();
-
- glPopMatrix();
-}
-
-
-/* signal resize of given window */
-static void
-resize(struct winthread *wt, int w, int h)
-{
- wt->NewSize = GL_TRUE;
- wt->WinWidth = w;
- wt->WinHeight = h;
- if (!Animate)
- signal_redraw();
-}
-
-
-/*
- * We have an instance of this for each thread.
- */
-static void
-draw_loop(struct winthread *wt)
-{
- while (!ExitFlag) {
-
- if (Locking)
- pthread_mutex_lock(&Mutex);
-
- if (!wt->Initialized) {
- eglMakeCurrent(wt->Display, wt->Surface, wt->Surface, wt->Context);
- printf("xeglthreads: %d: GL_RENDERER = %s\n", wt->Index,
- (char *) glGetString(GL_RENDERER));
- if (Texture /*&& wt->Index == 0*/) {
- MakeNewTexture(wt);
- }
- wt->Initialized = GL_TRUE;
- }
-
- if (Locking)
- pthread_mutex_unlock(&Mutex);
-
- eglBindAPI(EGL_OPENGL_API);
- if (eglGetCurrentContext() != wt->Context) {
- printf("xeglthreads: current context %p != %p\n",
- eglGetCurrentContext(), wt->Context);
- }
-
- glEnable(GL_DEPTH_TEST);
-
- if (wt->NewSize) {
- GLfloat w = (float) wt->WinWidth / (float) wt->WinHeight;
- glViewport(0, 0, wt->WinWidth, wt->WinHeight);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-w, w, -1.0, 1.0, 1.5, 10);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0, 0, -2.5);
- wt->NewSize = GL_FALSE;
- }
-
- if (wt->MakeNewTexture) {
- MakeNewTexture(wt);
- wt->MakeNewTexture = GL_FALSE;
- }
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotatef(wt->Angle, 0, 1, 0);
- glRotatef(wt->Angle, 1, 0, 0);
- glScalef(0.7, 0.7, 0.7);
- draw_object();
- glPopMatrix();
-
- if (Locking)
- pthread_mutex_lock(&Mutex);
-
- eglSwapBuffers(wt->Display, wt->Surface);
-
- if (Locking)
- pthread_mutex_unlock(&Mutex);
-
- if (Animate) {
- usleep(5000);
- }
- else {
- /* wait for signal to draw */
- pthread_mutex_lock(&CondMutex);
- pthread_cond_wait(&CondVar, &CondMutex);
- pthread_mutex_unlock(&CondMutex);
- }
- wt->Angle += 1.0;
- }
- eglMakeCurrent(wt->Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-}
-
-
-static void
-keypress(XEvent *event, struct winthread *wt)
-{
- char buf[100];
- KeySym keySym;
- XComposeStatus stat;
-
- XLookupString(&event->xkey, buf, sizeof(buf), &keySym, &stat);
-
- switch (keySym) {
- case XK_Escape:
- /* tell all threads to exit */
- if (!Animate) {
- signal_redraw();
- }
- ExitFlag = GL_TRUE;
- /*printf("exit draw_loop %d\n", wt->Index);*/
- return;
- case XK_t:
- case XK_T:
- if (Texture) {
- wt->MakeNewTexture = GL_TRUE;
- if (!Animate)
- signal_redraw();
- }
- break;
- case XK_a:
- case XK_A:
- Animate = !Animate;
- if (Animate) /* yes, prev Animate state! */
- signal_redraw();
- break;
- case XK_s:
- case XK_S:
- if (!Animate)
- signal_redraw();
- break;
- default:
- ; /* nop */
- }
-}
-
-
-/*
- * The main process thread runs this loop.
- * Single display connection for all threads.
- */
-static void
-event_loop(Display *dpy)
-{
- XEvent event;
- int i;
-
- assert(!MultiDisplays);
-
- while (!ExitFlag) {
-
- if (Locking) {
- while (1) {
- int k;
- pthread_mutex_lock(&Mutex);
- k = XPending(dpy);
- if (k) {
- XNextEvent(dpy, &event);
- pthread_mutex_unlock(&Mutex);
- break;
- }
- pthread_mutex_unlock(&Mutex);
- usleep(5000);
- }
- }
- else {
- XNextEvent(dpy, &event);
- }
-
- switch (event.type) {
- case ConfigureNotify:
- /* Find winthread for this event's window */
- for (i = 0; i < NumWinThreads; i++) {
- struct winthread *wt = &WinThreads[i];
- if (event.xconfigure.window == wt->Win) {
- resize(wt, event.xconfigure.width,
- event.xconfigure.height);
- break;
- }
- }
- break;
- case KeyPress:
- for (i = 0; i < NumWinThreads; i++) {
- struct winthread *wt = &WinThreads[i];
- if (event.xkey.window == wt->Win) {
- keypress(&event, wt);
- break;
- }
- }
- break;
- default:
- /*no-op*/ ;
- }
- }
-}
-
-
-/*
- * Separate display connection for each thread.
- */
-static void
-event_loop_multi(void)
-{
- XEvent event;
- int w = 0;
-
- assert(MultiDisplays);
-
- while (!ExitFlag) {
- struct winthread *wt = &WinThreads[w];
- if (XPending(wt->Dpy)) {
- XNextEvent(wt->Dpy, &event);
- switch (event.type) {
- case ConfigureNotify:
- resize(wt, event.xconfigure.width, event.xconfigure.height);
- break;
- case KeyPress:
- keypress(&event, wt);
- break;
- default:
- ; /* nop */
- }
- }
- w = (w + 1) % NumWinThreads;
- usleep(5000);
- }
-}
-
-
-
-/*
- * we'll call this once for each thread, before the threads are created.
- */
-static void
-create_window(struct winthread *wt, EGLContext shareCtx)
-{
- Window win;
- EGLContext ctx;
- EGLSurface surf;
- EGLint attribs[] = { EGL_RED_SIZE, 1,
- EGL_GREEN_SIZE, 1,
- EGL_BLUE_SIZE, 1,
- EGL_DEPTH_SIZE, 1,
- EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
- EGL_NONE };
- EGLConfig config;
- EGLint num_configs;
- EGLint vid;
- int scrnum;
- XSetWindowAttributes attr;
- unsigned long mask;
- Window root;
- XVisualInfo *visinfo, visTemplate;
- int num_visuals;
- int width = 160, height = 160;
- int xpos = (wt->Index % 8) * (width + 10);
- int ypos = (wt->Index / 8) * (width + 20);
-
- scrnum = DefaultScreen(wt->Dpy);
- root = RootWindow(wt->Dpy, scrnum);
-
- if (!eglChooseConfig(wt->Display, attribs, &config, 1, &num_configs) ||
- !num_configs) {
- Error("Unable to choose an EGL config");
- }
-
- assert(config);
- assert(num_configs > 0);
-
- if (!eglGetConfigAttrib(wt->Display, config, EGL_NATIVE_VISUAL_ID, &vid)) {
- Error("Unable to get visual id of EGL config\n");
- }
-
- visTemplate.visualid = vid;
- visinfo = XGetVisualInfo(wt->Dpy, VisualIDMask,
- &visTemplate, &num_visuals);
- if (!visinfo) {
- Error("Unable to find RGB, Z, double-buffered visual");
- }
-
- /* window attributes */
- attr.background_pixel = 0;
- attr.border_pixel = 0;
- attr.colormap = XCreateColormap(wt->Dpy, root, visinfo->visual, AllocNone);
- attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
- mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
-
- win = XCreateWindow(wt->Dpy, root, xpos, ypos, width, height,
- 0, visinfo->depth, InputOutput,
- visinfo->visual, mask, &attr);
- if (!win) {
- Error("Couldn't create window");
- }
-
- XFree(visinfo);
-
- {
- XSizeHints sizehints;
- sizehints.x = xpos;
- sizehints.y = ypos;
- sizehints.width = width;
- sizehints.height = height;
- sizehints.flags = USSize | USPosition;
- XSetNormalHints(wt->Dpy, win, &sizehints);
- XSetStandardProperties(wt->Dpy, win, "xeglthreads", "xeglthreads",
- None, (char **)NULL, 0, &sizehints);
- }
-
- eglBindAPI(EGL_OPENGL_API);
-
- ctx = eglCreateContext(wt->Display, config, shareCtx, NULL);
- if (!ctx) {
- Error("Couldn't create EGL context");
- }
- surf = eglCreateWindowSurface(wt->Display, config, win, NULL);
- if (!surf) {
- Error("Couldn't create EGL surface");
- }
-
- XMapWindow(wt->Dpy, win);
- XSync(wt->Dpy, 0);
-
- /* save the info for this window/context */
- wt->Win = win;
- wt->Context = ctx;
- wt->Surface = surf;
- wt->Angle = 0.0;
- wt->WinWidth = width;
- wt->WinHeight = height;
- wt->NewSize = GL_TRUE;
-}
-
-
-/*
- * Called by pthread_create()
- */
-static void *
-thread_function(void *p)
-{
- struct winthread *wt = (struct winthread *) p;
- draw_loop(wt);
- return NULL;
-}
-
-
-/*
- * called before exit to wait for all threads to finish
- */
-static void
-clean_up(void)
-{
- int i;
-
- /* wait for threads to finish */
- for (i = 0; i < NumWinThreads; i++) {
- pthread_join(WinThreads[i].Thread, NULL);
- }
-
- for (i = 0; i < NumWinThreads; i++) {
- eglDestroyContext(WinThreads[i].Display, WinThreads[i].Context);
- XDestroyWindow(WinThreads[i].Dpy, WinThreads[i].Win);
- }
-}
-
-
-static void
-usage(void)
-{
- printf("xeglthreads: test of EGL/GL thread safety (any key = exit)\n");
- printf("Usage:\n");
- printf(" xeglthreads [options]\n");
- printf("Options:\n");
- printf(" -display DISPLAYNAME Specify display string\n");
- printf(" -n NUMTHREADS Number of threads to create\n");
- printf(" -p Use a separate display connection for each thread\n");
- printf(" -l Use application-side locking\n");
- printf(" -t Enable texturing\n");
- printf("Keyboard:\n");
- printf(" Esc Exit\n");
- printf(" t Change texture image (requires -t option)\n");
- printf(" a Toggle animation\n");
- printf(" s Step rotation (when not animating)\n");
-}
-
-
-int
-main(int argc, char *argv[])
-{
- char *displayName = NULL;
- int numThreads = 2;
- Display *dpy = NULL;
- EGLDisplay *egl_dpy = NULL;
- int i;
- Status threadStat;
-
- if (argc == 1) {
- usage();
- }
- else {
- int i;
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-display") == 0 && i + 1 < argc) {
- displayName = argv[i + 1];
- i++;
- }
- else if (strcmp(argv[i], "-p") == 0) {
- MultiDisplays = 1;
- }
- else if (strcmp(argv[i], "-l") == 0) {
- Locking = 1;
- }
- else if (strcmp(argv[i], "-t") == 0) {
- Texture = 1;
- }
- else if (strcmp(argv[i], "-n") == 0 && i + 1 < argc) {
- numThreads = atoi(argv[i + 1]);
- if (numThreads < 1)
- numThreads = 1;
- else if (numThreads > MAX_WINTHREADS)
- numThreads = MAX_WINTHREADS;
- i++;
- }
- else {
- usage();
- exit(1);
- }
- }
- }
-
- if (Locking)
- printf("xeglthreads: Using explicit locks around Xlib calls.\n");
- else
- printf("xeglthreads: No explict locking.\n");
-
- if (MultiDisplays)
- printf("xeglthreads: Per-thread display connections.\n");
- else
- printf("xeglthreads: Single display connection.\n");
-
- /*
- * VERY IMPORTANT: call XInitThreads() before any other Xlib functions.
- */
- if (!MultiDisplays) {
- if (!Locking) {
- threadStat = XInitThreads();
- if (threadStat) {
- printf("XInitThreads() returned %d (success)\n",
- (int) threadStat);
- }
- else {
- printf("XInitThreads() returned 0 "
- "(failure- this program may fail)\n");
- }
- }
-
- dpy = XOpenDisplay(displayName);
- if (!dpy) {
- fprintf(stderr, "Unable to open display %s\n",
- XDisplayName(displayName));
- return -1;
- }
- egl_dpy = eglGetDisplay(dpy);
- if (!egl_dpy) {
- fprintf(stderr, "Unable to get EGL display\n");
- XCloseDisplay(dpy);
- return -1;
- }
- if (!eglInitialize(egl_dpy, NULL, NULL)) {
- fprintf(stderr, "Unable to initialize EGL display\n");
- return -1;
- }
- }
-
- pthread_mutex_init(&Mutex, NULL);
- pthread_mutex_init(&CondMutex, NULL);
- pthread_cond_init(&CondVar, NULL);
-
- printf("xeglthreads: creating windows\n");
-
- NumWinThreads = numThreads;
-
- /* Create the EGL windows and contexts */
- for (i = 0; i < numThreads; i++) {
- EGLContext share;
-
- if (MultiDisplays) {
- WinThreads[i].Dpy = XOpenDisplay(displayName);
- assert(WinThreads[i].Dpy);
- WinThreads[i].Display = eglGetDisplay(WinThreads[i].Dpy);
- assert(eglInitialize(WinThreads[i].Display, NULL, NULL));
- }
- else {
- WinThreads[i].Dpy = dpy;
- WinThreads[i].Display = egl_dpy;
- }
- WinThreads[i].Index = i;
- WinThreads[i].Initialized = GL_FALSE;
-
- share = (Texture && i > 0) ? WinThreads[0].Context : 0;
-
- create_window(&WinThreads[i], share);
- }
-
- printf("xeglthreads: creating threads\n");
-
- /* Create the threads */
- for (i = 0; i < numThreads; i++) {
- pthread_create(&WinThreads[i].Thread, NULL, thread_function,
- (void*) &WinThreads[i]);
- printf("xeglthreads: Created thread %p\n",
- (void *) WinThreads[i].Thread);
- }
-
- if (MultiDisplays)
- event_loop_multi();
- else
- event_loop(dpy);
-
- clean_up();
-
- if (MultiDisplays) {
- for (i = 0; i < numThreads; i++) {
- eglTerminate(WinThreads[i].Display);
- XCloseDisplay(WinThreads[i].Dpy);
- }
- }
- else {
- eglTerminate(egl_dpy);
- XCloseDisplay(dpy);
- }
-
- return 0;
-}
-
-
-#else /* PTHREADS */
-
-
-#include <stdio.h>
-
-int
-main(int argc, char *argv[])
-{
- printf("Sorry, this program wasn't compiled with PTHREADS defined.\n");
- return 0;
-}
-
-
-#endif /* PTHREADS */