From b2146c2dd2fde3f2215756d2e6a37f82360c11b7 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 15 Jun 2008 11:16:18 +0300 Subject: [PATCH] imported winuaesrc1500b24.zip --- disk.c | 2 +- include/custom.h | 2 +- od-win32/dinput.c | 42 +++++++++++----- od-win32/direct3d.c | 5 +- od-win32/dxwrap.c | 4 +- od-win32/hardfile_win32.c | 44 +++++++++++----- od-win32/opengl.c | 7 +-- od-win32/win32.c | 12 +++-- od-win32/win32.h | 10 ++-- od-win32/win32gfx.c | 97 +++++++++++++++++++++--------------- od-win32/winuaechangelog.txt | 10 ++++ 11 files changed, 154 insertions(+), 81 deletions(-) diff --git a/disk.c b/disk.c index 7b921e8a..b4eb3e98 100755 --- a/disk.c +++ b/disk.c @@ -2424,7 +2424,7 @@ static void disk_doupdate_write (drive * drv, int floppybits) floppy[dr].mfmpos %= drv->tracklen; } } - if ((dmacon & 0x210) == 0x210 && dskdmaen == 3 && dsklength > 0 && !(adkcon &0x400)) { + if ((dmacon & 0x210) == 0x210 && dskdmaen == 3 && dsklength > 0 && (!(adkcon &0x400) || dma_enable)) { bitoffset++; bitoffset &= 15; if (!bitoffset) { diff --git a/include/custom.h b/include/custom.h index d20813d0..20bc605c 100755 --- a/include/custom.h +++ b/include/custom.h @@ -96,7 +96,7 @@ extern uae_u16 INTREQR (void); #define MAXVPOS_PAL 312 #define MAXVPOS_NTSC 262 #define VBLANK_ENDLINE_PAL 27 -#define VBLANK_ENDLINE_NTSC 28 +#define VBLANK_ENDLINE_NTSC 21 #define VBLANK_SPRITE_PAL 25 #define VBLANK_SPRITE_NTSC 20 #define VBLANK_HZ_PAL 50 diff --git a/od-win32/dinput.c b/od-win32/dinput.c index 219fb864..93ed8bef 100755 --- a/od-win32/dinput.c +++ b/od-win32/dinput.c @@ -68,6 +68,7 @@ struct didata { HANDLE rawinput; int wininput; int catweasel; + int coop; int axles; int buttons; @@ -659,13 +660,20 @@ static int acquire (LPDIRECTINPUTDEVICE8 lpdi, char *txt) return SUCCEEDED (hr) ? 1 : 0; } -static int setcoop (LPDIRECTINPUTDEVICE8 lpdi, DWORD mode, char *txt) +static int setcoop (struct didata *did, DWORD mode, char *txt) { HRESULT hr = DI_OK; - if (lpdi && hMainWnd) { - hr = IDirectInputDevice8_SetCooperativeLevel (lpdi, hMainWnd, mode); - if (FAILED (hr) && hr != E_NOTIMPL) - write_log ("setcooperativelevel %s failed, %s\n", txt, DXError (hr)); + if (did->lpdi) { + did->coop = 0; + if (!did->coop && hMainWnd) { + hr = IDirectInputDevice8_SetCooperativeLevel (did->lpdi, hMainWnd, mode); + if (FAILED (hr) && hr != E_NOTIMPL) { + write_log ("setcooperativelevel %s failed, %s\n", txt, DXError (hr)); + } else { + did->coop = 1; + //write_log ("cooperativelevel %s set\n", txt); + } + } } return SUCCEEDED (hr) ? 1 : 0; } @@ -680,9 +688,9 @@ static void sortdd (struct didata *dd, int num, int type) for (j = i + 1; j < num; j++) { dd[j].type = type; if (dd[i].priority < dd[j].priority || (dd[i].priority == dd[j].priority && strcmp (dd[i].sortname, dd[j].sortname) > 0)) { - memcpy (&ddtmp, &dd[i], sizeof(ddtmp)); - memcpy (&dd[i], &dd[j], sizeof(ddtmp)); - memcpy (&dd[j], &ddtmp, sizeof(ddtmp)); + memcpy (&ddtmp, &dd[i], sizeof (ddtmp)); + memcpy (&dd[i], &dd[j], sizeof (ddtmp)); + memcpy (&dd[j], &ddtmp, sizeof (ddtmp)); } } } @@ -1104,7 +1112,7 @@ static int acquire_mouse (int num, int flags) unacquire (lpdi, "mouse"); if (did->connection == DIDC_DX && lpdi) { - setcoop (lpdi, flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), "mouse"); + setcoop (&di_mouse[num], flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), "mouse"); dipdw.diph.dwSize = sizeof(DIPROPDWORD); dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); dipdw.diph.dwObj = 0; @@ -1728,7 +1736,6 @@ void wait_keyrelease (void) static int acquire_kb (int num, int flags) { - DWORD mode = DISCL_NOWINKEY | DISCL_FOREGROUND | DISCL_EXCLUSIVE; LPDIRECTINPUTDEVICE8 lpdi = di_keyboard[num].lpdi; unacquire (lpdi, "keyboard"); @@ -1755,7 +1762,7 @@ static int acquire_kb (int num, int flags) set_leds (oldusedleds); } - setcoop (lpdi, mode, "keyboard"); + setcoop (&di_keyboard[num], DISCL_NOWINKEY | DISCL_FOREGROUND | DISCL_EXCLUSIVE, "keyboard"); kb_do_refresh = ~0; di_keyboard[num].acquired = -1; if (acquire (lpdi, "keyboard")) { @@ -2021,6 +2028,17 @@ static void close_joystick (void) di_free (); } +void dinput_window (void) +{ + int i; + for (i = 0; i < num_joystick; i++) + di_joystick[i].coop = 0; + for (i = 0; i < num_mouse; i++) + di_mouse[i].coop = 0; + for (i = 0; i < num_keyboard; i++) + di_keyboard[i].coop = 0; +} + static int acquire_joystick (int num, int flags) { LPDIRECTINPUTDEVICE8 lpdi = di_joystick[num].lpdi; @@ -2029,7 +2047,7 @@ static int acquire_joystick (int num, int flags) unacquire (lpdi, "joystick"); if (di_joystick[num].connection == DIDC_DX && lpdi) { - setcoop (lpdi, flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), "joystick"); + setcoop (&di_joystick[num], flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), "joystick"); memset (&dipdw, 0, sizeof (dipdw)); dipdw.diph.dwSize = sizeof (DIPROPDWORD); dipdw.diph.dwHeaderSize = sizeof (DIPROPHEADER); diff --git a/od-win32/direct3d.c b/od-win32/direct3d.c index 62a9f03b..76b85689 100755 --- a/od-win32/direct3d.c +++ b/od-win32/direct3d.c @@ -320,7 +320,7 @@ const char *D3D_init (HWND ahwnd, int w_w, int w_h, int t_w, int t_h, int depth) dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; vsync2 = 0; if (isfullscreen() > 0) { - dpp.FullScreen_RefreshRateInHz = currprefs.gfx_refreshrate; + dpp.FullScreen_RefreshRateInHz = abs (currprefs.gfx_refreshrate); if (currprefs.gfx_avsync > 0) { dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; if (currprefs.gfx_avsync > 85) { @@ -332,8 +332,7 @@ const char *D3D_init (HWND ahwnd, int w_w, int w_h, int t_w, int t_h, int depth) } } - ret = IDirect3D9_CreateDevice (d3d, adapter, D3DDEVTYPE_HAL, ahwnd, - USAGE, &dpp, &d3ddev); + ret = IDirect3D9_CreateDevice (d3d, adapter, D3DDEVTYPE_HAL, ahwnd, USAGE, &dpp, &d3ddev); if(FAILED (ret)) { sprintf (errmsg, "CreateDevice failed, %s\n", D3D_ErrorString (ret)); D3D_free (); diff --git a/od-win32/dxwrap.c b/od-win32/dxwrap.c index 48f6c42e..5d6f768d 100755 --- a/od-win32/dxwrap.c +++ b/od-win32/dxwrap.c @@ -72,6 +72,8 @@ HRESULT restoresurface (LPDIRECTDRAWSURFACE7 surf) { HRESULT ddrval; + if (surf == NULL) + return E_FAIL; if (surf == dxdata.flipping[0] || surf == dxdata.flipping[1]) surf = dxdata.primary; ddrval = IDirectDrawSurface7_IsLost (surf); @@ -435,7 +437,7 @@ char *outGUID (const GUID *guid) const char *DXError (HRESULT ddrval) { static char dderr[1000]; - sprintf (dderr, "%08.8X S=%d F=%04.4X C=%04.4X (%d) (%s)", + sprintf (dderr, "%08X S=%d F=%04X C=%04.4X (%d) (%s)", ddrval, (ddrval & 0x80000000) ? 1 : 0, HRESULT_FACILITY(ddrval), HRESULT_CODE(ddrval), diff --git a/od-win32/hardfile_win32.c b/od-win32/hardfile_win32.c index 33d14210..994c006a 100755 --- a/od-win32/hardfile_win32.c +++ b/od-win32/hardfile_win32.c @@ -307,13 +307,13 @@ end: void hdf_close (struct hardfiledata *hfd) { - if (!hfd->handle_valid) - return; - if (hfd->handle && hfd->handle != INVALID_HANDLE_VALUE) { - if (hfd->handle_valid == HDF_HANDLE_WIN32) - CloseHandle (hfd->handle); - else if(hfd->handle_valid == HDF_HANDLE_ZFILE) - zfile_fclose (hfd->handle); + if (hfd->handle_valid) { + if (hfd->handle && hfd->handle != INVALID_HANDLE_VALUE) { + if (hfd->handle_valid == HDF_HANDLE_WIN32) + CloseHandle (hfd->handle); + else if(hfd->handle_valid == HDF_HANDLE_ZFILE) + zfile_fclose (hfd->handle); + } } xfree (hfd->emptyname); hfd->emptyname = NULL; @@ -1257,7 +1257,8 @@ end: int hardfile_remount (int nr); -static void hmc_check (struct hardfiledata *hfd, struct uaedev_config_info *uci, int *rescanned, int *reopen, int *gotinsert) +static void hmc_check (struct hardfiledata *hfd, struct uaedev_config_info *uci, int *rescanned, int *reopen, + int *gotinsert, const char *drvname, int inserted) { int ret; @@ -1267,6 +1268,20 @@ static void hmc_check (struct hardfiledata *hfd, struct uaedev_config_info *uci, hdf_init2 (1); *rescanned = 1; } + if (hfd->emptyname && strlen (hfd->emptyname) >= 6 && drvname && strlen (drvname) == 3 && drvname[1] == ':' && drvname[2] == '\\' && !inserted) { /* drive letter check */ + char tmp[10], *p; + sprintf (tmp, "\\\\.\\%c:", drvname[0]); + p = hfd->emptyname + strlen (hfd->emptyname) - 6; + write_log("workaround-remove test: '%s' and '%s'\n", p, drvname); + if (!strcmp (tmp, p)) { + write_log ("workaround-remove done\n"); + hdf_close (hfd); + hfd->drive_empty = 0; + hardfile_do_disk_change (uci, 0); + return; + } + } + if (hfd->drive_empty < 0 || !hfd->handle_valid) { int empty = hfd->drive_empty; int r; @@ -1295,24 +1310,29 @@ static void hmc_check (struct hardfiledata *hfd, struct uaedev_config_info *uci, hardfile_do_disk_change (uci, ret < 0 ? 0 : 1); } -int win32_hardfile_media_change (void) +int win32_hardfile_media_change (const char *drvname, int inserted) { int gotinsert = 0, rescanned = 0; - int i; + int i, j; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { struct hardfiledata *hfd = get_hardfile_data (i); int reopen = 0; if (!hfd || !(hfd->flags & HFD_FLAGS_REALDRIVE)) continue; - hmc_check (hfd, &currprefs.mountconfig[i], &rescanned, &reopen, &gotinsert); + for (j = 0; j < currprefs.mountitems; j++) { + if (currprefs.mountconfig[j].configoffset == i) { + hmc_check (hfd, &currprefs.mountconfig[j], &rescanned, &reopen, &gotinsert, drvname, inserted); + break; + } + } } for (i = 0; i < currprefs.mountitems; i++) { extern struct hd_hardfiledata *pcmcia_sram; int reopen = 0; struct uaedev_config_info *uci = &currprefs.mountconfig[i]; if (uci->controller == HD_CONTROLLER_PCMCIA_SRAM) { - hmc_check (&pcmcia_sram->hfd, uci, &rescanned, &reopen, &gotinsert); + hmc_check (&pcmcia_sram->hfd, uci, &rescanned, &reopen, &gotinsert, drvname, inserted); } } diff --git a/od-win32/opengl.c b/od-win32/opengl.c index c58506cb..549a4bdf 100755 --- a/od-win32/opengl.c +++ b/od-win32/opengl.c @@ -48,7 +48,7 @@ static int required_texture_size; static int required_sl_texture_size; static GLint ti2d_internalformat, ti2d_format, ti2d_type; static GLint sl_ti2d_internalformat, sl_ti2d_format, sl_ti2d_type; -static int w_width, w_height, t_width, t_height; +static int w_width, w_height, t_width, t_height, t_depth; static int packed_pixels; static int doublevsync; static int ogl_enabled; @@ -196,6 +196,7 @@ const char *OGL_init (HWND ahwnd, int w_w, int w_h, int t_w, int t_h, int depth) w_height = w_h; t_width = t_w; t_height = t_h; + t_depth = depth; hwnd = ahwnd; total_textures = 2; @@ -435,7 +436,7 @@ static void OGL_swapinterval (void) doublevsync = 0; if (wglSwapIntervalEXT) { int i1, i2; - i1 = (currprefs.gfx_avsync > 0 && isfullscreen() > 0) ? (currprefs.gfx_refreshrate > 85 ? 2 : 1) : 0; + i1 = (currprefs.gfx_avsync > 0 && isfullscreen() > 0) ? (abs (currprefs.gfx_refreshrate) > 85 ? 2 : 1) : 0; if (turbo_emulation) i1 = 0; wglSwapIntervalEXT (i1); @@ -523,7 +524,7 @@ static void OGL_dorender (int newtex) glLoadIdentity (); glBindTexture (GL_TEXTURE_2D, tex[0]); - if (newtex) + if (newtex && gfxvidinfo.bufmem + t_width * t_height * t_depth / 8 <= gfxvidinfo.bufmemend) glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, t_width, t_height, ti2d_format, ti2d_type, data); glBegin (GL_QUADS); diff --git a/od-win32/win32.c b/od-win32/win32.c index 1772ae31..094b0d51 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -808,6 +808,11 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, DragAcceptFiles (hWnd, TRUE); return 0; + case WM_DESTROY: + inputdevice_unacquire (); + dinput_window (); + return 0; + case WM_CLOSE: uae_quit (); return 0; @@ -912,7 +917,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, if(SHGetPathFromIDList((struct _ITEMIDLIST *)(shns->dwItem1), path)) { int inserted = lParam == SHCNE_MEDIAINSERTED ? 1 : 0; write_log("Shell Notification %d '%s'\n", inserted, path); - if (!win32_hardfile_media_change ()) { + if (!win32_hardfile_media_change (path, inserted)) { if ((inserted && CheckRM (path)) || !inserted) { if (inserted) { DWORD type = GetDriveType(path); @@ -971,7 +976,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, } if (type == DRIVE_REMOVABLE || type == DRIVE_CDROM || !inserted) { write_log("WM_DEVICECHANGE '%s' type=%d inserted=%d\n", drvname, type, inserted); - if (!win32_hardfile_media_change ()) { + if (!win32_hardfile_media_change (drvname, inserted)) { if ((inserted && CheckRM (drvname)) || !inserted) { if (type == DRIVE_CDROM && inserted) inserted = -1; @@ -1113,7 +1118,6 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, case WM_SIZING: case WM_SIZE: case WM_GETMINMAXINFO: - case WM_CREATE: case WM_DESTROY: case WM_CLOSE: case WM_HELP: @@ -1126,7 +1130,7 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, case WM_ENABLE: return AmigaWindowProc (hWnd, message, wParam, lParam); - case WM_DISPLAYCHANGE: + case WM_DISPLAYCHANGE: if (isfullscreen() <= 0 && !currprefs.gfx_filter && (wParam + 7) / 8 != DirectDraw_GetBytesPerPixel()) WIN32GFX_DisplayChangeRequested(); break; diff --git a/od-win32/win32.h b/od-win32/win32.h index f16d33d1..5d751568 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,9 +15,9 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEBETA 23 +#define WINUAEBETA 24 #define WINUAEPUBLICBETA 1 -#define WINUAEDATE MAKEBD(2008, 6, 13) +#define WINUAEDATE MAKEBD(2008, 6, 15) #define WINUAEEXTRA "" #define WINUAEREV "" @@ -107,9 +107,10 @@ extern int dinput_wmkey (uae_u32 key); extern int dinput_winmouse (void); extern int dinput_wheelbuttonstart (void); extern int dinput_winmousemode (void); +extern void dinput_window (void); void addnotifications (HWND hwnd, int remove); -int win32_hardfile_media_change (void); +int win32_hardfile_media_change (const char *drvname, int inserted); extern int CheckRM(char *DriveName); void systray (HWND hwnd, int remove); void systraymenu (HWND hwnd); @@ -136,4 +137,5 @@ extern void logging_open(int,int); extern void logging_cleanup(void); extern LONG WINAPI WIN32_ExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionPointers, DWORD ec); -#endif \ No newline at end of file + +#endif diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 065e129a..c7126815 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -57,12 +57,10 @@ #define DM_DX_FULLSCREEN 1 #define DM_W_FULLSCREEN 2 #define DM_OPENGL 8 -#define DM_DX_DIRECT 16 #define DM_PICASSO96 32 #define DM_DDRAW 64 #define DM_DC 128 #define DM_D3D 256 -#define DM_D3D_FULLSCREEN 512 #define DM_SWSCALE 1024 #define SM_WINDOW 0 @@ -243,7 +241,7 @@ static int set_ddraw_2 (void) DirectDraw_FreeMainSurface (); ddrval = DirectDraw_SetCooperativeLevel (hAmigaWnd, dxfullscreen, TRUE); - if (FAILED(ddrval)) + if (FAILED (ddrval)) goto oops; if (dxfullscreen) { @@ -267,7 +265,7 @@ static int set_ddraw_2 (void) if (dd) { ddrval = DirectDraw_CreateClipper (); - if (FAILED(ddrval)) + if (FAILED (ddrval)) goto oops; ddrval = DirectDraw_CreateMainSurface (width, height); if (FAILED(ddrval)) { @@ -275,7 +273,7 @@ static int set_ddraw_2 (void) goto oops; } ddrval = DirectDraw_SetClipper (hAmigaWnd); - if (FAILED(ddrval)) + if (FAILED (ddrval)) goto oops; if (DirectDraw_SurfaceLock ()) { currentmode->pitch = DirectDraw_GetSurfacePitch (); @@ -803,6 +801,7 @@ static int open_windows (void) { int ret, i; + inputdevice_unacquire (); reset_sound(); in_sizemove = 0; @@ -1071,6 +1070,8 @@ static int ncols256 = 0; static int red_bits, green_bits, blue_bits, alpha_bits; static int red_shift, green_shift, blue_shift, alpha_shift; +static int x_red_bits, x_green_bits, x_blue_bits, x_alpha_bits; +static int x_red_shift, x_green_shift, x_blue_shift, x_alpha_shift; static int alpha; static int get_color (int r, int g, int b, xcolnr * cnp) @@ -1094,6 +1095,26 @@ void init_colors (void) } /* init colors */ + switch(currentmode->current_depth >> 3) + { + case 1: + memcpy (xcolors, xcol8, sizeof xcolors); + DirectDraw_SetPaletteEntries (0, 256, colors256); + break; + case 2: + case 3: + case 4: + x_red_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (red_mask)); + x_green_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (green_mask)); + x_blue_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (blue_mask)); + x_red_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (red_mask)); + x_green_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (green_mask)); + x_blue_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (blue_mask)); + x_alpha_bits = 0; + x_alpha_shift = 0; + break; + } + if (currentmode->flags & DM_OPENGL) { #ifdef OPENGL OGL_getpixelformat (currentmode->current_depth,&red_bits,&green_bits,&blue_bits,&red_shift,&green_shift,&blue_shift,&alpha_bits,&alpha_shift,&alpha); @@ -1103,27 +1124,16 @@ void init_colors (void) D3D_getpixelformat (currentmode->current_depth,&red_bits,&green_bits,&blue_bits,&red_shift,&green_shift,&blue_shift,&alpha_bits,&alpha_shift,&alpha); #endif } else { - switch(currentmode->current_depth >> 3) - { - case 1: - memcpy (xcolors, xcol8, sizeof xcolors); - DirectDraw_SetPaletteEntries(0, 256, colors256); - break; - - case 2: - case 3: - case 4: - red_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (red_mask)); - green_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (green_mask)); - blue_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (blue_mask)); - red_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (red_mask)); - green_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (green_mask)); - blue_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (blue_mask)); - alpha_bits = 0; - alpha_shift = 0; - break; - } + red_bits = x_red_bits; + green_bits = x_green_bits; + blue_bits = x_blue_bits; + red_shift = x_red_shift; + green_shift = x_green_shift; + blue_shift = x_blue_shift; + alpha_bits = x_alpha_bits; + alpha_shift = x_alpha_shift; } + if (currentmode->current_depth > 8) { if (!(currentmode->flags & (DM_OPENGL|DM_D3D))) { if (currentmode->current_depth != currentmode->native_depth) { @@ -1137,7 +1147,7 @@ void init_colors (void) } } alloc_colors64k (red_bits, green_bits, blue_bits, red_shift,green_shift, blue_shift, alpha_bits, alpha_shift, alpha, 0); - notice_new_xcolors(); + notice_new_xcolors (); #ifdef GFXFILTER S2X_configure (red_bits, green_bits, blue_bits, red_shift,green_shift, blue_shift); #endif @@ -1341,7 +1351,7 @@ void gfx_set_picasso_state (int on) scalepicasso = 0; update_gfxparams (); - if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen) { + if (currprefs.gfx_afullscreen != currprefs.gfx_pfullscreen || currprefs.gfx_filter == UAE_FILTER_DIRECT3D || currprefs.gfx_filter == UAE_FILTER_OPENGL) { mode = 1; } else { mode = modeswitchneeded (&wc); @@ -1361,7 +1371,7 @@ end: void gfx_set_picasso_modeinfo (uae_u32 w, uae_u32 h, uae_u32 depth, RGBFTYPE rgbfmt) { - alloc_colors_picasso (red_bits, green_bits, blue_bits, red_shift, green_shift, blue_shift, rgbfmt); + alloc_colors_picasso (x_red_bits, x_green_bits, x_blue_bits, x_red_shift, x_green_shift, x_blue_shift, rgbfmt); if (screen_is_picasso && modeswitchneeded(currentmode)) open_screen (); } @@ -1443,7 +1453,7 @@ void close_windows (void) #if defined (GFXFILTER) S2X_free (); #endif - free (gfxvidinfo.realbufmem); + xfree (gfxvidinfo.realbufmem); gfxvidinfo.realbufmem = 0; DirectDraw_Release (); close_hwnds (); @@ -1573,7 +1583,7 @@ static int getbestmode (int nextbest) static int create_windows_2 (void) { - int dxfs = currentmode->flags & (DM_DX_FULLSCREEN | DM_D3D_FULLSCREEN); + int dxfs = currentmode->flags & (DM_DX_FULLSCREEN); int fsw = currentmode->flags & (DM_W_FULLSCREEN); DWORD exstyle = currprefs.win32_notaskbarbutton ? 0 : WS_EX_APPWINDOW; DWORD flags = 0; @@ -1756,10 +1766,16 @@ static void updatemodes (void) if (currentmode->current_depth < 15) currentmode->current_depth = 16; } - if (usedfilter->type == UAE_FILTER_DIRECT3D) - flags |= DM_D3D; - if (usedfilter->type == UAE_FILTER_OPENGL) - flags |= DM_OPENGL; + if (!screen_is_picasso) { + if (usedfilter->type == UAE_FILTER_DIRECT3D) { + flags |= DM_D3D; + flags &= ~DM_DDRAW; + } + if (usedfilter->type == UAE_FILTER_OPENGL) { + flags |= DM_OPENGL; + flags &= ~DM_DDRAW; + } + } } #endif currentmode->flags = flags; @@ -1830,10 +1846,10 @@ static BOOL doInit (void) WIN32GUI_LoadUIString(IDS_UNSUPPORTEDSCREENMODE, szMessage, MAX_DPATH); WIN32GUI_LoadUIString(fs_warning, szMessage2, MAX_DPATH); // Temporarily drop the DirectDraw stuff - DirectDraw_Release(); + DirectDraw_Release (); sprintf (tmpstr, szMessage, szMessage2); gui_message (tmpstr); - DirectDraw_Start(displayGUID); + DirectDraw_Start (displayGUID); if (screen_is_picasso) changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = 1; else @@ -1934,6 +1950,7 @@ static BOOL doInit (void) gfxvidinfo.realbufmem = xmalloc (size); gfxvidinfo.bufmem = gfxvidinfo.realbufmem; gfxvidinfo.rowbytes = currentmode->amiga_width * gfxvidinfo.pixbytes; + gfxvidinfo.bufmemend = gfxvidinfo.bufmem + size; } else if (!(currentmode->flags & DM_D3D)) { @@ -2104,11 +2121,11 @@ HDC gethdc (void) { HDC hdc = 0; #ifdef OPENGL - if (OGL_isenabled()) + if (OGL_isenabled ()) return OGL_getDC (0); #endif #ifdef D3D - if (D3D_isenabled()) + if (D3D_isenabled ()) return D3D_getDC (0); #endif if(FAILED (DirectDraw_GetDC (&hdc))) @@ -2119,13 +2136,13 @@ HDC gethdc (void) void releasehdc (HDC hdc) { #ifdef OPENGL - if (OGL_isenabled()) { + if (OGL_isenabled ()) { OGL_getDC (hdc); return; } #endif #ifdef D3D - if (D3D_isenabled()) { + if (D3D_isenabled ()) { D3D_getDC (hdc); return; } diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index e537cb00..17f95d39 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,14 @@ +Beta 24: + +- real PCMCIA SRAM card removal should really really work now +- real harddisk (or memory card or usb stick) disk change message + could have been sent to wrong device unit if multiple harddisk + devices were configured (including hardfiles) +- direct3d and opengl fullscreen fixed +- direct3d<>Picasso96 switching fixed (always need full display reset) +- NTSC vblank end fixed (top of display was cut in overscan modes) + Beta 23: - OGL/D3D fixed but uses old scaling method (update after 1.5) -- 2.47.3