This commit is contained in:
Christoph Oelckers 2016-09-14 21:05:45 +02:00
commit d128e28044
11 changed files with 87 additions and 72 deletions

View file

@ -14,6 +14,11 @@ list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} )
include( CreateLaunchers ) include( CreateLaunchers )
include( FindPackageHandleStandardArgs ) include( FindPackageHandleStandardArgs )
# Produce a warning if XP support will be missing.
if( MSVC14 AND NOT CMAKE_GENERATOR_TOOLSET STREQUAL "v140_xp" )
message( WARNING "This project supports Windows XP (including XP x64), but you must set the optional toolset to v140_xp manually to have it in your build! Use -T \"v140_xp\" from the command prompt." )
endif()
# Support cross compiling # Support cross compiling
option( FORCE_CROSSCOMPILE "Turn on cross compiling." NO ) option( FORCE_CROSSCOMPILE "Turn on cross compiling." NO )
if( FORCE_CROSSCOMPILE ) if( FORCE_CROSSCOMPILE )

View file

@ -115,59 +115,49 @@ if( WIN32 )
set( FMOD_LIB_PATH_SUFFIXES PATH_SUFFIXES lib ) set( FMOD_LIB_PATH_SUFFIXES PATH_SUFFIXES lib )
set( NASM_NAMES nasmw nasm ) set( NASM_NAMES nasmw nasm )
if( NOT MSVC ) find_path( D3D_INCLUDE_DIR d3d9.h
find_path( D3D_INCLUDE_DIR d3d9.h PATHS ENV DXSDK_DIR
PATHS ENV DXSDK_DIR PATH_SUFFIXES Include )
PATH_SUFFIXES Include ) if( NOT D3D_INCLUDE_DIR )
if( NOT D3D_INCLUDE_DIR ) message( SEND_ERROR "Could not find DirectX 9 header files" )
message( SEND_ERROR "Could not find DirectX 9 header files" )
else()
include_directories( ${D3D_INCLUDE_DIR} )
endif()
find_path( XINPUT_INCLUDE_DIR xinput.h
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Include )
if( NOT XINPUT_INCLUDE_DIR )
message( WARNING "Could not find xinput.h. XInput will be disabled." )
add_definitions( -DNO_XINPUT )
else()
include_directories( ${XINPUT_INCLUDE_DIR} )
endif()
find_library( DX_dxguid_LIBRARY dxguid
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Lib Lib/${XBITS} )
find_library( DX_dinput8_LIBRARY dinput8
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Lib Lib/${XBITS} )
set( DX_LIBS_FOUND YES )
if( NOT DX_dxguid_LIBRARY )
set( DX_LIBS_FOUND NO )
endif()
if( NOT DX_dinput8_LIBRARY )
set( DX_LIBS_FOUND NO )
endif()
if( NOT DX_LIBS_FOUND )
message( FATAL_ERROR "Could not find DirectX 9 libraries" )
endif()
set( DX_LIBS
"${DX_dxguid_LIBRARY}"
"${DX_dinput8_LIBRARY}"
)
else() else()
set( DX_LIBS include_directories( ${D3D_INCLUDE_DIR} )
dxguid
dinput8
)
endif() endif()
set( ZDOOM_LIBS ${DX_LIBS} find_path( XINPUT_INCLUDE_DIR xinput.h
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Include )
if( NOT XINPUT_INCLUDE_DIR )
message( WARNING "Could not find xinput.h. XInput will be disabled." )
add_definitions( -DNO_XINPUT )
else()
include_directories( ${XINPUT_INCLUDE_DIR} )
endif()
find_library( DX_dxguid_LIBRARY dxguid
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Lib Lib/${XBITS} )
find_library( DX_dinput8_LIBRARY dinput8
PATHS ENV DXSDK_DIR
PATH_SUFFIXES Lib Lib/${XBITS} )
set( DX_LIBS_FOUND YES )
if( NOT DX_dxguid_LIBRARY )
set( DX_LIBS_FOUND NO )
endif()
if( NOT DX_dinput8_LIBRARY )
set( DX_LIBS_FOUND NO )
endif()
if( NOT DX_LIBS_FOUND )
message( FATAL_ERROR "Could not find DirectX 9 libraries" )
endif()
set( ZDOOM_LIBS
wsock32 wsock32
winmm winmm
"${DX_dxguid_LIBRARY}"
"${DX_dinput8_LIBRARY}"
ole32 ole32
user32 user32
gdi32 gdi32

View file

@ -291,10 +291,9 @@ int DEarthquake::StaticGetQuakeIntensities(AActor *victim, FQuakeJiggers &jigger
if (!(quake->m_Flags & QF_WAVE)) if (!(quake->m_Flags & QF_WAVE))
{ {
jiggers.Falloff = MAX(falloff, jiggers.Falloff); jiggers.RollIntensity = MAX(r, jiggers.RollIntensity) * falloff;
jiggers.RollIntensity = MAX(r, jiggers.RollIntensity) * jiggers.Falloff;
intensity *= jiggers.Falloff; intensity *= falloff;
if (quake->m_Flags & QF_RELATIVE) if (quake->m_Flags & QF_RELATIVE)
{ {
jiggers.RelIntensity.X = MAX(intensity.X, jiggers.RelIntensity.X); jiggers.RelIntensity.X = MAX(intensity.X, jiggers.RelIntensity.X);
@ -310,14 +309,13 @@ int DEarthquake::StaticGetQuakeIntensities(AActor *victim, FQuakeJiggers &jigger
} }
else else
{ {
jiggers.Falloff = MAX(falloff, jiggers.Falloff); jiggers.RollWave = r * quake->GetModWave(quake->m_RollWave) * falloff * strength;
jiggers.RollWave = r * quake->GetModWave(quake->m_RollWave) * jiggers.Falloff * strength;
intensity.X *= quake->GetModWave(quake->m_WaveSpeed.X); intensity.X *= quake->GetModWave(quake->m_WaveSpeed.X);
intensity.Y *= quake->GetModWave(quake->m_WaveSpeed.Y); intensity.Y *= quake->GetModWave(quake->m_WaveSpeed.Y);
intensity.Z *= quake->GetModWave(quake->m_WaveSpeed.Z); intensity.Z *= quake->GetModWave(quake->m_WaveSpeed.Z);
intensity *= strength * jiggers.Falloff; intensity *= strength * falloff;
// [RH] This only gives effect to the last sine quake. I would // [RH] This only gives effect to the last sine quake. I would
// prefer if some way was found to make multiples coexist // prefer if some way was found to make multiples coexist

View file

@ -153,7 +153,6 @@ struct FQuakeJiggers
DVector3 RelIntensity; DVector3 RelIntensity;
DVector3 Offset; DVector3 Offset;
DVector3 RelOffset; DVector3 RelOffset;
double Falloff;
double RollIntensity, RollWave; double RollIntensity, RollWave;
}; };

View file

@ -300,7 +300,7 @@ void DBaseStatusBar::SetScaled (bool scale, bool force)
ST_X = 0; ST_X = 0;
ST_Y = VirticalResolution - RelTop; ST_Y = VirticalResolution - RelTop;
float aspect = ActiveRatio(SCREENWIDTH, SCREENHEIGHT); float aspect = ActiveRatio(SCREENWIDTH, SCREENHEIGHT);
if (aspect >= 1.3f) if (!AspectTallerThanWide(aspect))
{ // Normal resolution { // Normal resolution
::ST_Y = Scale (ST_Y, SCREENHEIGHT, VirticalResolution); ::ST_Y = Scale (ST_Y, SCREENHEIGHT, VirticalResolution);
} }

View file

@ -318,7 +318,7 @@ void R_SWRSetWindow(int windowSize, int fullWidth, int fullHeight, int stHeight,
virtwidth = virtwidth2 = fullWidth; virtwidth = virtwidth2 = fullWidth;
virtheight = virtheight2 = fullHeight; virtheight = virtheight2 = fullHeight;
if (trueratio < 1.3f) if (AspectTallerThanWide(trueratio))
{ {
virtheight2 = virtheight2 * AspectMultiplier(trueratio) / 48; virtheight2 = virtheight2 * AspectMultiplier(trueratio) / 48;
} }
@ -327,7 +327,7 @@ void R_SWRSetWindow(int windowSize, int fullWidth, int fullHeight, int stHeight,
virtwidth2 = virtwidth2 * AspectMultiplier(trueratio) / 48; virtwidth2 = virtwidth2 * AspectMultiplier(trueratio) / 48;
} }
if (WidescreenRatio < 1.3f) if (AspectTallerThanWide(WidescreenRatio))
{ {
virtheight = virtheight * AspectMultiplier(WidescreenRatio) / 48; virtheight = virtheight * AspectMultiplier(WidescreenRatio) / 48;
} }
@ -948,7 +948,7 @@ void R_RenderViewToCanvas (AActor *actor, DCanvas *canvas,
RenderTarget = canvas; RenderTarget = canvas;
bRenderingToCanvas = true; bRenderingToCanvas = true;
R_SetWindow (12, width, height, height); R_SetWindow (12, width, height, height, true);
viewwindowx = x; viewwindowx = x;
viewwindowy = y; viewwindowy = y;
viewactive = true; viewactive = true;

View file

@ -198,7 +198,7 @@ void R_SetViewSize (int blocks)
// //
//========================================================================== //==========================================================================
void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight) void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight, bool renderingToCanvas)
{ {
float trueratio; float trueratio;
@ -220,7 +220,15 @@ void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight)
freelookviewheight = ((setblocks*fullHeight)/10)&~7; freelookviewheight = ((setblocks*fullHeight)/10)&~7;
} }
WidescreenRatio = ActiveRatio (fullWidth, fullHeight, &trueratio); if (renderingToCanvas)
{
WidescreenRatio = fullWidth / (float)fullHeight;
trueratio = WidescreenRatio;
}
else
{
WidescreenRatio = ActiveRatio(fullWidth, fullHeight, &trueratio);
}
DrawFSHUD = (windowSize == 11); DrawFSHUD = (windowSize == 11);
@ -229,7 +237,7 @@ void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight)
centery = viewheight/2; centery = viewheight/2;
centerx = viewwidth/2; centerx = viewwidth/2;
if (WidescreenRatio < 1.3f) if (AspectTallerThanWide(WidescreenRatio))
{ {
centerxwide = centerx; centerxwide = centerx;
} }

View file

@ -95,7 +95,7 @@ void R_ExecuteSetViewSize (void);
// Called by M_Responder. // Called by M_Responder.
void R_SetViewSize (int blocks); void R_SetViewSize (int blocks);
void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight); void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight, bool renderingToCanvas = false);
extern void R_FreePastViewers (); extern void R_FreePastViewers ();

