// -------------- // I_FinishUpdate // -------------- void I_FinishUpdate(void) { if (rendermode == render_none) return; if (I_SkipFrame()) return; // display a graph of ticrate if (cv_ticrate.value) displayticrate(cv_ticrate.value); // if (bDIBMode) { // paranoia if (!hDCMain || !bmiMain || !vid.buffer) return; // main game loop, still in a window (-win parm) SetDIBitsToDevice(hDCMain, 0, 0, vid.width, vid.height, 0, 0, 0, vid.height, vid.buffer, bmiMain, DIB_RGB_COLORS); } else #ifdef HWRENDER if (rendermode != render_soft) HWD.pfnFinishUpdate(cv_vidwait.value); else #endif { // DIRECT DRAW // copy virtual screen to real screen // can fail when not active (alt-tab) if (LockScreen()) { /// \todo use directX blit here!!? a blit might use hardware with access /// to main memory on recent hardware, and software blit of directX may be /// optimized for p2 or mmx?? if (ScreenHeight > vid.height) { UINT8 *ptr = (UINT8 *)ScreenPtr; size_t half_excess = ScreenPitch*(ScreenHeight-vid.height)/2; memset(ptr, 0x1F, half_excess); ptr += half_excess; VID_BlitLinearScreen(screens[0], ptr, vid.width*vid.bpp, vid.height, vid.width*vid.bpp, ScreenPitch); ptr += vid.height*ScreenPitch; memset(ptr, 0x1F, half_excess); } else VID_BlitLinearScreen(screens[0], (UINT8 *)ScreenPtr, vid.width*vid.bpp, vid.height, vid.width*vid.bpp, ScreenPitch); UnlockScreen(); // swap screens ScreenFlip(cv_vidwait.value); } } }
void I_FinishUpdate (void) { if (I_SkipFrame()) return; #ifdef MONITOR_VISIBILITY if (!(SDL_GetAppState()&SDL_APPACTIVE)) { return; } #endif #ifdef GL_DOOM if (V_GetMode() == VID_MODEGL) { // proff 04/05/2000: swap OpenGL buffers gld_Finish(); return; } #endif /* Vladimir if (SDL_MUSTLOCK(screen)) { int h; byte *src; byte *dest; if (SDL_LockSurface(screen) < 0) { lprintf(LO_INFO,"I_FinishUpdate: %s\n", SDL_GetError()); return; } dest=screen->pixels; src=screens[0].data; h=screen->h; for (; h>0; h--) { memcpy(dest,src,SCREENWIDTH*V_GetPixelDepth()); dest+=screen->pitch; src+=screens[0].byte_pitch; } SDL_UnlockSurface(screen); } */ /* Update the display buffer (flipping video pages if supported) * If we need to change palette, that implicitely does a flip */ if (newpal != NO_PALETTE_CHANGE) { I_UploadNewPalette(newpal); newpal = NO_PALETTE_CHANGE; } // Vladimir SDL_Flip(screen); //JNI_UpdateRect(screen); JNI_Flip(screens[0].data, SCREENWIDTH, SCREENHEIGHT, colours); }
void I_FinishUpdate (void) { if (I_SkipFrame()) return; #ifndef GL_DOOM int h = 200; int w = 320; int step = 512; unsigned char *srcmain = screens[0]; unsigned char *srcsub = screens[1]; unsigned char *destmain = NULL, *destsub = NULL; // Jefklak 19/11/06 - sub screen rendering destmain = (unsigned char *)BG_GFX; if(!gen_console_enable) destsub = (unsigned char *)BG_GFX_SUB; for (; h>0; h--) { dmaCopy(srcmain, destmain, w); destmain += step; srcmain += SCREENWIDTH; if(!gen_console_enable) { // dmaCopy() uses DMA_CR(3) with syncs dmaCopy(srcsub, destsub, w); destsub += step; srcsub += SCREENWIDTH; } } // Update the display buffer (flipping video pages if supported) // If we need to change palette, that implicitely does a flip if (newpal != NO_PALETTE_CHANGE) { I_UploadNewPalette(newpal); newpal = NO_PALETTE_CHANGE; } #else // proff 04/05/2000: swap OpenGL buffers gld_Finish(); #endif }
void I_FinishUpdate (void) { if (I_SkipFrame()) return; // TODO: use enums for screen numbers and apply them where appropriate // main game on top screen (TODO: both sides) I_TranslateFrameBuffer(SCR_FRONT_L, GFX_TOP, GFX_LEFT, -1, -1); // I_TranslateFrameBuffer(SCR_FRONT_R, GFX_TOP, GFX_RIGHT, -1, -1); // automap on bottom screen I_TranslateFrameBuffer(SCR_BOTTOM, GFX_BOTTOM, 0, -1, -1); /* Update the display buffer (flipping video pages if supported) * If we need to change palette, that implicitely does a flip */ if (newpal != NO_PALETTE_CHANGE) { I_UploadNewPalette(newpal); newpal = NO_PALETTE_CHANGE; } gfxFlushBuffers(); gfxSwapBuffers(); gspWaitForVBlank(); }
// // I_FinishUpdate // void I_FinishUpdate (void) { // Protect against calls before I_InitGraphics if (!INITIALISED || I_SkipFrame()) return; #ifdef MONITOR_VISIBILITY if (vis_flag == VisibilityFullyObscured) { return; } #endif #ifdef HAVE_LIBXEXT if (doShm && expand_buffer) I_WaitShm(); #endif // scales the screen size before blitting it if (expand_buffer) (*I_ExpandImage)(out_buffer, screens[0]); #ifdef HAVE_LIBXXF86DGA if (doDga) { int i; for(i=0;i<X_height;i++) memcpy(((char*)out_buffer)+i*DGA_real_width, ((char*)(screens[0]))+i*X_width, X_width); } else #endif #ifdef HAVE_LIBXEXT if (doShm) { if (!XShmPutImage( X_display, X_mainWindow, X_gc, image, 0, 0, 0, 0, X_width, X_height, True)) I_Error("XShmPutImage() failed\n"); // If we will reuse this buffer in next rendering, wait for it to finish #ifdef INTERNETC XSync(X_display, False); #else shmFinished = false; if (!expand_buffer) I_WaitShm(); #endif } else #endif { // draw the image XPutImage( X_display, X_mainWindow, X_gc, image, 0, 0, 0, 0, X_width, X_height ); // sync up with server XSync(X_display, False); } }