]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
2200b12
authorToni Wilen <twilen@winuae.net>
Sat, 26 Jun 2010 18:42:34 +0000 (21:42 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 26 Jun 2010 18:42:34 +0000 (21:42 +0300)
cfgfile.cpp
filesys.cpp
include/options.h
od-win32/direct3d.cpp
od-win32/win32.h
od-win32/win32gfx.cpp
od-win32/winuae_msvc10/winuae_msvc.vcxproj
od-win32/winuaechangelog.txt

index b012b6e9e8f285821b65d17974fbc5108007b2ea..074a9cfa8881e5b2b1f5e6a1febe2b69f57d2343 100644 (file)
@@ -747,6 +747,19 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        cfgfile_dwrite (f, L"gfx_contrast", L"%d", p->gfx_contrast);
        cfgfile_dwrite (f, L"gfx_gamma", L"%d", p->gfx_gamma);
        cfgfile_dwrite_str (f, L"gfx_filter_mask", p->gfx_filtermask);
+       if (p->gfx_filteroverlay[0]) {
+               cfgfile_dwrite (f, L"gfx_filter_overlay", L"%s:%d%s,%d%s,%d%s,%d%s",
+                       p->gfx_filteroverlay,
+                       p->gfx_filteroverlay_pos.x >= -24000 ? p->gfx_filteroverlay_pos.x : -p->gfx_filteroverlay_pos.x - 30000,
+                       p->gfx_filteroverlay_pos.x >= -24000 ? L"" : L"%",
+                       p->gfx_filteroverlay_pos.y >= -24000 ? p->gfx_filteroverlay_pos.y : -p->gfx_filteroverlay_pos.y - 30000,
+                       p->gfx_filteroverlay_pos.y >= -24000 ? L"" : L"%",
+                       p->gfx_filteroverlay_pos.width >= -24000 ? p->gfx_filteroverlay_pos.width : -p->gfx_filteroverlay_pos.width - 30000,
+                       p->gfx_filteroverlay_pos.width >= -24000 ? L"" : L"%",
+                       p->gfx_filteroverlay_pos.height >= -24000 ? p->gfx_filteroverlay_pos.height : -p->gfx_filteroverlay_pos.height - 300000,
+                       p->gfx_filteroverlay_pos.height >= -24000 ? L"" : L"%"
+                       );
+       }
 #endif
 
        cfgfile_write_bool (f, L"immediate_blits", p->immediate_blits);
@@ -1261,6 +1274,49 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
        }
 
 #ifdef GFXFILTER