View file

@ -874,7 +874,7 @@ void DCanvas::VirtualToRealCoords(double &x, double &y, double &w, double &h,
double right = x + w; double right = x + w;
double bottom = y + h; double bottom = y + h;
if (myratio > 1.4f) if (myratio > 1.334f)
{ // The target surface is either 16:9 or 16:10, so expand the { // The target surface is either 16:9 or 16:10, so expand the
// specified virtual size to avoid undesired stretching of the // specified virtual size to avoid undesired stretching of the
// image. Does not handle non-4:3 virtual sizes. I'll worry about // image. Does not handle non-4:3 virtual sizes. I'll worry about
@ -887,7 +887,7 @@ void DCanvas::VirtualToRealCoords(double &x, double &y, double &w, double &h,
x = x * Width / vwidth; x = x * Width / vwidth;
w = right * Width / vwidth - x; w = right * Width / vwidth - x;
} }
if (myratio < 1.3f) if (AspectTallerThanWide(myratio))
{ // The target surface is 5:4 { // The target surface is 5:4
y = (y - vheight * 0.5) * Height * 600 / (vheight * AspectBaseHeight(myratio)) + Height * 0.5; y = (y - vheight * 0.5) * Height * 600 / (vheight * AspectBaseHeight(myratio)) + Height * 0.5;
h = (bottom - vheight * 0.5) * Height * 600 / (vheight * AspectBaseHeight(myratio)) + Height * 0.5 - y; h = (bottom - vheight * 0.5) * Height * 600 / (vheight * AspectBaseHeight(myratio)) + Height * 0.5 - y;
@ -950,7 +950,7 @@ void DCanvas::FillBorder (FTexture *img)
return; return;
} }
int bordtop, bordbottom, bordleft, bordright, bord; int bordtop, bordbottom, bordleft, bordright, bord;
if (myratio < 1.3f) if (AspectTallerThanWide(myratio))
{ // Screen is taller than it is wide { // Screen is taller than it is wide
bordleft = bordright = 0; bordleft = bordright = 0;
bord = Height - Height * AspectMultiplier(myratio) / 48; bord = Height - Height * AspectMultiplier(myratio) / 48;

View file

@ -1362,7 +1362,7 @@ void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int real
int cx1, cy1, cx2, cy2; int cx1, cy1, cx2, cy2;
ratio = ActiveRatio(realwidth, realheight); ratio = ActiveRatio(realwidth, realheight);
if (ratio < 1.3f) if (AspectTallerThanWide(ratio))
{ {
cwidth = realwidth; cwidth = realwidth;
cheight = realheight * AspectMultiplier(ratio) / 48; cheight = realheight * AspectMultiplier(ratio) / 48;
@ -1708,17 +1708,31 @@ int AspectBaseWidth(float aspect)
int AspectBaseHeight(float aspect) int AspectBaseHeight(float aspect)
{ {
return (int)round(200.0f * (320.0f / (240.0f * aspect)) * 3.0f); if (!AspectTallerThanWide(aspect))
return (int)round(200.0f * (320.0f / (AspectBaseWidth(aspect) / 3.0f)) * 3.0f);
else
return (int)round((200.0f * (4.0f / 3.0f)) / aspect * 3.0f);
} }
int AspectPspriteOffset(float aspect) double AspectPspriteOffset(float aspect)
{ {
return aspect < 1.3f ? (int)(6.5*FRACUNIT) : 0; if (!AspectTallerThanWide(aspect))
return 0.0;
else
return ((4.0 / 3.0) / aspect - 1.0) * 97.5;
} }
int AspectMultiplier(float aspect) int AspectMultiplier(float aspect)
{ {
return (int)round(320.0f / (240.0f * aspect) * 48.0f); if (!AspectTallerThanWide(aspect))
return (int)round(320.0f / (AspectBaseWidth(aspect) / 3.0f) * 48.0f);
else
return (int)round(200.0f / (AspectBaseHeight(aspect) / 3.0f) * 48.0f);
}
bool AspectTallerThanWide(float aspect)
{
return aspect < 1.333f;
} }
void IVideo::DumpAdapters () void IVideo::DumpAdapters ()

View file

@ -523,8 +523,9 @@ static inline double ActiveRatio (double width, double height) { return ActiveRa
int AspectBaseWidth(float aspect); int AspectBaseWidth(float aspect);
int AspectBaseHeight(float aspect); int AspectBaseHeight(float aspect);
int AspectPspriteOffset(float aspect); double AspectPspriteOffset(float aspect);
int AspectMultiplier(float aspect); int AspectMultiplier(float aspect);
bool AspectTallerThanWide(float aspect);
EXTERN_CVAR(Int, uiscale); EXTERN_CVAR(Int, uiscale);