test/testgl2.c
author Sam Lantinga <slouken@libsdl.org>
Tue, 24 Mar 2009 10:33:12 +0000
changeset 3099 82e60908fab1
parent 2328 91e601d9df8b
child 3139 7f684f249ec9
permissions -rw-r--r--
Date: Mon, 23 Mar 2009 09:17:24 +0200
From: "Mike Gorchak"
Subject: New QNX patches

Please apply patch qnx4.diff, which is attached. What has been done:
1)Added back OpenGL ES renderer for QNX target. Added few corrections to
OpenGL ES renderer to let it work under QNX. OpenGL ES renderer do not
support textures under QNX, so I think some additional work must be done.
2) Added GL_OES_query_matrix extension to SDL_opengles.h header file, which
required by OpenGL ES 1.1 specification.
3) Added attribute clearing at the entrance of function
SDL_GL_GetAttribure(). Added error checking into the function
SDL_GL_GetAttribure(), because some attributes can't be obtained in OpenGL
ES 1.0.
4) Porting testdyngles to OpenGL ES 1.0 (1.1 has glColor4ub() and
glColor4f() functions, but 1.0 has glColor4f() only).
5) Added error checking after obtaining attributes using
SDL_GL_GetAttribute() function to the testgl2 and testgles.
6) Small correction to testmultiaudio with printing errors.
7) Added software and accelerated OpenGL ES 1.0 support into the QNX GF
driver.

Please remove ./src/audio/nto directory - it will not be used anymore.
Please create ./src/audio/qsa directory and add content of the archive
qsa.tar.gz into this directory. I rewrote some sound code, added support for
multiple audio cards, enumeration, etc. Added initial support for capture.

As far as I can understand SDL 1.3 is not supporting audio capture right now
? Sam, Am I right ? Or audio capture must be supported through the
PlayDevice routine ?

