5 1 new backport x11 fs rework (#1485)
* Use XRandR 1.2 to set fullscreen resolution for single output Squash of roothorick's PR #497 (also includes Kyzentun's CMake changes from PR #716) * Cherry-pick json c++1x stuff (b9e3d7174e) * Cherry-pick c++11 support from 5bba5c0038 and 9f8b045309 * rework Linux (X11) fullscreen, improve display-related Graphics Options Implement option to select between monitors for exclusive fullscreen mode on X11 (using XRandR 1.2), or use a fullscreen borderless window. Reimplement resolution/refresh rate/display mode-related option rows using Lua, update choices dynamically so only known-good groupings of resolution/refresh rate/aspect ratio can be selected. Minimally update Windows/MacOS LowLevelWindow implementations to support changes made for Linux side. Fullscreen Borderless Window/multi monitor support from X11 not implemented for those in this commit. * allow forcibly disabling xinerama use on Linux When libXinerama is available, SM tries to use it to find the proper monitor indexes to use to set _NET_WM_FULLSCREEN_MONITORS (on borderless fullscreen). xfwm4 seems to assume that monitors are numbered in increasing order from left to right (rather than using the Xinerama-assigned numbers), so _NET_WM_FULLSCREEN_MONITORS misbehaves on Xfce. This commit bypasses use of libXinerama, and instead forces SM to induce fullscreen on the desired monitor in the backup, hacky way: remove all window hints, move window to desired monitor, then add _NET_WM_STATE_FULLSCREEN hint. This works on mutter and Xfce. * Remove multiple warnings on redundant define. This used to be hard-coded due to pthread related items, but now it's dynamically determined. * fix _fallback menu behavior for unrecognized aspect ratios * Fix error recreating existing FS texture * Bump deployment target to 10.7 to use libc++ on XCode 8 * Add explicit casts to please clang * Update changelog
This commit is contained in:
committed by
Colby Klein
parent
7ef14c340d
commit
557be7cf1b
+29
-10
@@ -10,7 +10,7 @@
|
||||
#include "RageSurface.h"
|
||||
#include "RageSurfaceUtils.h"
|
||||
#include "EnumHelper.h"
|
||||
#include "DisplayResolutions.h"
|
||||
#include "DisplaySpec.h"
|
||||
#include "LocalizedString.h"
|
||||
|
||||
#include <D3dx9tex.h>
|
||||
@@ -271,19 +271,39 @@ RageDisplay_D3D::~RageDisplay_D3D()
|
||||
}
|
||||
}
|
||||
|
||||
void RageDisplay_D3D::GetDisplayResolutions( DisplayResolutions &out ) const
|
||||
void RageDisplay_D3D::GetDisplaySpecs( DisplaySpecs &out ) const
|
||||
{
|
||||
out.clear();
|
||||
int iCnt = g_pd3d->GetAdapterModeCount( D3DADAPTER_DEFAULT, g_DefaultAdapterFormat );
|
||||
|
||||
for( int i = 0; i < iCnt; ++i )
|
||||
std::set<DisplayMode> modes;
|
||||
D3DDISPLAYMODE mode;
|
||||
for ( int i = 0; i < iCnt; ++i )
|
||||
{
|
||||
D3DDISPLAYMODE mode;
|
||||
g_pd3d->EnumAdapterModes( D3DADAPTER_DEFAULT, g_DefaultAdapterFormat, i, &mode );
|
||||
|
||||
DisplayResolution res = { mode.Width, mode.Height };
|
||||
out.insert( res );
|
||||
modes.insert( { mode.Width, mode.Height, static_cast<double> (mode.RefreshRate) } );
|
||||
}
|
||||
|
||||
// Get the current display mode
|
||||
if ( g_pd3d->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &mode ) == D3D_OK )
|
||||
{
|
||||
D3DADAPTER_IDENTIFIER9 ID;
|
||||
g_pd3d->GetAdapterIdentifier( D3DADAPTER_DEFAULT, 0, &ID );
|
||||
DisplayMode active = { mode.Width, mode.Height, static_cast<double> (mode.RefreshRate) };
|
||||
RectI bounds( 0, 0, active.width, active.height );
|
||||
out.insert( DisplaySpec( "", "Fullscreen", modes, active, bounds ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG->Warn( "Could not find active mode for default D3D adapter" );
|
||||
if ( !modes.empty() )
|
||||
{
|
||||
const DisplayMode &m = *modes.begin();
|
||||
RectI bounds( 0, 0, m.width, m.height );
|
||||
out.insert( DisplaySpec( "", "Fullscreen", modes, m, bounds ) );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
D3DFORMAT FindBackBufferType(bool bWindowed, int iBPP)
|
||||
@@ -677,10 +697,9 @@ RageSurface* RageDisplay_D3D::CreateScreenshot()
|
||||
return result;
|
||||
}
|
||||
|
||||
VideoModeParams RageDisplay_D3D::GetActualVideoModeParams() const
|
||||
ActualVideoModeParams RageDisplay_D3D::GetActualVideoModeParams() const
|
||||
{
|
||||
VideoModeParams p = GraphicsWindow::GetParams();
|
||||
return p;
|
||||
return GraphicsWindow::GetParams();
|
||||
}
|
||||
|
||||
void RageDisplay_D3D::SendCurrentMatrices()
|
||||
|
||||
Reference in New Issue
Block a user