# Resolved conflicts:
#	src/gui/sdlmain.cpp
This commit is contained in:
Alex/AT 2018-06-28 21:06:13 +03:00
commit 06dd860abf
7 changed files with 246 additions and 52 deletions

View File

@ -1,8 +1,11 @@
TODO add version TODO add version
- Improved shell: - INT 10h AH=10h now ignores AL=3 in PCjr mode.
- Fixed keyboard handler bug in PCjr mode that caused some CPU
register corruption and general crashiness in games.
- Improved shell: (Aybe, Joncampbell123)
- Ctrl+Left and Ctrl+Right permits word-navigation. - Ctrl+Left and Ctrl+Right permits word-navigation.
- Added emulation of 'Ins' key behavior. - Added emulation of 'Ins' key behavior.
- Num Lock stays on at startup and is synchronized with host - Num Lock stays on at startup and is synchronized with host (Aybe)
when DOSBox-X window gains focus (Windows). (Aybe) when DOSBox-X window gains focus (Windows). (Aybe)
- Added visual feedback to Hat/D-pad buttons in mapper. (Aybe) - Added visual feedback to Hat/D-pad buttons in mapper. (Aybe)
- Added documentation for 'dir' command sorting switches. (Aybe) - Added documentation for 'dir' command sorting switches. (Aybe)
@ -12,6 +15,15 @@ TODO add version
- Axes can be remapped for devices with questionable layout. - Axes can be remapped for devices with questionable layout.
- User-settable deadzones for joystick bindings in mapper, - User-settable deadzones for joystick bindings in mapper,
mappings like WSAD keys to axes is less frustrating. mappings like WSAD keys to axes is less frustrating.
- Improve mouse support:
- Added pointer integration behavior for DOS applications.
- Auto-lock is now disabled by default, this results in
pointer integration becoming the default behavior.
- Added feedback for auto-lock state, can be visual or auditive.
- When the mouse is not locked, its position is exactly where
the mouse is reported by the system. This results in a more
consistent experience between DOSBox-X and host OS,
e.g. High DPI mouse don't become suddenly slow in DOSBox-X.
0.82.7 0.82.7
- Mac OS X builds now honor showmenu=false by leaving the - Mac OS X builds now honor showmenu=false by leaving the

View File

@ -90,6 +90,7 @@ sst=false
# output: What video system to use for output. # output: What video system to use for output.
# Possible values: surface, overlay, opengl, openglnb, openglhq, ddraw. # Possible values: surface, overlay, opengl, openglnb, openglhq, ddraw.
# autolock: Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock) # autolock: Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock)
# synced: Mouse position reported will be exactly where user hand has moved to.
# sensitivity: Mouse sensitivity. # sensitivity: Mouse sensitivity.
# waitonerror: Wait before closing the console if dosbox has an error. # waitonerror: Wait before closing the console if dosbox has an error.
# priority: Priority levels for dosbox. Second entry behind the comma is for when dosbox is not focused/minimized. # priority: Priority levels for dosbox. Second entry behind the comma is for when dosbox is not focused/minimized.
@ -106,6 +107,7 @@ fullresolution=desktop
windowresolution=original windowresolution=original
output=surface output=surface
autolock=true autolock=true
synced=false
sensitivity=100 sensitivity=100
waitonerror=true waitonerror=true
priority=higher,normal priority=higher,normal
@ -386,6 +388,8 @@ showmenu=true
# try setting this option. Else, leave it turned off. Changes to other VGA CRTC registers will trigger # try setting this option. Else, leave it turned off. Changes to other VGA CRTC registers will trigger
# a DOSBox mode change as normal regardless of this setting. # a DOSBox mode change as normal regardless of this setting.
# enable pci bus: Enable PCI bus emulation # enable pci bus: Enable PCI bus emulation
# vga palette update on full load: If set, all three bytes of the palette entry must be loaded before taking the color,
# which is fairly typical SVGA behavior. If not set, partial changes are allowed.
# ignore odd-even mode in non-cga modes: Some demoscene productions use VGA Mode X but accidentally enable odd/even mode. # ignore odd-even mode in non-cga modes: Some demoscene productions use VGA Mode X but accidentally enable odd/even mode.
# Setting this option can correct for that and render the demo properly. # Setting this option can correct for that and render the demo properly.
# This option forces VGA emulation to ignore odd/even mode except in text and CGA modes. # This option forces VGA emulation to ignore odd/even mode except in text and CGA modes.
@ -489,6 +493,7 @@ ignore vblank wraparound=false
enable vga resize delay=false enable vga resize delay=false
resize only on vga active display width increase=false resize only on vga active display width increase=false
enable pci bus=true enable pci bus=true
vga palette update on full load=true
ignore odd-even mode in non-cga modes=false ignore odd-even mode in non-cga modes=false
[render] [render]

