Fixed the StorageDevice and StorageContainer and native implementations

This commit is contained in:
SND\AstrorEnales_cp 2012-10-13 14:55:06 +00:00 committed by Konstantin Koch
parent 0b9acc40ee
commit 4fdad340d3
40 changed files with 339 additions and 288 deletions

View File

@ -116,7 +116,6 @@
<Folder Include="Strukturen\Content\MediaTypeReaders\" /> <Folder Include="Strukturen\Content\MediaTypeReaders\" />
<Folder Include="Strukturen\Content\PrimitiveTypeReaders\" /> <Folder Include="Strukturen\Content\PrimitiveTypeReaders\" />
<Folder Include="Strukturen\Content\SystemTypeReaders\" /> <Folder Include="Strukturen\Content\SystemTypeReaders\" />
<Folder Include="Strukturen\Design\GamerServices\" />
<Folder Include="Strukturen\Input\MotionSensing\" /> <Folder Include="Strukturen\Input\MotionSensing\" />
<Folder Include="Strukturen\Input\Touch\" /> <Folder Include="Strukturen\Input\Touch\" />
<Folder Include="Strukturen\Net\" /> <Folder Include="Strukturen\Net\" />

View File

@ -116,7 +116,6 @@
<Folder Include="Strukturen\Content\MediaTypeReaders\" /> <Folder Include="Strukturen\Content\MediaTypeReaders\" />
<Folder Include="Strukturen\Content\PrimitiveTypeReaders\" /> <Folder Include="Strukturen\Content\PrimitiveTypeReaders\" />
<Folder Include="Strukturen\Content\SystemTypeReaders\" /> <Folder Include="Strukturen\Content\SystemTypeReaders\" />
<Folder Include="Strukturen\Design\GamerServices\" />
<Folder Include="Strukturen\Input\MotionSensing\" /> <Folder Include="Strukturen\Input\MotionSensing\" />
<Folder Include="Strukturen\Input\Touch\" /> <Folder Include="Strukturen\Input\Touch\" />
<Folder Include="Strukturen\Net\" /> <Folder Include="Strukturen\Net\" />

View File

@ -117,7 +117,6 @@
<Folder Include="Strukturen\Content\MediaTypeReaders\" /> <Folder Include="Strukturen\Content\MediaTypeReaders\" />
<Folder Include="Strukturen\Content\PrimitiveTypeReaders\" /> <Folder Include="Strukturen\Content\PrimitiveTypeReaders\" />
<Folder Include="Strukturen\Content\SystemTypeReaders\" /> <Folder Include="Strukturen\Content\SystemTypeReaders\" />
<Folder Include="Strukturen\Design\GamerServices\" />
<Folder Include="Strukturen\Input\MotionSensing\" /> <Folder Include="Strukturen\Input\MotionSensing\" />
<Folder Include="Strukturen\Input\Touch\" /> <Folder Include="Strukturen\Input\Touch\" />
<Folder Include="Strukturen\Net\" /> <Folder Include="Strukturen\Net\" />

View File

@ -118,7 +118,6 @@
<Folder Include="Strukturen\Content\MediaTypeReaders\" /> <Folder Include="Strukturen\Content\MediaTypeReaders\" />
<Folder Include="Strukturen\Content\PrimitiveTypeReaders\" /> <Folder Include="Strukturen\Content\PrimitiveTypeReaders\" />
<Folder Include="Strukturen\Content\SystemTypeReaders\" /> <Folder Include="Strukturen\Content\SystemTypeReaders\" />
<Folder Include="Strukturen\Design\GamerServices\" />
<Folder Include="Strukturen\Input\MotionSensing\" /> <Folder Include="Strukturen\Input\MotionSensing\" />
<Folder Include="Strukturen\Input\Touch\" /> <Folder Include="Strukturen\Input\Touch\" />
<Folder Include="Strukturen\Net\" /> <Folder Include="Strukturen\Net\" />

View File

