--- a/test/testgles.c Tue Apr 28 04:33:30 2009 +0000
+++ b/test/testgles.c Tue Apr 28 04:38:51 2009 +0000
@@ -14,16 +14,26 @@
#include "SDL_opengles.h"
static CommonState *state;
-static SDL_GLContext context;
+static SDL_GLContext *context=NULL;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void
quit(int rc)
{
- if (context) {
- /* SDL_GL_MakeCurrent(0, NULL); *//* doesn't do anything */
- SDL_GL_DeleteContext(context);
+ int i;
+
+ if (context!=NULL)
+ {
+ for (i=0; i<state->num_windows; i++)
+ {
+ if (context[i]) {
+ SDL_GL_DeleteContext(context[i]);
+ }
+ }
+
+ SDL_free(context);
}
+
CommonQuit(state);
exit(rc);
}
@@ -139,11 +149,21 @@
quit(2);
}
- /* Create OpenGL context */
- context = SDL_GL_CreateContext(state->windows[0]);
- if (!context) {
- fprintf(stderr, "SDL_GL_CreateContext(): %s\n", SDL_GetError());
- quit(2);
+ context=SDL_calloc(state->num_windows, sizeof(SDL_GLContext));
+ if (context==NULL)
+ {
+ fprintf(stderr, "Out of memory!\n");
+ quit(2);
+ }
+
+ /* Create OpenGL ES contexts */
+ for (i=0; i<state->num_windows; i++)
+ {
+ context[i] = SDL_GL_CreateContext(state->windows[i]);
+ if (!context[i]) {
+ fprintf(stderr, "SDL_GL_CreateContext(): %s\n", SDL_GetError());
+ quit(2);
+ }
}
if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) {
@@ -165,38 +185,38 @@
if (!status) {
printf("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value);
} else {
- printf("Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError());
}
status=SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value);
if (!status) {
printf("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value);
} else {
- printf("Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError());
}
status=SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value);
if (!status) {
printf("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value);
} else {
- printf("Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError());
}
status=SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value);
if (!status) {
printf("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", 16, value);
} else {
- printf("Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError());
}
if (fsaa) {
status=SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value);
if (!status) {
printf("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value);
} else {
- printf("Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", SDL_GetError());
}
status=SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value);
if (!status) {
printf("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, value);
} else {
- printf("Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", SDL_GetError());
}
}
if (accel) {
@@ -205,19 +225,30 @@
{
printf("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value);
} else {
- printf("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", SDL_GetError());
+ fprintf(stderr, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", SDL_GetError());
}
}
- /* Set rendering settings */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrthof(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LESS);
- glShadeModel(GL_SMOOTH);
+ /* Set rendering settings for each context */
+ for (i = 0; i < state->num_windows; ++i) {
+ status=SDL_GL_MakeCurrent(state->windows[i], context[i]);
+ if (status)
+ {
+ printf("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
+
+ /* Continue for next window */
+ continue;
+ }
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrthof(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LESS);
+ glShadeModel(GL_SMOOTH);
+ }
/* Main render loop */
frames = 0;
@@ -231,7 +262,14 @@
}
for (i = 0; i < state->num_windows; ++i) {
int w, h;
- SDL_GL_MakeCurrent(state->windows[i], context);
+ status=SDL_GL_MakeCurrent(state->windows[i], context[i]);
+ if (status)
+ {
+ printf("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
+
+ /* Continue for next window */
+ continue;
+ }
SDL_GetWindowSize(state->windows[i], &w, &h);
glViewport(0, 0, w, h);
Render();