mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 01:50:42 -05:00
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:
parent
7f3960e94d
commit
0d7d4fe14e
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user