diff options
| author | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-04-17 21:26:36 +0000 |
|---|---|---|
| committer | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2014-04-17 21:26:36 +0000 |
| commit | 9a7b4084da6349adca6c1387f390da9bc813d09a (patch) | |
| tree | 7c29303fd4bfaf2e964d22fa3c9fd81aaa0cecb4 | |
| parent | 158718f939810dbfedeb49e178db4fe781d9918e (diff) | |
| download | pcsxr-9a7b4084da6349adca6c1387f390da9bc813d09a.tar.gz | |
GPU picture fix. This should be also easy to implement on others archs as well.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@90038 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rwxr-xr-x | gui/Plugin.c | 73 | ||||
| -rwxr-xr-x | libpcsxcore/psxcommon.c | 11 | ||||
| -rwxr-xr-x | libpcsxcore/psxcommon.h | 5 |
3 files changed, 35 insertions, 54 deletions
diff --git a/gui/Plugin.c b/gui/Plugin.c index 1887fa6d..6727e9b1 100755 --- a/gui/Plugin.c +++ b/gui/Plugin.c @@ -44,66 +44,35 @@ unsigned long gpuDisp; int StatesC = 0; extern int UseGui; -pthread_t ThreadID = 0; -boolean start = FALSE; -boolean restart = FALSE; - -void gpuHidePic() -{ - GPU_showScreenPic(NULL); -} - -static void *HidePicAfter(void *param) -{ - while (1) - { - //TODO use pthread_cond_wait - while (!start) usleep(100000); - - while (1) { - usleep(3000000); - if (!restart) - break; - restart = FALSE; - }; - - gpuHidePic(); - start = FALSE; - } -} - void gpuShowPic() { gchar *state_filename; gzFile f; + unsigned char *pMem; - unsigned char *pMem; + pMem = (unsigned char *) malloc(128*96*3); + if (pMem == NULL) return; - pMem = (unsigned char *) malloc(128*96*3); - if (pMem == NULL) return; + state_filename = get_state_filename (StatesC); - state_filename = get_state_filename (StatesC); + GPU_freeze(2, (GPUFreeze_t *)&StatesC); - GPU_freeze(2, (GPUFreeze_t *)&StatesC); + f = gzopen(state_filename, "rb"); + if (f != NULL) { + gzseek(f, 32, SEEK_SET); // skip header + gzseek(f, sizeof(u32), SEEK_CUR); + gzseek(f, sizeof(boolean), SEEK_CUR); + gzread(f, pMem, 128*96*3); + gzclose(f); + } else { + memcpy(pMem, NoPic_Image.pixel_data, 128*96*3); + DrawNumBorPic(pMem, StatesC+1); + } + GPU_showScreenPic(pMem); - f = gzopen(state_filename, "rb"); - if (f != NULL) { - gzseek(f, 32, SEEK_SET); // skip header - gzseek(f, sizeof(u32), SEEK_CUR); - gzseek(f, sizeof(boolean), SEEK_CUR); - gzread(f, pMem, 128*96*3); - gzclose(f); - } else { - memcpy(pMem, NoPic_Image.pixel_data, 128*96*3); - DrawNumBorPic(pMem, StatesC+1); - } - GPU_showScreenPic(pMem); - - free(pMem); - g_free (state_filename); - - if (!ThreadID) pthread_create(&ThreadID, NULL, HidePicAfter, NULL); - if (start) restart = TRUE; - start = TRUE; + free(pMem); + g_free (state_filename); + + vblank_count_hideafter = 2*50; // show pic for about 2 seconds } void KeyStateSave(int i) { diff --git a/libpcsxcore/psxcommon.c b/libpcsxcore/psxcommon.c index b7f547f0..753222d2 100755 --- a/libpcsxcore/psxcommon.c +++ b/libpcsxcore/psxcommon.c @@ -29,7 +29,10 @@ boolean NetOpened = FALSE; int Log = 0; FILE *emuLog = NULL; -u32 rewind_counter=0; // It is safe if this overflows + +// It is safe if these overflow +u32 rewind_counter=0; +u8 vblank_count_hideafter=0; int EmuInit() { return psxInit(); @@ -61,6 +64,12 @@ void EmuUpdate() { ApplyCheats(); + if (vblank_count_hideafter) { + if (!(--vblank_count_hideafter)) { + GPU_showScreenPic(NULL); + } + } + if (Config.RewindInterval > 0 && !(++rewind_counter%Config.RewindInterval)) { CreateRewindState(); } diff --git a/libpcsxcore/psxcommon.h b/libpcsxcore/psxcommon.h index 8def3612..1eaffc1d 100755 --- a/libpcsxcore/psxcommon.h +++ b/libpcsxcore/psxcommon.h @@ -166,7 +166,10 @@ typedef struct { extern PcsxConfig Config; extern boolean NetOpened; -extern u32 rewind_counter; // It is safe if this overflows + +// It is safe if these overflow +extern u32 rewind_counter; +extern u8 vblank_count_hideafter; #define gzfreeze(ptr, size) { \ if (Mode == 1) gzwrite(f, ptr, size); \ |