And last, please put file SDL_gf_opengles.c to the ./src/video/qnxgf
directory. It is OpenGL ES 1.1 emulation layer for some functions, which are
not supported by OpenGL ES 1.0.
     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <math.h>
     5 
     6 #include "common.h"
     7 
     8 #ifdef __MACOS__
     9 #define HAVE_OPENGL
    10 #endif
    11 
    12 #ifdef HAVE_OPENGL
    13 
    14 #include "SDL_opengl.h"
    15 
    16 /* Undefine this if you want a flat cube instead of a rainbow cube */
    17 #define SHADED_CUBE
    18 
    19 static CommonState *state;
    20 static SDL_GLContext context;
    21 
    22 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
    23 static void
    24 quit(int rc)
    25 {
    26     if (context) {
    27         /* SDL_GL_MakeCurrent(0, NULL); *//* doesn't do anything */
    28         SDL_GL_DeleteContext(context);
    29     }
    30     CommonQuit(state);
    31     exit(rc);
    32 }
    33 
    34 static void
    35 Render()
    36 {
    37     static float color[8][3] = {
    38         {1.0, 1.0, 0.0},
    39         {1.0, 0.0, 0.0},
    40         {0.0, 0.0, 0.0},
    41         {0.0, 1.0, 0.0},
    42         {0.0, 1.0, 1.0},
    43         {1.0, 1.0, 1.0},
    44         {1.0, 0.0, 1.0},
    45         {0.0, 0.0, 1.0}
    46     };
    47     static float cube[8][3] = {
    48         {0.5, 0.5, -0.5},
    49         {0.5, -0.5, -0.5},
    50         {-0.5, -0.5, -0.5},
    51         {-0.5, 0.5, -0.5},
    52         {-0.5, 0.5, 0.5},
    53         {0.5, 0.5, 0.5},
    54         {0.5, -0.5, 0.5},
    55         {-0.5, -0.5, 0.5}
    56     };
    57 
    58     /* Do our drawing, too. */
    59     glClearColor(0.0, 0.0, 0.0, 1.0);
    60     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    61 
    62     glBegin(GL_QUADS);
    63 
    64 #ifdef SHADED_CUBE
    65     glColor3fv(color[0]);
    66     glVertex3fv(cube[0]);
    67     glColor3fv(color[1]);
    68     glVertex3fv(cube[1]);
    69     glColor3fv(color[2]);
    70     glVertex3fv(cube[2]);
    71     glColor3fv(color[3]);
    72     glVertex3fv(cube[3]);
    73 
    74     glColor3fv(color[3]);
    75     glVertex3fv(cube[3]);
    76     glColor3fv(color[4]);
    77     glVertex3fv(cube[4]);
    78     glColor3fv(color[7]);
    79     glVertex3fv(cube[7]);
    80     glColor3fv(color[2]);
    81     glVertex3fv(cube[2]);
    82 
    83     glColor3fv(color[0]);
    84     glVertex3fv(cube[0]);
    85     glColor3fv(color[5]);
    86     glVertex3fv(cube[5]);
    87     glColor3fv(color[6]);
    88     glVertex3fv(cube[6]);
    89     glColor3fv(color[1]);
    90     glVertex3fv(cube[1]);
    91 
    92     glColor3fv(color[5]);
    93     glVertex3fv(cube[5]);
    94     glColor3fv(color[4]);
    95     glVertex3fv(cube[4]);
    96     glColor3fv(color[7]);
    97     glVertex3fv(cube[7]);
    98     glColor3fv(color[6]);
    99     glVertex3fv(cube[6]);
   100 
   101     glColor3fv(color[5]);
   102     glVertex3fv(cube[5]);
   103     glColor3fv(color[0]);
   104     glVertex3fv(cube[0]);
   105     glColor3fv(color[3]);
   106     glVertex3fv(cube[3]);
   107     glColor3fv(color[4]);
   108     glVertex3fv(cube[4]);
   109 
   110     glColor3fv(color[6]);
   111     glVertex3fv(cube[6]);
   112     glColor3fv(color[1]);
   113     glVertex3fv(cube[1]);
   114     glColor3fv(color[2]);
   115     glVertex3fv(cube[2]);
   116     glColor3fv(color[7]);
   117     glVertex3fv(cube[7]);
   118 #else /* flat cube */
   119     glColor3f(1.0, 0.0, 0.0);
   120     glVertex3fv(cube[0]);
   121     glVertex3fv(cube[1]);
   122     glVertex3fv(cube[2]);
   123     glVertex3fv(cube[3]);
   124 
   125     glColor3f(0.0, 1.0, 0.0);
   126     glVertex3fv(cube[3]);
   127     glVertex3fv(cube[4]);
   128     glVertex3fv(cube[7]);
   129     glVertex3fv(cube[2]);
   130 
   131     glColor3f(0.0, 0.0, 1.0);
   132     glVertex3fv(cube[0]);
   133     glVertex3fv(cube[5]);
   134     glVertex3fv(cube[6]);
   135     glVertex3fv(cube[1]);
   136 
   137     glColor3f(0.0, 1.0, 1.0);
   138     glVertex3fv(cube[5]);
   139     glVertex3fv(cube[4]);
   140     glVertex3fv(cube[7]);
   141     glVertex3fv(cube[6]);
   142 
   143     glColor3f(1.0, 1.0, 0.0);
   144     glVertex3fv(cube[5]);
   145     glVertex3fv(cube[0]);
   146     glVertex3fv(cube[3]);
   147     glVertex3fv(cube[4]);
   148 
   149     glColor3f(1.0, 0.0, 1.0);
   150     glVertex3fv(cube[6]);
   151     glVertex3fv(cube[1]);
   152     glVertex3fv(cube[2]);
   153     glVertex3fv(cube[7]);
   154 #endif /* SHADED_CUBE */
   155 
   156     glEnd();
   157 
   158     glMatrixMode(GL_MODELVIEW);
   159     glRotatef(5.0, 1.0, 1.0, 1.0);
   160 }
   161 
   162 int
   163 main(int argc, char *argv[])
   164 {
   165     int fsaa, accel;
   166     int value;
   167     int i, done;
   168     SDL_DisplayMode mode;
   169     SDL_Event event;
   170     Uint32 then, now, frames;
   171     int status;
   172 
   173     /* Initialize parameters */
   174     fsaa = 0;
   175     accel = 0;
   176 
   177     /* Initialize test framework */
   178     state = CommonCreateState(argv, SDL_INIT_VIDEO);
   179     if (!state) {
   180         return 1;
   181     }
   182     for (i = 1; i < argc;) {
   183         int consumed;
   184 
   185         consumed = CommonArg(state, i);
   186         if (consumed == 0) {
   187             if (SDL_strcasecmp(argv[i], "--fsaa") == 0) {
   188                 ++fsaa;
   189                 consumed = 1;
   190             } else if (SDL_strcasecmp(argv[i], "--accel") == 0) {
   191                 ++accel;
   192                 consumed = 1;
   193             } else {
   194                 consumed = -1;
   195             }
   196         }
   197         if (consumed < 0) {
   198             fprintf(stderr, "Usage: %s %s [--fsaa] [--accel]\n", argv[0],
   199                     CommonUsage(state));
   200             quit(1);
   201         }
   202         i += consumed;
   203     }
   204 
   205     /* Set OpenGL parameters */
   206     state->window_flags |= SDL_WINDOW_OPENGL;
   207     SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
   208     SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
   209     SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
   210     SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
   211     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
   212     if (fsaa) {
   213         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
   214         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, fsaa);
   215     }
   216     if (accel) {
   217         SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);
   218     }
   219     if (!CommonInit(state)) {
   220         quit(2);
   221     }
   222 
   223     /* Create OpenGL context */
   224     context = SDL_GL_CreateContext(state->windows[0]);
   225     if (!context) {
   226         fprintf(stderr, "SDL_GL_CreateContext(): %s\n", SDL_GetError());
   227         quit(2);
   228     }
   229 
   230     if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) {
   231         SDL_GL_SetSwapInterval(1);
   232     } else {
   233         SDL_GL_SetSwapInterval(0);
   234     }
   235 
   236     SDL_GetCurrentDisplayMode(&mode);
   237     printf("Screen BPP: %d\n", SDL_BITSPERPIXEL(mode.format));
   238     printf("\n");
   239     printf("Vendor     : %s\n", glGetString(GL_VENDOR));
   240     printf("Renderer   : %s\n", glGetString(GL_RENDERER));
   241     printf("Version    : %s\n", glGetString(GL_VERSION));
   242     printf("Extensions : %s\n", glGetString(GL_EXTENSIONS));
   243     printf("\n");
   244 
   245     status=SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value);
   246     if (!status) {
   247         printf("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value);
   248     } else {
   249         printf("Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError());
   250     }
   251     status=SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value);
   252     if (!status) {
   253         printf("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value);
   254     } else {
   255         printf("Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError());
   256     }
   257     status=SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value);
   258     if (!status) {
   259         printf("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value);
   260     } else {
   261         printf("Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError());
   262     }
   263     status=SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value);
   264     if (!status) {
   265         printf("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", 16, value);
   266     } else {
   267         printf("Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError());
   268     }
   269     if (fsaa) {
   270         status=SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value);
   271         if (!status) {
   272             printf("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value);
   273         } else {
   274             printf("Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", SDL_GetError());
   275         }
   276         status=SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value);
   277         if (!status) {
   278             printf("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, value);
   279         } else {
   280             printf("Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", SDL_GetError());
   281         }
   282     }
   283     if (accel) {
   284         status=SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
   285         if (!status)
   286         {
   287             printf("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value);
   288         } else {
   289             printf("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", SDL_GetError());
   290         }
   291     }
   292 
   293     /* Set rendering settings */
   294     glMatrixMode(GL_PROJECTION);
   295     glLoadIdentity();
   296     glOrtho(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0);
   297     glMatrixMode(GL_MODELVIEW);
   298     glLoadIdentity();
   299     glEnable(GL_DEPTH_TEST);
   300     glDepthFunc(GL_LESS);
   301     glShadeModel(GL_SMOOTH);
   302 
   303     /* Main render loop */
   304     frames = 0;
   305     then = SDL_GetTicks();
   306     done = 0;
   307     while (!done) {
   308         /* Check for events */
   309         ++frames;
   310         while (SDL_PollEvent(&event)) {
   311             CommonEvent(state, &event, &done);
   312         }
   313         for (i = 0; i < state->num_windows; ++i) {
   314             int w, h;
   315             SDL_GL_MakeCurrent(state->windows[i], context);
   316             SDL_GetWindowSize(state->windows[i], &w, &h);
   317             glViewport(0, 0, w, h);
   318             Render();
   319             SDL_GL_SwapWindow(state->windows[i]);
   320         }
   321     }
   322 
   323     /* Print out some timing information */
   324     now = SDL_GetTicks();
   325     if (now > then) {
   326         printf("%2.2f frames per second\n",
   327                ((double) frames * 1000) / (now - then));
   328     }
   329     quit(0);
   330     return 0;
   331 }
   332 
   333 #else /* HAVE_OPENGL */
   334 
   335 int
   336 main(int argc, char *argv[])
   337 {
   338     printf("No OpenGL support on this system\n");
   339     return 1;
   340 }
   341 
   342 #endif /* HAVE_OPENGL */