示例#1
0
void retro_run()
{
    input_poll_cb();
    
    update_input();
    
    static int16_t sound_buf[0x10000];
    static MDFN_Rect rects[384];
    
    EmulateSpecStruct spec = {0}; 
    spec.surface = surf;
    spec.SoundRate = 48000;
    spec.SoundBuf = sound_buf;
    spec.LineWidths = rects;
    spec.SoundBufMaxSize = sizeof(sound_buf) / 2;
    spec.SoundVolume = 1.0;
    spec.soundmultiplier = 1.0;
    
    MDFNI_Emulate(&spec);
    
    //unsigned width = rects[0].w;
    //unsigned height = spec.DisplayRect.h;
    unsigned width = 384;
    unsigned height = 224;
    
    convert_surface();
    video_cb(conv_buf, width, height, width << 1);
    
    audio_batch_cb(spec.SoundBuf, spec.SoundBufSize);
}
示例#2
0
文件: main.cpp 项目: MANICX100/vbjin
EmulateSpecStruct vbjinEmulate() {

//	EmulateSpecStruct espec;

	memset(&espec, 0, sizeof(EmulateSpecStruct));
	espec.VideoFormatChanged = true;

	espec.surface = (MDFN_Surface *)VTBuffer[VTBackBuffer];
	espec.LineWidths = (MDFN_Rect *)VTLineWidths[VTBackBuffer];
	espec.skip = 0;

	espec.soundmultiplier = 1;
	espec.SoundVolume = 1;
	espec.NeedRewind = false;
	////

	espec.SoundBuf = EmuModBuffer;
	espec.SoundBufMaxSize = EmuModBufferSize;
	espec.SoundVolume = 1;//(double)MDFN_GetSettingUI("soundvol") / 100;

	static double average_time = 0;

	/*
	int color =5555555;
	int h = 224;

	for(uint32 i = 0; i < 320 * h; i++)
	{
		//	VTBuffer[VTBackBuffer]->pixels[i] = color;
	} */

//frames++;

//PadData = setPad();

	MDFNI_Emulate(&espec);


	return espec;
}
示例#3
0
void retro_run()
{
   input_poll_cb();

   update_input();

   static int16_t sound_buf[0x10000];
   static MDFN_Rect rects[480];
   rects[0].w = ~0;

   EmulateSpecStruct spec = {0};
   spec.surface = surf;
   spec.SoundRate = 44100;
   spec.SoundBuf = sound_buf;
   spec.LineWidths = rects;
   spec.SoundBufMaxSize = sizeof(sound_buf) / 2;
   spec.SoundVolume = 1.0;
   spec.soundmultiplier = 1.0;

   MDFNI_Emulate(&spec);

   unsigned width = rects[0].w;
   unsigned height = spec.DisplayRect.h;

   if (rgb32)
   {
      // FIXME: Avoid black borders. Cannot see how DisplayRect exposes this.
      const uint32_t *ptr = mednafen_buf;
      if (width == 340)
      {
         ptr += 10;
         width = 320;
      }
      else if (width == 680)
      {
         ptr += 20;
         width = 640;
      }

      video_cb(ptr, width, height, 680 << 2);
   }
   else
   {
      convert_surface();

      const uint16_t *ptr = conv_buf;
      if (width == 340)
      {
         ptr += 10;
         width = 320;
      }
      else if (width == 680)
      {
         ptr += 20;
         width = 640;
      }

      video_cb(ptr, width, height, 680 << 1);
   }

   audio_batch_cb(spec.SoundBuf, spec.SoundBufSize);
}
示例#4
0
文件: main.cpp 项目: ben401/OpenEmu
int GameLoop(void *arg)
{
	while(GameThreadRun)
	{
         int16 *sound;
         int32 ssize;
         int fskip;
        
	 /* If we requested a new video mode, wait until it's set before calling the emulation code again.
	 */
	 while(NeedVideoChange) 
	 { 
	  if(!GameThreadRun) return(1);	// Might happen if video initialization failed
	  SDL_Delay(1);
	  }
         do
         {
	  if(InFrameAdvance && !NeedFrameAdvance)
	  {
	   SDL_Delay(10);
	  }
	 } while(InFrameAdvance && !NeedFrameAdvance);

         fskip = ThrottleCheckFS();

	 if(pending_snapshot || pending_save_state || pending_save_movie || NeedFrameAdvance)
	  fskip = 0;

 	 NeedFrameAdvance = 0;
         if(NoWaiting) fskip = 1;

	 VTLineWidths[VTBackBuffer][0].w = ~0;

	 int ThisBackBuffer = VTBackBuffer;

	 LockGameMutex(1);
	 {
	  EmulateSpecStruct espec;
 	  memset(&espec, 0, sizeof(EmulateSpecStruct));

	  espec.pixels = (uint32 *)VTBuffer[VTBackBuffer];
	  espec.LineWidths = (MDFN_Rect *)VTLineWidths[VTBackBuffer];
	  espec.SoundBuf = &sound;
	  espec.SoundBufSize = &ssize;
	  espec.skip = fskip;
	  espec.soundmultiplier = CurGameSpeed;
	  espec.NeedRewind = DNeedRewind;
          MDFNI_Emulate(&espec); //(uint32 *)VTBuffer[VTBackBuffer], (MDFN_Rect *)VTLineWidths[VTBackBuffer], &sound, &ssize, fskip, CurGameSpeed);
	 }
	 LockGameMutex(0);
	 FPS_IncVirtual();
	 if(!fskip)
	  FPS_IncDrawn();

	 do
	 {
          GameThread_HandleEvents();
	  VTBackBuffer = ThisBackBuffer;
          MDFND_Update(fskip ? NULL : (uint32 *)VTBuffer[ThisBackBuffer], sound, ssize);
          if((InFrameAdvance && !NeedFrameAdvance) || GameLoopPaused)
	  {
           if(!ssize)
	    ThrottleCheckFS();
	   else
	    for(int x = 0; x < CurGame->soundchan * ssize; x++)
	     sound[x] = 0;
	  }
	 } while(((InFrameAdvance && !NeedFrameAdvance) || GameLoopPaused) && GameThreadRun);
	}
	return(1);
}