X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FOpenGL_Windows.cpp;h=576df7ecafdd761ca1b138d6448a567f9491c6b4;hb=440a61a70a5eb14dea5d26aa7cd050e0a3e0e069;hp=f8f180c6aa38b3c7a8f7ce889355f12250869b69;hpb=9a9d3b129c8690a3b38094e4c7f0873a87eef889;p=lugaru.git diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index f8f180c..576df7e 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + #ifdef WIN32 #define UINT8 WIN32API_UINT8 #define UINT16 WIN32API_UINT16 @@ -35,7 +36,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern "C" { #include "zlib.h" #include "png.h" - #include "jpeglib.h" + #ifdef WIN32 + #define INT32 INT32_jpeg + #include "jpeglib.h" + #undef INT32 + #else + #include "jpeglib.h" + #endif } static bool load_image(const char * fname, TGAImageRec & tex); @@ -110,12 +117,12 @@ extern float volume; #include "gamegl.h" #include "MacCompatibility.h" + #ifdef WIN32 #include +#include "win-res/resource.h" #endif -#include "res/resource.h" - using namespace std; @@ -313,7 +320,12 @@ void ShutdownDSp () void DrawGL (Game & game) { - game.DrawGLScene(); + if ( stereomode == stereoNone ) { + game.DrawGLScene(stereoCenter); + } else { + game.DrawGLScene(stereoLeft); + game.DrawGLScene(stereoRight); + } } @@ -691,6 +703,12 @@ Boolean SetUp (Game & game) opstream << KeyToChar(game.attackkey); opstream << "\nChat key:\n"; opstream << KeyToChar(game.chatkey); + opstream << "\nStereoMode:\n"; + opstream << stereomode; + opstream << "\nStereoSeparation:\n"; + opstream << stereoseparation; + opstream << "\nStereoReverse:\n"; + opstream << stereoreverse; opstream.close(); } if(ipstream){ @@ -837,6 +855,18 @@ Boolean SetUp (Game & game) ipstream.ignore(256,'\n'); ipstream >> string; game.chatkey=CharToKey(string); + ipstream.ignore(256,'\n'); + ipstream.ignore(256,'\n'); + if (!ipstream.eof()) { + ipstream >> i; + stereomode = (StereoMode)i; + ipstream.ignore(256,'\n'); + ipstream.ignore(256,'\n'); + ipstream >> stereoseparation; + ipstream.ignore(256,'\n'); + ipstream.ignore(256,'\n'); + ipstream >> stereoreverse; + } ipstream.close(); if(detail>2)detail=2; @@ -916,7 +946,8 @@ Boolean SetUp (Game & game) SDL_ShowCursor(0); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); + if (SDL_SetVideoMode(kContextWidth, kContextHeight, 0, sdlflags) == NULL) { fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError()); @@ -965,7 +996,6 @@ Boolean SetUp (Game & game) glDisable( GL_FOG); glDisable( GL_LIGHTING); glDisable( GL_LOGIC_OP); - glDisable( GL_STENCIL_TEST); glDisable( GL_TEXTURE_1D); glDisable( GL_TEXTURE_2D); glPixelTransferi( GL_MAP_COLOR, GL_FALSE); @@ -1007,6 +1037,58 @@ Boolean SetUp (Game & game) game.newscreenwidth=screenwidth; game.newscreenheight=screenheight; + GLint stencilbits = 0; + glGetIntegerv(GL_STENCIL_BITS, &stencilbits); + if ( stencilbits < 1 ) { + fprintf(stderr, "Failed to get a stencil buffer!\n"); + SDL_Quit(); + return false; + } + + if ( stereomode == stereoHorizontalInterlaced || stereomode == stereoVerticalInterlaced ) { + fprintf(stderr, "Stencil buffer has %i bits, good.\n", stencilbits); + fprintf(stderr, "Screen width is %i, height is %i\n", kContextWidth, kContextHeight); + + 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}; + + 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