From fe831b45a76f058d17bfef8b5f45d7e563d97089 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 13 May 2010 02:44:41 -0400 Subject: [PATCH] Some Windows build fixes. --- Source/OpenGL_Windows.cpp | 898 ++------------------------------------ Source/openal_wrapper.cpp | 4 + 2 files changed, 39 insertions(+), 863 deletions(-) diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index b1e158c..2334e46 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -19,6 +19,16 @@ 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 +#define boolean WIN32API_boolean +#include +#undef UINT8 +#undef UINT16 +#undef boolean +#endif + #define USE_DEVIL 0 #ifndef USE_DEVIL @@ -167,14 +177,24 @@ typedef struct tagPOINT { #endif #if USE_SDL + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4273) +#endif + #define GL_FUNC(ret,fn,params,call,rt) \ extern "C" { \ - static ret GLAPIENTRY (*p##fn) params = NULL; \ + static ret (GLAPIENTRY *p##fn) params = NULL; \ ret GLAPIENTRY fn params { rt p##fn call; } \ } #include "glstubs.h" #undef GL_FUNC +#ifdef _MSC_VER +#pragma warning(pop) +#endif + static bool lookup_glsym(const char *funcname, void **func) { *func = SDL_GL_GetProcAddress(funcname); @@ -214,18 +234,14 @@ void sdlGetCursorPos(POINT *pt) #define SetCursorPos(x, y) SDL_WarpMouse(x, y) #define ScreenToClient(x, pt) #define ClientToScreen(x, pt) +#ifdef MessageBox +#undef MessageBox +#endif #define MessageBox(hwnd,text,title,flags) STUBBED("msgbox") #endif Point delta; -#ifdef WIN32 -static const char g_wndClassName[]={ "LUGARUWINDOWCLASS" }; -static HINSTANCE g_appInstance; -static HWND g_windowHandle; -static HGLRC hRC; -#endif - static bool g_button, fullscreen = true; @@ -255,7 +271,7 @@ Boolean gDone = false, gfFrontProcess = true; Game * pgame = 0; -#ifndef WIN32 +#ifndef __MINGW32__ static int _argc = 0; static char **_argv = NULL; #endif @@ -267,7 +283,7 @@ bool cmdline(const char *cmd) char *arg = _argv[i]; while (*arg == '-') arg++; - if (strcasecmp(arg, cmd) == 0) + if (stricmp(arg, cmd) == 0) return true; } @@ -279,7 +295,7 @@ bool cmdline(const char *cmd) void ReportError (char * strError) { -#ifdef WIN32 // !!! FIXME. --ryan. +#ifdef _MSC_VER // !!! FIXME. --ryan. throw std::exception( strError); #endif @@ -296,44 +312,11 @@ void ReportError (char * strError) void SetupDSpFullScreen () { -#ifdef WIN32 - LOGFUNC; - - if (fullscreen) - { - DEVMODE dmScreenSettings; - memset( &dmScreenSettings, 0, sizeof( dmScreenSettings)); - dmScreenSettings.dmSize = sizeof( dmScreenSettings); - dmScreenSettings.dmPelsWidth = kContextWidth; - dmScreenSettings.dmPelsHeight = kContextHeight; - dmScreenSettings.dmBitsPerPel = kBitsPerPixel; - dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; - - // set video mode - if (ChangeDisplaySettings( &dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - { - ReportError( "Could not set display mode"); - return; - } - } - - ShowCursor(FALSE); -#endif } void ShutdownDSp () { -#ifdef WIN32 - LOGFUNC; - - if (fullscreen) - { - ChangeDisplaySettings( NULL, 0); - } - - ShowCursor(TRUE); -#endif } @@ -343,11 +326,6 @@ void ShutdownDSp () void DrawGL (Game & game) { -#ifdef WIN32 - if (hDC == 0) - return; -#endif - game.DrawGLScene(); } @@ -990,115 +968,6 @@ Boolean SetUp (Game & game) if (!cmdline("nomousegrab")) SDL_WM_GrabInput(SDL_GRAB_ON); - -#elif (defined WIN32) - //------------------------------------------------------------------ - // create window - int x = 0, y = 0; - RECT r = {0, 0, kContextWidth-1, kContextHeight-1}; - DWORD dwStyle = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE; - DWORD dwExStyle = WS_EX_APPWINDOW; - - if (fullscreen) - { - dwStyle |= WS_POPUP; - } - else - { - - dwStyle |= WS_OVERLAPPEDWINDOW; - dwExStyle |= WS_EX_WINDOWEDGE; - } - - AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle); - - if (!fullscreen) - { - x = (GetSystemMetrics(SM_CXSCREEN) >> 1) - ((r.right - r.left + 1) >> 1); - y = (GetSystemMetrics(SM_CYSCREEN) >> 1) - ((r.bottom - r.top + 1) >> 1); - } - - g_windowHandle=CreateWindowEx( - dwExStyle, - g_wndClassName, "Lugaru", dwStyle, - x, y, -// kContextWidth, kContextHeight, - r.right - r.left + 1, r.bottom - r.top + 1, - NULL,NULL,g_appInstance,NULL ); - if (!g_windowHandle) - { - ReportError("Could not create window"); - return false; - } - - //------------------------------------------------------------------ - // setup OpenGL - - static PIXELFORMATDESCRIPTOR pfd = - { - sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor - 1, // Version Number - PFD_DRAW_TO_WINDOW | // Format Must Support Window - PFD_SUPPORT_OPENGL | // Format Must Support OpenGL - PFD_DOUBLEBUFFER, // Must Support Double Buffering - PFD_TYPE_RGBA, // Request An RGBA Format - kBitsPerPixel, // Select Our Color Depth - 0, 0, 0, 0, 0, 0, // Color Bits Ignored - 0, // No Alpha Buffer - 0, // Shift Bit Ignored - 0, // No Accumulation Buffer - 0, 0, 0, 0, // Accumulation Bits Ignored - 16, // 16Bit Z-Buffer (Depth Buffer) - 0, // No Stencil Buffer - 0, // No Auxiliary Buffer - PFD_MAIN_PLANE, // Main Drawing Layer - 0, // Reserved - 0, 0, 0 // Layer Masks Ignored - }; - - if (!(hDC = GetDC( g_windowHandle))) - ReportError( "Could not get device context"); - - GLuint PixelFormat; - if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd))) - { - ReportError( "Could not find appropriate pixel format"); - return false; - } - - if (!DescribePixelFormat(hDC, PixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd)) - { - ReportError( "Could not retrieve pixel format"); - return false; - } - - if (!SetPixelFormat( hDC, PixelFormat, &pfd)) - { - ReportError( "Could not set pixel format"); - return false; - } - - if (!(hRC = wglCreateContext(hDC))) - { - ReportError( "Could not create rendering context"); - return false; - } - - if (!wglMakeCurrent(hDC, hRC)) - { - ReportError( "Could not activate rendering context"); - return false; - } - - if (fullscreen) - { - // Place the window above all topmost windows - SetWindowPos( g_windowHandle, HWND_TOPMOST, 0,0,0,0, - SWP_NOMOVE | SWP_NOSIZE ); - } - - SetForegroundWindow(g_windowHandle); - SetFocus(g_windowHandle); #endif glClear( GL_COLOR_BUFFER_BIT ); @@ -1197,50 +1066,6 @@ static void DoMouse(Game & game) else if (game.mousecoordv >= kContextHeight) game.mousecoordv = kContextHeight - 1; } -#else - static Point lastMouse = {-1,-1}; - Point globalMouse; - - POINT pos; - GetCursorPos(&pos); - ScreenToClient(g_windowHandle, &pos); - globalMouse.h = pos.x; - globalMouse.v = pos.y; - - if (lastMouse.h == globalMouse.h && lastMouse.v == globalMouse.v) - { - game.deltah=0; - game.deltav=0; - } - else - { - static Point virtualMouse = {0,0}; - delta = globalMouse; - - delta.h -= lastMouse.h; - delta.v -= lastMouse.v; - lastMouse.h = pos.x; - lastMouse.v = pos.y; - - if(mainmenu||(abs(delta.h)<10*realmultiplier*1000&&abs(delta.v)<10*realmultiplier*1000)){ - game.deltah=delta.h*usermousesensitivity; - game.deltav=delta.v*usermousesensitivity; - game.mousecoordh=globalMouse.h; - game.mousecoordv=globalMouse.v; - } - - if(!mainmenu) - { - if(lastMouse.h>gMidPoint.h+100||lastMouse.hgMidPoint.v+100||lastMouse.vGetInfo())->m_mouseX = (signed short)(lParam & 0xffff); - ((WindowInfo *)g_lastWindow->GetInfo())->m_mouseY = (signed short)(lParam >> 16); - if (g_lastWindow->m_mouseCallbacksEnabled) g_lastWindow->MouseMoveCallback(); - */// goto winmessage; - return (0); - - case WM_SYSCOMMAND: // Intercept System Commands - { - switch (wParam) // Check System Calls - { - case SC_SCREENSAVE: // Screensaver Trying To Start? - case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? - return 0; // Prevent From Happening - - // User trying to access application menu using ALT? - case SC_KEYMENU: - return 0; - } - } - break; - - case WM_MOVE: -// { -// ReleaseCapture(); -// ClipMouseToWindow(hWnd); -// } - break; - - case WM_SIZE: - break; - - case WM_CLOSE: - { - //gDone = true; - //game.tryquit=1; - } - //return (0); - - case WM_DESTROY: - { - //ClipCursor(NULL); - PostQuitMessage(0); /* Terminate Application */ - } - return (0); - - case WM_ERASEBKGND: - break; - - case WM_PAINT: -// BeginPaint( g_windowHandle,&ps); -// EndPaint( g_windowHandle,&ps); - break; - - default: - break; - } - - /* We processed the message and there - * is no processing by Windows necessary */ - - /* We didn't process the message so let Windows do it */ - return DefWindowProc(hWnd,msg,wParam,lParam); - } - - - static BOOL RegisterWindowClasses(HINSTANCE hFirstInstance) - { - WNDCLASSEX wc; - memset( &wc, 0, sizeof( wc)); - - /* Register the window class. */ - wc.cbSize = sizeof(wc); -#undef style - wc.style = (CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_OWNDC); /* Combination of Class Styles */ - wc.lpfnWndProc = AppWndProc; /* Adress of Window Procedure */ - wc.cbClsExtra = 0; /* Extra Bytes allocated for this Class */ - wc.cbWndExtra = 0; /* Extra Bytes allocated for each Window */ - wc.hInstance = hFirstInstance; /* Handle of program instance */ - wc.hIcon = LoadIcon( hFirstInstance, MAKEINTRESOURCE(IDI_LUGARU) ); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = NULL; - wc.lpszMenuName = NULL; - wc.lpszClassName = g_wndClassName; /* Name of the Window Class */ - wc.hIconSm = LoadIcon( hFirstInstance, MAKEINTRESOURCE(IDI_LUGARU) ); - - if (!RegisterClassEx(&wc)) return FALSE; /* Register Class failed */ - - return TRUE; - } -#endif - #if !USE_SDL int resolutionID(int width, int height) { @@ -2351,69 +1586,6 @@ int main(int argc, char **argv) return res; } - #ifdef WIN32 - int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) - { - int argc = 0; - LPWSTR * cl = CommandLineToArgvW(GetCommandLineW(), &argc); - if (argc > 1) - { - if (0 == _wcsicmp(cl[1], L"-windowed")) - { - fullscreen = false; - } - } - - memset( &g_theKeys, 0, sizeof( KeyMap)); - - unsigned int i = 0; - DEVMODE mode; - memset(&mode, 0, sizeof(mode)); - mode.dmSize = sizeof(mode); - while (EnumDisplaySettings(NULL, i++, &mode)) - { - if (mode.dmBitsPerPel < 16) - { - continue; - } - - int res = resolutionID(mode.dmPelsWidth, mode.dmPelsHeight); - - if (res > -1 && res < 8) - { - if (DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&mode, CDS_TEST)) - { - continue; - } - - switch(mode.dmBitsPerPel) - { - case 32: - case 24: - resolutionDepths[res][1] = mode.dmBitsPerPel; - break; - case 16: - resolutionDepths[res][0] = mode.dmBitsPerPel; - break; - } - } - } - - /* if there is no Instance of our program in memory then register the window class */ - if (hPrevInstance == NULL && !RegisterWindowClasses(hInstance)) - return FALSE; /* registration failed! */ - - g_appInstance=hInstance; - - main(0, NULL); - - UnregisterClass( g_wndClassName, hInstance); - - return TRUE; - - } - #endif - extern int channels[100]; extern FSOUND_SAMPLE * samp[100]; extern FSOUND_STREAM * strm[20]; @@ -2575,9 +1747,9 @@ static bool load_image(const char *file_name, TGAImageRec &tex) char *ptr = strrchr((char *)file_name, '.'); if (ptr) { - if (strcasecmp(ptr+1, "png") == 0) + if (stricmp(ptr+1, "png") == 0) return load_png(file_name, tex); - else if (strcasecmp(ptr+1, "jpg") == 0) + else if (stricmp(ptr+1, "jpg") == 0) return load_jpg(file_name, tex); } @@ -2739,7 +1911,7 @@ static bool save_image(const char *file_name) char *ptr = strrchr((char *)file_name, '.'); if (ptr) { - if (strcasecmp(ptr+1, "png") == 0) + if (stricmp(ptr+1, "png") == 0) return save_png(file_name); } diff --git a/Source/openal_wrapper.cpp b/Source/openal_wrapper.cpp index 9f8debc..b6292ab 100644 --- a/Source/openal_wrapper.cpp +++ b/Source/openal_wrapper.cpp @@ -26,6 +26,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include +#ifdef _MSC_VER +#include +#endif + #include "MacCompatibility.h" #include "fmod.h" -- 2.39.2