}
/* set viewport for improved rendering */
-void opengl_viewport(int view_width, int view_height, int split, int benson_at_line, double fov, double benson_size)
+void opengl_viewport(int view_width, int view_height, int split, int benson_at_line, double fov, double benson_size, int stereo)
{
int view_x = 0, view_y = 0;
double factor_height = 1.0;
return;
/* projection matrix */
- glViewport((GLsizei)view_x, (GLsizei)view_y, (GLsizei)view_width, (GLsizei)view_height);
+ switch (stereo) {
+ case 0: /* left eye */
+ glViewport((GLsizei)view_x, (GLsizei)view_y, (GLsizei)view_width / 2, (GLsizei)view_height);
+ break;
+ case 1: /* right eye */
+ glViewport((GLsizei)view_x + (GLsizei)view_width / 2, (GLsizei)view_y, (GLsizei)view_width / 2, (GLsizei)view_height);
+ break;
+ default:
+ glViewport((GLsizei)view_x, (GLsizei)view_y, (GLsizei)view_width, (GLsizei)view_height);
+ }
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double top = slope * ((double)image_height - benson_start_at_position) / (double)image_width;
double bottom = -slope * ((double)image_height * 2.0 - ((double)image_height - benson_start_at_position)) / (double)image_width;
glFrustum(left * factor_width, right * factor_width, bottom * factor_height, top * factor_height, 1.0, 5000000000.0);
+ switch (stereo) {
+ case 0: /* left eye */
+ glTranslated(2.52 / 2.0, 0, 0);
+ break;
+ case 1: /* right eye */
+ glTranslated(-2.52 / 2.0, 0, 0);
+ break;
+ }
glMatrixMode(GL_MODELVIEW);
}