diff options
author | Karl Schultz <karl@lunarg.com> | 2017-01-04 10:31:20 -0700 |
---|---|---|
committer | Karl Schultz <karl@lunarg.com> | 2017-01-05 07:46:26 -0700 |
commit | a655042c300e8e4eed4ffb09cd1ea010471c6069 (patch) | |
tree | cf98039d18d55dc0fc858296cf52b8be148dc439 /demos | |
parent | 368ae7921bf3e19421ccb1379b31fb724fc932e6 (diff) |
demos: Make spacebar pause work in cube demo (Linux).
Fixes #1316.
Rework XCB event processing code to handle events
properly and avoid hangs when pausing.
Fix polarity of decrease/increase spin rate keys. I
suspect that this was an artifact from fixes made
to the transforms a while back.
Change-Id: I74adf7309227fafd175d8972ca930a304c58a1dd
Diffstat (limited to 'demos')
-rw-r--r-- | demos/cube.c | 36 | ||||
-rw-r--r-- | demos/cube.cpp | 33 |
2 files changed, 34 insertions, 35 deletions
diff --git a/demos/cube.c b/demos/cube.c index efd2ad0e..b76933fa 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -743,7 +743,7 @@ void demo_update_data_buffer(struct demo *demo) { mat4x4_mul(VP, demo->projection_matrix, demo->view_matrix); - // Rotate 22.5 degrees around the Y axis + // Rotate around the Y axis mat4x4_dup(Model, demo->model_matrix); mat4x4_rotate(demo->model_matrix, Model, 0.0f, 1.0f, 0.0f, (float)degreesToRadians(demo->spin_angle)); @@ -2295,12 +2295,12 @@ static void demo_handle_xlib_event(struct demo *demo, const XEvent *event) { demo->quit = true; break; case 0x71: // left arrow key - demo->spin_angle += demo->spin_increment; + demo->spin_angle -= demo->spin_increment; break; case 0x72: // right arrow key - demo->spin_angle -= demo->spin_increment; + demo->spin_angle += demo->spin_increment; break; - case 0x41: + case 0x41: // space bar demo->pause = !demo->pause; break; } @@ -2327,11 +2327,10 @@ static void demo_run_xlib(struct demo *demo) { if (demo->pause) { XNextEvent(demo->display, &event); demo_handle_xlib_event(demo, &event); - } else { - while (XPending(demo->display) > 0) { - XNextEvent(demo->display, &event); - demo_handle_xlib_event(demo, &event); - } + } + while (XPending(demo->display) > 0) { + XNextEvent(demo->display, &event); + demo_handle_xlib_event(demo, &event); } demo_update_data_buffer(demo); @@ -2364,12 +2363,12 @@ static void demo_handle_xcb_event(struct demo *demo, demo->quit = true; break; case 0x71: // left arrow key - demo->spin_angle += demo->spin_increment; + demo->spin_angle -= demo->spin_increment; break; case 0x72: // right arrow key - demo->spin_angle -= demo->spin_increment; + demo->spin_angle += demo->spin_increment; break; - case 0x41: + case 0x41: // space bar demo->pause = !demo->pause; break; } @@ -2396,13 +2395,14 @@ static void demo_run_xcb(struct demo *demo) { if (demo->pause) { event = xcb_wait_for_event(demo->connection); - } else { + } + else { + event = xcb_poll_for_event(demo->connection); + } + while (event) { + demo_handle_xcb_event(demo, event); + free(event); event = xcb_poll_for_event(demo->connection); - while(event) { - demo_handle_xcb_event(demo, event); - free(event); - event = xcb_poll_for_event(demo->connection); - } } demo_update_data_buffer(demo); diff --git a/demos/cube.cpp b/demos/cube.cpp index ffbb30c9..7f3155f2 100644 --- a/demos/cube.cpp +++ b/demos/cube.cpp @@ -2178,7 +2178,7 @@ struct Demo { mat4x4 VP; mat4x4_mul(VP, projection_matrix, view_matrix); - // Rotate 22.5 degrees around the Y axis + // Rotate around the Y axis mat4x4 Model; mat4x4_dup(Model, model_matrix); mat4x4_rotate(model_matrix, Model, 0.0f, 1.0f, 0.0f, @@ -2385,12 +2385,12 @@ struct Demo { quit = true; break; case 0x71: // left arrow key - spin_angle += spin_increment; + spin_angle -= spin_increment; break; case 0x72: // right arrow key - spin_angle -= spin_increment; + spin_angle += spin_increment; break; - case 0x41: + case 0x41: // space bar pause = !pause; break; } @@ -2415,11 +2415,10 @@ struct Demo { if (pause) { XNextEvent(display, &event); handle_xlib_event(&event); - } else { - while (XPending(display) > 0) { - XNextEvent(display, &event); - handle_xlib_event(&event); - } + } + while (XPending(display) > 0) { + XNextEvent(display, &event); + handle_xlib_event(&event); } update_data_buffer(); @@ -2454,12 +2453,12 @@ struct Demo { quit = true; break; case 0x71: // left arrow key - spin_angle += spin_increment; + spin_angle -= spin_increment; break; case 0x72: // right arrow key - spin_angle -= spin_increment; + spin_angle += spin_increment; break; - case 0x41: + case 0x41: // space bar pause = !pause; break; } @@ -2488,11 +2487,11 @@ struct Demo { event = xcb_wait_for_event(connection); } else { event = xcb_poll_for_event(connection); - while (event) { - handle_xcb_event(event); - free(event); - event = xcb_poll_for_event(connection); - } + } + while (event) { + handle_xcb_event(event); + free(event); + event = xcb_poll_for_event(connection); } update_data_buffer(); |