static void resize (int newWidth, int newHeight) { width = newWidth; height = newHeight; IniIntSet ("WindowWidth", width); IniIntSet ("WindowHeight", height); RenderResize (); }
void RenderInit (void) { HWND hWnd; unsigned PixelFormat; HFONT font; HFONT oldfont; hWnd = WinHwnd (); if (!(hDC = GetDC (hWnd))) YOUFAIL ("Can't Create A GL Device Context.") ; if (!(PixelFormat = ChoosePixelFormat(hDC,&pfd))) YOUFAIL ("Can't Find A Suitable PixelFormat.") ; if(!SetPixelFormat(hDC,PixelFormat,&pfd)) YOUFAIL ("Can't Set The PixelFormat."); if (!(hRC = wglCreateContext (hDC))) YOUFAIL ("Can't Create A GL Rendering Context."); if(!wglMakeCurrent(hDC,hRC)) YOUFAIL ("Can't Activate The GL Rendering Context."); //Load the fonts for printing debug info to the window. for (int i = 0; i < FONT_COUNT; i++) { fonts[i].base_char = glGenLists(96); font = CreateFont (FONT_SIZE, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE|DEFAULT_PITCH, fonts[i].name); oldfont = (HFONT)SelectObject(hDC, font); wglUseFontBitmaps(hDC, 32, 96, fonts[i].base_char); SelectObject(hDC, oldfont); DeleteObject(font); } //If the program is running for the first time, set the defaults. if (!IniInt ("SetDefaults")) { IniIntSet ("SetDefaults", 1); IniIntSet ("Effect", EFFECT_BLOOM); IniIntSet ("ShowFog", 1); } //load in our settings letterbox = IniInt ("Letterbox") != 0; show_wireframe = IniInt ("Wireframe") != 0; show_fps = IniInt ("ShowFPS") != 0; show_fog = IniInt ("ShowFog") != 0; effect = IniInt ("Effect"); flat = IniInt ("Flat") != 0; fog_distance = WORLD_HALF; //clear the viewport so the user isn't looking at trash while the program starts glViewport (0, 0, WinWidth (), WinHeight ()); glClearColor (0.0f, 0.0f, 0.0f, 1.0f); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); SwapBuffers (hDC); RenderResize (); }
void RenderFlatToggle () { flat = !flat; IniIntSet ("Flat", flat ? 1 : 0); }
void RenderEffectCycle () { effect = (effect + 1) % EFFECT_COUNT; IniIntSet ("Effect", effect); }
void RenderWireframeToggle () { show_wireframe = !show_wireframe; IniIntSet ("Wireframe", show_wireframe ? 1 : 0); }
void RenderFogToggle () { show_fog = !show_fog; IniIntSet ("ShowFog", show_fog ? 1 : 0); }
void RenderFPSToggle () { show_fps = !show_fps; IniIntSet ("ShowFPS", show_fps ? 1 : 0); }
void CameraNextBehavior () { camera_behavior++; camera_behavior %= CAMERA_MODES; IniIntSet("camera_behavior",camera_behavior); }
void RenderLetterboxToggle () { letterbox = !letterbox; IniIntSet ("Letterbox", letterbox ? 1 : 0); RenderResize (); }
LONG WINAPI ScreenSaverProc(HWND hwnd_in,UINT message,WPARAM wparam,LPARAM lparam) { RECT r; int key; float delta_x, delta_y; POINT p; // Handles screen saver messages switch(message) { case WM_SIZE: width = LOWORD(lparam); // width of client area height = HIWORD(lparam); // height of client area if (wparam == SIZE_MAXIMIZED) { IniIntSet ("WindowMaximized", 1); } else { IniIntSet ("WindowWidth", width); IniIntSet ("WindowHeight", height); IniIntSet ("WindowMaximized", 0); } RenderResize (); break; case WM_KEYDOWN: key = (int) wparam; if (key == 'R') WorldReset (); else if (key == 'W') RenderWireframeToggle (); else if (key == 'E') RenderEffectCycle (); else if (key == 'L') RenderLetterboxToggle (); else if (key == 'F') RenderFPSToggle (); else if (key == 'G') RenderFogToggle (); else if (key == 'T') RenderFlatToggle (); else if (key == VK_F1) RenderHelpToggle (); else if (key == VK_ESCAPE) break; else if (!SCREENSAVER) { //Dev mode keys if (key == 'C') CameraAutoToggle (); if (key == 'B') CameraNextBehavior (); if (key == VK_F5) CameraReset (); if (key == VK_UP) CameraMedial (1.0f); if (key == VK_DOWN) CameraMedial (-1.0f); if (key == VK_LEFT) CameraLateral (1.0f); if (key == VK_RIGHT) CameraLateral (-1.0f); if (key == VK_PRIOR) CameraVertical (1.0f); if (key == VK_NEXT) CameraVertical (-1.0f); if (key == VK_F5) CameraReset (); return 0; } else break; return 0; case WM_MOVE: GetClientRect (hwnd, &r); height = r.bottom - r.top; width = r.right - r.left; IniIntSet ("WindowX", r.left); IniIntSet ("WindowY", r.top); IniIntSet ("WindowWidth", width); IniIntSet ("WindowHeight", height); half_width = width / 2; half_height = height / 2; return 0; case WM_LBUTTONDOWN: lmb = true; SetCapture (hwnd); break; case WM_RBUTTONDOWN: rmb = true; SetCapture (hwnd); break; case WM_LBUTTONUP: lmb = false; if (!rmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_RBUTTONUP: rmb = false; if (!lmb) { ReleaseCapture (); MoveCursor (select_pos.x, select_pos.y); } break; case WM_MOUSEMOVE: p.x = LOWORD(lparam); // horizontal position of cursor p.y = HIWORD(lparam); // vertical position of cursor if (p.x < 0 || p.x > width) break; if (p.y < 0 || p.y > height) break; if (!mouse_forced && !lmb && !rmb) { select_pos = p; } if (mouse_forced) { mouse_forced = false; } else if (rmb || lmb) { CenterCursor (); delta_x = (float)(mouse_pos.x - p.x) * MOUSE_MOVEMENT; delta_y = (float)(mouse_pos.y - p.y) * MOUSE_MOVEMENT; if (rmb && lmb) { GLvector pos; CameraPan (delta_x); pos = CameraPosition (); pos.y += delta_y; CameraPositionSet (pos); } else if (rmb) { CameraPan (delta_x); CameraForward (delta_y); } else if (lmb) { GLvector angle; angle = CameraAngle (); angle.y -= delta_x; angle.x += delta_y; CameraAngleSet (angle); } } mouse_pos = p; break; case WM_CREATE: hwnd = hwnd_in; if (SCREENSAVER) AppInit (); SetTimer (hwnd, 1, 7, NULL); return 0; case WM_TIMER: AppUpdate (); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } #if SCREENSAVER return DefScreenSaverProc(hwnd_in,message,wparam,lparam); #else return DefWindowProc (hwnd_in,message,wparam,lparam); #endif }
void CameraAutoToggle () { cam_auto = !cam_auto; IniIntSet("cam_auto" , cam_auto); }