190 lines
4.8 KiB
C#
Raw Normal View History

#region Using Statements
2011-10-31 05:36:24 +00:00
using System;
using System.IO;
using System.Runtime.InteropServices;
using ANX.Framework.NonXNA;
using ANX.Framework.NonXNA.RenderSystem;
2011-10-31 05:36:24 +00:00
#endregion // Using Statements
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
2011-10-31 05:36:24 +00:00
namespace ANX.Framework.Graphics
{
public class Texture2D : Texture, IGraphicsResource
{
#region Private
protected internal int width;
protected internal int height;
2011-10-31 05:36:24 +00:00
private INativeTexture2D nativeTexture2D;
private INativeTexture2D NativeTexture2D
{
get
{
if (nativeTexture2D == null)
{
CreateNativeTextureSurface();
}
return nativeTexture2D;
}
}
#endregion
#region Public
public Rectangle Bounds
{
get
{
return new Rectangle(0, 0, this.width, this.height);
}
}
public int Width
{
get
{
return this.width;
}
}
public int Height
{
get
{
return this.height;
}
}
#endregion
#region Constructor (TODO)
internal Texture2D(GraphicsDevice graphicsDevice)
: base(graphicsDevice)
{
}
2011-10-31 05:36:24 +00:00
public Texture2D(GraphicsDevice graphicsDevice, int width, int height)
: base(graphicsDevice)
{
this.width = width;
this.height = height;
base.levelCount = 1;
base.format = SurfaceFormat.Color;
CreateNativeTextureSurface();
2011-10-31 05:36:24 +00:00
}
public Texture2D(GraphicsDevice graphicsDevice, int width, int height,
[MarshalAsAttribute(UnmanagedType.U1)] bool mipMap, SurfaceFormat format)
2011-10-31 05:36:24 +00:00
: base(graphicsDevice)
{
this.width = width;
this.height = height;
base.levelCount = 1; //TODO: mipmap paramter?!?!?
base.format = format;
CreateNativeTextureSurface();
2011-10-31 05:36:24 +00:00
}
#endregion
2011-10-31 05:36:24 +00:00
#region FromStream (TODO)
public static Texture2D FromStream(GraphicsDevice graphicsDevice,
Stream stream)
2011-10-31 05:36:24 +00:00
{
throw new NotImplementedException();
}
public static Texture2D FromStream(GraphicsDevice graphicsDevice,
Stream stream, int width, int height,
[MarshalAsAttribute(UnmanagedType.U1)] bool zoom)
2011-10-31 05:36:24 +00:00
{
throw new NotImplementedException();
}
#endregion
2011-10-31 05:36:24 +00:00
#region GetData
public void GetData<T>(int level, Nullable<Rectangle> rect, T[] data,
int startIndex, int elementCount) where T : struct
2011-10-31 05:36:24 +00:00
{
NativeTexture2D.GetData(level, rect, data, startIndex, elementCount);
2011-10-31 05:36:24 +00:00
}
public void GetData<T>(T[] data) where T : struct
{
NativeTexture.GetData(data);
2011-10-31 05:36:24 +00:00
}
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
{
NativeTexture.GetData(data, startIndex, elementCount);
}
#endregion
2011-10-31 05:36:24 +00:00
#region SetData
public void SetData<T>(int level, Nullable<Rectangle> rect, T[] data,
int startIndex, int elementCount) where T : struct
{
NativeTexture2D.SetData(level, rect, data, startIndex, elementCount);
2011-10-31 05:36:24 +00:00
}
public void SetData<T>(T[] data) where T : struct
{
NativeTexture.SetData<T>(GraphicsDevice, data);
2011-10-31 05:36:24 +00:00
}
public void SetData<T>(T[] data, int startIndex, int elementCount) where T : struct
{
NativeTexture.SetData<T>(GraphicsDevice, data, startIndex, elementCount);
}
#endregion
#region SaveAsJpeg
public void SaveAsJpeg(Stream stream, int width, int height)
{
NativeTexture2D.SaveAsJpeg(stream, width, height);
}
#endregion
#region SaveAsPng
public void SaveAsPng(Stream stream, int width, int height)
{
NativeTexture2D.SaveAsPng(stream, width, height);
}
#endregion
#region Dispose
public override void Dispose()
2011-10-31 05:36:24 +00:00
{
base.Dispose(true);
2011-10-31 05:36:24 +00:00
}
protected override void Dispose(
[MarshalAs(UnmanagedType.U1)] bool disposeManaged)
2011-10-31 05:36:24 +00:00
{
base.Dispose(disposeManaged);
}
#endregion
#region ReCreateNativeTextureSurface
internal override void ReCreateNativeTextureSurface()
{
CreateNativeTextureSurface();
}
#endregion
#region CreateNativeTextureSurface
private void CreateNativeTextureSurface()
{
nativeTexture2D =
AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>().CreateTexture(GraphicsDevice, format, width, height, levelCount);
base.nativeTexture = nativeTexture2D;
}
#endregion
2011-10-31 05:36:24 +00:00
}
}