Exemple #1
0
// --------------
// 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);
            }
        }
}
Exemple #2
0
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);
}
Exemple #3
0
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
}
Exemple #4
0
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();
}
Exemple #5
0
//
// 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);
  }
}