commit bad5f1a1598fe2bd460a904de19120009e067115
parent b4d8c5026be15d97628f065a91163c3682b617ad
Author: Kyle Milz <kyle@getaddrinfo.net>
Date: Sat, 19 Mar 2016 17:17:00 -0600
viewer: indent demo-view.cxx
Diffstat:
M | viewer/demo-view.cxx | | | 822 | +++++++++++++++++++++++++++++++++++++++---------------------------------------- |
1 file changed, 409 insertions(+), 413 deletions(-)
diff --git a/viewer/demo-view.cxx b/viewer/demo-view.cxx
@@ -16,10 +16,6 @@
* Google Author(s): Behdad Esfahbod, Maysum Panju, Wojciech Baranowski
*/
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
#include "demo-view.h"
extern "C" {
@@ -31,44 +27,44 @@ extern "C" {
struct demo_view_t {
- unsigned int refcount;
-
- demo_glstate_t *st;
-
- /* Output */
- GLint vsync;
- glyphy_bool_t srgb;
- glyphy_bool_t fullscreen;
-
- /* Mouse handling */
- int buttons;
- int modifiers;
- bool dragged;
- bool click_handled;
- double beginx, beginy;
- double lastx, lasty, lastt;
- double dx,dy, dt;
-
- /* Transformation */
- float quat[4];
- double scale;
- glyphy_point_t translate;
- double perspective;
-
- /* Animation */
- float rot_axis[3];
- float rot_speed;
- bool animate;
- int num_frames;
- long fps_start_time;
- long last_frame_time;
- bool has_fps_timer;
-
- /* Window geometry just before going fullscreen */
- int x;
- int y;
- int width;
- int height;
+ unsigned int refcount;
+
+ demo_glstate_t *st;
+
+ /* Output */
+ GLint vsync;
+ glyphy_bool_t srgb;
+ glyphy_bool_t fullscreen;
+
+ /* Mouse handling */
+ int buttons;
+ int modifiers;
+ bool dragged;
+ bool click_handled;
+ double beginx, beginy;
+ double lastx, lasty, lastt;
+ double dx,dy, dt;
+
+ /* Transformation */
+ float quat[4];
+ double scale;
+ glyphy_point_t translate;
+ double perspective;
+
+ /* Animation */
+ float rot_axis[3];
+ float rot_speed;
+ bool animate;
+ int num_frames;
+ long fps_start_time;
+ long last_frame_time;
+ bool has_fps_timer;
+
+ /* Window geometry just before going fullscreen */
+ int x;
+ int y;
+ int width;
+ int height;
};
demo_view_t *static_vu;
@@ -76,37 +72,37 @@ demo_view_t *static_vu;
demo_view_t *
demo_view_create (demo_glstate_t *st)
{
- TRACE();
+ TRACE();
- demo_view_t *vu = (demo_view_t *) calloc (1, sizeof (demo_view_t));
- vu->refcount = 1;
+ demo_view_t *vu = (demo_view_t *) calloc (1, sizeof (demo_view_t));
+ vu->refcount = 1;
- vu->st = st;
- demo_view_reset (vu);
+ vu->st = st;
+ demo_view_reset (vu);
- assert (!static_vu);
- static_vu = vu;
+ assert (!static_vu);
+ static_vu = vu;
- return vu;
+ return vu;
}
demo_view_t *
demo_view_reference (demo_view_t *vu)
{
- if (vu) vu->refcount++;
- return vu;
+ if (vu) vu->refcount++;
+ return vu;
}
void
demo_view_destroy (demo_view_t *vu)
{
- if (!vu || --vu->refcount)
- return;
+ if (!vu || --vu->refcount)
+ return;
- assert (static_vu == vu);
- static_vu = NULL;
+ assert (static_vu == vu);
+ static_vu = NULL;
- free (vu);
+ free (vu);
}
@@ -114,95 +110,95 @@ demo_view_destroy (demo_view_t *vu)
void
demo_view_reset (demo_view_t *vu)
{
- vu->perspective = 4;
- vu->scale = 1;
- vu->translate.x = vu->translate.y = 0;
- trackball (vu->quat , 0.0, 0.0, 0.0, 0.0);
- vset (vu->rot_axis, 0., 0., 1.);
- vu->rot_speed = ANIMATION_SPEED / 1000.;
+ vu->perspective = 4;
+ vu->scale = 1;
+ vu->translate.x = vu->translate.y = 0;
+ trackball (vu->quat , 0.0, 0.0, 0.0, 0.0);
+ vset (vu->rot_axis, 0., 0., 1.);
+ vu->rot_speed = ANIMATION_SPEED / 1000.;
}
static void
demo_view_scale_gamma_adjust (demo_view_t *vu, double factor)
{
- demo_glstate_scale_gamma_adjust (vu->st, factor);
+ demo_glstate_scale_gamma_adjust (vu->st, factor);
}
static void
demo_view_scale_contrast (demo_view_t *vu, double factor)
{
- demo_glstate_scale_contrast (vu->st, factor);
+ demo_glstate_scale_contrast (vu->st, factor);
}
static void
demo_view_scale_perspective (demo_view_t *vu, double factor)
{
- vu->perspective = clamp (vu->perspective * factor, .01, 100.);
+ vu->perspective = clamp (vu->perspective * factor, .01, 100.);
}
static void
demo_view_toggle_outline (demo_view_t *vu)
{
- demo_glstate_toggle_outline (vu->st);
+ demo_glstate_toggle_outline (vu->st);
}
static void
demo_view_scale_outline_thickness (demo_view_t *vu, double factor)
{
- demo_glstate_scale_outline_thickness (vu->st, factor);
+ demo_glstate_scale_outline_thickness (vu->st, factor);
}
static void
demo_view_adjust_boldness (demo_view_t *vu, double factor)
{
- demo_glstate_adjust_boldness (vu->st, factor);
+ demo_glstate_adjust_boldness (vu->st, factor);
}
static void
demo_view_scale (demo_view_t *vu, double factor)
{
- vu->scale *= factor;
+ vu->scale *= factor;
}
static void
demo_view_translate (demo_view_t *vu, double dx, double dy)
{
- vu->translate.x += dx / vu->scale;
- vu->translate.y += dy / vu->scale;
+ vu->translate.x += dx / vu->scale;
+ vu->translate.y += dy / vu->scale;
}
static void
demo_view_apply_transform (demo_view_t *vu, float *mat)
{
- int viewport[4];
- glGetIntegerv (GL_VIEWPORT, viewport);
- GLint width = viewport[2];
- GLint height = viewport[3];
+ int viewport[4];
+ glGetIntegerv (GL_VIEWPORT, viewport);
+ GLint width = viewport[2];
+ GLint height = viewport[3];
- // View transform
- m4Scale (mat, vu->scale, vu->scale, 1);
- m4Translate (mat, vu->translate.x, vu->translate.y, 0);
+ // View transform
+ m4Scale (mat, vu->scale, vu->scale, 1);
+ m4Translate (mat, vu->translate.x, vu->translate.y, 0);
- // Perspective
- {
- double d = std::max (width, height);
- double near = d / vu->perspective;
- double far = near + d;
- double factor = near / (2 * near + d);
- m4Frustum (mat, -width * factor, width * factor, -height * factor, height * factor, near, far);
- m4Translate (mat, 0, 0, -(near + d * .5));
- }
+ // Perspective
+ {
+ double d = std::max (width, height);
+ double near = d / vu->perspective;
+ double far = near + d;
+ double factor = near / (2 * near + d);
+ m4Frustum (mat, -width * factor, width * factor, -height * factor, height * factor, near, far);
+ m4Translate (mat, 0, 0, -(near + d * .5));
+ }
- // Rotate
- float m[4][4];
- build_rotmatrix (m, vu->quat);
- m4MultMatrix(mat, &m[0][0]);
+ // Rotate
+ float m[4][4];
+ build_rotmatrix (m, vu->quat);
+ m4MultMatrix(mat, &m[0][0]);
- // Fix 'up'
- m4Scale (mat, 1, -1, 1);
+ // Fix 'up'
+ m4Scale (mat, 1, -1, 1);
}
@@ -210,447 +206,447 @@ demo_view_apply_transform (demo_view_t *vu, float *mat)
static long
current_time (void)
{
- return glutGet (GLUT_ELAPSED_TIME);
+ return glutGet (GLUT_ELAPSED_TIME);
}
static void
next_frame (demo_view_t *vu)
{
- glutPostRedisplay ();
+ glutPostRedisplay ();
}
static void
timed_step (int ms)
{
- demo_view_t *vu = static_vu;
- if (vu->animate) {
- glutTimerFunc (ms, timed_step, ms);
- next_frame (vu);
- }
+ demo_view_t *vu = static_vu;
+ if (vu->animate) {
+ glutTimerFunc (ms, timed_step, ms);
+ next_frame (vu);
+ }
}
static void
idle_step (void)
{
- demo_view_t *vu = static_vu;
- if (vu->animate) {
- next_frame (vu);
- }
- else
- glutIdleFunc (NULL);
+ demo_view_t *vu = static_vu;
+ if (vu->animate) {
+ next_frame (vu);
+ }
+ else
+ glutIdleFunc (NULL);
}
static void
print_fps (int ms)
{
- demo_view_t *vu = static_vu;
- if (vu->animate) {
- glutTimerFunc (ms, print_fps, ms);
- long t = current_time ();
- LOGI ("%gfps\n", vu->num_frames * 1000. / (t - vu->fps_start_time));
- vu->num_frames = 0;
- vu->fps_start_time = t;
- } else
- vu->has_fps_timer = false;
+ demo_view_t *vu = static_vu;
+ if (vu->animate) {
+ glutTimerFunc (ms, print_fps, ms);
+ long t = current_time ();
+ LOGI ("%gfps\n", vu->num_frames * 1000. / (t - vu->fps_start_time));
+ vu->num_frames = 0;
+ vu->fps_start_time = t;
+ } else
+ vu->has_fps_timer = false;
}
static void
start_animation (demo_view_t *vu)
{
- vu->num_frames = 0;
- vu->last_frame_time = vu->fps_start_time = current_time ();
- //glutTimerFunc (1000/60, timed_step, 1000/60);
- glutIdleFunc (idle_step);
- if (!vu->has_fps_timer) {
- vu->has_fps_timer = true;
- glutTimerFunc (5000, print_fps, 5000);
- }
+ vu->num_frames = 0;
+ vu->last_frame_time = vu->fps_start_time = current_time ();
+ //glutTimerFunc (1000/60, timed_step, 1000/60);
+ glutIdleFunc (idle_step);
+ if (!vu->has_fps_timer) {
+ vu->has_fps_timer = true;
+ glutTimerFunc (5000, print_fps, 5000);
+ }
}
static void
demo_view_toggle_animation (demo_view_t *vu)
{
- vu->animate = !vu->animate;
- if (vu->animate)
- start_animation (vu);
+ vu->animate = !vu->animate;
+ if (vu->animate)
+ start_animation (vu);
}
static void
demo_view_toggle_vsync (demo_view_t *vu)
{
- vu->vsync = !vu->vsync;
- LOGI ("Setting vsync %s.\n", vu->vsync ? "on" : "off");
+ vu->vsync = !vu->vsync;
+ LOGI ("Setting vsync %s.\n", vu->vsync ? "on" : "off");
#if defined(__APPLE__)
- CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &vu->vsync);
+ CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &vu->vsync);
#elif defined(__WGLEW__)
- if (wglewIsSupported ("WGL_EXT_swap_control"))
- wglSwapIntervalEXT (vu->vsync);
- else
- LOGW ("WGL_EXT_swal_control not supported; failed to set vsync\n");
+ if (wglewIsSupported ("WGL_EXT_swap_control"))
+ wglSwapIntervalEXT (vu->vsync);
+ else
+ LOGW ("WGL_EXT_swal_control not supported; failed to set vsync\n");
#elif defined(__GLXEW_H__)
- if (glxewIsSupported ("GLX_SGI_swap_control"))
- glXSwapIntervalSGI (vu->vsync);
- else
- LOGW ("GLX_SGI_swap_control not supported; failed to set vsync\n");
+ if (glxewIsSupported ("GLX_SGI_swap_control"))
+ glXSwapIntervalSGI (vu->vsync);
+ else
+ LOGW ("GLX_SGI_swap_control not supported; failed to set vsync\n");
#else
- LOGW ("No vsync extension found; failed to set vsync\n");
+ LOGW ("No vsync extension found; failed to set vsync\n");
#endif
}
static void
demo_view_toggle_srgb (demo_view_t *vu)
{
- vu->srgb = !vu->srgb;
- LOGI ("Setting sRGB framebuffer %s.\n", vu->srgb ? "on" : "off");
+ vu->srgb = !vu->srgb;
+ LOGI ("Setting sRGB framebuffer %s.\n", vu->srgb ? "on" : "off");
#if defined(GL_FRAMEBUFFER_SRGB) && defined(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT)
- GLboolean available = false;
- if ((glewIsSupported ("GL_ARB_framebuffer_sRGB") || glewIsSupported ("GL_EXT_framebuffer_sRGB")) &&
- (glGetBooleanv (GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &available), available)) {
- if (vu->srgb)
- glEnable (GL_FRAMEBUFFER_SRGB);
- else
- glDisable (GL_FRAMEBUFFER_SRGB);
- } else
+ GLboolean available = false;
+ if ((glewIsSupported ("GL_ARB_framebuffer_sRGB") || glewIsSupported ("GL_EXT_framebuffer_sRGB")) &&
+ (glGetBooleanv (GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &available), available)) {
+ if (vu->srgb)
+ glEnable (GL_FRAMEBUFFER_SRGB);
+ else
+ glDisable (GL_FRAMEBUFFER_SRGB);
+ } else
#endif
- LOGW ("No sRGB framebuffer extension found; failed to set sRGB framebuffer\n");
+ LOGW ("No sRGB framebuffer extension found; failed to set sRGB framebuffer\n");
}
static void
demo_view_toggle_fullscreen (demo_view_t *vu)
{
- vu->fullscreen = !vu->fullscreen;
- if (vu->fullscreen) {
- vu->x = glutGet (GLUT_WINDOW_X);
- vu->y = glutGet (GLUT_WINDOW_Y);
- vu->width = glutGet (GLUT_WINDOW_WIDTH);
- vu->height = glutGet (GLUT_WINDOW_HEIGHT);
- glutFullScreen ();
- } else {
- glutReshapeWindow (vu->width, vu->height);
- glutPositionWindow (vu->x, vu->y);
- }
+ vu->fullscreen = !vu->fullscreen;
+ if (vu->fullscreen) {
+ vu->x = glutGet (GLUT_WINDOW_X);
+ vu->y = glutGet (GLUT_WINDOW_Y);
+ vu->width = glutGet (GLUT_WINDOW_WIDTH);
+ vu->height = glutGet (GLUT_WINDOW_HEIGHT);
+ glutFullScreen ();
+ } else {
+ glutReshapeWindow (vu->width, vu->height);
+ glutPositionWindow (vu->x, vu->y);
+ }
}
static void
demo_view_toggle_debug (demo_view_t *vu)
{
- demo_glstate_toggle_debug (vu->st);
+ demo_glstate_toggle_debug (vu->st);
}
void
demo_view_reshape_func (demo_view_t *vu, int width, int height)
{
- glViewport (0, 0, width, height);
- glutPostRedisplay ();
+ glViewport (0, 0, width, height);
+ glutPostRedisplay ();
}
#define STEP 1.05
void
demo_view_keyboard_func (demo_view_t *vu, unsigned char key, int x, int y)
{
- switch (key)
- {
- case '\033':
- case 'q':
- exit (0);
- break;
-
- case ' ':
- demo_view_toggle_animation (vu);
- break;
- case 'v':
- demo_view_toggle_vsync (vu);
- break;
-
- case 'f':
- demo_view_toggle_fullscreen (vu);
- break;
-
- case 'd':
- demo_view_toggle_debug (vu);
- break;
-
- case 'o':
- demo_view_toggle_outline (vu);
- break;
- case 'p':
- demo_view_scale_outline_thickness (vu, STEP);
- break;
- case 'i':
- demo_view_scale_outline_thickness (vu, 1. / STEP);
- break;
-
- case '0':
- demo_view_adjust_boldness (vu, +.01);
- break;
- case '9':
- demo_view_adjust_boldness (vu, -.01);
- break;
-
-
- case 'a':
- demo_view_scale_contrast (vu, STEP);
- break;
- case 'z':
- demo_view_scale_contrast (vu, 1. / STEP);
- break;
- case 'g':
- demo_view_scale_gamma_adjust (vu, STEP);
- break;
- case 'b':
- demo_view_scale_gamma_adjust (vu, 1. / STEP);
- break;
- case 'c':
- demo_view_toggle_srgb (vu);
- break;
-
- case '=':
- demo_view_scale (vu, STEP);
- break;
- case '-':
- demo_view_scale (vu, 1. / STEP);
- break;
-
- case 'k':
- demo_view_translate (vu, 0, -.1);
- break;
- case 'j':
- demo_view_translate (vu, 0, +.1);
- break;
- case 'h':
- demo_view_translate (vu, +.1, 0);
- break;
- case 'l':
- demo_view_translate (vu, -.1, 0);
- break;
-
- case 'r':
- demo_view_reset (vu);
- break;
-
- default:
- return;
- }
- glutPostRedisplay ();
+ switch (key)
+ {
+ case '\033':
+ case 'q':
+ exit (0);
+ break;
+
+ case ' ':
+ demo_view_toggle_animation (vu);
+ break;
+ case 'v':
+ demo_view_toggle_vsync (vu);
+ break;
+
+ case 'f':
+ demo_view_toggle_fullscreen (vu);
+ break;
+
+ case 'd':
+ demo_view_toggle_debug (vu);
+ break;
+
+ case 'o':
+ demo_view_toggle_outline (vu);
+ break;
+ case 'p':
+ demo_view_scale_outline_thickness (vu, STEP);
+ break;
+ case 'i':
+ demo_view_scale_outline_thickness (vu, 1. / STEP);
+ break;
+
+ case '0':
+ demo_view_adjust_boldness (vu, +.01);
+ break;
+ case '9':
+ demo_view_adjust_boldness (vu, -.01);
+ break;
+
+
+ case 'a':
+ demo_view_scale_contrast (vu, STEP);
+ break;
+ case 'z':
+ demo_view_scale_contrast (vu, 1. / STEP);
+ break;
+ case 'g':
+ demo_view_scale_gamma_adjust (vu, STEP);
+ break;
+ case 'b':
+ demo_view_scale_gamma_adjust (vu, 1. / STEP);
+ break;
+ case 'c':
+ demo_view_toggle_srgb (vu);
+ break;
+
+ case '=':
+ demo_view_scale (vu, STEP);
+ break;
+ case '-':
+ demo_view_scale (vu, 1. / STEP);
+ break;
+
+ case 'k':
+ demo_view_translate (vu, 0, -.1);
+ break;
+ case 'j':
+ demo_view_translate (vu, 0, +.1);
+ break;
+ case 'h':
+ demo_view_translate (vu, +.1, 0);
+ break;
+ case 'l':
+ demo_view_translate (vu, -.1, 0);
+ break;
+
+ case 'r':
+ demo_view_reset (vu);
+ break;
+
+ default:
+ return;
+ }
+ glutPostRedisplay ();
}
void
demo_view_special_func (demo_view_t *vu, int key, int x, int y)
{
- switch (key)
- {
- case GLUT_KEY_UP:
- demo_view_translate (vu, 0, -.1);
- break;
- case GLUT_KEY_DOWN:
- demo_view_translate (vu, 0, +.1);
- break;
- case GLUT_KEY_LEFT:
- demo_view_translate (vu, +.1, 0);
- break;
- case GLUT_KEY_RIGHT:
- demo_view_translate (vu, -.1, 0);
- break;
-
- default:
- return;
- }
- glutPostRedisplay ();
+ switch (key)
+ {
+ case GLUT_KEY_UP:
+ demo_view_translate (vu, 0, -.1);
+ break;
+ case GLUT_KEY_DOWN:
+ demo_view_translate (vu, 0, +.1);
+ break;
+ case GLUT_KEY_LEFT:
+ demo_view_translate (vu, +.1, 0);
+ break;
+ case GLUT_KEY_RIGHT:
+ demo_view_translate (vu, -.1, 0);
+ break;
+
+ default:
+ return;
+ }
+ glutPostRedisplay ();
}
void
demo_view_mouse_func (demo_view_t *vu, int button, int state, int x, int y)
{
- if (state == GLUT_DOWN) {
- vu->buttons |= (1 << button);
- vu->click_handled = false;
- } else
- vu->buttons &= !(1 << button);
- vu->modifiers = glutGetModifiers ();
-
- switch (button)
- {
- case GLUT_RIGHT_BUTTON:
- switch (state) {
- case GLUT_DOWN:
- if (vu->animate) {
- demo_view_toggle_animation (vu);
- vu->click_handled = true;
- }
- break;
- case GLUT_UP:
- if (!vu->animate)
- {
- if (!vu->dragged && !vu->click_handled)
- demo_view_toggle_animation (vu);
- else if (vu->dt) {
- double speed = hypot (vu->dx, vu->dy) / vu->dt;
- if (speed > 0.1)
- demo_view_toggle_animation (vu);
- }
- vu->dx = vu->dy = vu->dt = 0;
- }
- break;
- }
- break;
+ if (state == GLUT_DOWN) {
+ vu->buttons |= (1 << button);
+ vu->click_handled = false;
+ } else
+ vu->buttons &= !(1 << button);
+ vu->modifiers = glutGetModifiers ();
+
+ switch (button)
+ {
+ case GLUT_RIGHT_BUTTON:
+ switch (state) {
+ case GLUT_DOWN:
+ if (vu->animate) {
+ demo_view_toggle_animation (vu);
+ vu->click_handled = true;
+ }
+ break;
+ case GLUT_UP:
+ if (!vu->animate)
+ {
+ if (!vu->dragged && !vu->click_handled)
+ demo_view_toggle_animation (vu);
+ else if (vu->dt) {
+ double speed = hypot (vu->dx, vu->dy) / vu->dt;
+ if (speed > 0.1)
+ demo_view_toggle_animation (vu);
+ }
+ vu->dx = vu->dy = vu->dt = 0;
+ }
+ break;
+ }
+ break;
#if !defined(GLUT_WHEEL_UP)
#define GLUT_WHEEL_UP 3
#define GLUT_WHEEL_DOWN 4
#endif
- case GLUT_WHEEL_UP:
- demo_view_scale (vu, STEP);
- break;
+ case GLUT_WHEEL_UP:
+ demo_view_scale (vu, STEP);
+ break;
- case GLUT_WHEEL_DOWN:
- demo_view_scale (vu, 1. / STEP);
- break;
- }
+ case GLUT_WHEEL_DOWN:
+ demo_view_scale (vu, 1. / STEP);
+ break;
+ }
- vu->beginx = vu->lastx = x;
- vu->beginy = vu->lasty = y;
- vu->dragged = false;
+ vu->beginx = vu->lastx = x;
+ vu->beginy = vu->lasty = y;
+ vu->dragged = false;
- glutPostRedisplay ();
+ glutPostRedisplay ();
}
void
demo_view_motion_func (demo_view_t *vu, int x, int y)
{
- vu->dragged = true;
-
- int viewport[4];
- glGetIntegerv (GL_VIEWPORT, viewport);
- GLuint width = viewport[2];
- GLuint height = viewport[3];
-
- if (vu->buttons & (1 << GLUT_LEFT_BUTTON))
- {
- if (vu->modifiers & GLUT_ACTIVE_SHIFT) {
- /* adjust contrast/gamma */
- demo_view_scale_gamma_adjust (vu, 1 - ((y - vu->lasty) / height));
- demo_view_scale_contrast (vu, 1 + ((x - vu->lastx) / width));
- } else {
- /* translate */
- demo_view_translate (vu,
- +2 * (x - vu->lastx) / width,
- -2 * (y - vu->lasty) / height);
- }
- }
-
- if (vu->buttons & (1 << GLUT_RIGHT_BUTTON))
- {
- if (vu->modifiers & GLUT_ACTIVE_SHIFT) {
- /* adjust perspective */
- demo_view_scale_perspective (vu, 1 - ((y - vu->lasty) / height) * 5);
- } else {
- /* rotate */
- float dquat[4];
- trackball (dquat,
- (2.0*vu->lastx - width) / width,
- ( height - 2.0*vu->lasty) / height,
- ( 2.0*x - width) / width,
- ( height - 2.0*y) / height );
-
- vu->dx = x - vu->lastx;
- vu->dy = y - vu->lasty;
- vu->dt = current_time () - vu->lastt;
-
- add_quats (dquat, vu->quat, vu->quat);
-
- if (vu->dt) {
- vcopy (dquat, vu->rot_axis);
- vnormal (vu->rot_axis);
- vu->rot_speed = 2 * acos (dquat[3]) / vu->dt;
- }
- }
- }
-
- if (vu->buttons & (1 << GLUT_MIDDLE_BUTTON))
- {
- /* scale */
- double factor = 1 - ((y - vu->lasty) / height) * 5;
- demo_view_scale (vu, factor);
- /* adjust translate so we scale centered at the drag-begin mouse position */
- demo_view_translate (vu,
- +(2. * vu->beginx / width - 1) * (1 - factor),
- -(2. * vu->beginy / height - 1) * (1 - factor));
- }
-
- vu->lastx = x;
- vu->lasty = y;
- vu->lastt = current_time ();
-
- glutPostRedisplay ();
+ vu->dragged = true;
+
+ int viewport[4];
+ glGetIntegerv (GL_VIEWPORT, viewport);
+ GLuint width = viewport[2];
+ GLuint height = viewport[3];
+
+ if (vu->buttons & (1 << GLUT_LEFT_BUTTON))
+ {
+ if (vu->modifiers & GLUT_ACTIVE_SHIFT) {
+ /* adjust contrast/gamma */
+ demo_view_scale_gamma_adjust (vu, 1 - ((y - vu->lasty) / height));
+ demo_view_scale_contrast (vu, 1 + ((x - vu->lastx) / width));
+ } else {
+ /* translate */
+ demo_view_translate (vu,
+ +2 * (x - vu->lastx) / width,
+ -2 * (y - vu->lasty) / height);
+ }
+ }
+
+ if (vu->buttons & (1 << GLUT_RIGHT_BUTTON))
+ {
+ if (vu->modifiers & GLUT_ACTIVE_SHIFT) {
+ /* adjust perspective */
+ demo_view_scale_perspective (vu, 1 - ((y - vu->lasty) / height) * 5);
+ } else {
+ /* rotate */
+ float dquat[4];
+ trackball (dquat,
+ (2.0*vu->lastx - width) / width,
+ ( height - 2.0*vu->lasty) / height,
+ ( 2.0*x - width) / width,
+ ( height - 2.0*y) / height );
+
+ vu->dx = x - vu->lastx;
+ vu->dy = y - vu->lasty;
+ vu->dt = current_time () - vu->lastt;
+
+ add_quats (dquat, vu->quat, vu->quat);
+
+ if (vu->dt) {
+ vcopy (dquat, vu->rot_axis);
+ vnormal (vu->rot_axis);
+ vu->rot_speed = 2 * acos (dquat[3]) / vu->dt;
+ }
+ }
+ }
+
+ if (vu->buttons & (1 << GLUT_MIDDLE_BUTTON))
+ {
+ /* scale */
+ double factor = 1 - ((y - vu->lasty) / height) * 5;
+ demo_view_scale (vu, factor);
+ /* adjust translate so we scale centered at the drag-begin mouse position */
+ demo_view_translate (vu,
+ +(2. * vu->beginx / width - 1) * (1 - factor),
+ -(2. * vu->beginy / height - 1) * (1 - factor));
+ }
+
+ vu->lastx = x;
+ vu->lasty = y;
+ vu->lastt = current_time ();
+
+ glutPostRedisplay ();
}
void
demo_view_print_help (demo_view_t *vu)
{
- LOGI ("Welcome to GLyphy demo\n");
+ LOGI ("Welcome to GLyphy demo\n");
}
static void
advance_frame (demo_view_t *vu, long dtime)
{
- if (vu->animate) {
- float dquat[4];
- axis_to_quat (vu->rot_axis, vu->rot_speed * dtime, dquat);
- add_quats (dquat, vu->quat, vu->quat);
- vu->num_frames++;
- }
+ if (vu->animate) {
+ float dquat[4];
+ axis_to_quat (vu->rot_axis, vu->rot_speed * dtime, dquat);
+ add_quats (dquat, vu->quat, vu->quat);
+ vu->num_frames++;
+ }
}
void
demo_view_display (demo_view_t *vu, demo_buffer_t *buffer)
{
- long new_time = current_time ();
- advance_frame (vu, new_time - vu->last_frame_time);
- vu->last_frame_time = new_time;
+ long new_time = current_time ();
+ advance_frame (vu, new_time - vu->last_frame_time);
+ vu->last_frame_time = new_time;
- int viewport[4];
- glGetIntegerv (GL_VIEWPORT, viewport);
- GLint width = viewport[2];
- GLint height = viewport[3];
+ int viewport[4];
+ glGetIntegerv (GL_VIEWPORT, viewport);
+ GLint width = viewport[2];
+ GLint height = viewport[3];
- float mat[16];
+ float mat[16];
- m4LoadIdentity (mat);
+ m4LoadIdentity (mat);
- demo_view_apply_transform (vu, mat);
+ demo_view_apply_transform (vu, mat);
- // Buffer best-fit
- glyphy_extents_t extents;
- demo_buffer_extents (buffer, NULL, &extents);
- double content_scale = .9 * std::min (width / (extents.max_x - extents.min_x),
- height / (extents.max_y - extents.min_y));
- m4Scale (mat, content_scale, content_scale, 1);
- // Center buffer
- m4Translate (mat,
- -(extents.max_x + extents.min_x) / 2.,
- -(extents.max_y + extents.min_y) / 2., 0);
+ // Buffer best-fit
+ glyphy_extents_t extents;
+ demo_buffer_extents (buffer, NULL, &extents);
+ double content_scale = .9 * std::min (width / (extents.max_x - extents.min_x),
+ height / (extents.max_y - extents.min_y));
+ m4Scale (mat, content_scale, content_scale, 1);
+ // Center buffer
+ m4Translate (mat,
+ -(extents.max_x + extents.min_x) / 2.,
+ -(extents.max_y + extents.min_y) / 2., 0);
- demo_glstate_set_matrix (vu->st, mat);
+ demo_glstate_set_matrix (vu->st, mat);
- glClearColor (1, 1, 1, 1);
- glClear (GL_COLOR_BUFFER_BIT);
+ glClearColor (1, 1, 1, 1);
+ glClear (GL_COLOR_BUFFER_BIT);
- demo_buffer_draw (buffer);
+ demo_buffer_draw (buffer);
- glutSwapBuffers ();
+ glutSwapBuffers ();
}
-void
+ void
demo_view_setup (demo_view_t *vu)
{
- if (!vu->vsync)
- demo_view_toggle_vsync (vu);
- if (!vu->srgb)
- demo_view_toggle_srgb (vu);
- demo_glstate_setup (vu->st);
+ if (!vu->vsync)
+ demo_view_toggle_vsync (vu);
+ if (!vu->srgb)
+ demo_view_toggle_srgb (vu);
+ demo_glstate_setup (vu->st);
}