Added OpenGL ES context creation for the each window which has been created (for --windows=N option).
authorMike Gorchak <lestat@i.com.ua>
Tue, 28 Apr 2009 04:38:51 +0000
changeset 3110 e6c21c14ce3a
parent 3109 7b3a09fb9c8b
child 3111 14d32495a502
Added OpenGL ES context creation for the each window which has been created (for --windows=N option).
test/testgles.c
--- 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();