Initial revision
This commit is contained in:
218
progs/samples/oglinfo.c
Normal file
218
progs/samples/oglinfo.c
Normal file
@@ -0,0 +1,218 @@
|
||||
/* oglinfo.c */
|
||||
|
||||
/* This demo modified by BrianP to accomodate Mesa and test
|
||||
* the GLX 1.1 functions.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glx.h>
|
||||
#include <GL/glu.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
int visual_request0[] = { None }; /* don't need much of a visual */
|
||||
int visual_request1[] = { GLX_RGBA, None }; /* in case CI failed */
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *display_name = NULL;
|
||||
char *string;
|
||||
Display *dpy;
|
||||
int screen_num;
|
||||
int major, minor;
|
||||
XVisualInfo *vis;
|
||||
GLXContext ctx;
|
||||
Window root, win;
|
||||
Colormap cmap;
|
||||
XSetWindowAttributes swa;
|
||||
int dontcare;
|
||||
|
||||
/* parse arguments */
|
||||
if(argc > 1) {
|
||||
if(!strcmp(argv[1],"-display"))
|
||||
display_name = argv[2];
|
||||
else {
|
||||
fprintf(stderr, "Usage: %s [-display <display>]\n",argv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* get display */
|
||||
if (!(dpy = XOpenDisplay(display_name))) {
|
||||
fprintf(stderr,"Error: XOpenDisplay() failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* does the server know about OpenGL & GLX? */
|
||||
#ifndef MESA
|
||||
if(!XQueryExtension(dpy, "GLX", &dontcare, &dontcare, &dontcare)) {
|
||||
fprintf(stderr,"This system doesn't appear to support OpenGL\n");
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
(void) dontcare;
|
||||
#endif
|
||||
|
||||
/* find the glx version */
|
||||
if(glXQueryVersion(dpy, &major, &minor))
|
||||
printf("GLX Version: %d.%d\n", major, minor);
|
||||
else {
|
||||
fprintf(stderr, "Error: glXQueryVersion() failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* get screen number */
|
||||
screen_num = DefaultScreen(dpy);
|
||||
|
||||
/* This #ifdef isn't redundant. It keeps the build from breaking
|
||||
** if you are building on a machine that has an old (1.0) version
|
||||
** of glx.
|
||||
**
|
||||
** This program could still be *run* on a machine that has an old
|
||||
** version of glx, even if it was *compiled* on a version that has
|
||||
** a new version.
|
||||
**
|
||||
** If compiled on a system with an old version of glx, then it will
|
||||
** never recognize glx extensions, since that code would have been
|
||||
** #ifdef'ed out.
|
||||
*/
|
||||
#ifdef GLX_VERSION_1_1
|
||||
|
||||
/*
|
||||
** This test guarantees that glx, on the display you are inquiring,
|
||||
** suppports glXQueryExtensionsString().
|
||||
*/
|
||||
if(minor > 0 || major > 1)
|
||||
string = (char *) glXQueryExtensionsString(dpy, screen_num);
|
||||
else
|
||||
string = "";
|
||||
|
||||
if(string)
|
||||
printf("GLX Extensions (client & server): %s\n",
|
||||
string);
|
||||
else {
|
||||
fprintf(stderr, "Error: glXQueryExtensionsString() failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (minor>0 || major>1) {
|
||||
printf("glXGetClientString(GLX_VENDOR): %s\n", glXGetClientString(dpy,GLX_VENDOR));
|
||||
printf("glXGetClientString(GLX_VERSION): %s\n", glXGetClientString(dpy,GLX_VERSION));
|
||||
printf("glXGetClientString(GLX_EXTENSIONS): %s\n", glXGetClientString(dpy,GLX_EXTENSIONS));
|
||||
printf("glXQueryServerString(GLX_VENDOR): %s\n", glXQueryServerString(dpy,screen_num,GLX_VENDOR));
|
||||
printf("glXQueryServerString(GLX_VERSION): %s\n", glXQueryServerString(dpy,screen_num,GLX_VERSION));
|
||||
printf("glXQueryServerString(GLX_EXTENSIONS): %s\n", glXQueryServerString(dpy,screen_num,GLX_EXTENSIONS));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
/* get any valid OpenGL visual */
|
||||
if (!(vis = glXChooseVisual(dpy, screen_num, visual_request0))) {
|
||||
if (!(vis = glXChooseVisual(dpy, screen_num, visual_request1))) {
|
||||
fprintf(stderr,"Error: glXChooseVisual() failed.\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* get context */
|
||||
ctx = glXCreateContext(dpy,vis,0,GL_TRUE);
|
||||
|
||||
/* root window */
|
||||
root = RootWindow(dpy,vis->screen);
|
||||
|
||||
/* get RGBA colormap */
|
||||
cmap = XCreateColormap(dpy, root, vis->visual, AllocNone);
|
||||
|
||||
/* get window */
|
||||
swa.colormap = cmap;
|
||||
swa.border_pixel = 0;
|
||||
swa.event_mask = StructureNotifyMask;
|
||||
win = XCreateWindow(dpy, root, 0, 0, 1, 1, 0, vis->depth,
|
||||
InputOutput,vis->visual,
|
||||
CWBorderPixel|CWColormap|CWEventMask,
|
||||
&swa);
|
||||
|
||||
glXMakeCurrent(dpy,win,ctx);
|
||||
|
||||
string = (char *) glGetString(GL_VERSION);
|
||||
if(string)
|
||||
#ifdef MESA
|
||||
printf("Mesa Version: %s\n", string);
|
||||
#else
|
||||
printf("OpenGL Version: %s\n", string);
|
||||
#endif
|
||||
else {
|
||||
fprintf(stderr, "Error: glGetString(GL_VERSION) failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string = (char *) glGetString(GL_EXTENSIONS);
|
||||
|
||||
if(string)
|
||||
#ifdef MESA
|
||||
printf("Mesa Extensions: %s\n", string);
|
||||
#else
|
||||
printf("OpenGL Extensions: %s\n", string);
|
||||
#endif
|
||||
else {
|
||||
fprintf(stderr, "Error: glGetString(GL_EXTENSIONS) failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
string = (char *) glGetString(GL_RENDERER);
|
||||
|
||||
if(string)
|
||||
#ifdef MESA
|
||||
printf("Mesa Renderer: %s\n", string);
|
||||
#else
|
||||
printf("OpenGL renderer: %s\n", string);
|
||||
#endif
|
||||
else {
|
||||
fprintf(stderr, "Error: glGetString(GL_RENDERER) failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
** This #ifdef prevents a build failure if you compile on an a
|
||||
** machine with an old GLU library.
|
||||
**
|
||||
** If you build on a pre GLU 1.1 machine, you will never be able
|
||||
** to get glu info, even if you run on a GLU 1.1 or latter machine,
|
||||
** since the code has been #ifdef'ed out.
|
||||
*/
|
||||
#ifdef GLU_VERSION_1_1
|
||||
|
||||
/*
|
||||
** If the glx version is 1.1 or latter, gluGetString() is guaranteed
|
||||
** to exist.
|
||||
*/
|
||||
if(minor > 0 || major > 1)
|
||||
string = (char *) gluGetString(GLU_VERSION);
|
||||
else
|
||||
string = "1.0";
|
||||
|
||||
if(string)
|
||||
printf("GLU Version: %s\n", string);
|
||||
else {
|
||||
fprintf(stderr, "Error: gluGetString(GLU_VERSION) failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(minor > 0 || major > 1)
|
||||
string = (char *) gluGetString(GLU_EXTENSIONS);
|
||||
else
|
||||
string = "";
|
||||
|
||||
if(string)
|
||||
printf("GLU Extensions: %s\n", string);
|
||||
else {
|
||||
fprintf(stderr, "Error: gluGetString(GLU_EXTENSIONS) failed.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user