summaryrefslogtreecommitdiffstats
path: root/progs/xdemos/glxsnoop.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2010-05-21 09:32:38 -0700
committerEric Anholt <[email protected]>2010-05-21 12:20:39 -0700
commit68fc4b415e322f6744299e39864fbc377c6eff74 (patch)
tree4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/xdemos/glxsnoop.c
parente4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff)
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build environment for to make the build system or are unit tests that should probably live next to their code instead. Hopefully people can bring over the build for remaining pieces they care about.
Diffstat (limited to 'progs/xdemos/glxsnoop.c')
-rw-r--r--progs/xdemos/glxsnoop.c377
1 files changed, 0 insertions, 377 deletions
diff --git a/progs/xdemos/glxsnoop.c b/progs/xdemos/glxsnoop.c
deleted file mode 100644
index 2e951345b58..00000000000
--- a/progs/xdemos/glxsnoop.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/**
- * Display/snoop the z/stencil/back/front buffers of another app's window.
- * Also, an example of the need for shared ancillary renderbuffers.
- *
- * Hint: use 'xwininfo' to get a window's ID.
- *
- * Brian Paul
- * 11 Oct 2007
- */
-
-#define GL_GLEXT_PROTOTYPES
-
-#include <GL/gl.h>
-#include <GL/glx.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <X11/keysym.h>
-
-
-#define Z_BUFFER 1
-#define STENCIL_BUFFER 2
-#define BACK_BUFFER 3
-#define FRONT_BUFFER 4
-
-
-static int Buffer = BACK_BUFFER;
-static int WindowID = 0;
-static const char *DisplayName = NULL;
-static GLXContext Context = 0;
-static int Width, Height;
-
-
-/**
- * Grab the z/stencil/back/front image from the srcWin and display it
- * (possibly converted to grayscale) in the dstWin.
- */
-static void
-redraw(Display *dpy, Window srcWin, Window dstWin )
-{
- GLubyte *image = malloc(Width * Height * 4);
-
- glXMakeCurrent(dpy, srcWin, Context);
- glPixelStorei(GL_PACK_ALIGNMENT, 1);
- if (Buffer == BACK_BUFFER) {
- glReadBuffer(GL_BACK);
- glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, image);
- }
- else if (Buffer == FRONT_BUFFER) {
- glReadBuffer(GL_FRONT);
- glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, image);
- }
- else if (Buffer == Z_BUFFER) {
- GLfloat *z = malloc(Width * Height * sizeof(GLfloat));
- int i;
- glReadPixels(0, 0, Width, Height, GL_DEPTH_COMPONENT, GL_FLOAT, z);
- for (i = 0; i < Width * Height; i++) {
- image[i*4+0] =
- image[i*4+1] =
- image[i*4+2] = (GLint) (255.0 * z[i]);
- image[i*4+3] = 255;
- }
- free(z);
- }
- else if (Buffer == STENCIL_BUFFER) {
- GLubyte *sten = malloc(Width * Height * sizeof(GLubyte));
- int i, min = 100, max = -1;
- float step;
- int sz;
- glGetIntegerv(GL_STENCIL_BITS, &sz);
- glReadPixels(0, 0, Width, Height,
- GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, sten);
- /* find min/max for converting stencil to grayscale */
- for (i = 0; i < Width * Height; i++) {
- if (sten[i] < min)
- min = sten[i];
- if (sten[i] > max)
- max = sten[i];
- }
- if (min == max)
- step = 0;
- else
- step = 255.0 / (float) (max - min);
- for (i = 0; i < Width * Height; i++) {
- image[i*4+0] =
- image[i*4+1] =
- image[i*4+2] = (GLint) ((sten[i] - min) * step);
- image[i*4+3] = 255;
- }
- free(sten);
- }
-
- glXMakeCurrent(dpy, dstWin, Context);
- glWindowPos2iARB(0, 0);
- glDrawBuffer(GL_FRONT);
- glDrawPixels(Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, image);
- glFlush();
-
- free(image);
-}
-
-
-static void
-set_window_title(Display *dpy, Window win, const char *title)
-{
- XSizeHints sizehints;
- sizehints.flags = 0;
- XSetStandardProperties(dpy, win, title, title,
- None, (char **)NULL, 0, &sizehints);
-}
-
-
-static Window
-make_gl_window(Display *dpy, XVisualInfo *visinfo, int width, int height)
-{
- int scrnum;
- XSetWindowAttributes attr;
- unsigned long mask;
- Window root;
- Window win;
- int x = 0, y = 0;
- char *name = NULL;
-
- scrnum = DefaultScreen( dpy );
- root = RootWindow( dpy, scrnum );
-
- /* window attributes */
- attr.background_pixel = 0;
- attr.border_pixel = 0;
- attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone);
- attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
- mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
-
- win = XCreateWindow( dpy, root, x, y, width, height,
- 0, visinfo->depth, InputOutput,
- visinfo->visual, mask, &attr );
-
- /* set hints and properties */
- {
- XSizeHints sizehints;
- sizehints.x = x;
- sizehints.y = y;
- sizehints.width = width;
- sizehints.height = height;
- sizehints.flags = USSize | USPosition;
- XSetNormalHints(dpy, win, &sizehints);
- XSetStandardProperties(dpy, win, name, name,
- None, (char **)NULL, 0, &sizehints);
- }
-
- return win;
-}
-
-
-static void
-update_window_title(Display *dpy, Window win)
-{
- char title[1000], *buf;
-
- switch (Buffer) {
- case Z_BUFFER:
- buf = "Z";
- break;
- case STENCIL_BUFFER:
- buf = "Stencil";
- break;
- case BACK_BUFFER:
- buf = "Back";
- break;
- case FRONT_BUFFER:
- buf = "Front";
- break;
- default:
- buf = "";
- }
-
- sprintf(title, "glxsnoop window 0x%x (%s buffer)", (int) WindowID, buf);
-
- set_window_title(dpy, win, title);
-}
-
-
-static void
-keypress(Display *dpy, Window win, char key)
-{
- switch (key) {
- case 27:
- /* escape */
- exit(0);
- break;
- case 's':
- Buffer = STENCIL_BUFFER;
- break;
- case 'z':
- Buffer = Z_BUFFER;
- break;
- case 'f':
- Buffer = FRONT_BUFFER;
- break;
- case 'b':
- Buffer = BACK_BUFFER;
- break;
- default:
- return;
- }
-
- update_window_title(dpy, win);
- redraw(dpy, WindowID, win);
-}
-
-
-static void
-event_loop(Display *dpy, Window win)
-{
- XEvent event;
-
- while (1) {
- XNextEvent( dpy, &event );
-
- switch (event.type) {
- case Expose:
- redraw(dpy, WindowID, win);
- break;
- case ConfigureNotify:
- /*resize( event.xconfigure.width, event.xconfigure.height );*/
- break;
- case KeyPress:
- {
- char buffer[10];
- int r, code;
- code = XLookupKeysym(&event.xkey, 0);
- if (code == XK_Left) {
- }
- else {
- r = XLookupString(&event.xkey, buffer, sizeof(buffer),
- NULL, NULL);
- keypress(dpy, win, buffer[0]);
- }
- }
- default:
- /* nothing */
- ;
- }
- }
-}
-
-
-static VisualID
-get_window_visualid(Display *dpy, Window win)
-{
- XWindowAttributes attr;
-
- if (XGetWindowAttributes(dpy, win, &attr)) {
- return attr.visual->visualid;
- }
- else {
- return 0;
- }
-}
-
-
-static void
-get_window_size(Display *dpy, Window win, int *w, int *h)
-{
- XWindowAttributes attr;
-
- if (XGetWindowAttributes(dpy, win, &attr)) {
- *w = attr.width;
- *h = attr.height;
- }
- else {
- *w = *h = 0;
- }
-}
-
-
-static XVisualInfo *
-visualid_to_visualinfo(Display *dpy, VisualID vid)
-{
- XVisualInfo *vinfo, templ;
- long mask;
- int n;
-
- templ.visualid = vid;
- mask = VisualIDMask;
-
- vinfo = XGetVisualInfo(dpy, mask, &templ, &n);
- return vinfo;
-}
-
-
-static void
-key_usage(void)
-{
- printf("Keyboard:\n");
- printf(" z - display Z buffer\n");
- printf(" s - display stencil buffer\n");
- printf(" f - display front color buffer\n");
- printf(" b - display back buffer\n");
-}
-
-
-static void
-usage(void)
-{
- printf("Usage: glxsnoop [-display dpy] windowID\n");
- key_usage();
-}
-
-
-static void
-parse_opts(int argc, char *argv[])
-{
- int i;
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-h") == 0) {
- usage();
- exit(0);
- }
- else if (strcmp(argv[i], "-display") == 0) {
- DisplayName = argv[i + 1];
- i++;
- }
- else {
- if (argv[i][0] == '0' && argv[i][1] == 'x') {
- /* hex */
- WindowID = strtol(argv[i], NULL, 16);
- }
- else {
- WindowID = atoi(argv[i]);
- }
- break;
- }
- }
-
- if (!WindowID) {
- usage();
- exit(0);
- }
-}
-
-
-int
-main( int argc, char *argv[] )
-{
- Display *dpy;
- VisualID vid;
- XVisualInfo *visinfo;
- Window win;
-
- parse_opts(argc, argv);
-
- key_usage();
-
- dpy = XOpenDisplay(DisplayName);
-
- /* find the VisualID for the named window */
- vid = get_window_visualid(dpy, WindowID);
- get_window_size(dpy, WindowID, &Width, &Height);
-
- visinfo = visualid_to_visualinfo(dpy, vid);
-
- Context = glXCreateContext( dpy, visinfo, NULL, True );
- if (!Context) {
- printf("Error: glXCreateContext failed\n");
- exit(1);
- }
-
- win = make_gl_window(dpy, visinfo, Width, Height);
- XMapWindow(dpy, win);
- update_window_title(dpy, win);
-
- event_loop( dpy, win );
-
- return 0;
-}