Fixed a performance problem in the Visual Studio extension where no importer or processor was selected for an asset. Fixed that the asset names for Uri encoded in the build output. Fixed that errors when serializing assets get logged. Sped up ImporterManager.GuessImporterByFileExtension, which caused performance problems if many assemblies are loaded into the current AppDomain. Made the AssimpImporter library deploy the binary files again (hopefully just a temporary solution until we've found a better way.) Provide a extension for TargetPlatform enum for getting the DisplayName of an entry. Changed that ProcessorManager.GetProcessorDisplayName doesn't throw an exception if no processor with the given name exists, which now mimicks the same behavior as in importerManager.GetImporterDisplayName.
209 lines
6.2 KiB
C#
209 lines
6.2 KiB
C#
#region Using Statements
|
|
using System;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using ANX.Framework.NonXNA;
|
|
using ANX.Framework.NonXNA.Development;
|
|
using ANX.Framework.NonXNA.RenderSystem;
|
|
|
|
#endregion
|
|
|
|
// 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
|
|
|
|
namespace ANX.Framework.Graphics
|
|
{
|
|
[PercentageComplete(70)]
|
|
[Developer("Glatzemann")]
|
|
[TestState(TestStateAttribute.TestState.Untested)]
|
|
public class Texture2D : Texture, IGraphicsResource
|
|
{
|
|
#region Private
|
|
protected internal int width;
|
|
protected internal int height;
|
|
|
|
internal float OneOverWidth;
|
|
internal float OneOverHeight;
|
|
|
|
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)
|
|
{
|
|
}
|
|
|
|
public Texture2D(GraphicsDevice graphicsDevice, int width, int height)
|
|
: base(graphicsDevice)
|
|
{
|
|
this.width = width;
|
|
this.height = height;
|
|
OneOverWidth = 1f / width;
|
|
OneOverHeight = 1f / height;
|
|
|
|
base.LevelCount = 1;
|
|
base.Format = SurfaceFormat.Color;
|
|
|
|
CreateNativeTextureSurface();
|
|
}
|
|
|
|
public Texture2D(GraphicsDevice graphicsDevice, int width, int height, [MarshalAsAttribute(UnmanagedType.U1)] bool mipMap,
|
|
SurfaceFormat format)
|
|
: base(graphicsDevice)
|
|
{
|
|
this.width = width;
|
|
this.height = height;
|
|
OneOverWidth = 1f / width;
|
|
OneOverHeight = 1f / height;
|
|
|
|
// TODO: pass the mipmap parameter to the creation of the texture to let the graphics card generate mipmaps!
|
|
base.LevelCount = 1;
|
|
base.Format = format;
|
|
|
|
CreateNativeTextureSurface();
|
|
}
|
|
|
|
internal Texture2D(GraphicsDevice graphicsDevice, int width, int height, int mipCount, SurfaceFormat format)
|
|
: base(graphicsDevice)
|
|
{
|
|
this.width = width;
|
|
this.height = height;
|
|
OneOverWidth = 1f / width;
|
|
OneOverHeight = 1f / height;
|
|
|
|
base.LevelCount = mipCount;
|
|
base.Format = format;
|
|
|
|
CreateNativeTextureSurface();
|
|
}
|
|
#endregion
|
|
|
|
#region FromStream (TODO)
|
|
public static Texture2D FromStream(GraphicsDevice graphicsDevice, Stream stream)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public static Texture2D FromStream(GraphicsDevice graphicsDevice, Stream stream, int width, int height,
|
|
[MarshalAsAttribute(UnmanagedType.U1)] bool zoom)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
#endregion
|
|
|
|
#region GetData
|
|
public void GetData<T>(int level, Nullable<Rectangle> rect, T[] data, int startIndex, int elementCount) where T : struct
|
|
{
|
|
NativeTexture2D.GetData(level, rect, data, startIndex, elementCount);
|
|
}
|
|
|
|
public void GetData<T>(T[] data) where T : struct
|
|
{
|
|
NativeTexture.GetData(data);
|
|
}
|
|
|
|
public void GetData<T>(T[] data, int startIndex, int elementCount) where T : struct
|
|
{
|
|
NativeTexture.GetData(data, startIndex, elementCount);
|
|
}
|
|
#endregion
|
|
|
|
#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);
|
|
}
|
|
|
|
public void SetData<T>(T[] data) where T : struct
|
|
{
|
|
NativeTexture.SetData<T>(GraphicsDevice, data);
|
|
}
|
|
|
|
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()
|
|
{
|
|
base.Dispose(true);
|
|
}
|
|
|
|
protected override void Dispose([MarshalAs(UnmanagedType.U1)] bool disposeManaged)
|
|
{
|
|
base.Dispose(disposeManaged);
|
|
}
|
|
#endregion
|
|
|
|
#region ReCreateNativeTextureSurface
|
|
internal override void ReCreateNativeTextureSurface()
|
|
{
|
|
CreateNativeTextureSurface();
|
|
}
|
|
#endregion
|
|
|
|
#region CreateNativeTextureSurface
|
|
private void CreateNativeTextureSurface()
|
|
{
|
|
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
|
|
nativeTexture2D = creator.CreateTexture(GraphicsDevice, Format, width, height, LevelCount);
|
|
base.nativeTexture = nativeTexture2D;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|