From d27c7a0947c65ae1fa582bb00a7a44e16c79a458 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 28 Aug 2016 20:31:12 +0100 Subject: [PATCH] Replaced Windows critical section with mutex - fixes some issues with window movement/resizing when using Direct3D output. --- src/vid_cga.c | 3 +-- src/vid_ega.c | 2 -- src/vid_hercules.c | 4 ++-- src/vid_incolor.c | 4 ++-- src/vid_mda.c | 4 ++-- src/vid_olivetti_m24.c | 4 ++-- src/vid_pc1512.c | 4 ++-- src/vid_pcjr.c | 4 ++-- src/vid_tandy.c | 4 ++-- src/vid_tandysl.c | 4 ++-- src/win.c | 10 +++++----- 11 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/vid_cga.c b/src/vid_cga.c index bb42621..45bef18 100644 --- a/src/vid_cga.c +++ b/src/vid_cga.c @@ -380,13 +380,12 @@ void cga_poll(void *p) updatewindowsize(xsize, (ysize << 1) + 16); } -startblit(); if (cga->composite) video_blit_memtoscreen(0, cga->firstline - 4, 0, (cga->lastline - cga->firstline) + 8, xsize, (cga->lastline - cga->firstline) + 8); else video_blit_memtoscreen_8(0, cga->firstline - 4, xsize, (cga->lastline - cga->firstline) + 8); frames++; -endblit(); + video_res_x = xsize - 16; video_res_y = ysize; if (cga->cgamode & 1) diff --git a/src/vid_ega.c b/src/vid_ega.c index 61101eb..8bc0d6f 100644 --- a/src/vid_ega.c +++ b/src/vid_ega.c @@ -561,9 +561,7 @@ void ega_poll(void *p) updatewindowsize(xsize, ysize); } -startblit(); video_blit_memtoscreen(32, 0, ega->firstline, ega->lastline, xsize, ega->lastline - ega->firstline); -endblit(); frames++; diff --git a/src/vid_hercules.c b/src/vid_hercules.c index eb80b38..3d72743 100644 --- a/src/vid_hercules.c +++ b/src/vid_hercules.c @@ -269,9 +269,9 @@ void hercules_poll(void *p) if (ysize < 32) ysize = 200; updatewindowsize(xsize, ysize); } - startblit(); + video_blit_memtoscreen_8(0, hercules->firstline, xsize, ysize); - endblit(); + frames++; if ((hercules->ctrl & 2) && (hercules->ctrl2 & 1)) { diff --git a/src/vid_incolor.c b/src/vid_incolor.c index 722bfe5..87ca813 100644 --- a/src/vid_incolor.c +++ b/src/vid_incolor.c @@ -961,9 +961,9 @@ void incolor_poll(void *p) if (ysize < 32) ysize = 200; updatewindowsize(xsize, ysize); } - startblit(); + video_blit_memtoscreen(0, incolor->firstline, 0, incolor->lastline - incolor->firstline, xsize, incolor->lastline - incolor->firstline); - endblit(); + frames++; if ((incolor->ctrl & INCOLOR_CTRL_GRAPH) && (incolor->ctrl2 & INCOLOR_CTRL2_GRAPH)) { diff --git a/src/vid_mda.c b/src/vid_mda.c index 5b5befc..a9f28a3 100644 --- a/src/vid_mda.c +++ b/src/vid_mda.c @@ -235,9 +235,9 @@ void mda_poll(void *p) if (ysize < 32) ysize = 200; updatewindowsize(xsize, ysize); } - startblit(); + video_blit_memtoscreen_8(0, mda->firstline, xsize, mda->lastline - mda->firstline); - endblit(); + frames++; video_res_x = mda->crtc[1]; video_res_y = mda->crtc[6]; diff --git a/src/vid_olivetti_m24.c b/src/vid_olivetti_m24.c index 23e32ea..331aa0b 100644 --- a/src/vid_olivetti_m24.c +++ b/src/vid_olivetti_m24.c @@ -395,10 +395,10 @@ void m24_poll(void *p) if (ysize < 32) ysize = 200; updatewindowsize(xsize, ysize + 16); } -startblit(); + video_blit_memtoscreen_8(0, m24->firstline - 8, xsize, (m24->lastline - m24->firstline) + 16); frames++; -endblit(); + video_res_x = xsize - 16; video_res_y = ysize; if (m24->cgamode & 1) diff --git a/src/vid_pc1512.c b/src/vid_pc1512.c index 7f2c506..36548a5 100644 --- a/src/vid_pc1512.c +++ b/src/vid_pc1512.c @@ -403,14 +403,14 @@ static void pc1512_poll(void *p) if (ysize < 32) ysize = 200; updatewindowsize(xsize, (ysize << 1) + 16); } -startblit(); + video_blit_memtoscreen_8(0, pc1512->firstline - 4, xsize, (pc1512->lastline - pc1512->firstline) + 8); // blit(buffer,vbuf,0,firstline-4,0,0,xsize,(lastline-firstline)+8+1); // if (vid_resize) stretch_blit(vbuf,screen,0,0,xsize,(lastline-firstline)+8+1,0,0,winsizex,winsizey); // else stretch_blit(vbuf,screen,0,0,xsize,(lastline-firstline)+8+1,0,0,xsize,((lastline-firstline)<<1)+16+2); // if (readflash) rectfill(screen,winsizex-40,8,winsizex-8,14,0xFFFFFFFF); // readflash=0; -endblit(); + video_res_x = xsize - 16; video_res_y = ysize; if (pc1512->cgamode & 1) diff --git a/src/vid_pcjr.c b/src/vid_pcjr.c index c6eae5f..8e6a63e 100644 --- a/src/vid_pcjr.c +++ b/src/vid_pcjr.c @@ -576,12 +576,12 @@ void pcjr_poll(void *p) } // printf("Blit %i %i\n",firstline,lastline); //printf("Xsize is %i\n",xsize); - startblit(); + if (cga_comp) video_blit_memtoscreen(0, pcjr->firstline-4, 0, (pcjr->lastline - pcjr->firstline) + 8, xsize, (pcjr->lastline - pcjr->firstline) + 8); else video_blit_memtoscreen_8(0, pcjr->firstline-4, xsize, (pcjr->lastline - pcjr->firstline) + 8); - endblit(); + frames++; video_res_x = xsize - 16; video_res_y = ysize; diff --git a/src/vid_tandy.c b/src/vid_tandy.c index c4b3112..e154cc8 100644 --- a/src/vid_tandy.c +++ b/src/vid_tandy.c @@ -614,12 +614,12 @@ void tandy_poll(void *p) } // printf("Blit %i %i\n",firstline,lastline); //printf("Xsize is %i\n",xsize); - startblit(); + if (cga_comp) video_blit_memtoscreen(0, tandy->firstline-4, 0, (tandy->lastline - tandy->firstline) + 8, xsize, (tandy->lastline - tandy->firstline) + 8); else video_blit_memtoscreen_8(0, tandy->firstline-4, xsize, (tandy->lastline - tandy->firstline) + 8); - endblit(); + frames++; video_res_x = xsize - 16; video_res_y = ysize; diff --git a/src/vid_tandysl.c b/src/vid_tandysl.c index 3843a52..4a1a37f 100644 --- a/src/vid_tandysl.c +++ b/src/vid_tandysl.c @@ -630,9 +630,9 @@ static void tandysl_poll(void *p) } // printf("Blit %i %i\n",firstline,lastline); //printf("Xsize is %i\n",xsize); - startblit(); + video_blit_memtoscreen_8(0, tandy->firstline-4, xsize, (tandy->lastline - tandy->firstline) + 8); - endblit(); + frames++; video_res_x = xsize - 16; video_res_y = ysize; diff --git a/src/win.c b/src/win.c index 6386726..c0ac641 100644 --- a/src/win.c +++ b/src/win.c @@ -70,8 +70,8 @@ static struct int winsizex=640,winsizey=480; int gfx_present[GFX_MAX]; -#undef cs -CRITICAL_SECTION cs; + +HANDLE ghMutex; HANDLE mainthreadh; @@ -124,12 +124,12 @@ void releasemouse() void startblit() { - EnterCriticalSection(&cs); + WaitForSingleObject(ghMutex, INFINITE); } void endblit() { - LeaveCriticalSection(&cs); + ReleaseMutex(ghMutex); } void leave_fullscreen() @@ -637,7 +637,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, /// QueryPerformanceCounter(&counter_posold); // counter_posold.QuadPart*=100; - InitializeCriticalSection(&cs); + ghMutex = CreateMutex(NULL, FALSE, NULL); mainthreadh=(HANDLE)_beginthread(mainthread,0,NULL); SetThreadPriority(mainthreadh, THREAD_PRIORITY_HIGHEST);