static unsigned short frustum_indices[] = { 2, 1, 3, 0, 1, 0xFFFF, 3, 4, 2, 0, 4, 0xFFFF };
static float view_matrix[] =
{
- 0.70711f, 0.40825f, -0.57735f, 0.0f,
- 0.0f, 0.81650f, 0.57735f, 0.0f,
- 0.70711f, -0.40725f, 0.57735f, 0.0f,
- -0.2f, 0.0f, -2.5f, 1.0f
+ 0.70711f, 0.23570f, -0.66667f, 0.0f,
+ 0.0f, 0.94281f, 0.33333f, 0.0f,
+ 0.70711f, -0.23570f, 0.66667f, 0.0f,
+ -0.2f, 0.0f, -2.0f, 1.0f
};
static float projection_matrix[] =
{
"}\n";
+void reset_correction(GeometryCorrection *correction)
+{
+ correction->keystone_vertical = 0.0f;
+ correction->curvature_type = 1;
+ correction->curvature_depth = 0.0f;
+ correction->vertical_center = 0.5f;
+ correction->perspective = 1.0f;
+}
+
GeometryCorrection *get_corrections(Display *display)
{
Window root;
{
XEvent event;
KeySym keysym;
+ int repaint;
XNextEvent(display, &event);
+ repaint = 0;
switch(event.type)
{
case KeyPress:
target->perspective -= 1.0f/16;
else if(keysym==XK_z)
target->curvature_type = target->curvature_type%2+1;
+ else if(keysym==XK_0)
+ reset_correction(target);
else
break;
{
update_view(display, &view, &event.xselection);
update_pending = 0;
+ repaint = 1;
}
break;
- default:
- printf("event %d\n", event.type);
+ case Expose:
+ repaint = 1;
break;
}
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- glUseProgram(view.programs[0]);
- glDrawElements(GL_TRIANGLE_STRIP, view.nelements, GL_UNSIGNED_SHORT, (void *)(12*sizeof(unsigned short)));
- glUseProgram(view.programs[1]);
- glDrawElements(GL_LINE_STRIP, 11, GL_UNSIGNED_SHORT, NULL);
- glXSwapBuffers(display, view.glx_window);
+ if(repaint)
+ {
+ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+ glUseProgram(view.programs[0]);
+ glDrawElements(GL_TRIANGLE_STRIP, view.nelements, GL_UNSIGNED_SHORT, (void *)(12*sizeof(unsigned short)));
+ glUseProgram(view.programs[1]);
+ glDrawElements(GL_LINE_STRIP, 11, GL_UNSIGNED_SHORT, NULL);
+ glXSwapBuffers(display, view.glx_window);
+ }
}
return 0;
corrections[i].monitor_name = (char *)malloc(namelen+1);
strcpy(corrections[i].monitor_name, argv[1]);
corrections[i+1].monitor_name = NULL;
- corrections[i].keystone_vertical = 0.0f;
- corrections[i].curvature_type = 1;
- corrections[i].curvature_depth = 0.0f;
- corrections[i].vertical_center = 0.5f;
- corrections[i].perspective = 1.0f;
+ reset_correction(&corrections[i]);
}
if(argc==2)