write_resolution (f, _T("gfx_width_fullscreen"), _T("gfx_height_fullscreen"), &p->gfx_size_fs);
cfgfile_write (f, _T("gfx_refreshrate"), _T("%d"), p->gfx_apmode[0].gfx_refreshrate);
cfgfile_dwrite (f, _T("gfx_refreshrate_rtg"), _T("%d"), p->gfx_apmode[1].gfx_refreshrate);
+ cfgfile_write_bool(f, _T("gfx_tearing"), p->gfx_apmode[0].gfx_tearing);
+ cfgfile_write_bool(f, _T("gfx_tearing_rtg"), p->gfx_apmode[1].gfx_tearing);
+
cfgfile_write (f, _T("gfx_autoresolution"), _T("%d"), p->gfx_autoresolution);
cfgfile_dwrite (f, _T("gfx_autoresolution_delay"), _T("%d"), p->gfx_autoresolution_delay);
cfgfile_dwrite (f, _T("gfx_autoresolution_min_vertical"), vertmode[p->gfx_autoresolution_minv + 1]);
|| cfgfile_intval (option, value, _T("gfx_backbuffers"), &p->gfx_apmode[APMODE_NATIVE].gfx_backbuffers, 1)
|| cfgfile_intval (option, value, _T("gfx_backbuffers_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_backbuffers, 1)
|| cfgfile_yesno (option, value, _T("gfx_interlace"), &p->gfx_apmode[APMODE_NATIVE].gfx_interlaced)
- || cfgfile_yesno (option, value, _T("gfx_interlace_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_interlaced)
+ || cfgfile_yesno(option, value, _T("gfx_interlace_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_interlaced)
+ || cfgfile_yesno(option, value, _T("gfx_tearing"), &p->gfx_apmode[APMODE_NATIVE].gfx_tearing)
+ || cfgfile_yesno(option, value, _T("gfx_tearing_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_tearing)
|| cfgfile_intval(option, value, _T("gfx_black_frame_insertion_ratio"), &p->lightboost_strobo_ratio, 1)
|| cfgfile_intval (option, value, _T("gfx_center_horizontal_position"), &p->gfx_xcenter_pos, 1)
p = xmalloc(struct uae_prefs, 1);
alloc = true;
}
- p->description[0] = 0;
- p->config_host_path[0] = 0;
- p->config_hardware_path[0] = 0;
if (!p) {
alloc = true;
p = cfgfile_open(filename, type);
int gfx_backbuffers;
bool gfx_interlaced;
int gfx_refreshrate;
+ bool gfx_tearing;
};
#define MAX_LUA_STATES 16
if (prefs->gfx_api && ap->gfx_backbuffers < 1)
ap->gfx_backbuffers = 1;
if (ap->gfx_vflip)
- ap->gfx_strobo = prefs->lightboost_strobo;;
+ ap->gfx_strobo = prefs->lightboost_strobo;
}
} else {
// no vsync: wait if triple bufferirng
#define IDC_OCS 1520
#define IDC_HDFLOPPY 1520
#define IDC_SETTINGSTEXT3 1520
+#define IDC_DISPLAY_TEARING 1520
#define IDC_ECS_AGNUS 1521
#define IDC_ECS_DENISE 1522
#define IDC_ECS 1523
RTEXT "Fullscreen:",IDC_STATIC,3,33,51,15,SS_CENTERIMAGE
COMBOBOX IDC_RESOLUTION,59,33,76,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_RESOLUTIONDEPTH,144,33,62,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_REFRESHRATE,266,33,119,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_REFRESHRATE,263,34,122,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
RTEXT "Windowed:",IDC_STATIC,2,54,51,15,SS_CENTERIMAGE
- EDITTEXT IDC_XSIZE,59,56,56,12,ES_NUMBER
- EDITTEXT IDC_YSIZE,122,56,56,12,ES_NUMBER
- COMBOBOX IDC_DISPLAY_BUFFERCNT,266,56,119,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_XSIZE,59,56,43,12,ES_NUMBER
+ EDITTEXT IDC_YSIZE,113,56,43,12,ES_NUMBER
+ COMBOBOX IDC_DISPLAY_BUFFERCNT,263,56,122,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Settings",IDC_SETTINGSTEXT,1,86,283,183
RTEXT "Native:",IDC_STATIC,9,98,48,15,SS_CENTERIMAGE
COMBOBOX IDC_SCREENMODE_NATIVE,61,98,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
CONTROL "Double, frames",IDC_LM_IDOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,251,90,10
CONTROL "Double, fields",IDC_LM_IDOUBLED2,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,264,90,10
CONTROL "Double, fields+",IDC_LM_IDOUBLED3,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,277,90,10
+ CONTROL "Allow tearing",IDC_DISPLAY_TEARING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,58,84,10
END
IDD_MEMORY DIALOGEX 0, 0, 396, 266
EDITTEXT IDC_CS_DENISEREV,311,298,45,13,ES_AUTOHSCROLL
COMBOBOX IDC_CS_UNMAPPED,125,212,113,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Unmapped address space:",IDC_STATIC,15,215,101,9
- CONTROL "Toshiba Gary",IDC_CS_TOSHIBAGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,197,125,12
+ CONTROL "Toshiba Gary",IDC_CS_TOSHIBAGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,197,106,12
CONTROL "KS ROM has Chip RAM speed",IDC_CS_ROMISSLOW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,198,125,12
CONTROL "CIA 391078-01 [] CIA revision that can't read IO pin status in output mode",IDC_CS_CIA,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,198,125,12
p->color_mode = 5;
if (p->ppc_model && !p->gfx_api) {
error_log (_T("Graphics board and PPC: Direct3D enabled."));
- p->gfx_api = 1;
+ p->gfx_api = os_win7 ? 2 : 1;
}
}
p->win32_commandpathstart[0] = 0;
p->win32_commandpathend[0] = 0;
p->win32_statusbar = 1;
- p->gfx_api = os_vista ? 1 : 0;
+ p->gfx_api = os_win7 ? 2 : (os_vista ? 1 : 0);
if (p->gf[APMODE_NATIVE].gfx_filter == 0 && p->gfx_api)
p->gf[APMODE_NATIVE].gfx_filter = 1;
if (p->gf[APMODE_RTG].gfx_filter == 0 && p->gfx_api)
else
regsetint(NULL, _T("ArtCache"), artcache);
+ if (regexists(NULL, _T("ArtImageCount")))
+ regqueryint(NULL, _T("ArtImageCount"), &max_visible_boxart_images);
+ else
+ regsetint(NULL, _T("ArtImageCount"), max_visible_boxart_images);
+
+ if (regexists(NULL, _T("ArtImageWidth")))
+ regqueryint(NULL, _T("ArtImageWidth"), &stored_boxart_window_width);
+ else
+ regsetint(NULL, _T("ArtImageWidth"), stored_boxart_window_width);
+
if (regexists (NULL, _T("SaveImageOriginalPath")))
regqueryint (NULL, _T("SaveImageOriginalPath"), &saveimageoriginalpath);
else
WIN32_InitHtmlHelp ();
DirectDraw_Release ();
unicode_init ();
+ can_D3D11(false);
if (betamessage ()) {
keyboard_settrans ();
#ifdef CATWEASEL
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("10")
+#define WINUAEBETA _T("11")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2017, 12, 4)
+#define WINUAEDATE MAKEBD(2017, 12, 10)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
#endif
DirectDraw_ReleaseDC (hdc);
}
-
-
-
return ret;
}
+static void box_art_check(struct uae_prefs *p)
+{
+ TCHAR tmp1[MAX_DPATH];
+ if (cfgfile_detect_art(p, tmp1)) {
+ show_box_art(tmp1);
+ } else {
+ show_box_art(NULL);
+ }
+}
+
struct ConfigStruct {
TCHAR Name[MAX_DPATH];
TCHAR Path[MAX_DPATH];
return v;
if (type > 0)
return v;
- if (cfgfile_detect_art(p, tmp1)) {
- show_box_art(tmp1);
- } else {
- show_box_art(NULL);
- }
+ box_art_check(p);
for (i = 1; i <= 2; i++) {
if (type != i) {
size = sizeof (ct);
recursive--;
return TRUE;
- case WM_USER:
+ case WM_USER + 1:
+ if (config) {
+ show_box_art(config && config->Artpath[0] ? config->Artpath : NULL);
+ }
break;
case WM_CONTEXTMENU:
regdelete(NULL, _T("RelativePaths"));
regdelete(NULL, _T("DirectDraw_Secondary"));
regdelete(NULL, _T("ShownsupportedModes"));
+ regdelete(NULL, _T("ArtImageCount"));
+ regdelete(NULL, _T("ArtImageWidth"));
}
#include "zip.h"
CheckDlgButton (hDlg, IDC_AUTORESOLUTIONVGA, workprefs.gfx_autoresolution_vga);
}
-
bool isdouble = workprefs.gfx_vresolution > 0;
ew (hDlg, IDC_LM_NORMAL, !workprefs.gfx_autoresolution);
ew (hDlg, IDC_LM_IDOUBLED, !workprefs.gfx_autoresolution && isdouble);
ew (hDlg, IDC_LM_IDOUBLED2, !workprefs.gfx_autoresolution && isdouble);
ew (hDlg, IDC_LM_IDOUBLED3, !workprefs.gfx_autoresolution && isdouble);
+
+ hide(hDlg, IDC_DISPLAY_TEARING, TRUE);
+ //hide(hDlg, IDC_DISPLAY_TEARING, !(workprefs.gfx_api == 2 && (can_D3D11(false) & 2)));
}
static void enable_for_chipsetdlg (HWND hDlg)
SendDlgItemMessage(hDlg, IDC_DISPLAY_BUFFERCNT, CB_ADDSTRING, 0, (LPARAM)buffer);
SendDlgItemMessage (hDlg, IDC_DISPLAY_BUFFERCNT, CB_SETCURSEL, workprefs.gfx_apmode[0].gfx_backbuffers, 0);
+ CheckDlgButton(hDlg, IDC_DISPLAY_TEARING, workprefs.gfx_apmode[0].gfx_tearing);
+
init_da (hDlg);
}
workprefs.gfx_xcenter = ischecked (hDlg, IDC_XCENTER) ? 2 : 0; /* Smart centering */
workprefs.gfx_ycenter = ischecked (hDlg, IDC_YCENTER) ? 2 : 0; /* Smart centering */
+ workprefs.gfx_apmode[0].gfx_tearing = ischecked(hDlg, IDC_DISPLAY_TEARING);
+
LRESULT posn1 = SendDlgItemMessage (hDlg, IDC_AUTORESOLUTIONSELECT, CB_GETCURSEL, 0, 0);
if (posn1 != CB_ERR) {
if (posn1 == 0)
MapDialogRect (dhwnd, &dialog_rect);
hGUIWnd = dhwnd;
+ if (currentpage == LOADSAVE_ID) {
+ // update boxart
+ SendMessage(pages[LOADSAVE_ID], WM_USER + 1, 0, 0);
+ }
if (devicechangetimer < 0)
SetTimer(dhwnd, 4, 2000, NULL);
extern void move_box_art_window(void);
extern void close_box_art_window(void);
extern LRESULT CALLBACK BoxArtWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+extern int max_visible_boxart_images;
+extern int stored_boxart_window_width;
#endif
#include <gdiplus.h>
-#define MAX_BOX_ART_IMAGES 12
+#define MAX_BOX_ART_IMAGES 20
+#define MAX_BOX_ART_TYPES 4
+#define MAX_VISIBLE_IMAGES 2
static bool boxart_inited;
static ULONG_PTR gdiplusToken;
static HWND boxarthwnd;
static int boxart_window_width;
static int boxart_window_height;
-static const int box_art_width = 400;
-static const int hgap = 10;
-static const int wgap = 10;
+static const int hgap = 8;
+static const int wgap = 8;
static Gdiplus::Image *images[MAX_BOX_ART_IMAGES];
static int total_height;
static int max_width;
static int total_images;
static int imagemode;
static bool imagemodereset;
+static int lastimage;
+static TCHAR image_path[MAX_DPATH];
+static int image_coords[MAX_VISIBLE_IMAGES + 1];
+
+int max_visible_boxart_images = MAX_VISIBLE_IMAGES;
+int stored_boxart_window_width = 400;
static void boxart_init(void)
{
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
}
-static const TCHAR *boxartnames[MAX_BOX_ART_IMAGES + 1] = {
+static const TCHAR *boxartnames[MAX_BOX_ART_TYPES] = {
_T("Boxart"),
- _T("SShot"),
_T("Title"),
- _T("Misc1"),
- _T("Misc2"),
- _T("Misc3"),
- _T("Misc4"),
- _T("Misc5"),
- _T("Misc6"),
- _T("Misc7"),
- _T("Misc8"),
- _T("Misc9"),
- NULL
+ _T("SShot"),
+ _T("Misc"),
};
typedef HRESULT(CALLBACK* DWMGETWINDOWATTRIBUTE)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);
r->left = r1.right - ((r2.left - r1.left) + (r1.right - r2.right));
r->top = r1.top;
r->bottom = r1.bottom;
- r->right = r->left + box_art_width;
+ r->right = r->left + stored_boxart_window_width;
}
void move_box_art_window(void)
void close_box_art_window(void)
{
- for (int i = 0; boxartnames[i]; i++) {
+ for (int i = 0; i < MAX_BOX_ART_IMAGES; i++) {
if (images[i]) {
delete images[i];
images[i] = NULL;
_T("BoxArt"), _T("WinUAE"),
style,
r.left, r.top,
- box_art_width, r.bottom - r.top,
+ stored_boxart_window_width, r.bottom - r.top,
hGUIWnd, NULL, hInst, NULL);
if (boxarthwnd) {
RECT r;
static void boxartpaint(HDC hdc, HWND hwnd)
{
- if (!total_images)
- return;
+ int cnt;
+ RECT r;
+
+ r.left = 0;
+ r.top = 0;
+ r.right = boxart_window_width;
+ r.bottom = boxart_window_height;
+ FillRect(hdc, &r, (HBRUSH)(COLOR_BTNFACE + 1));
int image_count = total_images;
int image_total_height = total_height;
Gdiplus::Image *img = images[imagemode - 1];
image_count = 1;
image_total_height = img->GetHeight();
+ max_width = img->GetWidth();
img = NULL;
break;
}
scale = scaley;
Gdiplus::Graphics graphics(hdc);
+ Gdiplus::Pen pen(Gdiplus::Color(170, 170, 0, 0), 1);
+
int y = hgap;
+ cnt = 0;
+ for (int i = 0; i < MAX_BOX_ART_IMAGES; i++) {
+ if (!imagemode && cnt >= max_visible_boxart_images)
+ break;
+ if (images[i]) {
+ Gdiplus::Image *img = images[i];
+ int h = img->GetHeight();
+ y += h;
+ cnt++;
+ }
+ }
- Gdiplus::Pen pen(Gdiplus::Color(170, 170, 0, 0), 1);
+ y = hgap + (window_h - (int)(y * scale + 0.5)) / 2;
- for (int i = 0; boxartnames[i]; i++) {
+ cnt = 0;
+ for (int i = 0; i < MAX_BOX_ART_IMAGES; i++) {
if (imagemode && imagemode - 1 != i)
continue;
+ if (!imagemode && cnt >= max_visible_boxart_images)
+ break;
if (images[i]) {
Gdiplus::Image *img = images[i];
int w = img->GetWidth();
Gdiplus::Rect d(x1, y1, x2, y2);
graphics.DrawImage(img, d);
- Gdiplus::Rect d2(x1 - 1, y1 - 1, x2 + 2, y2 + 2);
+ Gdiplus::Rect d2(x1 - 1, y1 - 1, x2 + 1, y2 + 1);
graphics.DrawRectangle(&pen, d2);
+ image_coords[cnt] = y1 + y2 + hgap / 2;
+
y += h;
y += hgap;
+ cnt++;
}
}
}
{
TCHAR tmp1[MAX_DPATH];
- for (int i = 0; boxartnames[i]; i++) {
+ for (int i = 0; i < MAX_BOX_ART_IMAGES; i++) {
if (images[i]) {
delete images[i];
images[i] = NULL;
boxart_init();
boxart_inited = true;
}
-
if (isfullscreen() > 0 || !hGUIWnd) {
close_box_art_window();
return false;
}
-
if (!open_box_art_window())
return false;
+ if (path != image_path)
+ _tcscpy(image_path, path);
+
+ if (max_visible_boxart_images < 1 || max_visible_boxart_images > 3)
+ max_visible_boxart_images = 2;
+
total_height = 2 * hgap;
max_width = 0;
total_images = 0;
+ lastimage = 0;
write_log(_T("Box art path '%s'\n"), path);
- for (int i = 0; boxartnames[i]; i++) {
- Gdiplus::Image *image;
- _tcscpy(tmp1, path);
- _tcscat(tmp1, _T("___"));
- _tcscat(tmp1, boxartnames[i]);
- _tcscat(tmp1, _T(".png"));
-
- image = Gdiplus::Image::FromFile(tmp1);
- // above returns out of memory if file does not exist!
- if (image->GetLastStatus() != Gdiplus::Ok) {
- _tcscpy(tmp1 + _tcslen(tmp1) - 3, _T("jpg"));
+ int cnt = 0;
+ for (int arttype = 0; arttype < MAX_BOX_ART_TYPES; arttype++) {
+ for (int j = 0; j < 10; j++) {
+
+ if (total_images >= MAX_BOX_ART_IMAGES)
+ break;
+ images[cnt] = NULL;
+
+ Gdiplus::Image *image;
+ _tcscpy(tmp1, path);
+ _tcscat(tmp1, _T("___"));
+ _tcscat(tmp1, boxartnames[arttype]);
+ if (j > 0)
+ _stprintf(tmp1 + _tcslen(tmp1), _T("%d"), j + 1);
+ _tcscat(tmp1, _T(".png"));
+
image = Gdiplus::Image::FromFile(tmp1);
+ // above returns out of memory if file does not exist!
+ if (image->GetLastStatus() != Gdiplus::Ok) {
+ _tcscpy(tmp1 + _tcslen(tmp1) - 3, _T("jpg"));
+ image = Gdiplus::Image::FromFile(tmp1);
+ }
+ if (image->GetLastStatus() == Gdiplus::Ok) {
+ int w = image->GetWidth();
+ int h = image->GetHeight();
+ write_log(_T("Image '%s' loaded %d*%d\n"), tmp1, w, h);
+ images[cnt++] = image;
+ if (total_images < max_visible_boxart_images) {
+ if (w > max_width)
+ max_width = w;
+ total_height += h;
+ total_images++;
+ }
+ } else {
+ delete image;
+ break;
+ }
+ image = NULL;
}
- if (image->GetLastStatus() == Gdiplus::Ok) {
- int w = image->GetWidth();
- int h = image->GetHeight();
- write_log(_T("Image '%s' loaded %d*%d\n"), tmp1, w, h);
- images[i] = image;
- if (w > max_width)
- max_width = w;
- total_height += h;
- total_images++;
- } else {
- delete image;
- images[i] = NULL;
- }
- image = NULL;
}
+ images[cnt] = NULL;
- if (!total_images)
+ if (!total_images) {
+ close_box_art_window();
return false;
+ }
total_height += hgap * (total_images - 1);
+ InvalidateRect(boxarthwnd, NULL, TRUE);
ShowWindow(boxarthwnd, SW_SHOWNOACTIVATE);
return true;
}
+static void image_reload(int cnt)
+{
+ max_visible_boxart_images = cnt;
+ regsetint(NULL, _T("ArtImageCount"), max_visible_boxart_images);
+ show_box_art(image_path);
+}
+
LRESULT CALLBACK BoxArtWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
+ int oldmode = imagemode;
switch (message)
{
case WM_LBUTTONDOWN:
- imagemode++;
- imagemodereset = false;
- InvalidateRect(hWnd, NULL, TRUE);
+ if (imagemode) {
+ lastimage = imagemode - 1;
+ imagemode = 0;
+ } else {
+ int y = (short)(lParam >> 16);
+ imagemode = 0;
+ for (int i = 1; i < max_visible_boxart_images; i++) {
+ if (y >= image_coords[i - 1])
+ imagemode = i;
+ }
+ while (imagemode > 0) {
+ if (images[imagemode])
+ break;
+ imagemode--;
+ }
+ imagemode++;
+ }
+ lastimage = imagemode - 1;
+ imagemodereset = true;
+ if (oldmode != imagemode)
+ InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_RBUTTONDOWN:
- imagemode = imagemode ? 0 : 1;
+ if (imagemode) {
+ imagemode++;
+ lastimage = imagemode - 1;
+ } else {
+ imagemode = lastimage + 1;
+ if (imagemode <= 0)
+ imagemode = 1;
+ }
imagemodereset = false;
- InvalidateRect(hWnd, NULL, TRUE);
+ if (oldmode != imagemode)
+ InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_PAINT:
{
close_box_art_window();
return 0;
case WM_CHAR:
- if (wParam == 27)
+ switch (wParam)
+ {
+ case 27:
DestroyWindow(hWnd);
- if (wParam == ' ') {
+ break;
+ case ' ':
imagemode++;
imagemodereset = true;
InvalidateRect(hWnd, NULL, TRUE);
+ break;
+ case '1':
+ image_reload(1);
+ break;
+ case '2':
+ image_reload(2);
+ break;
+ case '3':
+ image_reload(3);
+ break;
}
break;
+ case WM_EXITSIZEMOVE:
+ regsetint(NULL, _T("ArtImageWidth"), stored_boxart_window_width);
+ image_reload(max_visible_boxart_images);
+ break;
case WM_SIZING:
+ {
+ RECT *r = (RECT*)lParam, r2;
+ getpos(&r2);
+ r->left = r2.left;
+ r->top = r2.top;
+ r->bottom = r2.bottom;
+ boxart_window_width = stored_boxart_window_width = r->right - r->left;
+ }
+ return FALSE;
case WM_MOVING:
{
RECT *r = (RECT*)lParam, r2;
<ProjectGuid>{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}</ProjectGuid>
<RootNamespace>winuae</RootNamespace>
<TargetPlatformVersion>8.1</TargetPlatformVersion>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
+ <PlatformToolset>v141_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
- RTG VRAM is outside of reserved natmem space. Workaround: Move RTG in earlier position using Hardware info GUI panel.\r
Note that in 64-bit version RTG VRAM must be inside of reserved natmem space. (Outside = error message and return back to GUI)\r
\r
+Beta 11:\r
+\r
+- Updated to MSVC 2017 15.5\r
+- Config file Description field caching broke in b9.\r
+- Ignore WM_DEVICECHANGE messages during first 2 seconds when WinUAE GUI opens for the first time. Some systems seem to send spurious WM_DEVICECHANGE at program startup.\r
+- Simple box art/screenshot config file support. (See http://eab.abime.net/showthread.php?t=89014 for details.)\r
+- Direct3D11 mode OSD/RTG HW cursor support. All basic features are now implemented. Improved vsync and custom shaders to do.\r
+- D3D11 is now the default (=config file does not override it) if Windows 7 or newer.\r
+- Entering and exiting GUI in D3D11 fullscreen mode restored wrong texture size.\r
+- If Wait for Blitter is enabled and blit size makes no sense (larger than chip ram size), don't wait. (Fixes long delay in Vital / Mystic)\r
\r
Beta 10:\r
\r