examples/cogl-texture-pixmap-x11: Add a --stereo command line option

If --stereo is passed, then the texture pixmap is created as a stereo
texture pixmap, and also, if passed in conjunction with --gears,
glxgears is also run with the -stereo option.

Reviewed-by: Robert Bragg <robert.bragg@intel.com>
This commit is contained in:
Owen W. Taylor 2014-04-27 00:16:53 -04:00
parent 7f3960e94d
commit 0d7d4fe14e

View File

@ -27,12 +27,13 @@
static pid_t gears_pid = 0; static pid_t gears_pid = 0;
static void static void
spawn_gears (void) spawn_gears (CoglBool stereo)
{ {
pid_t pid = fork(); pid_t pid = fork();
if (pid == 0) if (pid == 0)
execlp ("glxgears", "glxgears", execlp ("glxgears", "glxgears",
stereo ? "-stereo" : NULL,
NULL); NULL);
gears_pid = pid; gears_pid = pid;
@ -143,6 +144,7 @@ main (int argc, char **argv)
Atom atom_wm_delete_window; Atom atom_wm_delete_window;
int screen; int screen;
CoglBool gears = FALSE; CoglBool gears = FALSE;
CoglBool stereo = FALSE;
Window tfp_xwin = None; Window tfp_xwin = None;
Pixmap pixmap; Pixmap pixmap;
CoglTexturePixmapX11 *tfp; CoglTexturePixmapX11 *tfp;
@ -154,9 +156,11 @@ main (int argc, char **argv)
{ {
if (strcmp (argv[i], "--gears") == 0) if (strcmp (argv[i], "--gears") == 0)
gears = TRUE; gears = TRUE;
else if (strcmp (argv[i], "--stereo") == 0)
stereo = TRUE;
else else
{ {
g_printerr ("Usage: cogl-x11-tfp [--gears]\n"); g_printerr ("Usage: cogl-x11-tfp [--gears] [--stereo]\n");
return 1; return 1;
} }
} }
@ -188,7 +192,7 @@ main (int argc, char **argv)
if (gears) if (gears)
{ {
spawn_gears (); spawn_gears (stereo);
while (TRUE) while (TRUE)
{ {
tfp_xwin = find_gears_toplevel (xdpy, None); tfp_xwin = find_gears_toplevel (xdpy, None);
@ -218,6 +222,8 @@ main (int argc, char **argv)
* having an impedance miss-match between the format of windows and the * having an impedance miss-match between the format of windows and the
* format the display pipeline expects. */ * format the display pipeline expects. */
onscreen_template = cogl_onscreen_template_new (chain); onscreen_template = cogl_onscreen_template_new (chain);
if (stereo)
cogl_onscreen_template_set_stereo_enabled (onscreen_template, TRUE);
cogl_object_unref (chain); cogl_object_unref (chain);
/* Conceptually setup a display pipeline */ /* Conceptually setup a display pipeline */
@ -318,7 +324,17 @@ main (int argc, char **argv)
pixmap = XCompositeNameWindowPixmap (xdpy, tfp_xwin); pixmap = XCompositeNameWindowPixmap (xdpy, tfp_xwin);
tfp = cogl_texture_pixmap_x11_new (ctx, pixmap, TRUE, &error); if (stereo)
{
tfp = cogl_texture_pixmap_x11_new_left (ctx, pixmap, TRUE, &error);
if (tfp)
right_texture = cogl_texture_pixmap_x11_new_right (tfp);
}
else
{
tfp = cogl_texture_pixmap_x11_new (ctx, pixmap, TRUE, &error);
}
if (!tfp) if (!tfp)
{ {
fprintf (stderr, "Failed to create CoglTexturePixmapX11: %s", fprintf (stderr, "Failed to create CoglTexturePixmapX11: %s",
@ -367,10 +383,22 @@ main (int argc, char **argv)
} }
cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1); cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1);
pipeline = cogl_pipeline_new (ctx); pipeline = cogl_pipeline_new (ctx);
cogl_framebuffer_set_stereo_mode (onscreen, COGL_STEREO_LEFT);
cogl_pipeline_set_layer_texture (pipeline, 0, tfp); cogl_pipeline_set_layer_texture (pipeline, 0, tfp);
cogl_framebuffer_draw_rectangle (fb, pipeline, -0.8, 0.8, 0.8, -0.8); cogl_framebuffer_draw_rectangle (fb, pipeline, -0.8, 0.8, 0.8, -0.8);
if (stereo)
{
cogl_framebuffer_set_stereo_mode (onscreen, COGL_STEREO_RIGHT);
cogl_pipeline_set_layer_texture (pipeline, 0, right_texture);
cogl_framebuffer_draw_rectangle (fb, pipeline, -0.8, 0.8, 0.8, -0.8);
}
cogl_object_unref (pipeline); cogl_object_unref (pipeline);
cogl_onscreen_swap_buffers (onscreen); cogl_onscreen_swap_buffers (onscreen);
} }