More precise and stable FPS limiter, not using the SDL semaphore system.
Also removed the "3D operation detected" dialog which is useless.
This commit is contained in:
parent
56f013a04c
commit
36a45e8cfc
|
@ -25,6 +25,8 @@
|
|||
gboolean EmuLoop(gpointer data);
|
||||
static BOOL regMainLoop = FALSE;
|
||||
|
||||
#define TICKS_PER_FRAME 17
|
||||
|
||||
|
||||
static BOOL noticed_3D=FALSE;
|
||||
volatile BOOL execute = FALSE;
|
||||
|
@ -121,6 +123,7 @@ void desmume_cycle()
|
|||
|
||||
|
||||
Uint32 fps, fps_SecStart, fps_FrameCount;
|
||||
Uint32 ticksPrevFrame = 0, ticksCurFrame = 0;
|
||||
static void Draw()
|
||||
{
|
||||
}
|
||||
|
@ -128,15 +131,18 @@ static void Draw()
|
|||
gboolean EmuLoop(gpointer data)
|
||||
{
|
||||
int i;
|
||||
if (!noticed_3D) {
|
||||
/*if (!noticed_3D) {
|
||||
GtkWidget * dlg = glade_xml_get_widget(xml, "w3Dop");
|
||||
gtk_widget_show(dlg);
|
||||
noticed_3D=TRUE;
|
||||
}
|
||||
}*/
|
||||
|
||||
if(desmume_running()) /* Si on est en train d'executer le programme ... */
|
||||
{
|
||||
static int limiter_frame_counter = 0;
|
||||
|
||||
ticksCurFrame = SDL_GetTicks();
|
||||
|
||||
fps_FrameCount += Frameskip + 1;
|
||||
if(!fps_SecStart) fps_SecStart = SDL_GetTicks();
|
||||
if(SDL_GetTicks() - fps_SecStart >= 1000)
|
||||
|
@ -158,16 +164,24 @@ gboolean EmuLoop(gpointer data)
|
|||
notify_Tools();
|
||||
gtk_widget_queue_draw(pDrawingArea);
|
||||
gtk_widget_queue_draw(pDrawingArea2);
|
||||
|
||||
if(!glade_fps_limiter_disabled)
|
||||
{
|
||||
while((ticksCurFrame - ticksPrevFrame) < TICKS_PER_FRAME)
|
||||
ticksCurFrame = SDL_GetTicks();
|
||||
}
|
||||
|
||||
ticksPrevFrame = ticksCurFrame;
|
||||
|
||||
if ( !glade_fps_limiter_disabled) {
|
||||
/* if ( !glade_fps_limiter_disabled) {
|
||||
limiter_frame_counter += 1;
|
||||
if ( limiter_frame_counter >= FPS_LIMITER_FRAME_PERIOD) {
|
||||
limiter_frame_counter = 0;
|
||||
|
||||
/* wait for the timer to expire */
|
||||
/* wait for the timer to expire *-/
|
||||
SDL_SemWait( glade_fps_limiter_semaphore);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
/*
|
||||
* The frame limiter semaphore
|
||||
*/
|
||||
SDL_sem *glade_fps_limiter_semaphore;
|
||||
//SDL_sem *glade_fps_limiter_semaphore;
|
||||
int glade_fps_limiter_disabled = 0;
|
||||
|
||||
GtkWidget * pWindow;
|
||||
|
@ -393,17 +393,17 @@ joinThread_gdb( void *thread_handle) {
|
|||
*
|
||||
* @return The interval to the next call (required by SDL)
|
||||
*/
|
||||
static Uint32
|
||||
/*static Uint32
|
||||
glade_fps_limiter_fn( Uint32 interval, void *param) {
|
||||
SDL_sem *sdl_semaphore = (SDL_sem *)param;
|
||||
|
||||
/* signal the semaphore if it is getting low */
|
||||
/* signal the semaphore if it is getting low *-/
|
||||
if ( SDL_SemValue( sdl_semaphore) < 4) {
|
||||
SDL_SemPost( sdl_semaphore);
|
||||
}
|
||||
|
||||
return interval;
|
||||
}
|
||||
}*/
|
||||
|
||||
/* ***** ***** MAIN ***** ***** */
|
||||
|
||||
|
@ -554,12 +554,12 @@ common_gtk_glade_main( struct configured_features *my_config) {
|
|||
/* setup the frame limiter and indicate if it is disabled */
|
||||
glade_fps_limiter_disabled = my_config->disable_limiter;
|
||||
|
||||
if ( !glade_fps_limiter_disabled) {
|
||||
/* create the semaphore used for fps limiting */
|
||||
/* if ( !glade_fps_limiter_disabled) {
|
||||
/* create the semaphore used for fps limiting *-/
|
||||
glade_fps_limiter_semaphore = SDL_CreateSemaphore( 1);
|
||||
|
||||
/* start a SDL timer for every FPS_LIMITER_FRAME_PERIOD
|
||||
* frames to keep us at 60 fps */
|
||||
* frames to keep us at 60 fps *-/
|
||||
limiter_timer = SDL_AddTimer( 16 * FPS_LIMITER_FRAME_PERIOD,
|
||||
glade_fps_limiter_fn,
|
||||
glade_fps_limiter_semaphore);
|
||||
|
@ -569,17 +569,17 @@ common_gtk_glade_main( struct configured_features *my_config) {
|
|||
SDL_DestroySemaphore( glade_fps_limiter_semaphore);
|
||||
glade_fps_limiter_disabled = 1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
/* start event loop */
|
||||
gtk_main();
|
||||
desmume_free();
|
||||
|
||||
if ( !glade_fps_limiter_disabled) {
|
||||
/* tidy up the FPS limiter timer and semaphore */
|
||||
/* if ( !glade_fps_limiter_disabled) {
|
||||
/* tidy up the FPS limiter timer and semaphore *-/
|
||||
SDL_RemoveTimer( limiter_timer);
|
||||
SDL_DestroySemaphore( glade_fps_limiter_semaphore);
|
||||
}
|
||||
}*/
|
||||
|
||||
/* Unload joystick */
|
||||
uninit_joy();
|
||||
|
|
Loading…
Reference in New Issue