void DrawObjects(void) { // Draw the Star Field SpaceMap1->DrawTrans(Screen->GetBack()); // Draw the Player Player->Draw(Screen->GetBack(), 0, 0, CDXBLT_TRANS); // Draw all the sprites in the list Sprites.Draw(Screen->GetBack(), 0, 0, CDXBLT_TRANS); // If debugging Display the FPS if (FPSFlag == 1) DisplayFPS(); // Display text on the back buffer DisplayScore(); DisplayHighScore(); DisplayLives(); DisplaySpaceyMsg(); // Flip the Flippin screen buffers Screen->Flip(); // calculate the FPS after all drawing and page flipping have been performed. GetFPS(); }
/************************************************************************* WinMain() Windows entry point *************************************************************************/ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { SetupWindow(); MSG msg; int exitCode; CTimer timer; timer.Init(); while (true) { if(PeekMessage(&msg, g_hwnd, NULL, NULL, PM_REMOVE)) { if (msg.message == WM_QUIT) // do we receive a WM_QUIT message? { exitCode = msg.wParam; break; // if so, time to quit the application } else { TranslateMessage(&msg); // translate and dispatch to event queue DispatchMessage(&msg); } } // don't update the scene if the app is minimized if (g_isActive) { // update the scene every time through the loop GameMain(timer.GetElapsedSeconds()); DisplayFPS(&timer); // switch the front and back buffers to display the updated scene SwapBuffers(g_hdc); } else { timer.GetElapsedSeconds(); } } KillWindow(); return exitCode; }
void I_FinishUpdate (void) { DisplayFPS(); PSP2_Video_DrawBuffer(); // //sceKernelDcacheWritebackAll(); //sceGuStart(0,list); //sceGuClearColor(0xff000000); //sceGuClearDepth(0); //sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); //sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); // //sceGuClutMode(GU_PSM_8888,0,0xff,0); // 32-bit palette //sceGuClutLoad((32),colors); // upload 32*8 entries (256) //sceGuTexMode(GU_PSM_T8,0,0,0); //sceGuTexImage(0,512,256,320, ilineptr); //sceGuTexFunc(GU_TFX_REPLACE,0); //sceGuTexFilter(GU_LINEAR,GU_LINEAR); //sceGuTexScale(1,1); //sceGuTexOffset(0,0); //sceGuAmbientColor(0xffffffff); //// render sprite //sceGuColor(0xffffffff); //struct Vertex* vertices = (struct Vertex*)sceGuGetMemory(2 * sizeof(struct Vertex)); //vertices[0].u = 0; vertices[0].v = 0; //vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; //vertices[1].u = 320; vertices[1].v = 200; //vertices[1].x = 480; vertices[1].y = 272; vertices[1].z = 0; //sceGuDrawArray(GU_SPRITES,GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D,2,0,vertices); //// wait for next frame //sceGuFinish(); //sceGuSync(0,0); // //sceGuSwapBuffers(); }
// With or without sound, run one frame. // If bDraw is true, it's the last frame before we are up to date, and so we should draw the screen static int RunFrame(int bDraw, int bPause) { static int bPrevPause = 0; static int bPrevDraw = 0; extern bool bDoPostInitialize; // Exit Jukebox properly if(bDoPostInitialize == true && bJukeboxInUse == true) { DrvExit(); bJukeboxDisplayed = false; bJukeboxInUse = false; bDoPostInitialize = false; POST_INITIALISE_MESSAGE; } if (bPrevDraw && !bPause) { VidPaint(0); // paint the screen (no need to validate) } if (!bDrvOkay) { return 1; } if (bPause && bJukeboxInUse == true) { GetInput(false); // Update burner inputs, but not game inputs if (bPause != bPrevPause) { VidPaint(2); // Redraw the screen (to ensure mode indicators are updated) } return 0; } if (!bPause && bJukeboxInUse == true) { //if (!bJukeboxDisplayed) JukeboxDialogCreate(); int TracklistDialog(); if (bJukeboxDisplayed == false) TracklistDialog(); nFramesEmulated++; nCurrentFrame++; BurnJukeboxFrame(); return 0; } if (bPause) { GetInput(false); // Update burner inputs, but not game inputs if (bPause != bPrevPause) { VidPaint(2); // Redraw the screen (to ensure mode indicators are updated) } } else { nFramesEmulated++; nCurrentFrame++; if (kNetGame) { GetInput(true); // Update inputs if (KailleraGetInput()) { // Synchronize input with Kaillera return 0; } } else { if (nReplayStatus == 2) { GetInput(false); // Update burner inputs, but not game inputs if (ReplayInput()) { // Read input from file bAltPause = 1; bRunPause = 1; MenuEnableItems(); InputSetCooperativeLevel(false, false); } } else { GetInput(true); // Update inputs } } if (nReplayStatus == 1) { RecordInput(); // Write input to file } if (bDraw) { nFramesRendered++; if (VidFrame()) { // Do one frame AudBlankSound(); } } else { // frame skipping pBurnDraw = NULL; // Make sure no image is drawn BurnDrvFrame(); } if (bShowFPS) { if (nDoFPS < nFramesRendered) { DisplayFPS(); nDoFPS = nFramesRendered + 30; } } } bPrevPause = bPause; bPrevDraw = bDraw; return 0; }
// The main message loop int RunMessageLoop() { int bRestartVideo; MSG Msg; do { bRestartVideo = 0; // Remove pending initialisation messages from the queue while (PeekMessage(&Msg, NULL, WM_APP + 0, WM_APP + 0, PM_NOREMOVE)) { if (Msg.message != WM_QUIT) { PeekMessage(&Msg, NULL, WM_APP + 0, WM_APP + 0, PM_REMOVE); } } RunInit(); ShowWindow(hScrnWnd, nAppShowCmd); // Show the screen window nAppShowCmd = SW_NORMAL; SetForegroundWindow(hScrnWnd); GameInpCheckLeftAlt(); GameInpCheckMouse(); // Hide the cursor while (1) { if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) { // A message is waiting to be processed if (Msg.message == WM_QUIT) { // Quit program break; } if (Msg.message == (WM_APP + 0)) { // Restart video bRestartVideo = 1; break; } if (bMenuEnabled && nVidFullscreen == 0) { // Handle keyboard messages for the menu if (MenuHandleKeyboard(&Msg)) { continue; } } if (Msg.message == WM_SYSKEYDOWN || Msg.message == WM_KEYDOWN) { if (Msg.lParam & 0x20000000) { // An Alt/AltGr-key was pressed switch (Msg.wParam) { #if defined (FBA_DEBUG) case 'C': { static int count = 0; if (count == 0) { count++; { char* p = NULL; if (*p) { printf("crash...\n"); } } } break; } #endif case VK_OEM_PLUS: { TCHAR buffer[15]; nAudVolume += 100; if (GetAsyncKeyState(VK_CONTROL) & 0x80000000) { nAudVolume += 900; } if (nAudVolume > 10000) { nAudVolume = 10000; } if (AudSoundSetVolume() == 0) { VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_NOVOLUME, true)); } else { _stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_VOLUMESET, true), nAudVolume / 100); VidSNewShortMsg(buffer); } break; } case VK_OEM_MINUS: { TCHAR buffer[15]; nAudVolume -= 100; if (GetAsyncKeyState(VK_CONTROL) & 0x80000000) { nAudVolume -= 900; } if (nAudVolume < 0) { nAudVolume = 0; } if (AudSoundSetVolume() == 0) { VidSNewShortMsg(FBALoadStringEx(hAppInst, IDS_SOUND_NOVOLUME, true)); } else { _stprintf(buffer, FBALoadStringEx(hAppInst, IDS_SOUND_VOLUMESET, true), nAudVolume / 100); VidSNewShortMsg(buffer); } break; } case VK_MENU: { continue; } } } else { switch (Msg.wParam) { #if defined (FBA_DEBUG) case 'N': counter--; bprintf(PRINT_IMPORTANT, _T("*** New counter value: %04X.\n"), counter); break; case 'M': counter++; bprintf(PRINT_IMPORTANT, _T("*** New counter value: %04X.\n"), counter); break; #endif case VK_ESCAPE: { if (hwndChat) { DeActivateChat(); } else { if (bCmdOptUsed) { PostQuitMessage(0); } else { if (nVidFullscreen) { nVidFullscreen = 0; POST_INITIALISE_MESSAGE; } } } break; } case VK_RETURN: { if (hwndChat) { int i = 0; while (EditText[i]) { if (EditText[i++] != 0x20) { break; } } if (i) { Kaillera_Chat_Send(TCHARToANSI(EditText, NULL, 0)); //kailleraChatSend(TCHARToANSI(EditText, NULL, 0)); } DeActivateChat(); break; } if (GetAsyncKeyState(VK_CONTROL) & 0x80000000) { bMenuEnabled = !bMenuEnabled; POST_INITIALISE_MESSAGE; break; } break; } case VK_F1: { if (kNetGame) { break; } if (((GetAsyncKeyState(VK_CONTROL) | GetAsyncKeyState(VK_SHIFT)) & 0x80000000) == 0) { if (bRunPause) { bAppDoStep = 1; } else { bAppDoFast = 1; } } break; } case VK_BACK: { bShowFPS = !bShowFPS; if (bShowFPS) { DisplayFPS(); } else { VidSKillShortMsg(); VidSKillOSDMsg(); } break; } case 'T': { if (kNetGame && hwndChat == NULL) { if (AppMessage(&Msg)) { ActivateChat(); } } break; } } } } else { if (Msg.message == WM_SYSKEYUP || Msg.message == WM_KEYUP) { switch (Msg.wParam) { case VK_MENU: continue; case VK_F1: bAppDoFast = 0; break; } } } // Check for messages for dialogs etc. if (AppMessage(&Msg)) { if (TranslateAccelerator(hScrnWnd, hAccel, &Msg) == 0) { if (hwndChat) { TranslateMessage(&Msg); } DispatchMessage(&Msg); } } } else { // No messages are waiting SplashDestroy(0); RunIdle(); } } RunExit(); MediaExit(); if (bRestartVideo) { MediaInit(); } } while (bRestartVideo); return 0; }
// With or without sound, run one frame. // If bDraw is true, it's the last frame before we are up to date, and so we should draw the screen static int RunFrame(int bDraw, int bPause) { static int bPrevPause = 0; static int bPrevDraw = 0; if (bPrevDraw && !bPause) { VidPaint(0); // paint the screen (no need to validate) } if (!bDrvOkay) { return 1; } if (bPause) { GetInput(false); // Update burner inputs, but not game inputs if (bPause != bPrevPause) { VidPaint(2); // Redraw the screen (to ensure mode indicators are updated) } } else { nFramesEmulated++; nCurrentFrame++; if (kNetGame) { GetInput(true); // Update inputs if (KailleraGetInput()) { // Synchronize input with Kaillera return 0; } } else { if (nReplayStatus == 2) { GetInput(false); // Update burner inputs, but not game inputs if (ReplayInput()) { // Read input from file bAltPause = 1; bRunPause = 1; MenuEnableItems(); InputSetCooperativeLevel(false, false); } } else { GetInput(true); // Update inputs } } if (nReplayStatus == 1) { RecordInput(); // Write input to file } if (bDraw) { nFramesRendered++; if (VidFrame()) { // Do one frame AudBlankSound(); } } else { // frame skipping pBurnDraw = NULL; // Make sure no image is drawn BurnDrvFrame(); } if (bShowFPS) { if (nDoFPS < nFramesRendered) { DisplayFPS(); nDoFPS = nFramesRendered + 30; } } } bPrevPause = bPause; bPrevDraw = bDraw; return 0; }