fixed Renderer init (separated device creation from shader load)

This commit is contained in:
Bob
2010-08-21 18:59:05 +12:00
parent 7e67a5bb2d
commit 18914447aa
2 changed files with 45 additions and 36 deletions

View File

@@ -361,21 +361,6 @@ namespace OpenRA
public static Modifiers GetModifierKeys() { return modifiers; } public static Modifiers GetModifierKeys() { return modifiers; }
public static void HandleModifierKeys(Modifiers mods) { modifiers = mods; } public static void HandleModifierKeys(Modifiers mods) { modifiers = mods; }
static Size GetResolution(Settings settings, WindowMode windowmode)
{
var desktopResolution = Screen.PrimaryScreen.Bounds.Size;
var customSize = (windowmode == WindowMode.Windowed) ? Settings.WindowedSize : Settings.FullscreenSize;
if (customSize.X > 0 && customSize.Y > 0)
{
desktopResolution.Width = customSize.X;
desktopResolution.Height = customSize.Y;
}
return new Size(
desktopResolution.Width,
desktopResolution.Height);
}
internal static void Initialize(Settings settings) internal static void Initialize(Settings settings)
{ {
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly; AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly;
@@ -396,10 +381,7 @@ namespace OpenRA
Renderer.SheetSize = Settings.SheetSize; Renderer.SheetSize = Settings.SheetSize;
var resolution = GetResolution(settings, Game.Settings.WindowMode); Renderer.Initialize( settings, Game.Settings.WindowMode );
Renderer = new Renderer(resolution, Game.Settings.WindowMode);
resolution = Renderer.Resolution;
clientSize = new int2(resolution);
Sound.Initialize(); Sound.Initialize();
PerfHistory.items["render"].hasNormalTick = false; PerfHistory.items["render"].hasNormalTick = false;
@@ -410,6 +392,9 @@ namespace OpenRA
ChangeMods(); ChangeMods();
Renderer = new Renderer();
clientSize = new int2(Renderer.Resolution);
if (Settings.Replay != null) if (Settings.Replay != null)
orderManager = new OrderManager(new ReplayConnection(Settings.Replay)); orderManager = new OrderManager(new ReplayConnection(Settings.Replay));
else else

View File

@@ -15,6 +15,7 @@ using System.Reflection;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using OpenRA.FileFormats.Graphics; using OpenRA.FileFormats.Graphics;
using OpenRA.Support; using OpenRA.Support;
using System.Windows.Forms;
namespace OpenRA.Graphics namespace OpenRA.Graphics
{ {
@@ -22,8 +23,6 @@ namespace OpenRA.Graphics
{ {
internal static int SheetSize; internal static int SheetSize;
readonly IGraphicsDevice device;
public IShader SpriteShader { get; private set; } /* note: shared shader params */ public IShader SpriteShader { get; private set; } /* note: shared shader params */
public IShader LineShader { get; private set; } public IShader LineShader { get; private set; }
public IShader RgbaSpriteShader { get; private set; } public IShader RgbaSpriteShader { get; private set; }
@@ -38,12 +37,8 @@ namespace OpenRA.Graphics
public readonly SpriteFont RegularFont, BoldFont, TitleFont; public readonly SpriteFont RegularFont, BoldFont, TitleFont;
public Size Resolution { get { return device.WindowSize; } } public Renderer()
public Renderer(Size resolution, OpenRA.FileFormats.Graphics.WindowMode windowMode)
{ {
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"));
RgbaSpriteShader = device.CreateShader(FileSystem.Open("shaders/chrome-rgba.fx")); RgbaSpriteShader = device.CreateShader(FileSystem.Open("shaders/chrome-rgba.fx"));
@@ -59,16 +54,6 @@ namespace OpenRA.Graphics
TitleFont = new SpriteFont("titles.ttf", 48); TitleFont = new SpriteFont("titles.ttf", 48);
} }
IGraphicsDevice CreateDevice( Assembly rendererDll, int width, int height, WindowMode window, bool vsync )
{
foreach( RendererAttribute r in rendererDll.GetCustomAttributes( typeof( RendererAttribute ), false ) )
{
return (IGraphicsDevice)r.Type.GetConstructor( new Type[] { typeof( int ), typeof( int ), typeof( WindowMode ), typeof( bool ) } )
.Invoke( new object[] { width, height, window, vsync } );
}
throw new NotImplementedException();
}
public IGraphicsDevice Device { get { return device; } } public IGraphicsDevice Device { get { return device; } }
public void BeginFrame(float2 r1, float2 r2, float2 scroll) public void BeginFrame(float2 r1, float2 r2, float2 scroll)
@@ -127,5 +112,44 @@ namespace OpenRA.Graphics
RgbaSpriteRenderer.Flush(); RgbaSpriteRenderer.Flush();
LineRenderer.Flush(); LineRenderer.Flush();
} }
static IGraphicsDevice device;
public static Size Resolution { get { return device.WindowSize; } }
internal static void Initialize( Settings settings, OpenRA.FileFormats.Graphics.WindowMode windowMode )
{
var resolution = GetResolution( settings, windowMode );
device = CreateDevice( Assembly.LoadFile( Path.GetFullPath( "OpenRA.Gl.dll" ) ), resolution.Width, resolution.Height, windowMode, false );
}
static Size GetResolution(Settings settings, WindowMode windowmode)
{
var desktopResolution = Screen.PrimaryScreen.Bounds.Size;
var customSize = (windowmode == WindowMode.Windowed) ? Game.Settings.WindowedSize : Game.Settings.FullscreenSize;
if (customSize.X > 0 && customSize.Y > 0)
{
desktopResolution.Width = customSize.X;
desktopResolution.Height = customSize.Y;
}
return new Size(
desktopResolution.Width,
desktopResolution.Height);
}
static IGraphicsDevice CreateDevice( Assembly rendererDll, int width, int height, WindowMode window, bool vsync )
{
foreach( RendererAttribute r in rendererDll.GetCustomAttributes( typeof( RendererAttribute ), false ) )
{
return (IGraphicsDevice)r.Type.GetConstructor( new Type[] { typeof( int ), typeof( int ), typeof( WindowMode ), typeof( bool ) } )
.Invoke( new object[] { width, height, window, vsync } );
}
throw new NotImplementedException();
}
} }
} }