@ -11,6 +11,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO #if !WINDOWSMETRO
[Developer("AstrorEnales")] [Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Untested)]
public class ANXFieldDescriptor : PropertyDescriptor public class ANXFieldDescriptor : PropertyDescriptor
{ {
private FieldInfo field; private FieldInfo field;

View File

@ -11,6 +11,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO #if !WINDOWSMETRO
[Developer("AstrorEnales")] [Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Untested)]
public class ANXPropertyDescriptor : PropertyDescriptor public class ANXPropertyDescriptor : PropertyDescriptor
{ {
private PropertyInfo property; private PropertyInfo property;

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class BoundingBoxConverter : MathTypeConverter public class BoundingBoxConverter : MathTypeConverter
{ {
public BoundingBoxConverter() public BoundingBoxConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class BoundingSphereConverter : MathTypeConverter public class BoundingSphereConverter : MathTypeConverter
{ {
public BoundingSphereConverter() public BoundingSphereConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class ColorConverter : MathTypeConverter public class ColorConverter : MathTypeConverter
{ {
public ColorConverter() public ColorConverter()

View File

@ -19,6 +19,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Untested)]
public class MathTypeConverter : ExpandableObjectConverter public class MathTypeConverter : ExpandableObjectConverter
{ {
protected PropertyDescriptorCollection propertyDescriptions; protected PropertyDescriptorCollection propertyDescriptions;

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class MatrixConverter : MathTypeConverter public class MatrixConverter : MathTypeConverter
{ {
public MatrixConverter() public MatrixConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class PlaneConverter : MathTypeConverter public class PlaneConverter : MathTypeConverter
{ {
public PlaneConverter() public PlaneConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class PointConverter : MathTypeConverter public class PointConverter : MathTypeConverter
{ {
public PointConverter() public PointConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class QuaternionConverter : MathTypeConverter public class QuaternionConverter : MathTypeConverter
{ {
public QuaternionConverter() public QuaternionConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class RayConverter : MathTypeConverter public class RayConverter : MathTypeConverter
{ {
public RayConverter() public RayConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class RectangleConverter : MathTypeConverter public class RectangleConverter : MathTypeConverter
{ {
public RectangleConverter() public RectangleConverter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class Vector2Converter : MathTypeConverter public class Vector2Converter : MathTypeConverter
{ {
public Vector2Converter() public Vector2Converter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class Vector3Converter : MathTypeConverter public class Vector3Converter : MathTypeConverter
{ {
public Vector3Converter() public Vector3Converter()

View File

@ -12,6 +12,7 @@ namespace ANX.Framework.Design
{ {
#if !WINDOWSMETRO //TODO: search replacement for Win8 #if !WINDOWSMETRO //TODO: search replacement for Win8
[Developer("GinieDP")] [Developer("GinieDP")]
[TestState(TestStateAttribute.TestState.Tested)]
public class Vector4Converter : MathTypeConverter public class Vector4Converter : MathTypeConverter
{ {
public Vector4Converter() public Vector4Converter()

View File

@ -600,14 +600,8 @@ namespace ANX.Framework.Graphics
public Rectangle ScissorRectangle public Rectangle ScissorRectangle
{ {
get get { return NativeDevice.ScissorRectangle; }
{ set { NativeDevice.ScissorRectangle = value; }
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
} }
public GraphicsDeviceStatus GraphicsDeviceStatus public GraphicsDeviceStatus GraphicsDeviceStatus

View File

@ -31,8 +31,8 @@ namespace ANX.Framework.Graphics
OneOverWidth = 1f / width; OneOverWidth = 1f / width;
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
base.levelCount = 1; base.LevelCount = 1;
base.format = SurfaceFormat.Color; base.Format = SurfaceFormat.Color;
this.DepthStencilFormat = DepthFormat.None; this.DepthStencilFormat = DepthFormat.None;
this.MultiSampleCount = 0; this.MultiSampleCount = 0;
@ -53,8 +53,8 @@ namespace ANX.Framework.Graphics
OneOverWidth = 1f / width; OneOverWidth = 1f / width;
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
base.levelCount = 1; base.LevelCount = 1;
base.format = preferredFormat; base.Format = preferredFormat;
this.DepthStencilFormat = preferredDepthFormat; this.DepthStencilFormat = preferredDepthFormat;
this.MultiSampleCount = 0; this.MultiSampleCount = 0;
@ -76,8 +76,8 @@ namespace ANX.Framework.Graphics
OneOverWidth = 1f / width; OneOverWidth = 1f / width;
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
base.levelCount = 1; base.LevelCount = 1;
base.format = preferredFormat; base.Format = preferredFormat;
this.DepthStencilFormat = preferredDepthFormat; this.DepthStencilFormat = preferredDepthFormat;
this.MultiSampleCount = preferredMultiSampleCount; this.MultiSampleCount = preferredMultiSampleCount;

View File

@ -11,27 +11,12 @@ namespace ANX.Framework.Graphics
[TestState(TestStateAttribute.TestState.Untested)] [TestState(TestStateAttribute.TestState.Untested)]
public abstract class Texture : GraphicsResource public abstract class Texture : GraphicsResource
{ {
protected internal int levelCount; internal INativeTexture nativeTexture;
protected internal SurfaceFormat format;
protected internal INativeTexture nativeTexture;
public int LevelCount public int LevelCount { get; internal set; }
{ public SurfaceFormat Format { get; internal set; }
get
{
return this.levelCount;
}
}
public SurfaceFormat Format internal INativeTexture NativeTexture
{
get
{
return this.format;
}
}
internal INativeTexture NativeTexture
{ {
get get
{ {
@ -44,7 +29,7 @@ namespace ANX.Framework.Graphics
} }
} }
public Texture(GraphicsDevice graphicsDevice) internal Texture(GraphicsDevice graphicsDevice)
: base(graphicsDevice) : base(graphicsDevice)
{ {
base.GraphicsDevice.ResourceCreated += GraphicsDevice_ResourceCreated; base.GraphicsDevice.ResourceCreated += GraphicsDevice_ResourceCreated;

View File

@ -75,8 +75,8 @@ namespace ANX.Framework.Graphics
OneOverWidth = 1f / width; OneOverWidth = 1f / width;
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
base.levelCount = 1; base.LevelCount = 1;
base.format = SurfaceFormat.Color; base.Format = SurfaceFormat.Color;
CreateNativeTextureSurface(); CreateNativeTextureSurface();
} }
@ -91,8 +91,8 @@ namespace ANX.Framework.Graphics
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
// TODO: pass the mipmap parameter to the creation of the texture to let the graphics card generate mipmaps! // TODO: pass the mipmap parameter to the creation of the texture to let the graphics card generate mipmaps!
base.levelCount = 1; base.LevelCount = 1;
base.format = format; base.Format = format;
CreateNativeTextureSurface(); CreateNativeTextureSurface();
} }
@ -105,8 +105,8 @@ namespace ANX.Framework.Graphics
OneOverWidth = 1f / width; OneOverWidth = 1f / width;
OneOverHeight = 1f / height; OneOverHeight = 1f / height;
base.levelCount = mipCount; base.LevelCount = mipCount;
base.format = format; base.Format = format;
CreateNativeTextureSurface(); CreateNativeTextureSurface();
} }
@ -196,7 +196,7 @@ namespace ANX.Framework.Graphics
private void CreateNativeTextureSurface() private void CreateNativeTextureSurface()
{ {
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>(); var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
nativeTexture2D = creator.CreateTexture(GraphicsDevice, format, width, height, levelCount); nativeTexture2D = creator.CreateTexture(GraphicsDevice, Format, width, height, LevelCount);
base.nativeTexture = nativeTexture2D; base.nativeTexture = nativeTexture2D;
} }
#endregion #endregion

View File

@ -7,6 +7,7 @@ using ANX.Framework.NonXNA.Development;
namespace ANX.Framework.Graphics namespace ANX.Framework.Graphics
{ {
[PercentageComplete(100)] [PercentageComplete(100)]
[TestState(TestStateAttribute.TestState.Untested)]
public struct VertexBufferBinding public struct VertexBufferBinding
{ {
#region Private #region Private

View File

@ -1,5 +1,4 @@
using System; using System;
using ANX.Framework.Storage;
// This file is part of the ANX.Framework created by the // This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license. // "ANX.Framework developer group" and released under the Ms-PL license.
@ -9,21 +8,11 @@ namespace ANX.Framework.NonXNA.PlatformSystem
{ {
public interface INativeStorageDevice public interface INativeStorageDevice
{ {
long FreeSpace long FreeSpace { get; }
{ long TotalSpace { get; }
get; bool IsConnected { get; }
} string StoragePath { get; }
long TotalSpace void DeleteContainer(string titleName);
{
get;
}
bool IsConnected
{
get;
}
void DeleteContainer(string titleName);
} }
} }

View File

@ -47,5 +47,6 @@ namespace ANX.Framework.NonXNA
void ResizeBuffers(PresentationParameters presentationParameters); void ResizeBuffers(PresentationParameters presentationParameters);
bool VSync { get; set; } bool VSync { get; set; }
Rectangle ScissorRectangle { get; set; }
} }
} }

View File

@ -9,6 +9,7 @@ using ANX.Framework.NonXNA.PlatformSystem;
namespace ANX.Framework.Storage namespace ANX.Framework.Storage
{ {
[PercentageComplete(100)]
[Developer("AstrorEnales")] [Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Untested)] [TestState(TestStateAttribute.TestState.Untested)]
public class StorageContainer : IDisposable public class StorageContainer : IDisposable
@ -18,17 +19,17 @@ namespace ANX.Framework.Storage
#region Public #region Public
public event EventHandler<EventArgs> Disposing; public event EventHandler<EventArgs> Disposing;
public string DisplayName { get; protected set; } public string DisplayName { get; private set; }
public StorageDevice StorageDevice { get; protected set; } public StorageDevice StorageDevice { get; private set; }
public bool IsDisposed { get; protected set; } public bool IsDisposed { get; private set; }
internal PlayerIndex PlayerIndex { get; private set; }
#endregion #endregion
internal StorageContainer(StorageDevice device, PlayerIndex player, string displayName) internal StorageContainer(StorageDevice device, PlayerIndex player, string displayName)
{ {
StorageDevice = device; StorageDevice = device;
DisplayName = displayName; DisplayName = displayName;
PlayerIndex = player;
// TODO: player!
nativeImplementation = PlatformSystem.Instance.CreateStorageContainer(this); nativeImplementation = PlatformSystem.Instance.CreateStorageContainer(this);
} }
@ -98,8 +99,7 @@ namespace ANX.Framework.Storage
return OpenFile(file, fileMode, fileAccess, FileShare.None); return OpenFile(file, fileMode, fileAccess, FileShare.None);
} }
public Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, public Stream OpenFile(string file, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)
FileShare fileShare)
{ {
return nativeImplementation.OpenFile(file, fileMode, fileAccess, fileShare); return nativeImplementation.OpenFile(file, fileMode, fileAccess, fileShare);
} }

View File

@ -9,15 +9,17 @@ using ANX.Framework.NonXNA.PlatformSystem;
namespace ANX.Framework.Storage namespace ANX.Framework.Storage
{ {
[PercentageComplete(100)]
[Developer("AstrorEnales")] [Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Untested)] [TestState(TestStateAttribute.TestState.Untested)]
public sealed class StorageDevice public sealed class StorageDevice
{ {
#region Private #region Private
private INativeStorageDevice nativeImplementation; private readonly PlayerIndex playerIndex;
private readonly INativeStorageDevice nativeImplementation;
private static Func<PlayerIndex, int, int, StorageDevice> openDeviceDelegate = null; private static Func<PlayerIndex, int, int, StorageDevice> openDeviceDelegate;
private Func<string, StorageContainer> openContainerDelegate = null; private Func<string, StorageContainer> openContainerDelegate;
#endregion #endregion
#region Public #region Public
@ -25,57 +27,40 @@ namespace ANX.Framework.Storage
public static event EventHandler<EventArgs> DeviceChanged; public static event EventHandler<EventArgs> DeviceChanged;
#pragma warning restore 0067 #pragma warning restore 0067
public long FreeSpace public long FreeSpace
{ {
get get { return nativeImplementation.FreeSpace; }
{ }
return nativeImplementation.FreeSpace;
}
}
public bool IsConnected public bool IsConnected
{ {
get get { return nativeImplementation.IsConnected; }
{ }
return nativeImplementation.IsConnected;
}
}
public long TotalSpace public long TotalSpace
{ {
get get { return nativeImplementation.TotalSpace; }
{ }
return nativeImplementation.TotalSpace;
}
}
internal string StoragePath internal string StoragePath
{ {
get; get { return nativeImplementation.StoragePath; }
private set; }
} #endregion
internal PlayerIndex PlayerIndex
{
get;
private set;
}
#endregion
#region Constructor #region Constructor
internal StorageDevice(PlayerIndex player, int sizeInBytes, int directoryCount) internal StorageDevice(PlayerIndex player, int sizeInBytes, int directoryCount)
{ {
playerIndex = player;
nativeImplementation = PlatformSystem.Instance.CreateStorageDevice(this, player, sizeInBytes, directoryCount); nativeImplementation = PlatformSystem.Instance.CreateStorageDevice(this, player, sizeInBytes, directoryCount);
} }
#endregion #endregion
#region BeginOpenContainer #region BeginOpenContainer
public IAsyncResult BeginOpenContainer(string displayName, public IAsyncResult BeginOpenContainer(string displayName, AsyncCallback callback, Object state)
AsyncCallback callback, Object state)
{ {
if (openContainerDelegate != null) if (openContainerDelegate != null)
throw new InvalidOperationException( throw new InvalidOperationException("There is currently a StorageContainer request pending. " +
"There is currently a StorageContainer request pending. " +
"Please let this request finish."); "Please let this request finish.");
openContainerDelegate = OpenStorageContainer; openContainerDelegate = OpenStorageContainer;
@ -88,35 +73,26 @@ namespace ANX.Framework.Storage
{ {
return BeginShowSelector(PlayerIndex.One, 0, 0, callback, state); return BeginShowSelector(PlayerIndex.One, 0, 0, callback, state);
} }
#endregion
#region BeginShowSelector public static IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount, AsyncCallback callback, Object state)
public static IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount,
AsyncCallback callback, Object state)
{ {
return BeginShowSelector(PlayerIndex.One, sizeInBytes, directoryCount, return BeginShowSelector(PlayerIndex.One, sizeInBytes, directoryCount, callback, state);
callback, state);
} }
#endregion
#region BeginShowSelector public static IAsyncResult BeginShowSelector(PlayerIndex player, AsyncCallback callback, Object state)
public static IAsyncResult BeginShowSelector(PlayerIndex player,
AsyncCallback callback, Object state)
{ {
return BeginShowSelector(player, 0, 0, callback, state); return BeginShowSelector(player, 0, 0, callback, state);
} }
#endregion
#region BeginShowSelector public static IAsyncResult BeginShowSelector(PlayerIndex player, int sizeInBytes, int directoryCount,
public static IAsyncResult BeginShowSelector(PlayerIndex player, AsyncCallback callback, Object state)
int sizeInBytes, int directoryCount, AsyncCallback callback, Object state)
{ {
if (openDeviceDelegate != null) if (openDeviceDelegate != null)
throw new InvalidOperationException("There is currently a StorageDevice request pending. Please let this request finish."); throw new InvalidOperationException(
"There is currently a StorageDevice request pending. Please let this request finish.");
openDeviceDelegate = OpenStorageDevice; openDeviceDelegate = OpenStorageDevice;
return openDeviceDelegate.BeginInvoke(player, sizeInBytes, directoryCount, return openDeviceDelegate.BeginInvoke(player, sizeInBytes, directoryCount, callback, state);
callback, state);
} }
#endregion #endregion
@ -162,8 +138,7 @@ namespace ANX.Framework.Storage
#endregion #endregion
#region OpenStorageDevice #region OpenStorageDevice
private static StorageDevice OpenStorageDevice(PlayerIndex player, private static StorageDevice OpenStorageDevice(PlayerIndex player, int sizeInBytes, int directoryCount)
int sizeInBytes, int directoryCount)
{ {
return new StorageDevice(player, sizeInBytes, directoryCount); return new StorageDevice(player, sizeInBytes, directoryCount);
} }
@ -172,7 +147,7 @@ namespace ANX.Framework.Storage
#region OpenStorageContainer #region OpenStorageContainer
private StorageContainer OpenStorageContainer(string displayName) private StorageContainer OpenStorageContainer(string displayName)
{ {
return new StorageContainer(this, PlayerIndex, displayName); return new StorageContainer(this, playerIndex, displayName);
} }
#endregion #endregion
} }

View File

@ -12,6 +12,7 @@ using ANX.Framework.NonXNA.Development;
namespace ANX.Framework.Storage namespace ANX.Framework.Storage
{ {
[PercentageComplete(95)]
[Developer("AstrorEnales")] [Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Untested)] [TestState(TestStateAttribute.TestState.Untested)]
public class StorageDeviceNotConnectedException : ExternalException public class StorageDeviceNotConnectedException : ExternalException

View File

@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection;
using ANX.Framework;
using ANX.Framework.NonXNA.PlatformSystem; using ANX.Framework.NonXNA.PlatformSystem;
using ANX.Framework.Storage; using ANX.Framework.Storage;
@ -12,21 +14,56 @@ namespace ANX.PlatformSystem.Linux
{ {
public class LinuxStorageContainer : INativeStorageContainer public class LinuxStorageContainer : INativeStorageContainer
{ {
private StorageContainer parent; private readonly StorageContainer parent;
private DirectoryInfo baseDirectory; private readonly DirectoryInfo baseDirectory;
public LinuxStorageContainer(StorageContainer setParent) public LinuxStorageContainer(StorageContainer setParent)
{ {
parent = setParent; parent = setParent;
baseDirectory = new DirectoryInfo(GetDirectoryForContainer());
string fullPath = Path.Combine(parent.StorageDevice.StoragePath,
parent.DisplayName);
baseDirectory = new DirectoryInfo(fullPath);
// fails silently if directory exists // fails silently if directory exists
baseDirectory.Create(); baseDirectory.Create();
} }
#region CreateDirectory private string GetDirectoryForContainer()
{
// TODO: check if Environment.GetFolderPath returns something useful under linux!
string result = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SavedGames");
result = Path.Combine(result, GetGameTitle());
result = Path.Combine(result, parent.DisplayName);
string playerSubDir;
switch (parent.PlayerIndex)
{
case PlayerIndex.One:
playerSubDir = "Player1";
break;
case PlayerIndex.Two:
playerSubDir = "Player2";
break;
case PlayerIndex.Three:
playerSubDir = "Player3";
break;
case PlayerIndex.Four:
playerSubDir = "Player4";
break;
default:
playerSubDir = "AllPlayers";
break;
}
return Path.Combine(result, playerSubDir);
}
private static string GetGameTitle()
{
var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly != null)
return Path.GetFileNameWithoutExtension(entryAssembly.Location);
throw new InvalidOperationException();
}
#region CreateDirectory
public void CreateDirectory(string directory) public void CreateDirectory(string directory)
{ {
baseDirectory.CreateSubdirectory(directory); baseDirectory.CreateSubdirectory(directory);

View File

@ -1,5 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection;
using ANX.Framework; using ANX.Framework;
using ANX.Framework.NonXNA.PlatformSystem; using ANX.Framework.NonXNA.PlatformSystem;
using ANX.Framework.Storage; using ANX.Framework.Storage;
@ -15,9 +16,8 @@ namespace ANX.PlatformSystem.Linux
/// </summary> /// </summary>
public class LinuxStorageDevice : INativeStorageDevice public class LinuxStorageDevice : INativeStorageDevice
{ {
private string storagePath; private readonly StorageDevice parent;
private StorageDevice parent; private readonly DriveInfo storageDrive;
private DriveInfo storageDrive;
#region Public #region Public
public long FreeSpace public long FreeSpace
@ -50,55 +50,62 @@ namespace ANX.PlatformSystem.Linux
} }
} }
public bool IsConnected public bool IsConnected
{
get { return storageDrive.IsReady; }
}
public string StoragePath { get; private set; }
#endregion
public LinuxStorageDevice(StorageDevice setParent, PlayerIndex player, int sizeInBytes, int directoryCount)
{ {
get parent = setParent;
{ StoragePath = GetDirectoryForContainer(player);
return storageDrive.IsReady; storageDrive = new DriveInfo(Path.GetPathRoot(StoragePath).Substring(0, 1));
} }
}
#endregion
#region Constructor private string GetDirectoryForContainer(PlayerIndex player)
public LinuxStorageDevice(StorageDevice setParent, PlayerIndex player, {
int sizeInBytes, int directoryCount) // TODO: check if Environment.GetFolderPath returns something useful under linux!
{ string result = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SavedGames");
parent = setParent; result = Path.Combine(result, GetGameTitle());
//result = Path.Combine(result, StorageContainer.DisplayName);
string playerSubDir;
switch (player)
{
case PlayerIndex.One:
playerSubDir = "Player1";
break;
case PlayerIndex.Two:
playerSubDir = "Player2";
break;
case PlayerIndex.Three:
playerSubDir = "Player3";
break;
case PlayerIndex.Four:
playerSubDir = "Player4";
break;
default:
playerSubDir = "AllPlayers";
break;
}
string playerPath; return Path.Combine(result, playerSubDir);
switch (player) }
{
case PlayerIndex.One:
playerPath = "Player1";
break;
case PlayerIndex.Two:
playerPath = "Player2";
break;
case PlayerIndex.Three:
playerPath = "Player3";
break;
case PlayerIndex.Four:
playerPath = "Player4";
break;
default:
playerPath = "AllPlayers";
break;
}
// TODO: find the correct linux location for this stuff! private static string GetGameTitle()
string myDocsPath = Environment.GetFolderPath( {
Environment.SpecialFolder.MyDocuments); var entryAssembly = Assembly.GetEntryAssembly();
storagePath = Path.Combine(myDocsPath, "SavedGames", playerPath); if (entryAssembly != null)
storagePath = Path.GetFullPath(storagePath); return Path.GetFileNameWithoutExtension(entryAssembly.Location);
storageDrive = new DriveInfo(Path.GetPathRoot(myDocsPath).Substring(0, 1));
} throw new InvalidOperationException();
#endregion }
#region DeleteContainer
public void DeleteContainer(string titleName) public void DeleteContainer(string titleName)
{ {
Directory.Delete(Path.Combine(parent.StoragePath, titleName), true); Directory.Delete(Path.Combine(parent.StoragePath, titleName), true);
} }
#endregion
} }
} }

View File

@ -33,9 +33,14 @@ namespace ANX.PlatformSystem.Metro
} }
} }
public string StoragePath
{
get { throw new NotImplementedException(); }
}
public void DeleteContainer(string titleName) public void DeleteContainer(string titleName)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
} }

View File

@ -1,5 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection;
using ANX.Framework; using ANX.Framework;
using ANX.Framework.NonXNA.PlatformSystem; using ANX.Framework.NonXNA.PlatformSystem;
using ANX.Framework.Storage; using ANX.Framework.Storage;
@ -12,9 +13,8 @@ namespace ANX.PlatformSystem.PsVita
{ {
public class PsVitaStorageDevice : INativeStorageDevice public class PsVitaStorageDevice : INativeStorageDevice
{ {
private string storagePath; private readonly StorageDevice parent;
private StorageDevice parent; private readonly DriveInfo storageDrive;
private DriveInfo storageDrive;
#region Public #region Public
public long FreeSpace public long FreeSpace
@ -47,55 +47,61 @@ namespace ANX.PlatformSystem.PsVita
} }
} }
public bool IsConnected public bool IsConnected
{
get { return storageDrive.IsReady; }
}
public string StoragePath { get; private set; }
#endregion
public PsVitaStorageDevice(StorageDevice setParent, PlayerIndex player, int sizeInBytes, int directoryCount)
{ {
get parent = setParent;
{ StoragePath = GetDirectoryForContainer(player);
return storageDrive.IsReady; storageDrive = new DriveInfo(Path.GetPathRoot(StoragePath).Substring(0, 1));
} }
}
#endregion
#region Constructor private string GetDirectoryForContainer(PlayerIndex player)
public PsVitaStorageDevice(StorageDevice setParent, PlayerIndex player, {
int sizeInBytes, int directoryCount) string result = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SavedGames");
{ result = Path.Combine(result, GetGameTitle());
parent = setParent; //result = Path.Combine(result, StorageContainer.DisplayName);
string playerSubDir;
switch (player)
{
case PlayerIndex.One:
playerSubDir = "Player1";
break;
case PlayerIndex.Two:
playerSubDir = "Player2";
break;
case PlayerIndex.Three:
playerSubDir = "Player3";
break;
case PlayerIndex.Four:
playerSubDir = "Player4";
break;
default:
playerSubDir = "AllPlayers";
break;
}
string playerPath; return Path.Combine(result, playerSubDir);
switch (player) }
{
case PlayerIndex.One:
playerPath = "Player1";
break;
case PlayerIndex.Two:
playerPath = "Player2";
break;
case PlayerIndex.Three:
playerPath = "Player3";
break;
case PlayerIndex.Four:
playerPath = "Player4";
break;
default:
playerPath = "AllPlayers";
break;
}
// TODO: find the correct PsVita location for this stuff! private static string GetGameTitle()
string myDocsPath = Environment.GetFolderPath( {
Environment.SpecialFolder.MyDocuments); var entryAssembly = Assembly.GetEntryAssembly();
storagePath = Path.Combine(myDocsPath, "SavedGames", playerPath); if (entryAssembly != null)
storagePath = Path.GetFullPath(storagePath); return Path.GetFileNameWithoutExtension(entryAssembly.Location);
storageDrive = new DriveInfo(Path.GetPathRoot(myDocsPath).Substring(0, 1));
} throw new InvalidOperationException();
#endregion }
#region DeleteContainer
public void DeleteContainer(string titleName) public void DeleteContainer(string titleName)
{ {
Directory.Delete(Path.Combine(parent.StoragePath, titleName), true); Directory.Delete(Path.Combine(parent.StoragePath, titleName), true);
} }
#endregion
} }
} }

View File

@ -12,19 +12,16 @@ namespace ANX.PlatformSystem.Windows
{ {
public class WindowsStorageContainer : INativeStorageContainer public class WindowsStorageContainer : INativeStorageContainer
{ {
private StorageContainer parent; private readonly StorageContainer parent;
private DirectoryInfo baseDirectory; private readonly DirectoryInfo baseDirectory;
public WindowsStorageContainer(StorageContainer setParent) public WindowsStorageContainer(StorageContainer setParent)
{ {
parent = setParent; parent = setParent;
baseDirectory = new DirectoryInfo(parent.StorageDevice.StoragePath);
string fullPath = Path.Combine(parent.StorageDevice.StoragePath,
parent.DisplayName);
baseDirectory = new DirectoryInfo(fullPath);
// fails silently if directory exists // fails silently if directory exists
baseDirectory.Create(); baseDirectory.Create();
} }
#region CreateDirectory #region CreateDirectory
public void CreateDirectory(string directory) public void CreateDirectory(string directory)

View File

@ -1,5 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection;
using ANX.Framework; using ANX.Framework;
using ANX.Framework.NonXNA.PlatformSystem; using ANX.Framework.NonXNA.PlatformSystem;
using ANX.Framework.Storage; using ANX.Framework.Storage;
@ -12,9 +13,8 @@ namespace ANX.PlatformSystem.Windows
{ {
public class WindowsStorageDevice : INativeStorageDevice public class WindowsStorageDevice : INativeStorageDevice
{ {
private string storagePath; private readonly StorageDevice parent;
private StorageDevice parent; private readonly DriveInfo storageDrive;
private DriveInfo storageDrive;
#region Public #region Public
public long FreeSpace public long FreeSpace
@ -47,54 +47,61 @@ namespace ANX.PlatformSystem.Windows
} }
} }
public bool IsConnected public bool IsConnected
{ {
get get { return storageDrive.IsReady; }
{ }
return storageDrive.IsReady;
}
}
#endregion
#region Constructor public string StoragePath { get; private set; }
public WindowsStorageDevice(StorageDevice setParent, PlayerIndex player, #endregion
int sizeInBytes, int directoryCount)
public WindowsStorageDevice(StorageDevice setParent, PlayerIndex player, int sizeInBytes, int directoryCount)
{ {
parent = setParent; parent = setParent;
StoragePath = GetDirectoryForContainer(player);
string playerPath; storageDrive = new DriveInfo(Path.GetPathRoot(StoragePath).Substring(0, 1));
switch (player)
{
case PlayerIndex.One:
playerPath = "Player1";
break;
case PlayerIndex.Two:
playerPath = "Player2";
break;
case PlayerIndex.Three:
playerPath = "Player3";
break;
case PlayerIndex.Four:
playerPath = "Player4";
break;
default:
playerPath = "AllPlayers";
break;
}
string myDocsPath = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments);
storagePath = Path.Combine(myDocsPath, "SavedGames", playerPath);
storagePath = Path.GetFullPath(storagePath);
storageDrive = new DriveInfo(Path.GetPathRoot(myDocsPath).Substring(0, 1));
} }
#endregion
#region DeleteContainer private string GetDirectoryForContainer(PlayerIndex player)
{
string result = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SavedGames");
result = Path.Combine(result, GetGameTitle());
//result = Path.Combine(result, StorageContainer.DisplayName);
string playerSubDir;
switch (player)
{
case PlayerIndex.One:
playerSubDir = "Player1";
break;
case PlayerIndex.Two:
playerSubDir = "Player2";
break;
case PlayerIndex.Three:
playerSubDir = "Player3";
break;
case PlayerIndex.Four:
playerSubDir = "Player4";
break;
default:
playerSubDir = "AllPlayers";
break;
}
return Path.Combine(result, playerSubDir);
}
private static string GetGameTitle()
{
var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly != null)
return Path.GetFileNameWithoutExtension(entryAssembly.Location);
throw new InvalidOperationException();
}
public void DeleteContainer(string titleName) public void DeleteContainer(string titleName)
{ {
Directory.Delete(Path.Combine(parent.StoragePath, titleName), true); Directory.Delete(Path.Combine(parent.StoragePath, titleName), true);
} }
#endregion }
}
} }

View File

@ -53,6 +53,18 @@ namespace ANX.RenderSystem.GL3
get { return nativeContext.VSync; } get { return nativeContext.VSync; }
set { nativeContext.VSync = value; } set { nativeContext.VSync = value; }
} }
public Rectangle ScissorRectangle
{
get
{
// TODO: test
var boxParams = new int[4];
GL.GetInteger(GetPName.ScissorBox, boxParams);
return new Rectangle(boxParams[0], boxParams[1], boxParams[2], boxParams[3]);
}
set { GL.Scissor(value.X, value.Y, value.Width, value.Height); }
}
#endregion #endregion
#region Constructor #region Constructor

View File

@ -29,17 +29,22 @@ namespace ANX.RenderSystem.PsVita
#endregion #endregion
#region Public #region Public
public bool VSync public bool VSync
{ {
get get { return true; }
{ set { }
return true; }
}
set public Rectangle ScissorRectangle
{ {
} get
} {
#endregion var rect = NativeContext.GetScissor();
return new Rectangle(rect.X, rect.Y, rect.Width, rect.Height);
}
set { NativeContext.SetScissor(value.X, value.Y, value.Width, value.Height); }
}
#endregion
#region Constructor #region Constructor
public PsVitaGraphicsDevice(PresentationParameters presentationParameters) public PsVitaGraphicsDevice(PresentationParameters presentationParameters)

View File

@ -613,5 +613,11 @@ namespace ANX.RenderSystem.Windows.DX10
return this.nativeDevice; return this.nativeDevice;
} }
} }
}
public Rectangle ScissorRectangle
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
} }

View File

@ -628,5 +628,11 @@ namespace ANX.RenderSystem.Windows.DX11
return this.nativeDevice; return this.nativeDevice;
} }
} }
public Rectangle ScissorRectangle
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
} }
} }

View File

@ -44,6 +44,12 @@ namespace ANX.RenderSystem.Windows.Metro
this.vSyncEnabled = value; this.vSyncEnabled = value;
} }
} }
public Rectangle ScissorRectangle
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
#endregion #endregion
#region Constructor #region Constructor