home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 2000 April & May / AMIGA_2000_04.iso / patches / mesa3.1 / samples / oglinfo.c < prev    next >
C/C++ Source or Header  |  2000-01-01  |  6KB  |  219 lines

  1. /* oglinfo.c */
  2.  
  3. /* This demo modified by BrianP to accomodate Mesa and test
  4.  * the GLX 1.1 functions.
  5.  */
  6.  
  7.  
  8.  
  9. #include <GL/gl.h>
  10. #include <GL/glx.h>
  11. #include <GL/glu.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14.  
  15. int visual_request0[] = { None }; /* don't need much of a visual */
  16. int visual_request1[] = { GLX_RGBA, None }; /* in case CI failed */
  17.  
  18. int main(int argc, char **argv)
  19. {
  20.   char *display_name = NULL;
  21.   char *string;
  22.   Display       *dpy;
  23.   int           screen_num;
  24.   int           major, minor;
  25.   XVisualInfo   *vis;
  26.   GLXContext    ctx;
  27.   Window        root,  win;
  28.   Colormap      cmap;
  29.   XSetWindowAttributes swa;
  30.   int dontcare;
  31.  
  32.   /* parse arguments */
  33.   if(argc > 1) {
  34.     if(!strcmp(argv[1],"-display"))
  35.       display_name = argv[2];
  36.     else {
  37.       fprintf(stderr, "Usage: %s [-display <display>]\n",argv[0]);
  38.       return 0;
  39.     }
  40.   }
  41.  
  42.   /* get display */
  43.   if (!(dpy = XOpenDisplay(display_name))) {
  44.     fprintf(stderr,"Error: XOpenDisplay() failed.\n");
  45.     return 1;
  46.   }
  47.  
  48.   /* does the server know about OpenGL & GLX? */
  49. #ifndef MESA
  50.   if(!XQueryExtension(dpy, "GLX", &dontcare, &dontcare, &dontcare)) {
  51.     fprintf(stderr,"This system doesn't appear to support OpenGL\n");
  52.     return 1;
  53.   }
  54. #else
  55.   (void) dontcare;
  56. #endif
  57.  
  58.   /* find the glx version */
  59.   if(glXQueryVersion(dpy, &major, &minor))
  60.     printf("GLX Version: %d.%d\n", major, minor);
  61.   else {
  62.     fprintf(stderr, "Error: glXQueryVersion() failed.\n");
  63.     return 1;
  64.   }
  65.  
  66.   /* get screen number */
  67.   screen_num = DefaultScreen(dpy);
  68.  
  69. /* This #ifdef isn't redundant. It keeps the build from breaking
  70. ** if you are building on a machine that has an old (1.0) version
  71. ** of glx.
  72. **
  73. ** This program could still be *run* on a machine that has an old 
  74. ** version of glx, even if it was *compiled* on a version that has
  75. ** a new version.
  76. **
  77. ** If compiled on a system with an old version of glx, then it will 
  78. ** never recognize glx extensions, since that code would have been
  79. ** #ifdef'ed out.
  80. */
  81. #ifdef GLX_VERSION_1_1
  82.  
  83.   /*
  84.   ** This test guarantees that glx, on the display you are inquiring,
  85.   ** suppports glXQueryExtensionsString().
  86.   */
  87.   if(minor > 0 || major > 1)
  88.     string = (char *) glXQueryExtensionsString(dpy, screen_num);
  89.   else
  90.     string = "";
  91.  
  92.   if(string)
  93.     printf("GLX Extensions (client & server): %s\n",
  94.        string);
  95.   else {
  96.     fprintf(stderr, "Error: glXQueryExtensionsString() failed.\n");
  97.     return 1;
  98.   }
  99.  
  100.   if (minor>0 || major>1) {
  101.      printf("glXGetClientString(GLX_VENDOR): %s\n", glXGetClientString(dpy,GLX_VENDOR));
  102.      printf("glXGetClientString(GLX_VERSION): %s\n", glXGetClientString(dpy,GLX_VERSION));
  103.      printf("glXGetClientString(GLX_EXTENSIONS): %s\n", glXGetClientString(dpy,GLX_EXTENSIONS));
  104.      printf("glXQueryServerString(GLX_VENDOR): %s\n", glXQueryServerString(dpy,screen_num,GLX_VENDOR));
  105.      printf("glXQueryServerString(GLX_VERSION): %s\n", glXQueryServerString(dpy,screen_num,GLX_VERSION));
  106.      printf("glXQueryServerString(GLX_EXTENSIONS): %s\n", glXQueryServerString(dpy,screen_num,GLX_EXTENSIONS));
  107.   }
  108.  
  109.  
  110. #endif
  111.  
  112.    /* get any valid OpenGL visual */
  113.    if (!(vis = glXChooseVisual(dpy, screen_num, visual_request0)))  {
  114.       if (!(vis = glXChooseVisual(dpy, screen_num, visual_request1)))  {
  115.          fprintf(stderr,"Error: glXChooseVisual() failed.\n");
  116.          return 1;
  117.       }
  118.    }
  119.  
  120.    /* get context */
  121.    ctx = glXCreateContext(dpy,vis,0,GL_TRUE);
  122.  
  123.    /* root window */
  124.    root = RootWindow(dpy,vis->screen);
  125.  
  126.    /* get RGBA colormap */
  127.    cmap = XCreateColormap(dpy, root, vis->visual, AllocNone);
  128.  
  129.    /* get window */
  130.    swa.colormap = cmap;
  131.    swa.border_pixel = 0;
  132.    swa.event_mask = StructureNotifyMask;
  133.    win = XCreateWindow(dpy, root, 0, 0, 1, 1, 0, vis->depth,
  134.                InputOutput,vis->visual,
  135.                CWBorderPixel|CWColormap|CWEventMask,
  136.                &swa);
  137.  
  138.    glXMakeCurrent(dpy,win,ctx);
  139.  
  140.   string = (char *) glGetString(GL_VERSION);
  141.   if(string)
  142. #ifdef MESA
  143.     printf("Mesa Version: %s\n", string);
  144. #else
  145.     printf("OpenGL Version: %s\n", string);
  146. #endif
  147.   else {
  148.     fprintf(stderr, "Error: glGetString(GL_VERSION) failed.\n");
  149.     return 1;
  150.   }
  151.  
  152.   string = (char *) glGetString(GL_EXTENSIONS);
  153.  
  154.   if(string)
  155. #ifdef MESA
  156.     printf("Mesa Extensions: %s\n", string);
  157. #else
  158.     printf("OpenGL Extensions: %s\n", string);
  159. #endif
  160.   else {
  161.     fprintf(stderr, "Error: glGetString(GL_EXTENSIONS) failed.\n");
  162.     return 1;
  163.   }
  164.  
  165.   string = (char *) glGetString(GL_RENDERER);
  166.  
  167.   if(string)
  168. #ifdef MESA
  169.     printf("Mesa Renderer: %s\n", string);
  170. #else
  171.     printf("OpenGL renderer: %s\n", string);
  172. #endif
  173.   else {
  174.     fprintf(stderr, "Error: glGetString(GL_RENDERER) failed.\n");
  175.     return 1;
  176.   }
  177.  
  178. /*
  179. ** This #ifdef prevents a build failure if you compile on an a
  180. ** machine with an old GLU library. 
  181. **
  182. ** If you build on a pre GLU 1.1 machine, you will never be able
  183. ** to get glu info, even if you run on a GLU 1.1 or latter machine,
  184. ** since the code has been #ifdef'ed out.
  185. */
  186. #ifdef GLU_VERSION_1_1
  187.  
  188.   /*
  189.   ** If the glx version is 1.1 or latter, gluGetString() is guaranteed
  190.   ** to exist.
  191.   */
  192.   if(minor > 0 || major > 1)
  193.     string = (char *) gluGetString(GLU_VERSION);
  194.   else
  195.     string = "1.0";
  196.  
  197.   if(string)
  198.     printf("GLU Version: %s\n", string);
  199.   else {
  200.     fprintf(stderr, "Error: gluGetString(GLU_VERSION) failed.\n");
  201.     return 1;
  202.   }
  203.   
  204.   if(minor > 0 || major > 1)
  205.     string = (char *) gluGetString(GLU_EXTENSIONS);
  206.   else
  207.     string = "";
  208.  
  209.   if(string)
  210.     printf("GLU Extensions: %s\n", string);
  211.   else {
  212.     fprintf(stderr, "Error: gluGetString(GLU_EXTENSIONS) failed.\n");
  213.     return 1;
  214.   }
  215.  
  216. #endif
  217.   return 0;
  218. }
  219.