Fullscreen -> WindowMode; defaults to pseudofullscreen which does hax on windows, falls back to normal fullscreen for everyone else.
This commit is contained in:
@@ -102,4 +102,11 @@ namespace OpenRA.FileFormats.Graphics
|
|||||||
public readonly T Start, End;
|
public readonly T Start, End;
|
||||||
public Range( T start, T end ) { Start = start; End = end; }
|
public Range( T start, T end ) { Start = start; End = end; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum WindowMode
|
||||||
|
{
|
||||||
|
Windowed,
|
||||||
|
Fullscreen,
|
||||||
|
PseudoFullscreen,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -575,9 +575,8 @@ namespace OpenRA
|
|||||||
|
|
||||||
Renderer.SheetSize = Settings.SheetSize;
|
Renderer.SheetSize = Settings.SheetSize;
|
||||||
|
|
||||||
bool windowed = !Game.Settings.Fullscreen;
|
|
||||||
var resolution = GetResolution(settings);
|
var resolution = GetResolution(settings);
|
||||||
renderer = new Renderer(resolution, windowed);
|
renderer = new Renderer(resolution, Game.Settings.WindowMode);
|
||||||
resolution = renderer.Resolution;
|
resolution = renderer.Resolution;
|
||||||
|
|
||||||
controller = new Controller();
|
controller = new Controller();
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.FileFormats.Graphics;
|
||||||
|
|
||||||
namespace OpenRA.GameRules
|
namespace OpenRA.GameRules
|
||||||
{
|
{
|
||||||
public class UserSettings
|
public class UserSettings
|
||||||
@@ -32,7 +34,7 @@ namespace OpenRA.GameRules
|
|||||||
// Window settings
|
// Window settings
|
||||||
public readonly int Width = 0;
|
public readonly int Width = 0;
|
||||||
public readonly int Height = 0;
|
public readonly int Height = 0;
|
||||||
public readonly bool Fullscreen = false;
|
public readonly WindowMode WindowMode = WindowMode.PseudoFullscreen;
|
||||||
public bool MusicPlayer = true;
|
public bool MusicPlayer = true;
|
||||||
|
|
||||||
// Internal game settings
|
// Internal game settings
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
public Size Resolution { get { return device.WindowSize; } }
|
public Size Resolution { get { return device.WindowSize; } }
|
||||||
|
|
||||||
public Renderer(Size resolution, bool windowed)
|
public Renderer(Size resolution, OpenRA.FileFormats.Graphics.WindowMode windowMode)
|
||||||
{
|
{
|
||||||
device = CreateDevice( Assembly.LoadFile( Path.GetFullPath( "OpenRA.Gl.dll" ) ), resolution.Width, resolution.Height, windowed, false );
|
device = CreateDevice( Assembly.LoadFile( Path.GetFullPath( "OpenRA.Gl.dll" ) ), resolution.Width, resolution.Height, windowMode, false );
|
||||||
|
|
||||||
SpriteShader = device.CreateShader(FileSystem.Open("shaders/world-shp.fx"));
|
SpriteShader = device.CreateShader(FileSystem.Open("shaders/world-shp.fx"));
|
||||||
LineShader = device.CreateShader(FileSystem.Open("shaders/line.fx"));
|
LineShader = device.CreateShader(FileSystem.Open("shaders/line.fx"));
|
||||||
@@ -69,12 +69,12 @@ namespace OpenRA.Graphics
|
|||||||
TitleFont = new SpriteFont(this, "titles.ttf", 48);
|
TitleFont = new SpriteFont(this, "titles.ttf", 48);
|
||||||
}
|
}
|
||||||
|
|
||||||
IGraphicsDevice CreateDevice( Assembly rendererDll, int width, int height, bool windowed, bool vsync )
|
IGraphicsDevice CreateDevice( Assembly rendererDll, int width, int height, WindowMode window, bool vsync )
|
||||||
{
|
{
|
||||||
foreach( RendererAttribute r in rendererDll.GetCustomAttributes( typeof( RendererAttribute ), false ) )
|
foreach( RendererAttribute r in rendererDll.GetCustomAttributes( typeof( RendererAttribute ), false ) )
|
||||||
{
|
{
|
||||||
return (IGraphicsDevice)r.Type.GetConstructor( new Type[] { typeof( int ), typeof( int ), typeof( bool ), typeof( bool ) } )
|
return (IGraphicsDevice)r.Type.GetConstructor( new Type[] { typeof( int ), typeof( int ), typeof( WindowMode ), typeof( bool ) } )
|
||||||
.Invoke( new object[] { width, height, windowed, vsync } );
|
.Invoke( new object[] { width, height, window, vsync } );
|
||||||
}
|
}
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,27 +50,31 @@ namespace OpenRA.GlRenderer
|
|||||||
throw new InvalidOperationException("GL Error");
|
throw new InvalidOperationException("GL Error");
|
||||||
}
|
}
|
||||||
|
|
||||||
public GraphicsDevice(int width, int height, bool windowed, bool vsync)
|
public GraphicsDevice(int width, int height, WindowMode window, bool vsync)
|
||||||
{
|
{
|
||||||
Sdl.SDL_Init(Sdl.SDL_INIT_NOPARACHUTE | Sdl.SDL_INIT_VIDEO);
|
Sdl.SDL_Init(Sdl.SDL_INIT_NOPARACHUTE | Sdl.SDL_INIT_VIDEO);
|
||||||
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_DOUBLEBUFFER, 1);
|
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_DOUBLEBUFFER, 1);
|
||||||
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_RED_SIZE, 8);
|
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_RED_SIZE, 8);
|
||||||
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_GREEN_SIZE, 8);
|
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_GREEN_SIZE, 8);
|
||||||
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_BLUE_SIZE, 8);
|
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_BLUE_SIZE, 8);
|
||||||
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_ALPHA_SIZE, 0);
|
Sdl.SDL_GL_SetAttribute(Sdl.SDL_GL_ALPHA_SIZE, 0);
|
||||||
|
|
||||||
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
int windowFlags = 0;
|
||||||
{
|
switch (window)
|
||||||
// pseudo-fullscreen, for sane debugging.
|
{
|
||||||
Environment.SetEnvironmentVariable("SDL_VIDEO_WINDOW_POS", "0,0");
|
case WindowMode.Fullscreen:
|
||||||
surf = Sdl.SDL_SetVideoMode(width, height, 0, Sdl.SDL_NOFRAME | Sdl.SDL_OPENGL | (windowed ? 0 : Sdl.SDL_FULLSCREEN));
|
windowFlags |= Sdl.SDL_FULLSCREEN;
|
||||||
}
|
break;
|
||||||
else
|
case WindowMode.PseudoFullscreen:
|
||||||
{
|
// pseudo-fullscreen only reliably works on windows; fall back to fullscreen for everyone else
|
||||||
// OSX doesn't like this, due to quirks of their WM.
|
windowFlags |= (Environment.OSVersion.Platform == PlatformID.Win32NT) ? Sdl.SDL_NOFRAME : Sdl.SDL_FULLSCREEN;
|
||||||
surf = Sdl.SDL_SetVideoMode(width, height, 0, Sdl.SDL_OPENGL | (windowed ? 0 : Sdl.SDL_FULLSCREEN));
|
break;
|
||||||
}
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
surf = Sdl.SDL_SetVideoMode(width, height, 0, Sdl.SDL_OPENGL | windowFlags);
|
||||||
|
|
||||||
Sdl.SDL_WM_SetCaption("OpenRA", "OpenRA");
|
Sdl.SDL_WM_SetCaption("OpenRA", "OpenRA");
|
||||||
Sdl.SDL_ShowCursor(0);
|
Sdl.SDL_ShowCursor(0);
|
||||||
Sdl.SDL_EnableUNICODE(1);
|
Sdl.SDL_EnableUNICODE(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user