]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Stereo.cpp
Remove glDrawPixels code for initializing interlaced stereo, replace with line drawin...
[lugaru.git] / Source / Stereo.cpp
index 815e177952f27ac8fcbe20baed3d66ec8f25bd44..b99c18e896e556c837a773d7031d238ebd824382 100644 (file)
@@ -25,7 +25,8 @@ bool CanInitStereo(StereoMode mode) {
                        } else {
                                fprintf(stderr, "Stencil buffer has %i bits, good.\n", stencilbits);
                        }
-                       
+                       return true;
+                       break;
                default:
                        return false;
        }
@@ -35,52 +36,72 @@ bool CanInitStereo(StereoMode mode) {
 void InitStereo(StereoMode mode) {
        switch(mode) {
                case stereoNone:
+                       glDisable( GL_STENCIL_TEST);
                        return;
                case stereoAnaglyph:
+                       glDisable( GL_STENCIL_TEST);
                        return;
                case stereoHorizontalInterlaced:
                case stereoVerticalInterlaced:
                        
                        fprintf(stderr, "Screen width is %i, height is %i\n", kContextWidth, kContextHeight);
                        
+                       // Setup stencil buffer
                        glEnable( GL_STENCIL_TEST);
                        glClearStencil(0);
                        glClear(  GL_STENCIL_BUFFER_BIT );
                        glStencilFunc(GL_ALWAYS, 0x1, 0x1);
                        glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
                        
-                       
-                       glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-                       glPixelStorei(GL_UNPACK_ROW_LENGTH, 3);
-                       glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
-                       glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
-                       glColorMask( 1.0, 1.0, 1.0, 1.0 );
-                       char stencil[] = {64,127,255};
-                       
+                       // Setup viewport
                        glViewport(0,0, kContextWidth, kContextHeight);
                        glMatrixMode(GL_PROJECTION);
-                       glLoadIdentity();
-                       glOrtho((GLdouble)0, (GLdouble)kContextWidth, (GLdouble)kContextHeight, 0, -1, 1);
-                       glMatrixMode(GL_MODELVIEW);
-                       glLoadIdentity();
-                       
-                       for(int y=0;y<kContextHeight;y+=2) {
-                               
-                               for(int x=0;x<kContextWidth;x++) {
-                                       glRasterPos2i(x, y);
-                                       glDrawPixels(1, 1, GL_RGB, GL_UNSIGNED_BYTE, &stencil);
-                               }
-                       }
+                       glPushMatrix();
+                               glLoadIdentity();
+                               glOrtho((GLdouble)0, (GLdouble)kContextWidth, (GLdouble)kContextHeight, 0, -1, 1);
+                               glMatrixMode(GL_MODELVIEW);
+                               glPushMatrix();
+                                       glLoadIdentity();
+                                       
+                                       glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
+                                       
+                                       if ( mode == stereoHorizontalInterlaced ) {
+                                               for(int y=0;y<kContextHeight;y+=2) {
+                                                       glBegin(GL_LINES);
+                                                               glVertex3f(0, y, 0);
+                                                               glVertex3f(kContextWidth, y, 0);
+                                                       glEnd();
+                                               }
+                                       } else {
+                                               for(int x=0;x<kContextWidth;x+=2) {
+                                                       glBegin(GL_LINES);
+                                                               glVertex3f(x, 0, 0);
+                                                               glVertex3f(x, kContextHeight, 0);
+                                                       glEnd();
+                                               }
+                                       }
+                                       
+                                       glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+                                       
+                               glPopMatrix();
+                               glMatrixMode(GL_PROJECTION);
+                       glPopMatrix();
                        
                        glStencilFunc(GL_NOTEQUAL, 0x01, 0x01);
                        glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
-
-                       // Something gets screwed up due to the changes above
-                       // revert to default.
-                       glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
-                       glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-                       glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
-                       glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
        }
        
+}
+
+const char* StereoModeName(StereoMode mode) {
+       switch(mode) {
+               case stereoNone:                 return "None"; break;
+               case stereoAnaglyph:             return "Anaglyph"; break;
+               case stereoHorizontalInterlaced: return "Horizontal interlacing"; break;
+               case stereoVerticalInterlaced:   return "Vertical interlacing"; break;
+               case stereoHorizontalSplit:      return "Horizontal split"; break;
+               case stereoVerticalSplit:        return "Vertical split"; break;
+               case stereoOpenGL:               return "OpenGL"; break;
+               default:                         return "(error)"; break; 
+       }
 }
\ No newline at end of file