+       if (_tcscmp (option, L"gfx_filter_overlay") == 0) {
+               TCHAR *s = _tcschr (value, ':');
+               p->gfx_filteroverlay_pos.x = 0;
+               p->gfx_filteroverlay_pos.y = 0;
+               p->gfx_filteroverlay_pos.width = 0;
+               p->gfx_filteroverlay_pos.height = 0;
+               while (s) {
+                       *s++ = 0;
+                       p->gfx_filteroverlay_pos.x = _tstol (s);
+                       s = _tcschr (s, ',');
+                       if (!s)
+                               break;
+                       if (s[-1] == '%')
+                               p->gfx_filteroverlay_pos.x = -30000 - p->gfx_filteroverlay_pos.x;
+                       *s++ = 0;
+                       p->gfx_filteroverlay_pos.y = _tstol (s);
+                       s = _tcschr (s, ',');
+                       if (!s)
+                               break;
+                       if (s[-1] == '%')
+                               p->gfx_filteroverlay_pos.y = -30000 - p->gfx_filteroverlay_pos.y;
+                       *s++ = 0;
+                       p->gfx_filteroverlay_pos.width = _tstol (s);
+                       s = _tcschr (s, ',');
+                       if (!s)
+                               break;
+                       if (s[-1] == '%')
+                               p->gfx_filteroverlay_pos.width = -30000 - p->gfx_filteroverlay_pos.width;
+                       *s++ = 0;
+                       p->gfx_filteroverlay_pos.height = _tstol (s);
+                       TCHAR *s2 = _tcschr (s, ',');
+                       if (s2)
+                               *s2 = 0;
+                       s = s + _tcslen (s);
+                       if (s[-1] == '%')
+                               p->gfx_filteroverlay_pos.height = -30000 - p->gfx_filteroverlay_pos.height;
+                       break;
+               }
+               _tcsncpy (p->gfx_filteroverlay, value, sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1);
+               p->gfx_filteroverlay[sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1] = 0;
+               return 1;
+       }
+
        if (_tcscmp (option, L"gfx_filter") == 0) {
                int i = 0;
                TCHAR *s = _tcschr (value, ':');
index 1322babc80beeae7cf75553f202af976878ae8f4..df5156b9a8b92d2f495b3a375625ccec8fb4ce65 100644 (file)
@@ -3644,8 +3644,8 @@ static void
 {
        Key *k = lookup_key (unit, GET_PCK_ARG1 (packet));
        uaecptr addr = GET_PCK_ARG2 (packet);
-       long size = (uae_s32)GET_PCK_ARG3 (packet);
-       int actual;
+       uae_u32 size = GET_PCK_ARG3 (packet);
+       uae_u32 actual;
 
        if (k == 0) {
                PUT_PCK_RES1 (packet, DOS_FALSE);
@@ -3666,9 +3666,10 @@ static void
                        possible_loadseg();
        }
 #endif
-       if (valid_address (addr, size)) {
-               uae_u8 *realpt;
-               realpt = get_real_address (addr);
+       if (size == 0) {
+               actual = 0;
+       } else if (valid_address (addr, size)) {
+               uae_u8 *realpt = get_real_address (addr);
                actual = fs_read (k->fd, realpt, size);
 
                if (actual == 0) {
@@ -3723,8 +3724,8 @@ static void
 {
        Key *k = lookup_key (unit, GET_PCK_ARG1 (packet));
        uaecptr addr = GET_PCK_ARG2 (packet);
-       long size = GET_PCK_ARG3 (packet);
-       long actual;
+       uae_u32 size = GET_PCK_ARG3 (packet);
+       uae_u32 actual;
        uae_u8 *buf;
        int i;
 
@@ -3743,12 +3744,12 @@ static void
                return;
        }
 
-       if (valid_address (addr, size)) {
+       if (size == 0) {
+               actual = 0;
+       } else if (valid_address (addr, size)) {
                uae_u8 *realpt = get_real_address (addr);
                actual = fs_write (k->fd, realpt, size);
-
        } else {
-
                write_log (L"unixfs warning: Bad pointer passed for write: %08x, size %d\n", addr, size);
                /* ugh this is inefficient but easy */
                buf = xmalloc (uae_u8, size);
index a502e70110aa9584adea8ced63f1498c29a0f0a2..a385949dfb79e77fd09acd273b150c33dcc51653 100644 (file)
@@ -193,6 +193,8 @@ struct uae_prefs {
        int gfx_filter;
        TCHAR gfx_filtershader[MAX_DPATH];
        TCHAR gfx_filtermask[MAX_DPATH];
+       TCHAR gfx_filteroverlay[MAX_DPATH];
+       struct wh gfx_filteroverlay_pos;
        int gfx_filter_scanlines;
        int gfx_filter_scanlineratio;
        int gfx_filter_scanlinelevel;
index 71e90851c4865df67059547254c486d9bf84b2a5..692b006012f93e0de224c1ae56b2bf8bd3eeee6f 100644 (file)
@@ -40,8 +40,8 @@ static D3DDISPLAYMODEEX modeex;
 static IDirect3DDevice9 *d3ddev;
 static IDirect3DDevice9Ex *d3ddevex;
 static D3DSURFACE_DESC dsdbb;
-static LPDIRECT3DTEXTURE9 texture, sltexture, ledtexture, masktexture;
-static int masktexture_w, masktexture_h;
+static LPDIRECT3DTEXTURE9 texture, sltexture, ledtexture, masktexture, mask2texture;
+static int masktexture_w, masktexture_h, mask2texture_w, mask2texture_h;
 static LPDIRECT3DTEXTURE9 lpWorkTexture1, lpWorkTexture2, lpTempTexture;
 LPDIRECT3DTEXTURE9 cursorsurfaced3d;
 static LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture;
@@ -1158,7 +1158,64 @@ static int createsltexture (void)
        return 1;
 }
 
-static int createmasktexture (TCHAR *filename)
+static int createmask2texture (const TCHAR *filename)
+{
+       struct zfile *zf;
+       int size;
+       uae_u8 *buf;
+       LPDIRECT3DTEXTURE9 tx;
+       HRESULT hr;
+       D3DXIMAGE_INFO dinfo;
+       TCHAR tmp[MAX_DPATH];
+
+       if (filename[0] == 0 || WIN32GFX_IsPicassoScreen ())
+               return 0;
+       zf = NULL;
+       for (int i = 0; i < 2; i++) {
+               if (i == 0)
+                       _stprintf (tmp, L"%s%soverlays\\%s", start_path_exe, WIN32_PLUGINDIR, filename);
+               else
+                       _tcscpy (tmp, filename);
+               zf = zfile_fopen (tmp, L"rb", ZFD_NORMAL);
+               if (zf)
+                       break;
+               TCHAR tmp2[MAX_DPATH];
+               TCHAR *s = _tcsrchr (tmp, '.');
+               if (s) {
+                       _tcscpy (tmp2, s);
+                       _stprintf (s, L"_%dx%d%s", window_w, window_h, tmp2);
+                       zf = zfile_fopen (tmp, L"rb", ZFD_NORMAL);
+                       if (zf)
+                               break;
+               }
+       }
+       if (!zf) {
+               write_log (L"%s: couldn't open overlay '%s'\n", D3DHEAD, filename);
+               return 0;
+       }
+       size = zfile_size (zf);
+       buf = xmalloc (uae_u8, size);
+       zfile_fread (buf, size, 1, zf);
+       zfile_fclose (zf);
+       hr = D3DXCreateTextureFromFileInMemoryEx (d3ddev, buf, size,
+                D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8,
+                D3DPOOL_DEFAULT, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, &dinfo, NULL, &tx);
+       xfree (buf);
+       if (FAILED (hr)) {
+               write_log (L"%s: overlay texture load failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
+               goto end;
+       }
+       mask2texture_w = dinfo.Width;
+       mask2texture_h = dinfo.Height;
+       mask2texture = tx;
+       return 1;
+end:
+       if (tx)
+               tx->Release ();
+       return 0;
+}
+
+static int createmasktexture (const TCHAR *filename)
 {
        int ww = window_w;
        int hh = window_h;
@@ -1410,6 +1467,10 @@ static void invalidatedeviceobjects (void)
                masktexture->Release ();
                masktexture = NULL;
        }
+       if (mask2texture) {
+               mask2texture->Release ();
+               mask2texture = NULL;
+       }
        if (lpTempTexture) {
                lpTempTexture->Release ();
                lpTempTexture = NULL;
@@ -1490,13 +1551,15 @@ static int restoredeviceobjects (void)
        if (wasshader && !shaderon)
                write_log (L"Falling back to non-shader mode\n");
 
+       createmask2texture (currprefs.gfx_filteroverlay);
+
        if (!createtexture (tin_w, tin_h))
                return 0;
        createledtexture ();
 
        hr = D3DXCreateSprite (d3ddev, &sprite);
        if (FAILED (hr)) {
-               write_log (L"%s: LED D3DXSprite failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
+               write_log (L"%s: D3DXSprite failed: %s\n", D3DHEAD, D3D_ErrorString (hr));
        }
 
        int curw = CURSORMAXWIDTH, curh = CURSORMAXHEIGHT;
@@ -2043,7 +2106,7 @@ static void D3D_render22 (void)
                }
        }
 
-       if (sprite && ((ledtexture) || (cursorsurfaced3d && cursor_v))) {
+       if (sprite && ((ledtexture) || (mask2texture) || (cursorsurfaced3d && cursor_v))) {
                D3DXVECTOR3 v;
                sprite->Begin (D3DXSPRITE_ALPHABLEND);
                if (cursorsurfaced3d && cursor_v) {
@@ -2058,6 +2121,51 @@ static void D3D_render22 (void)
                        MatrixScaling (&t, 1, 1, 0);
                        sprite->SetTransform (&t);
                }
+               if (mask2texture) {
+                       D3DXMATRIX t;
+                       float w = (float)window_w / mask2texture_w;
+                       float h = (float)window_h / mask2texture_h;
+
+                       if (currprefs.gfx_filteroverlay_pos.width > 0)
+                               w = (float)currprefs.gfx_filteroverlay_pos.width / mask2texture_w;
+                       else if (currprefs.gfx_filteroverlay_pos.width == -1)
+                               w = 1.0;
+                       else if (currprefs.gfx_filteroverlay_pos.width <= -24000)
+                               w = w * (-currprefs.gfx_filteroverlay_pos.width - 30000) / 100.0;
+
+                       if (currprefs.gfx_filteroverlay_pos.height > 0)
+                               h = (float)currprefs.gfx_filteroverlay_pos.height / mask2texture_h;
+                       else if (currprefs.gfx_filteroverlay_pos.height == -1)
+                               h = 1;
+                       else if (currprefs.gfx_filteroverlay_pos.height <= -24000)
+                               h = h * (-currprefs.gfx_filteroverlay_pos.height - 30000) / 100.0;
+
+                       MatrixScaling (&t, w, h, 0);
+
+                       v.x = 0;
+                       if (currprefs.gfx_filteroverlay_pos.x == -1)
+                               v.x = (window_w - (mask2texture_w * w)) / 2;
+                       else if (currprefs.gfx_filteroverlay_pos.x > -24000)
+                               v.x = currprefs.gfx_filteroverlay_pos.x;
+                       else
+                               v.x = (window_w - (mask2texture_w * w)) / 2 + (-currprefs.gfx_filteroverlay_pos.x - 30100) * window_w / 100.0;
+
+                       v.y = 0;
+                       if (currprefs.gfx_filteroverlay_pos.y == -1)
+                               v.y = (window_h - (mask2texture_h * h)) / 2;
+                       else if (currprefs.gfx_filteroverlay_pos.y > -24000)
+                               v.y = currprefs.gfx_filteroverlay_pos.y;
+                       else
+                               v.y = (window_h - (mask2texture_h * h)) / 2 + (-currprefs.gfx_filteroverlay_pos.y - 30100) * window_h / 100.0;
+
+                       v.x /= w;
+                       v.y /= h;
+                       v.z = 0;
+                       sprite->SetTransform (&t);
+                       sprite->Draw (mask2texture, NULL, NULL, &v, 0xffffffff);
+                       MatrixScaling (&t, 1, 1, 0);
+                       sprite->SetTransform (&t);
+               }
                if (ledtexture && (((currprefs.leds_on_screen & STATUSLINE_RTG) && WIN32GFX_IsPicassoScreen ()) || ((currprefs.leds_on_screen & STATUSLINE_CHIPSET) && !WIN32GFX_IsPicassoScreen ()))) {
                        v.x = 0;
                        v.y = window_h - TD_TOTAL_HEIGHT;
index cf468874e75c0e0b5a649a682c7c3b4ef7048444..7fc9e12d296ee5adc50f18187485833f83a608cf 100644 (file)
@@ -18,9 +18,9 @@
 #define WINUAEPUBLICBETA 1
 #define LANG_DLL 1
 
-#define WINUAEBETA L"11"
-#define WINUAEDATE MAKEBD(2010, 6, 22)
-#define WINUAEEXTRA L"RC2"
+#define WINUAEBETA L"12"
+#define WINUAEDATE MAKEBD(2010, 6, 26)
+#define WINUAEEXTRA L"RC3"
 #define WINUAEREV L""
 
 #define IHF_WINDOWHIDDEN 6
index 831181f19d816b8850ade9ea3beebeda6e8e5ecb..2f6b9982dd01caae2e462b05ea320a759499d8a2 100644 (file)
@@ -1275,6 +1275,7 @@ int check_prefs_changed_gfx (void)
        c |= currprefs.gfx_filter != changed_prefs.gfx_filter ? (2|8) : 0;
        c |= _tcscmp (currprefs.gfx_filtershader, changed_prefs.gfx_filtershader) ? (2|8) : 0;
        c |= _tcscmp (currprefs.gfx_filtermask, changed_prefs.gfx_filtermask) ? (2|8) : 0;
+       c |= _tcscmp (currprefs.gfx_filteroverlay, changed_prefs.gfx_filteroverlay) ? (2|8) : 0;
        c |= currprefs.gfx_filter_filtermode != changed_prefs.gfx_filter_filtermode ? (2|8) : 0;
        c |= currprefs.gfx_filter_bilinear != changed_prefs.gfx_filter_bilinear ? (2|8) : 0;
        c |= currprefs.gfx_filter_horiz_zoom_mult != changed_prefs.gfx_filter_horiz_zoom_mult ? (1|8) : 0;
@@ -1335,6 +1336,7 @@ int check_prefs_changed_gfx (void)
                currprefs.gfx_filter = changed_prefs.gfx_filter;
                _tcscpy (currprefs.gfx_filtershader, changed_prefs.gfx_filtershader);
                _tcscpy (currprefs.gfx_filtermask, changed_prefs.gfx_filtermask);
+               _tcscpy (currprefs.gfx_filteroverlay, changed_prefs.gfx_filteroverlay);
                currprefs.gfx_filter_filtermode = changed_prefs.gfx_filter_filtermode;
                currprefs.gfx_filter_bilinear = changed_prefs.gfx_filter_bilinear;
                currprefs.gfx_filter_horiz_zoom_mult = changed_prefs.gfx_filter_horiz_zoom_mult;
index 1cf74857ed903a62e4c9bc09e5229f6f0adb97bf..a604530f68b8dd7b04982a6e1797e111c097a400 100644 (file)
       <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9d.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;prowizard.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
-      <OutputFile>d:\amiga\winuae.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <IgnoreSpecificDefaultLibraries>LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
     </ResourceCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <DelayLoadDLLs>wpcap.dll;packet.dll;d3dx9_42.dll;openal32.dll;wintab32.dll;portaudio_x64.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
     </ResourceCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>d:\amiga\winuae.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
     <Link>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
-      <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
     </ResourceCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;libpng.lib;lglcd.lib;wpcap.lib;packet.lib;openal32.lib;wintab32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;avrt.lib;enet.lib;prowizard.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>d:\amiga\winuae.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <AdditionalManifestDependencies>%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
     <Link>
       <AdditionalDependencies>ws2_32.lib;ddraw.lib;dxguid.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;dxerr.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;packet.lib;wpcap.lib;openal32.lib;libpng.lib;lglcd.lib;wtsapi32.lib;wntab32x.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
-      <OutputFile>d:\amiga\winuae64.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
index e17fe08bc40205003af64f144c2f27611f9d4d51..eae37801fb0fddf2cfe012f8831dd5fcdbacac91 100644 (file)
@@ -1,4 +1,14 @@
 
+Beta 12: (RC3)
+
+- directory filesystem action_read/action_write with length=0 special handling
+  added (host OS routines may have returned weird errors in some situations)
+- monitor "bezel" overlay image support added, direct3d and configuration file only.
+  gfx_filter_overlay=<path>:x,y,width,height (only path is mandatory)
+  x and y: position of overlay relative to top/left corner. -1 = center, value% = relative to window size.
+  width and height: width of overlay image. -1 = scale to window size, 0 = use original size,
+  > 0 = scale to this size. value% = scale to window size + %adjustment.
+
 Beta 11: (RC2)
 
 - DirectInput keyboard and mouse didn't work in Test/Remap mode after emulation was started