Stereo Hack
[mercenary-reloaded.git] / src / libopengl / opengl.c
index d992366..886f1cb 100644 (file)
@@ -120,7 +120,7 @@ void opengl_clear(int _flip_y)
 }
 
 /* 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;
@@ -149,7 +149,16 @@ void opengl_viewport(int view_width, int view_height, int split, int benson_at_l
                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();
 
@@ -162,6 +171,14 @@ void opengl_viewport(int view_width, int view_height, int split, int benson_at_l
        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);
 }