refactored AddInSystem (testing needed)
implemented feature #469 (Default AddIn override)
This commit is contained in:
parent
c553c15792
commit
0e1d271195
@ -90,7 +90,7 @@ namespace ANX.Framework.TestCenter.Strukturen.Input
|
||||
{
|
||||
AddInSystemFactory.Instance.Initialize();
|
||||
|
||||
AddInSystemFactory.Instance.SetDefaultCreator("XInput");
|
||||
AddInSystemFactory.Instance.PreferredInputSystem = "XInput";
|
||||
XNAGamePadState xnastate = XNAGamePad.GetState(xnaplayer);
|
||||
ANXGamePadState anxstate = ANXGamePad.GetState(anxplayer);
|
||||
|
||||
|
@ -418,7 +418,9 @@
|
||||
<Compile Include="Net\QualityOfService.cs" />
|
||||
<Compile Include="Net\SendDataOptions.cs" />
|
||||
<Compile Include="Net\WriteLeaderboardsEventArgs.cs" />
|
||||
<Compile Include="NonXNA\AddIn.cs" />
|
||||
<Compile Include="NonXNA\AddInLoadingException.cs" />
|
||||
<Compile Include="NonXNA\AddInType.cs" />
|
||||
<Compile Include="NonXNA\InputSystem\IKeyboard.cs" />
|
||||
<Compile Include="NonXNA\InputSystem\IMotionSensingDevice.cs" />
|
||||
<Compile Include="NonXNA\InputSystem\IMouse.cs" />
|
||||
|
@ -90,21 +90,9 @@ namespace ANX.Framework
|
||||
public event EventHandler<EventArgs> Disposed;
|
||||
public event EventHandler<EventArgs> Exiting;
|
||||
|
||||
//TODO: The constructor should be overloaded unlike the original XNA. There will be one argument which is used to
|
||||
// try to load a specified environment (DX9, DX10, DX11, OpenGL). The default constructor will decide which
|
||||
// is the best (or only) environment to load. The default environment should behave mostly like XNA.
|
||||
|
||||
public Game()
|
||||
: this("DirectX10", "XInput", "XAudio")
|
||||
{
|
||||
}
|
||||
|
||||
public Game(String renderSystemName = "DirectX10", String inputSystemName = "XInput", String soundSystemName = "XAudio")
|
||||
{
|
||||
logger.Info("created a new Game-Class");
|
||||
logger.Info("- asked for RenderSystem '{0}'", renderSystemName);
|
||||
logger.Info("- asked for InputSystem '{0}'", inputSystemName);
|
||||
logger.Info("- asked for SoundSystem '{0}'", soundSystemName);
|
||||
|
||||
this.gameServices = new GameServiceContainer();
|
||||
this.gameTime = new GameTime();
|
||||
@ -120,46 +108,18 @@ namespace ANX.Framework
|
||||
throw new AddInLoadingException("Error while initializing AddInSystem.", ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
AddInSystemFactory.Instance.SetDefaultCreator(inputSystemName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.ErrorException(String.Format("Error during loading InputSystem {0}", inputSystemName), ex);
|
||||
throw new AddInLoadingException(String.Format("Error during loading InputSystem {0}", inputSystemName), ex);
|
||||
}
|
||||
IInputSystemCreator inputSystemCreator = AddInSystemFactory.Instance.GetDefaultCreator<IInputSystemCreator>();
|
||||
if (inputSystemCreator != null)
|
||||
{
|
||||
this.gameServices.AddService(typeof(IInputSystemCreator), inputSystemCreator);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
AddInSystemFactory.Instance.SetDefaultCreator(soundSystemName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.ErrorException(String.Format("Error during loading SoundSystem {0}", soundSystemName), ex);
|
||||
throw new AddInLoadingException(String.Format("Error during loading SoundSystem {0}", soundSystemName), ex);
|
||||
}
|
||||
|
||||
ISoundSystemCreator soundSystemCreator = AddInSystemFactory.Instance.GetDefaultCreator<ISoundSystemCreator>();
|
||||
if (soundSystemCreator != null)
|
||||
{
|
||||
this.gameServices.AddService(typeof(ISoundSystemCreator), soundSystemCreator);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
AddInSystemFactory.Instance.SetDefaultCreator(renderSystemName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.ErrorException(String.Format("Error during loading RenderSystem {0}", renderSystemName), ex);
|
||||
throw new AddInLoadingException(String.Format("Error during loading RenderSystem {0}", renderSystemName), ex);
|
||||
}
|
||||
IRenderSystemCreator renderSystemCreator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||
if (renderSystemCreator != null)
|
||||
{
|
||||
@ -168,10 +128,9 @@ namespace ANX.Framework
|
||||
|
||||
logger.Info("creating GameHost");
|
||||
|
||||
IRenderSystemCreator creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
||||
if (creator != null)
|
||||
if (renderSystemCreator != null)
|
||||
{
|
||||
this.host = creator.CreateGameHost(this);
|
||||
this.host = renderSystemCreator.CreateGameHost(this);
|
||||
|
||||
this.host.Activated += new EventHandler<EventArgs>(this.HostActivated);
|
||||
this.host.Deactivated += new EventHandler<EventArgs>(this.HostDeactivated);
|
||||
|
307
ANX.Framework/NonXNA/AddIn.cs
Normal file
307
ANX.Framework/NonXNA/AddIn.cs
Normal file
@ -0,0 +1,307 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Resources;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
|
||||
#endregion
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.Framework.NonXNA
|
||||
{
|
||||
public class AddIn : IComparable<AddIn>
|
||||
{
|
||||
#region Private Members
|
||||
private string fileName;
|
||||
private List<string> platforms = new List<string>();
|
||||
private Assembly assembly;
|
||||
private Type creatorType;
|
||||
private ICreator instance;
|
||||
private AddInType addInType;
|
||||
|
||||
#endregion // Private Members
|
||||
|
||||
#region Constructor
|
||||
|
||||
public AddIn(string fileName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(fileName))
|
||||
{
|
||||
throw new ArgumentNullException("fileName");
|
||||
}
|
||||
|
||||
if (!File.Exists(fileName))
|
||||
{
|
||||
throw new InvalidOperationException(String.Format("The AddIn '{0}' does not exist.", fileName));
|
||||
}
|
||||
|
||||
this.fileName = fileName;
|
||||
|
||||
try
|
||||
{
|
||||
this.assembly = Assembly.LoadFrom(fileName);
|
||||
}
|
||||
catch { }
|
||||
|
||||
if (this.assembly != null)
|
||||
{
|
||||
foreach (Type t in this.assembly.GetTypes().Where(p => typeof(IInputSystemCreator).IsAssignableFrom(p) ||
|
||||
typeof(IRenderSystemCreator).IsAssignableFrom(p) ||
|
||||
typeof(ISoundSystemCreator).IsAssignableFrom(p)
|
||||
))
|
||||
{
|
||||
this.creatorType = t;
|
||||
|
||||
if (typeof(IInputSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
this.addInType = AddInType.InputSystem;
|
||||
}
|
||||
else if (typeof(IRenderSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
this.addInType = AddInType.RenderSystem;
|
||||
}
|
||||
else if (typeof(ISoundSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
this.addInType = AddInType.SoundSystem;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.addInType = AddInType.Unknown;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (this.creatorType != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.platforms.AddRange(FetchSupportedPlattforms(this.assembly));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Constructor
|
||||
|
||||
#region Puplic Methods
|
||||
|
||||
|
||||
#endregion // Public Methods
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether this is a valid AddIn of the ANX.Framework.
|
||||
/// </summary>
|
||||
public bool IsValid
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.assembly != null && this.creatorType != null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The filename of the current AddIn assembly
|
||||
/// </summary>
|
||||
public string FileName
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.fileName;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if this AddIn is supported by the current Platform
|
||||
/// </summary>
|
||||
public bool IsSupported
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.assembly != null && this.platforms != null && this.platforms.Count > 0)
|
||||
{
|
||||
foreach (string platform in this.platforms)
|
||||
{
|
||||
if (string.Equals(Environment.OSVersion.Platform.ToString(), platform, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the version of the AddIn
|
||||
/// </summary>
|
||||
public Version Version
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.assembly != null)
|
||||
{
|
||||
return this.assembly.GetName().Version;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.assembly != null)
|
||||
{
|
||||
return this.Instance.Name;
|
||||
}
|
||||
|
||||
return String.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public int Priority
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.assembly != null)
|
||||
{
|
||||
return this.Instance.Priority;
|
||||
}
|
||||
|
||||
return int.MaxValue;
|
||||
}
|
||||
}
|
||||
|
||||
public AddInType Type
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.addInType;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the concrete instance of the creator of this AddIn. The instance is cached and
|
||||
/// only created on first access.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If this AddIn is not supported on this platform the instance will be null.
|
||||
/// </remarks>
|
||||
public ICreator Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (instance == null && IsSupported)
|
||||
{
|
||||
this.instance = this.assembly.CreateInstance(this.creatorType.FullName) as ICreator;
|
||||
if (this.instance != null)
|
||||
{
|
||||
this.instance.RegisterCreator(AddInSystemFactory.Instance);
|
||||
}
|
||||
}
|
||||
|
||||
return this.instance;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Properties
|
||||
|
||||
#region Private Helpers
|
||||
private string[] FetchSupportedPlattforms(Assembly assembly)
|
||||
{
|
||||
string[] platforms = null;
|
||||
string[] res = assembly.GetManifestResourceNames();
|
||||
|
||||
if (res != null)
|
||||
{
|
||||
foreach (string ressource in res)
|
||||
{
|
||||
Stream manifestResourceStream = assembly.GetManifestResourceStream(ressource);
|
||||
|
||||
if (manifestResourceStream != null)
|
||||
{
|
||||
using (ResourceReader resourceReader = new ResourceReader(manifestResourceStream))
|
||||
{
|
||||
IDictionaryEnumerator dict = resourceReader.GetEnumerator();
|
||||
while (dict.MoveNext())
|
||||
{
|
||||
if (string.Equals(dict.Key.ToString(), "SupportedPlatforms", StringComparison.InvariantCultureIgnoreCase) &&
|
||||
dict.Value.GetType() == typeof(string))
|
||||
{
|
||||
platforms = dict.Value.ToString().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
return platforms;
|
||||
}
|
||||
}
|
||||
resourceReader.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return platforms;
|
||||
}
|
||||
|
||||
#endregion // Private Helpers
|
||||
|
||||
public int CompareTo(AddIn other)
|
||||
{
|
||||
return this.Priority.CompareTo(other.Priority);
|
||||
}
|
||||
}
|
||||
}
|
@ -62,6 +62,7 @@ namespace ANX.Framework.NonXNA
|
||||
{
|
||||
public class AddInSystemFactory
|
||||
{
|
||||
#region Private Members
|
||||
private Dictionary<String, ICreator> creators;
|
||||
private static AddInSystemFactory instance;
|
||||
private bool initialized;
|
||||
@ -69,8 +70,21 @@ namespace ANX.Framework.NonXNA
|
||||
private OperatingSystem operatingSystem;
|
||||
private Version operatingSystemVersion;
|
||||
|
||||
private string preferredRenderSystem;
|
||||
private bool preferredRenderSystemLocked;
|
||||
private string preferredInputSystem;
|
||||
private bool preferredInputSystemLocked;
|
||||
private string preferredSoundSystem;
|
||||
private bool preferredSoundSystemLocked;
|
||||
|
||||
private List<AddIn> renderSystems;
|
||||
private List<AddIn> inputSystems;
|
||||
private List<AddIn> soundSystems;
|
||||
|
||||
private static Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
#endregion // Private Members
|
||||
|
||||
public static AddInSystemFactory Instance
|
||||
{
|
||||
get
|
||||
@ -87,6 +101,10 @@ namespace ANX.Framework.NonXNA
|
||||
|
||||
private AddInSystemFactory()
|
||||
{
|
||||
this.renderSystems = new List<AddIn>();
|
||||
this.inputSystems = new List<AddIn>();
|
||||
this.soundSystems = new List<AddIn>();
|
||||
|
||||
this.creators = new Dictionary<string, ICreator>();
|
||||
|
||||
this.operatingSystem = Environment.OSVersion;
|
||||
@ -110,56 +128,33 @@ namespace ANX.Framework.NonXNA
|
||||
{
|
||||
logger.Info("[ANX] trying to load '{0}'...", file);
|
||||
|
||||
Assembly part = null;
|
||||
|
||||
try
|
||||
AddIn addin = new AddIn(file);
|
||||
if (addin.IsValid && addin.IsSupported)
|
||||
{
|
||||
part = Assembly.LoadFile(file);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Debug("error calling Assembly.LoadFile({0}) Exception: {1}", file, ex.Message);
|
||||
}
|
||||
|
||||
if (part != null)
|
||||
{
|
||||
logger.Info("[ANX] scanning for ANX interfaces...");
|
||||
|
||||
foreach (Type t in part.GetTypes().Where(p => typeof(IInputSystemCreator).IsAssignableFrom(p) ||
|
||||
typeof(IRenderSystemCreator).IsAssignableFrom(p) ||
|
||||
typeof(ISoundSystemCreator).IsAssignableFrom(p)
|
||||
))
|
||||
switch (addin.Type)
|
||||
{
|
||||
logger.Info("[ANX] testing if assembly is supported on current platform");
|
||||
string[] platforms = FetchSupportedPlattforms(part);
|
||||
bool supportedPlatform = false;
|
||||
|
||||
foreach (string platform in platforms)
|
||||
{
|
||||
if (string.Equals(OperatingSystem.Platform.ToString(), platform, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
supportedPlatform = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (supportedPlatform)
|
||||
{
|
||||
logger.Info("[ANX] registering instance of '{0}'...", t.FullName);
|
||||
|
||||
var instance = part.CreateInstance(t.FullName);
|
||||
((ICreator)instance).RegisterCreator(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info("[ANX] current platform '{0}' is not supported by '{1}'", OperatingSystem.Platform.ToString(), t.FullName);
|
||||
}
|
||||
case AddInType.InputSystem:
|
||||
this.inputSystems.Add(addin);
|
||||
break;
|
||||
case AddInType.RenderSystem:
|
||||
this.renderSystems.Add(addin);
|
||||
break;
|
||||
case AddInType.SoundSystem:
|
||||
this.soundSystems.Add(addin);
|
||||
break;
|
||||
}
|
||||
logger.Info("[ANX] successfully loaded addin...");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info("[ANX] skipped loading file because it is not supported or not a valid AddIn");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetDefaultCreators();
|
||||
this.inputSystems.Sort();
|
||||
this.renderSystems.Sort();
|
||||
this.soundSystems.Sort();
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,54 +215,82 @@ namespace ANX.Framework.NonXNA
|
||||
}
|
||||
|
||||
Type type = typeof(T);
|
||||
AddInType addInType = GetAddInType(type);
|
||||
|
||||
if (defaultCreators.ContainsKey(type))
|
||||
switch (addInType)
|
||||
{
|
||||
return defaultCreators[type] as T;
|
||||
}
|
||||
case AddInType.InputSystem:
|
||||
if (string.IsNullOrEmpty(preferredInputSystem))
|
||||
{
|
||||
if (inputSystems.Count > 0)
|
||||
{
|
||||
return inputSystems[0].Instance as T;
|
||||
}
|
||||
|
||||
throw new AddInLoadingException("couldn't get default input system because there are no registered input systems available");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (AddIn addin in this.inputSystems)
|
||||
{
|
||||
if (addin.Name.Equals(preferredInputSystem, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return addin.Instance as T;
|
||||
}
|
||||
}
|
||||
|
||||
throw new AddInLoadingException(String.Format("couldn't get default input system '{0}' because it was not found in the list of registered creators", preferredInputSystem));
|
||||
}
|
||||
case AddInType.RenderSystem:
|
||||
if (string.IsNullOrEmpty(preferredRenderSystem))
|
||||
{
|
||||
if (renderSystems.Count > 0)
|
||||
{
|
||||
return renderSystems[0].Instance as T;
|
||||
}
|
||||
|
||||
throw new AddInLoadingException("couldn't get default render system because there are no registered render systems available");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (AddIn addin in this.renderSystems)
|
||||
{
|
||||
if (addin.Name.Equals(preferredRenderSystem, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return addin.Instance as T;
|
||||
}
|
||||
}
|
||||
|
||||
throw new AddInLoadingException(String.Format("couldn't get default render system '{0}' because it was not found in the list of registered creators", preferredRenderSystem));
|
||||
}
|
||||
case AddInType.SoundSystem:
|
||||
if (string.IsNullOrEmpty(preferredSoundSystem))
|
||||
{
|
||||
if (soundSystems.Count > 0)
|
||||
{
|
||||
return soundSystems[0].Instance as T;
|
||||
}
|
||||
|
||||
throw new AddInLoadingException("couldn't get default sound system because there are no registered sound systems available");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (AddIn addin in this.soundSystems)
|
||||
{
|
||||
if (addin.Name.Equals(preferredSoundSystem, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return addin.Instance as T;
|
||||
}
|
||||
}
|
||||
|
||||
throw new AddInLoadingException(String.Format("couldn't get default sound system '{0}' because it was not found in the list of registered creators", preferredSoundSystem));
|
||||
}
|
||||
|
||||
logger.Error(String.Format("couldn't find a DefaultCreator of type '{0}'. Listing all registered creators: ", type.FullName));
|
||||
foreach (KeyValuePair<Type, ICreator> kvp in defaultCreators)
|
||||
{
|
||||
logger.Error(kvp.Key);
|
||||
}
|
||||
|
||||
throw new AddInLoadingException(String.Format("couldn't find a DefaultCreator of type '{0}'", type.FullName));
|
||||
}
|
||||
|
||||
public void SetDefaultCreator<T>(T creator) where T : class, ICreator
|
||||
{
|
||||
Type t = typeof(T);
|
||||
logger.Debug("setting DefaultCreator by type: {0}", t.FullName);
|
||||
defaultCreators[t] = creator;
|
||||
}
|
||||
|
||||
public void SetDefaultCreator(string creatorName)
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
ICreator creator = null;
|
||||
creators.TryGetValue(creatorName.ToLowerInvariant(), out creator);
|
||||
if (creator != null)
|
||||
{
|
||||
Type t = creator.GetType().GetInterfaces()[0];
|
||||
if (t == typeof(ICreator))
|
||||
{
|
||||
//TODO: exception handling
|
||||
t = creator.GetType().GetInterfaces()[1];
|
||||
}
|
||||
logger.Debug("setting DefaultCreator by name: '{0}'. Resolved type: '{1}'. ", creatorName, t.FullName);
|
||||
defaultCreators[t] = creator;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AddInLoadingException(String.Format("couldn't set DefaultCreator by name: '{0}'. ", creatorName));
|
||||
}
|
||||
}
|
||||
|
||||
public OperatingSystem OperatingSystem
|
||||
{
|
||||
get
|
||||
@ -284,94 +307,90 @@ namespace ANX.Framework.NonXNA
|
||||
}
|
||||
}
|
||||
|
||||
private void SetDefaultCreators()
|
||||
public string PreferredRenderSystem
|
||||
{
|
||||
foreach (ICreator creator in this.creators.Values)
|
||||
get
|
||||
{
|
||||
string type = creator.GetType().GetInterfaces()[0].ToString();
|
||||
|
||||
switch (type)
|
||||
return this.preferredRenderSystem;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.preferredRenderSystemLocked && !this.preferredRenderSystem.Equals(value, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
case "ANX.Framework.NonXNA.IRenderSystemCreator":
|
||||
IRenderSystemCreator renderSystemCreator = creator as IRenderSystemCreator;
|
||||
IRenderSystemCreator defaultRenderSystemCreator = null;
|
||||
if (defaultCreators.ContainsKey(typeof(IRenderSystemCreator)))
|
||||
{
|
||||
renderSystemCreator = defaultCreators[typeof(IRenderSystemCreator)] as IRenderSystemCreator;
|
||||
}
|
||||
|
||||
if (renderSystemCreator != null && (defaultRenderSystemCreator == null || defaultRenderSystemCreator.Priority > renderSystemCreator.Priority))
|
||||
{
|
||||
SetDefaultCreator<IRenderSystemCreator>(renderSystemCreator);
|
||||
}
|
||||
break;
|
||||
case "ANX.Framework.NonXNA.ISoundSystemCreator":
|
||||
ISoundSystemCreator soundSystemCreator = creator as ISoundSystemCreator;
|
||||
ISoundSystemCreator defaultSoundSystemCreator = null;
|
||||
if (defaultCreators.ContainsKey(typeof(ISoundSystemCreator)))
|
||||
{
|
||||
defaultSoundSystemCreator = defaultCreators[typeof(ISoundSystemCreator)] as ISoundSystemCreator;
|
||||
}
|
||||
|
||||
if (soundSystemCreator != null && (defaultSoundSystemCreator == null || defaultSoundSystemCreator.Priority > soundSystemCreator.Priority))
|
||||
{
|
||||
SetDefaultCreator<ISoundSystemCreator>(soundSystemCreator);
|
||||
}
|
||||
break;
|
||||
case "ANX.Framework.NonXNA.IInputSystemCreator":
|
||||
IInputSystemCreator inputSystemCreator = creator as IInputSystemCreator;
|
||||
IInputSystemCreator defaultInputSystemCreator = null;
|
||||
if (defaultCreators.ContainsKey(typeof(IInputSystemCreator)))
|
||||
{
|
||||
defaultInputSystemCreator = defaultCreators[typeof(IInputSystemCreator)] as IInputSystemCreator;
|
||||
}
|
||||
|
||||
if (inputSystemCreator != null && (defaultInputSystemCreator == null || defaultInputSystemCreator.Priority > inputSystemCreator.Priority))
|
||||
{
|
||||
SetDefaultCreator<IInputSystemCreator>(inputSystemCreator);
|
||||
}
|
||||
break;
|
||||
case "ANX.Framework.NonXNA.ICreator":
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException(String.Format("unable to set a default system for creator of type '{0}'", type));
|
||||
throw new AddInLoadingException("can't set preferred RenderSystem because a RenderSystem is alread in use.");
|
||||
}
|
||||
|
||||
this.preferredRenderSystem = value;
|
||||
}
|
||||
}
|
||||
|
||||
private string[] FetchSupportedPlattforms(Assembly assembly)
|
||||
public string PreferredInputSystem
|
||||
{
|
||||
string[] platforms = null;
|
||||
string[] res = assembly.GetManifestResourceNames();
|
||||
|
||||
if (res != null)
|
||||
get
|
||||
{
|
||||
foreach (string ressource in res)
|
||||
{
|
||||
Stream manifestResourceStream = assembly.GetManifestResourceStream(ressource);
|
||||
|
||||
if (manifestResourceStream != null)
|
||||
{
|
||||
using (ResourceReader resourceReader = new ResourceReader(manifestResourceStream))
|
||||
{
|
||||
IDictionaryEnumerator dict = resourceReader.GetEnumerator();
|
||||
while (dict.MoveNext())
|
||||
{
|
||||
if (string.Equals(dict.Key.ToString(), "SupportedPlatforms", StringComparison.InvariantCultureIgnoreCase) &&
|
||||
dict.Value.GetType() == typeof(string))
|
||||
{
|
||||
platforms = dict.Value.ToString().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
return platforms;
|
||||
}
|
||||
}
|
||||
resourceReader.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
return this.preferredInputSystem;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.preferredInputSystemLocked && !this.preferredInputSystem.Equals(value, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new AddInLoadingException("can't set preferred InputSystem because a InputSystem is alread in use.");
|
||||
}
|
||||
|
||||
return platforms;
|
||||
this.preferredInputSystem = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string PreferredSoundSystem
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.preferredSoundSystem;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (this.preferredSoundSystemLocked && !this.preferredSoundSystem.Equals(value, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
throw new AddInLoadingException("can't set preferred SoundSystem because a SoundSystem is alread in use.");
|
||||
}
|
||||
|
||||
this.preferredSoundSystem = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void PreventRenderSystemChange()
|
||||
{
|
||||
this.preferredRenderSystemLocked = true;
|
||||
}
|
||||
|
||||
public void PreventInputSystemChange()
|
||||
{
|
||||
this.preferredInputSystemLocked = true;
|
||||
}
|
||||
|
||||
public void PreventSoundSystemChange()
|
||||
{
|
||||
this.preferredSoundSystemLocked = true;
|
||||
}
|
||||
|
||||
private AddInType GetAddInType(Type t)
|
||||
{
|
||||
if (typeof(IRenderSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
return AddInType.RenderSystem;
|
||||
}
|
||||
else if (typeof(IInputSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
return AddInType.InputSystem;
|
||||
}
|
||||
else if (typeof(ISoundSystemCreator).IsAssignableFrom(t))
|
||||
{
|
||||
return AddInType.SoundSystem;
|
||||
}
|
||||
else
|
||||
{
|
||||
return AddInType.Unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
62
ANX.Framework/NonXNA/AddInType.cs
Normal file
62
ANX.Framework/NonXNA/AddInType.cs
Normal file
@ -0,0 +1,62 @@
|
||||
#region Using Statements
|
||||
using System;
|
||||
|
||||
#endregion
|
||||
|
||||
#region License
|
||||
|
||||
//
|
||||
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
|
||||
//
|
||||
// This file is released under the Ms-PL license.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Microsoft Public License (Ms-PL)
|
||||
//
|
||||
// This license governs use of the accompanying software. If you use the software, you accept this license.
|
||||
// If you do not accept the license, do not use the software.
|
||||
//
|
||||
// 1.Definitions
|
||||
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
|
||||
// here as under U.S. copyright law.
|
||||
// A "contribution" is the original software, or any additions or changes to the software.
|
||||
// A "contributor" is any person that distributes its contribution under this license.
|
||||
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
//
|
||||
// 2.Grant of Rights
|
||||
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
|
||||
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
|
||||
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
|
||||
// or any derivative works that you create.
|
||||
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
|
||||
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
|
||||
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
|
||||
// in the software or derivative works of the contribution in the software.
|
||||
//
|
||||
// 3.Conditions and Limitations
|
||||
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
|
||||
// patent license from such contributor to the software ends automatically.
|
||||
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
// notices that are present in the software.
|
||||
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
|
||||
// object code form, you may only do so under a license that complies with this license.
|
||||
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
|
||||
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
|
||||
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
|
||||
// particular purpose and non-infringement.
|
||||
|
||||
#endregion // License
|
||||
|
||||
namespace ANX.Framework.NonXNA
|
||||
{
|
||||
public enum AddInType
|
||||
{
|
||||
Unknown,
|
||||
RenderSystem,
|
||||
InputSystem,
|
||||
SoundSystem
|
||||
}
|
||||
}
|
@ -31,8 +31,8 @@ using System.Runtime.InteropServices;
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
[assembly: AssemblyVersion("0.4.32.*")]
|
||||
[assembly: AssemblyFileVersion("0.4.32.0")]
|
||||
[assembly: AssemblyVersion("0.4.33.*")]
|
||||
[assembly: AssemblyFileVersion("0.4.33.0")]
|
||||
|
||||
[assembly:InternalsVisibleTo("ANX.Framework.Windows.DX10")]
|
||||
[assembly:InternalsVisibleTo("ANX.RenderSystem.Windows.DX11")]
|
||||
|
@ -98,6 +98,7 @@ namespace ANX.InputSystem.OpenTK
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new OpenTK GamePad device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new GamePad();
|
||||
}
|
||||
}
|
||||
@ -107,6 +108,7 @@ namespace ANX.InputSystem.OpenTK
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new OpenTK Mouse device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new Mouse();
|
||||
}
|
||||
}
|
||||
@ -116,6 +118,7 @@ namespace ANX.InputSystem.OpenTK
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new OpenTK Keyboard device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new Keyboard();
|
||||
}
|
||||
}
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.0.1.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.1.0")]
|
||||
[assembly: AssemblyVersion("0.0.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.2.0")]
|
||||
|
@ -60,23 +60,39 @@ namespace ANX.InputSystem.Recording
|
||||
{
|
||||
public IGamePad GamePad
|
||||
{
|
||||
get { return new RecordingGamePad(); }
|
||||
get
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new RecordingGamePad();
|
||||
}
|
||||
}
|
||||
|
||||
public IMouse Mouse
|
||||
{
|
||||
get { return new RecordingMouse(); }
|
||||
get
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new RecordingMouse();
|
||||
}
|
||||
}
|
||||
|
||||
public IKeyboard Keyboard
|
||||
{
|
||||
get { return new RecordingKeyboard(); }
|
||||
get
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new RecordingKeyboard();
|
||||
}
|
||||
}
|
||||
|
||||
#if XNAEXT
|
||||
public IMotionSensingDevice MotionSensingDevice
|
||||
{
|
||||
get { return new RecordingMotionSensingDevice(); }
|
||||
get
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new RecordingMotionSensingDevice();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.0.1.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.1.0")]
|
||||
[assembly: AssemblyVersion("0.0.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.2.0")]
|
||||
|
@ -95,7 +95,11 @@ namespace ANX.InputSystem.Windows.Kinect
|
||||
|
||||
public IMotionSensingDevice MotionSensingDevice
|
||||
{
|
||||
get { return new Kinect(); }
|
||||
get
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new Kinect();
|
||||
}
|
||||
}
|
||||
|
||||
public IKeyboard Keyboard
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.5.3.0")]
|
||||
[assembly: AssemblyFileVersion("0.5.3.0")]
|
||||
[assembly: AssemblyVersion("0.5.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.5.4.0")]
|
||||
|
@ -96,6 +96,7 @@ namespace ANX.InputSystem.Windows.XInput
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new XInput GamePad device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new GamePad();
|
||||
}
|
||||
}
|
||||
@ -105,6 +106,7 @@ namespace ANX.InputSystem.Windows.XInput
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new XInput Mouse device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new Mouse();
|
||||
}
|
||||
}
|
||||
@ -114,6 +116,7 @@ namespace ANX.InputSystem.Windows.XInput
|
||||
get
|
||||
{
|
||||
logger.Debug("returning a new XInput Keyboard device");
|
||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||
return new Keyboard();
|
||||
}
|
||||
}
|
||||
@ -121,7 +124,7 @@ namespace ANX.InputSystem.Windows.XInput
|
||||
#if XNAEXT
|
||||
public IMotionSensingDevice MotionSensingDevice
|
||||
{
|
||||
get {return null; }
|
||||
get { return null; }
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.6.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.6.2.0")]
|
||||
[assembly: AssemblyVersion("0.6.3.0")]
|
||||
[assembly: AssemblyFileVersion("0.6.3.0")]
|
||||
|
@ -84,26 +84,32 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public GameHost CreateGameHost(Game game)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new WindowsGameHost(game);
|
||||
}
|
||||
|
||||
public INativeGraphicsDevice CreateGraphicsDevice(PresentationParameters presentationParameters)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new GraphicsDeviceWindowsDX10(presentationParameters);
|
||||
}
|
||||
|
||||
public INativeBuffer CreateIndexBuffer(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new IndexBuffer_DX10(graphics, size, indexCount, usage);
|
||||
}
|
||||
|
||||
public INativeBuffer CreateVertexBuffer(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new VertexBuffer_DX10(graphics, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
Effect_DX10 effect = new Effect_DX10(graphics, managedEffect, vertexShaderByteCode, pixelShaderByteCode);
|
||||
|
||||
return effect;
|
||||
@ -111,6 +117,8 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, ANX.Framework.Graphics.Effect managedEffect, System.IO.Stream byteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
Effect_DX10 effect = new Effect_DX10(graphics, managedEffect, byteCode);
|
||||
|
||||
return effect;
|
||||
@ -118,6 +126,8 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public Texture2D CreateTexture(GraphicsDevice graphics, string fileName)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
//TODO: implement
|
||||
throw new NotImplementedException();
|
||||
|
||||
@ -131,26 +141,32 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public INativeBlendState CreateBlendState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new BlendState_DX10();
|
||||
}
|
||||
|
||||
public INativeRasterizerState CreateRasterizerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new RasterizerState_DX10();
|
||||
}
|
||||
|
||||
public INativeDepthStencilState CreateDepthStencilState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new DepthStencilState_DX10();
|
||||
}
|
||||
|
||||
public INativeSamplerState CreateSamplerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new SamplerState_DX10();
|
||||
}
|
||||
|
||||
public byte[] GetShaderByteCode(PreDefinedShader type)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
if (type == PreDefinedShader.SpriteBatch)
|
||||
{
|
||||
return ShaderByteCode.SpriteBatchByteCode;
|
||||
@ -187,6 +203,8 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
SharpDX.DXGI.Factory factory = new Factory();
|
||||
|
||||
List<GraphicsAdapter> adapterList = new List<GraphicsAdapter>();
|
||||
@ -239,11 +257,15 @@ namespace ANX.Framework.Windows.DX10
|
||||
|
||||
public INativeTexture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
return new Texture2D_DX10(graphics, width, height, surfaceFormat, mipCount);
|
||||
}
|
||||
|
||||
public INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
return new RenderTarget2D_DX10(graphics, width, height, mipMap, preferredFormat, preferredDepthFormat, preferredMultiSampleCount, usage);
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.7.10.0")]
|
||||
[assembly: AssemblyFileVersion("0.7.10.0")]
|
||||
[assembly: AssemblyVersion("0.7.11.0")]
|
||||
[assembly: AssemblyFileVersion("0.7.11.0")]
|
||||
|
||||
[assembly: InternalsVisibleTo("ANX.Framework.ContentPipeline")]
|
||||
|
@ -106,20 +106,25 @@ namespace ANX.Framework.Windows.GL3
|
||||
public GameHost CreateGameHost(Game game)
|
||||
{
|
||||
logger.Info("creating OpenGL3 GameHost");
|
||||
return new WindowsGameHost(game);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new WindowsGameHost(game);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CreateEffect
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect managedEffect, Stream byteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
return new EffectGL3(managedEffect, byteCode);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect managedEffect,
|
||||
Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
{
|
||||
return new EffectGL3(managedEffect, vertexShaderByteCode, pixelShaderByteCode);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
return new EffectGL3(managedEffect, vertexShaderByteCode, pixelShaderByteCode);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -127,7 +132,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
INativeGraphicsDevice IRenderSystemCreator.CreateGraphicsDevice(
|
||||
PresentationParameters presentationParameters)
|
||||
{
|
||||
return new GraphicsDeviceWindowsGL3(presentationParameters);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new GraphicsDeviceWindowsGL3(presentationParameters);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -144,7 +150,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
public INativeTexture2D CreateTexture(GraphicsDevice graphics,
|
||||
SurfaceFormat surfaceFormat, int width, int height, int mipCount)
|
||||
{
|
||||
return new Texture2DGL3(surfaceFormat, width, height, mipCount);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new Texture2DGL3(surfaceFormat, width, height, mipCount);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -161,7 +168,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
public INativeBuffer CreateIndexBuffer(GraphicsDevice graphics,
|
||||
IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
return new IndexBufferGL3(size, indexCount, usage);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new IndexBufferGL3(size, indexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -179,7 +187,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
VertexDeclaration vertexDeclaration, int vertexCount,
|
||||
BufferUsage usage)
|
||||
{
|
||||
return new VertexBufferGL3(vertexDeclaration, vertexCount, usage);
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new VertexBufferGL3(vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -190,7 +199,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>Native Blend State.</returns>
|
||||
public INativeBlendState CreateBlendState()
|
||||
{
|
||||
return new BlendStateGL3();
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new BlendStateGL3();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -201,7 +211,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>Native Rasterizer State.</returns>
|
||||
public INativeRasterizerState CreateRasterizerState()
|
||||
{
|
||||
return new RasterizerStateGL3();
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new RasterizerStateGL3();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -212,7 +223,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>Native Depth Stencil State.</returns>
|
||||
public INativeDepthStencilState CreateDepthStencilState()
|
||||
{
|
||||
return new DepthStencilStateGL3();
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new DepthStencilStateGL3();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -223,7 +235,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>Native Sampler State.</returns>
|
||||
public INativeSamplerState CreateSamplerState()
|
||||
{
|
||||
return new SamplerStateGL3();
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new SamplerStateGL3();
|
||||
}
|
||||
#endregion
|
||||
|
||||
@ -235,7 +248,9 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>Byte code of the shader.</returns>
|
||||
public byte[] GetShaderByteCode(PreDefinedShader type)
|
||||
{
|
||||
if (type == PreDefinedShader.SpriteBatch)
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
if (type == PreDefinedShader.SpriteBatch)
|
||||
{
|
||||
return ShaderByteCode.SpriteBatchByteCode;
|
||||
}
|
||||
@ -271,7 +286,9 @@ namespace ANX.Framework.Windows.GL3
|
||||
/// <returns>List of graphics adapters.</returns>
|
||||
public ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
var result = new List<GraphicsAdapter>();
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
var result = new List<GraphicsAdapter>();
|
||||
foreach (DisplayDevice device in DisplayDevice.AvailableDisplays)
|
||||
{
|
||||
var displayModeCollection = new DisplayModeCollection();
|
||||
@ -330,7 +347,8 @@ namespace ANX.Framework.Windows.GL3
|
||||
DepthFormat preferredDepthFormat, int preferredMultiSampleCount,
|
||||
RenderTargetUsage usage)
|
||||
{
|
||||
return new RenderTarget2DGL3(width, height, mipMap, preferredFormat,
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
return new RenderTarget2DGL3(width, height, mipMap, preferredFormat,
|
||||
preferredDepthFormat, preferredMultiSampleCount, usage);
|
||||
}
|
||||
#endregion
|
||||
|
@ -32,7 +32,7 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.5.7.0")]
|
||||
[assembly: AssemblyFileVersion("0.5.7.0")]
|
||||
[assembly: AssemblyVersion("0.5.8.0")]
|
||||
[assembly: AssemblyFileVersion("0.5.8.0")]
|
||||
|
||||
[assembly: InternalsVisibleTo("ANX.Framework.ContentPipeline")]
|
||||
|
@ -89,53 +89,62 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
public GameHost CreateGameHost(Game game)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new WindowsGameHost(game);
|
||||
}
|
||||
|
||||
public INativeGraphicsDevice CreateGraphicsDevice(PresentationParameters presentationParameters)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new GraphicsDeviceWindowsDX11_1(presentationParameters);
|
||||
}
|
||||
|
||||
public INativeBuffer CreateIndexBuffer(GraphicsDevice graphics, IndexElementSize size, int indexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new IndexBuffer_DX 11(graphics, size, indexCount, usage);
|
||||
}
|
||||
|
||||
public INativeBuffer CreateVertexBuffer(GraphicsDevice graphics, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
return new VertexBuffer_DX11(graphics, vertexDeclaration, vertexCount, usage);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect effect, Stream vertexShaderByteCode, Stream pixelShaderByteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new Effect_DX11(graphics, vertexShaderByteCode, pixelShaderByteCode);
|
||||
}
|
||||
|
||||
public INativeEffect CreateEffect(GraphicsDevice graphics, Effect effect, System.IO.Stream byteCode)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
//return new Effect_DX11(graphics, byteCode);
|
||||
}
|
||||
|
||||
public Texture2D CreateTexture(GraphicsDevice graphics, string fileName)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
//GraphicsDeviceWindowsDX10 graphicsDX10 = graphics.NativeDevice as GraphicsDeviceWindowsDX10;
|
||||
//SharpDX.Direct3D10.Texture2D nativeTexture = SharpDX.Direct3D10.Texture2D.FromFile<SharpDX.Direct3D10.Texture2D>(graphicsDX10.NativeDevice, fileName);
|
||||
//Texture2D_DX10 texture = new Texture2D_DX10(graphics, nativeTexture.Description.Width, nativeTexture.Description.Height);
|
||||
//texture.NativeTexture = nativeTexture;
|
||||
|
||||
//return texture;
|
||||
}
|
||||
|
||||
public Texture2D CreateTexture(GraphicsDevice graphics, SurfaceFormat surfaceFormat, int width, int height, int mipCount, byte[] colorData)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
||||
/*
|
||||
@ -205,36 +214,48 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
public INativeBlendState CreateBlendState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public INativeRasterizerState CreateRasterizerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public INativeDepthStencilState CreateDepthStencilState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public INativeSamplerState CreateSamplerState()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public byte[] GetShaderByteCode(PreDefinedShader type)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<GraphicsAdapter> GetAdapterList()
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@ -247,6 +268,8 @@ namespace ANX.RenderSystem.Windows.DX11
|
||||
|
||||
public Framework.NonXNA.RenderSystem.INativeRenderTarget2D CreateRenderTarget(GraphicsDevice graphics, int width, int height, bool mipMap, SurfaceFormat preferredFormat, DepthFormat preferredDepthFormat, int preferredMultiSampleCount, RenderTargetUsage usage)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreventRenderSystemChange();
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("0.1.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.2.0")]
|
||||
[assembly: AssemblyVersion("0.1.3.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.3.0")]
|
||||
|
@ -17,7 +17,6 @@ namespace Kinect
|
||||
MotionSensingDeviceState kinectState;
|
||||
|
||||
public Game1()
|
||||
: base("DirectX10", "Kinect")
|
||||
{
|
||||
graphics = new GraphicsDeviceManager(this);
|
||||
Content.RootDirectory = "SampleContent";
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using ANX.Framework.NonXNA;
|
||||
|
||||
namespace Kinect
|
||||
{
|
||||
@ -10,6 +11,8 @@ namespace Kinect
|
||||
/// </summary>
|
||||
static void Main(string[] args)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreferredInputSystem = "Kinect";
|
||||
|
||||
using (Game1 game = new Game1())
|
||||
{
|
||||
game.Run();
|
||||
|
@ -77,7 +77,6 @@ namespace WindowsGame1
|
||||
private int lastFps = 60;
|
||||
|
||||
public Game1()
|
||||
: base("DirectX10")
|
||||
{
|
||||
graphics = new GraphicsDeviceManager(this);
|
||||
graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>(graphics_PreparingDeviceSettings);
|
||||
|
@ -65,7 +65,6 @@ namespace TextRendering
|
||||
SpriteFont debugFont;
|
||||
|
||||
public Game1()
|
||||
: base("OpenGL3")
|
||||
{
|
||||
graphics = new GraphicsDeviceManager(this);
|
||||
graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>(graphics_PreparingDeviceSettings);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using ANX.Framework.NonXNA;
|
||||
|
||||
namespace TextRendering
|
||||
{
|
||||
@ -10,6 +11,8 @@ namespace TextRendering
|
||||
/// </summary>
|
||||
static void Main(string[] args)
|
||||
{
|
||||
AddInSystemFactory.Instance.PreferredRenderSystem = "OpenGL3";
|
||||
|
||||
using (Game1 game = new Game1())
|
||||
{
|
||||
game.Run();
|
||||
|
@ -64,8 +64,7 @@ namespace WindowsGame1
|
||||
GraphicsDeviceManager graphics;
|
||||
SpriteBatch spriteBatch;
|
||||
|
||||
public Game1(string renderSystem, string inputSystem, string audioSystem)
|
||||
: base(renderSystem, inputSystem, audioSystem)
|
||||
public Game1()
|
||||
{
|
||||
graphics = new GraphicsDeviceManager(this);
|
||||
Content.RootDirectory = "SampleContent";
|
||||
|
@ -19,7 +19,11 @@ namespace WindowsGame1
|
||||
AddInSelector selector = new AddInSelector();
|
||||
if (selector.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
||||
{
|
||||
using (Game1 game = new Game1(selector.cbRenderSystem.Text, selector.cbInputSystems.CheckedItems[0].ToString(), selector.cbAudioSystem.Text))
|
||||
AddInSystemFactory.Instance.PreferredRenderSystem = selector.cbRenderSystem.Text;
|
||||
AddInSystemFactory.Instance.PreferredSoundSystem = selector.cbAudioSystem.Text;
|
||||
AddInSystemFactory.Instance.PreferredInputSystem = selector.cbInputSystems.CheckedItems[0].ToString();
|
||||
|
||||
using (Game1 game = new Game1())
|
||||
{
|
||||
game.Run();
|
||||
}
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.0.1.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.1.0")]
|
||||
[assembly: AssemblyVersion("0.0.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.2.0")]
|
||||
|
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.0.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.2.0")]
|
||||
[assembly: AssemblyVersion("0.0.3.0")]
|
||||
[assembly: AssemblyFileVersion("0.0.3.0")]
|
||||
|
Loading…
x
Reference in New Issue
Block a user