void BitmapScreen::BlitScreen(int x, int y) { BlitScreen(x, y, Rect(0, 0, src_rect_effect.width, src_rect_effect.height)); }
// Draw void Sprite::Draw() { if (!visible) return; if (GetWidth() <= 0 || GetHeight() <= 0) return; BlitScreen(); }
/** * Update the video, audio, and input subsystems with the provided * video (XBuf) and audio (Buffer) information. */ void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count) { extern int FCEUDnetplay; #ifdef CREATE_AVI if(LoggingEnabled == 2 || (eoptions&EO_NOTHROTTLE)) { if(LoggingEnabled == 2) { int16* MonoBuf = new int16[Count]; int n; for(n=0; n<Count; ++n) MonoBuf[n] = Buffer[n] & 0xFFFF; NESVideoLoggingAudio ( MonoBuf, FSettings.SndRate, 16, 1, Count ); delete [] MonoBuf; } Count /= 2; if(inited & 1) { if(Count > GetWriteSound()) Count = GetWriteSound(); if (!mutecapture) if(Count > 0 && Buffer) WriteSound(Buffer,Count); } if(inited & 2) FCEUD_UpdateInput(); if(XBuf && (inited & 4)) BlitScreen(XBuf); //SpeedThrottle(); return; } #endif int ocount = Count; // apply frame scaling to Count Count = (int)(Count / g_fpsScale); if(Count) { int32 can=GetWriteSound(); static int uflow=0; int32 tmpcan; // don't underflow when scaling fps if(can >= GetMaxSound() && g_fpsScale==1.0) uflow=1; /* Go into massive underflow mode. */ if(can > Count) can=Count; else uflow=0; #ifdef CREATE_AVI if (!mutecapture) #endif WriteSound(Buffer,can); //if(uflow) puts("Underflow"); tmpcan = GetWriteSound(); // don't underflow when scaling fps if(g_fpsScale>1.0 || ((tmpcan < Count*0.90) && !uflow)) { if(XBuf && (inited&4) && !(NoWaiting & 2)) BlitScreen(XBuf); Buffer+=can; Count-=can; if(Count) { if(NoWaiting) { can=GetWriteSound(); if(Count>can) Count=can; #ifdef CREATE_AVI if (!mutecapture) #endif WriteSound(Buffer,Count); } else { while(Count>0) { #ifdef CREATE_AVI if (!mutecapture) #endif WriteSound(Buffer,(Count<ocount) ? Count : ocount); Count -= ocount; } } } } //else puts("Skipped"); else if(!NoWaiting && FCEUDnetplay && (uflow || tmpcan >= (Count * 1.8))) { if(Count > tmpcan) Count=tmpcan; while(tmpcan > 0) { // printf("Overwrite: %d\n", (Count <= tmpcan)?Count : tmpcan); #ifdef CREATE_AVI if (!mutecapture) #endif WriteSound(Buffer, (Count <= tmpcan)?Count : tmpcan); tmpcan -= Count; } } } else { if(!NoWaiting && (!(eoptions&EO_NOTHROTTLE) || FCEUI_EmulationPaused())) while (SpeedThrottle()) { FCEUD_UpdateInput(); } if(XBuf && (inited&4)) { BlitScreen(XBuf); } } FCEUD_UpdateInput(); //if(!Count && !NoWaiting && !(eoptions&EO_NOTHROTTLE)) // SpeedThrottle(); //if(XBuf && (inited&4)) //{ // BlitScreen(XBuf); //} //if(Count) // WriteSound(Buffer,Count,NoWaiting); //FCEUD_UpdateInput(); }