View File

@ -1,3 +1,3 @@
/*auto-generated*/ /*auto-generated*/
#define UPDATED_STR "Jun 23, 2018 8:13:20am" #define UPDATED_STR "Jun 27, 2018 11:42:01am"
#define COPYRIGHT_END_YEAR "2018" #define COPYRIGHT_END_YEAR "2018"

View File

@ -106,6 +106,14 @@ void GFX_OpenGLRedrawScreen(void);
#include "keymap.h" #include "keymap.h"
#include "control.h" #include "control.h"
#ifdef _MSC_VER
# define MIN(a,b) ((a) < (b) ? (a) : (b))
# define MAX(a,b) ((a) > (b) ? (a) : (b))
#else
# define MIN(a,b) std::min(a,b)
# define MAX(a,b) std::max(a,b)
#endif
#if C_XBRZ #if C_XBRZ
#include <xBRZ/xbrz.h> #include <xBRZ/xbrz.h>
#include <xBRZ/xbrz_tools.h> #include <xBRZ/xbrz_tools.h>
@ -474,6 +482,13 @@ CDirect3D* d3d = NULL;
# include <os2.h> # include <os2.h>
#endif #endif
enum AUTOLOCK_FEEDBACK
{
AUTOLOCK_FEEDBACK_NONE,
AUTOLOCK_FEEDBACK_BEEP,
AUTOLOCK_FEEDBACK_FLASH
};
// do not specify any defaults inside, it is zeroed at start of main() // do not specify any defaults inside, it is zeroed at start of main()
struct SDL_Block { struct SDL_Block {
bool inited; bool inited;
@ -553,8 +568,8 @@ struct SDL_Block {
SDL_cond *cond; SDL_cond *cond;
struct { struct {
bool autolock; bool autolock;
AUTOLOCK_FEEDBACK autolock_feedback;
bool autoenable; bool autoenable;
bool synced;
bool requestlock; bool requestlock;
bool locked; bool locked;
Bitu sensitivity; Bitu sensitivity;
@ -2898,9 +2913,62 @@ void GFX_UpdateSDLCaptureState(void) {
GFX_SetTitle(-1,-1,-1,false); GFX_SetTitle(-1,-1,-1,false);
} }
#if WIN32
void CaptureMouseNotifyWin32()
{
const auto lck = sdl.mouse.locked;
switch (sdl.mouse.autolock_feedback)
{
case AUTOLOCK_FEEDBACK_NONE: break;
case AUTOLOCK_FEEDBACK_BEEP:
{
const auto lo = 1000;
const auto hi = 2000;
const auto t1 = 50;
const auto t2 = 25;
const auto f1 = lck ? hi : lo;
const auto f2 = lck ? lo : hi;
const auto tt = lck ? t1 : t2;
Beep(f1, tt);
Beep(f2, tt);
}
break;
case AUTOLOCK_FEEDBACK_FLASH:
{
const auto cnt = lck ? 4 : 2;
const auto tim = lck ? 80 : 40;
const auto wnd = GetHWND();
if (wnd != nullptr)
{
FLASHWINFO fi;
fi.cbSize = sizeof(FLASHWINFO);
fi.hwnd = wnd;
fi.dwFlags = FLASHW_CAPTION;
fi.uCount = cnt;
fi.dwTimeout = tim;
FlashWindowEx(&fi);
}
break;
}
default: ;
}
}
#endif
void CaptureMouseNotify()
{
#if WIN32
CaptureMouseNotifyWin32();
#else
// TODO
#endif
}
static void CaptureMouse(bool pressed) { static void CaptureMouse(bool pressed) {
if (!pressed) if (!pressed)
return; return;
CaptureMouseNotify();
GFX_CaptureMouse(); GFX_CaptureMouse();
} }
@ -4100,9 +4168,17 @@ static void GUI_StartUp() {
sdl.desktop.full.height=width; sdl.desktop.full.height=width;
} }
sdl.mouse.autoenable=section->Get_bool("autolock"); sdl.mouse.autoenable=section->Get_bool("autolock");
sdl.mouse.synced=section->Get_bool("synced");
if (!sdl.mouse.autoenable) SDL_ShowCursor(SDL_DISABLE); if (!sdl.mouse.autoenable) SDL_ShowCursor(SDL_DISABLE);
sdl.mouse.autolock=false; sdl.mouse.autolock=false;
const std::string feedback = section->Get_string("autolock_feedback");
if (feedback == "none")
sdl.mouse.autolock_feedback = AUTOLOCK_FEEDBACK_NONE;
else if (feedback == "beep")
sdl.mouse.autolock_feedback = AUTOLOCK_FEEDBACK_BEEP;
else if (feedback == "flash")
sdl.mouse.autolock_feedback = AUTOLOCK_FEEDBACK_FLASH;
sdl.mouse.sensitivity=(unsigned int)section->Get_int("sensitivity"); sdl.mouse.sensitivity=(unsigned int)section->Get_int("sensitivity");
std::string output=section->Get_string("output"); std::string output=section->Get_string("output");
@ -4624,35 +4700,38 @@ static void HandleMouseMotion(SDL_MouseMotionEvent * motion) {
} }
} }
#endif #endif
user_cursor_x = motion->x - sdl.clip.x; user_cursor_x = motion->x - sdl.clip.x;
user_cursor_y = motion->y - sdl.clip.y; user_cursor_y = motion->y - sdl.clip.y;
user_cursor_locked = sdl.mouse.locked; user_cursor_locked = sdl.mouse.locked;
user_cursor_synced = sdl.mouse.synced; user_cursor_synced = !user_cursor_locked;
user_cursor_sw = sdl.clip.w; user_cursor_sw = sdl.clip.w;
user_cursor_sh = sdl.clip.h; user_cursor_sh = sdl.clip.h;
if (sdl.mouse.locked || !sdl.mouse.autoenable) auto xrel = static_cast<float>(motion->xrel) * sdl.mouse.sensitivity / 100.0f;
Mouse_CursorMoved((float)motion->xrel*sdl.mouse.sensitivity/100.0f, auto yrel = static_cast<float>(motion->yrel) * sdl.mouse.sensitivity / 100.0f;
(float)motion->yrel*sdl.mouse.sensitivity/100.0f, auto x = static_cast<float>(motion->x - sdl.clip.x) / (sdl.clip.w - 1) * sdl.mouse.sensitivity / 100.0f;
(float)(motion->x-sdl.clip.x)/(sdl.clip.w-1)*sdl.mouse.sensitivity/100.0f, auto y = static_cast<float>(motion->y - sdl.clip.y) / (sdl.clip.h - 1) * sdl.mouse.sensitivity / 100.0f;
(float)(motion->y-sdl.clip.y)/(sdl.clip.h-1)*sdl.mouse.sensitivity/100.0f, auto emu = sdl.mouse.locked;
sdl.mouse.locked);
else if (mouse_notify_mode != 0) { /* for mouse integration driver */
Mouse_CursorMoved(0,0,0,0,sdl.mouse.locked);
if (motion->x >= sdl.clip.x && motion->y >= sdl.clip.y &&
motion->x < (sdl.clip.x+sdl.clip.w) && motion->y < (sdl.clip.y+sdl.clip.h))
SDL_ShowCursor(SDL_DISABLE); /* TODO: If guest has not read mouse cursor position within 250ms show cursor again */
else if (Mouse_GetButtonState() != 0)
SDL_ShowCursor(SDL_DISABLE); /* TODO: If guest has not read mouse cursor position within 250ms show cursor again */
else
SDL_ShowCursor(SDL_ENABLE);
}
else {
SDL_ShowCursor(SDL_ENABLE);
}
if (sdl.mouse.synced) if (mouse_notify_mode != 0)
SDL_ShowCursor(SDL_ENABLE); // TODO remove {
/* for mouse integration driver */
xrel = yrel = x = y = 0.0f;
emu = sdl.mouse.locked;
const auto isdown = Mouse_GetButtonState() != 0;
const auto inside =
motion->x >= sdl.clip.x && motion->x < sdl.clip.x + sdl.clip.w &&
motion->y >= sdl.clip.y && motion->y < sdl.clip.y + sdl.clip.h;
SDL_ShowCursor(isdown || inside ? SDL_DISABLE : SDL_ENABLE);
/* TODO: If guest has not read mouse cursor position within 250ms show cursor again */
}
bool MOUSE_IsHidden();
if (!user_cursor_locked)
{
/* Show only when DOS app is not using mouse */
SDL_ShowCursor(MOUSE_IsHidden() ? SDL_ENABLE : SDL_DISABLE);
}
Mouse_CursorMoved(xrel, yrel, x, y, emu);
} }
#if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW /* SDL drawn menus */ #if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW /* SDL drawn menus */
@ -5185,6 +5264,7 @@ static void HandleMouseButton(SDL_MouseButtonEvent * button) {
case SDL_PRESSED: case SDL_PRESSED:
if (inMenu) return; if (inMenu) return;
if (sdl.mouse.requestlock && !sdl.mouse.locked && mouse_notify_mode == 0) { if (sdl.mouse.requestlock && !sdl.mouse.locked && mouse_notify_mode == 0) {
CaptureMouseNotify();
GFX_CaptureMouse(); GFX_CaptureMouse();
// Dont pass klick to mouse handler // Dont pass klick to mouse handler
break; break;
@ -5834,6 +5914,89 @@ static void HandleTouchscreenFinger(SDL_TouchFingerEvent * finger) {
void MSG_WM_COMMAND_handle(SDL_SysWMmsg &Message); void MSG_WM_COMMAND_handle(SDL_SysWMmsg &Message);
#endif #endif
struct mouse_pos
{
long x = 0;
long y = 0;
} mouse_pos;
bool mouse_inside = false;
void GFX_EventsMouseProcess(const long x, const long y, const long rx, const long ry)
{
const auto x1 = sdl.clip.x;
const auto x2 = x1 + sdl.clip.w - 1;
const auto y1 = sdl.clip.y;
const auto y2 = y1 + sdl.clip.h - 1;
const auto in = x >= x1 && x <= x2 && y >= y1 && y <= y2;
if (mouse_inside && !in)
{
const auto x3 = max((int)x1, min((int)x2, (int)x));
const auto y3 = max((int)y1, min((int)y2, (int)y));
SDL_Event evt;
evt.type = SDL_MOUSEMOTION;
evt.motion.state = 0;
evt.motion.which = 0;
evt.motion.x = x3;
evt.motion.y = y3;
evt.motion.xrel = rx;
evt.motion.yrel = ry;
SDL_PushEvent(&evt);
}
mouse_inside = in;
}
#if defined(WIN32)
void GFX_EventsMouseWin32()
{
/* Compute relative mouse movement */
POINT point;
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
if (!SDL_GetWMInfo(&wmi))
return;
if (!GetCursorPos(&point))
return;
if (!ScreenToClient(wmi.child_window, &point))
return;
const auto x = point.x;
const auto y = point.y;
const auto rx = x - mouse_pos.x;
const auto ry = y - mouse_pos.y;
mouse_pos.x = x;
mouse_pos.y = y;
/* Let the method do the heavy uplifting */
GFX_EventsMouseProcess(x, y, rx, ry);
}
#endif
/**
* \brief Processes mouse movements when outside the window.
*
* This method will send an extra mouse event to the SDL pump
* when some relative movement has occurred.
*/
void GFX_EventsMouse()
{
if (sdl.desktop.fullscreen || sdl.mouse.locked)
return;
#if WIN32
GFX_EventsMouseWin32();
#else
// TODO
#endif
}
void GFX_Events() { void GFX_Events() {
CheckMapperKeyboardLayout(); CheckMapperKeyboardLayout();
#if defined(C_SDL2) /* SDL 2.x---------------------------------- */ #if defined(C_SDL2) /* SDL 2.x---------------------------------- */
@ -5996,6 +6159,9 @@ void GFX_Events() {
} }
} }
#endif #endif
GFX_EventsMouse();
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
switch (event.type) { switch (event.type) {
#ifdef __WIN32__ #ifdef __WIN32__
@ -6056,7 +6222,11 @@ void GFX_Events() {
CPU_Disable_SkipAutoAdjust(); CPU_Disable_SkipAutoAdjust();
BIOS_SynchronizeNumLock(); BIOS_SynchronizeNumLock();
} else { } else {
if (sdl.mouse.locked) GFX_CaptureMouse(); if (sdl.mouse.locked)
{
CaptureMouseNotify();
GFX_CaptureMouse();
}
#if defined(WIN32) #if defined(WIN32)
if (sdl.desktop.fullscreen) if (sdl.desktop.fullscreen)
@ -6504,11 +6674,13 @@ void SDL_SetupConfigSection() {
Pstring->Set_help("What video system to use for output."); Pstring->Set_help("What video system to use for output.");
Pstring->Set_values(outputs); Pstring->Set_values(outputs);
Pbool = sdl_sec->Add_bool("autolock",Property::Changeable::Always,true); Pbool = sdl_sec->Add_bool("autolock",Property::Changeable::Always, false);
Pbool->Set_help("Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock)"); Pbool->Set_help("Mouse will automatically lock, if you click on the screen. (Press CTRL-F10 to unlock)");
Pbool = sdl_sec->Add_bool("synced",Property::Changeable::Always,false); const char* feeds[] = { "none", "beep", "flash", nullptr};
Pbool->Set_help("Mouse position reported will be exactly where user hand has moved to."); Pstring = sdl_sec->Add_string("autolock_feedback", Property::Changeable::Always, feeds[1]);
Pstring->Set_help("Autolock status feedback type, i.e. visual, auditive, none.");
Pstring->Set_values(feeds);
Pint = sdl_sec->Add_int("sensitivity",Property::Changeable::Always,100); Pint = sdl_sec->Add_int("sensitivity",Property::Changeable::Always,100);
Pint->SetMinMax(1,1000); Pint->SetMinMax(1,1000);

View File

@ -131,6 +131,7 @@ Bitu INT10_Handler(void) {
case 0x10: /* Palette functions */ case 0x10: /* Palette functions */
if (!IS_EGAVGA_ARCH && (reg_al>0x02)) break; if (!IS_EGAVGA_ARCH && (reg_al>0x02)) break;
else if (!IS_VGA_ARCH && (reg_al>0x03)) break; else if (!IS_VGA_ARCH && (reg_al>0x03)) break;
else if (machine==MCH_PCJR && (reg_al>0x02)) break; /* "Looking at the PCjr tech ref page A-61, ... the BIOS listing stops at subfunction 2." */
switch (reg_al) { switch (reg_al) {
case 0x00: /* SET SINGLE PALETTE REGISTER */ case 0x00: /* SET SINGLE PALETTE REGISTER */
INT10_SetSinglePaletteRegister(reg_bl,reg_bh); INT10_SetSinglePaletteRegister(reg_bl,reg_bh);

View File

@ -1389,3 +1389,7 @@ void MOUSE_Init() {
AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(MOUSE_OnReset)); AddVMEventFunction(VM_EVENT_RESET,AddVMEventFunctionFuncPair(MOUSE_OnReset));
} }
bool MOUSE_IsHidden()
{
return static_cast<bool>(mouse.hidden);
}

View File

@ -120,57 +120,57 @@
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug SDL2|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug SDL2|Win32'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug SDL2|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug SDL2|x64'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release SDL2|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release SDL2|Win32'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;</LibraryPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release SDL2|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release SDL2|x64'">
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir> <IntDir>$(SolutionDir)..\obj\$(ProjectName)\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<IncludePath>$(IncludePath);%DXSDK_DIR%\Include;</IncludePath> <IncludePath>$(IncludePath);$(DXSDK_DIR)Include;</IncludePath>
<LibraryPath>$(LibraryPath);%DXSDK_DIR%\Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath> <LibraryPath>$(LibraryPath);$(DXSDK_DIR)Lib;$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</LibraryPath>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
@ -1126,4 +1126,4 @@ copy "$(SolutionDir)\..\CHANGELOG" "$(OutputPath)\changelog.txt"</Command>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>