Konstantin Koch 85322e2363 Migrated Primitives, RecordingSample, RenderTarget and SimpleSprite. Also implemented DynamicBuffers and fixed many Dispose functions
increased the amount of shared code between vertex and index buffers
fixed GraphicsDevice.Reset() which didn't save the provided presentation
parameters and the backbuffer was still bound after the recent changes
about the rendertargets
Vertex and IndexBuffers that get dynamically generated for the UserDraw
methods dispose the buffers now
Added DebugNames to Index and VertexBuffers and their Dynamic version.
2015-10-04 21:30:00 +02:00

222 lines
5.1 KiB
C#

#region Using Statements
using System;
using System.Runtime.InteropServices;
using ANX.Framework.NonXNA;
using ANX.Framework.NonXNA.Development;
#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(100)]
[Developer("Glatzemann")]
[TestState(TestStateAttribute.TestState.Untested)]
public class SamplerState : GraphicsResource
{
#region Constants
public static readonly SamplerState AnisotropicClamp;
public static readonly SamplerState AnisotropicWrap;
public static readonly SamplerState LinearClamp;
public static readonly SamplerState LinearWrap;
public static readonly SamplerState PointClamp;
public static readonly SamplerState PointWrap;
#endregion
#region Private
private INativeSamplerState nativeSamplerState;
private TextureAddressMode addressU;
private TextureAddressMode addressV;
private TextureAddressMode addressW;
private TextureFilter filter;
private int maxAnisotropy;
private int maxMipLevel;
private float mipMapLevelOfDetailBias;
#endregion
#region Public
internal INativeSamplerState NativeSamplerState
{
get
{
return this.nativeSamplerState;
}
}
public TextureAddressMode AddressU
{
get
{
return this.addressU;
}
set
{
ThrowIfBound();
this.addressU = value;
this.nativeSamplerState.AddressU = value;
}
}
public TextureAddressMode AddressV
{
get
{
return this.addressV;
}
set
{
ThrowIfBound();
this.addressV = value;
this.nativeSamplerState.AddressV = value;
}
}
public TextureAddressMode AddressW
{
get
{
return this.addressW;
}
set
{
ThrowIfBound();
this.addressW = value;
this.nativeSamplerState.AddressW = value;
}
}
public TextureFilter Filter
{
get
{
return this.filter;
}
set
{
ThrowIfBound();
this.filter = value;
this.nativeSamplerState.Filter = value;
}
}
public int MaxAnisotropy
{
get
{
return this.maxAnisotropy;
}
set
{
ThrowIfBound();
this.maxAnisotropy = value;
this.nativeSamplerState.MaxAnisotropy = value;
}
}
public int MaxMipLevel
{
get
{
return this.maxMipLevel;
}
set
{
ThrowIfBound();
this.maxMipLevel = value;
this.nativeSamplerState.MaxMipLevel = value;
}
}
public float MipMapLevelOfDetailBias
{
get
{
return this.mipMapLevelOfDetailBias;
}
set
{
ThrowIfBound();
this.mipMapLevelOfDetailBias = value;
this.nativeSamplerState.MipMapLevelOfDetailBias = value;
}
}
#endregion
#region Constructor
public SamplerState()
{
CreateNative();
AddressU = TextureAddressMode.Wrap;
AddressV = TextureAddressMode.Wrap;
AddressW = TextureAddressMode.Wrap;
Filter = TextureFilter.Linear;
MaxAnisotropy = 0;
MaxMipLevel = 0;
MipMapLevelOfDetailBias = 0f;
}
private SamplerState(TextureFilter filter, TextureAddressMode addressMode, string name)
{
CreateNative();
AddressU = addressMode;
AddressV = addressMode;
AddressW = addressMode;
Filter = filter;
MaxAnisotropy = 0;
MaxMipLevel = 0;
MipMapLevelOfDetailBias = 0f;
Name = name;
}
static SamplerState()
{
PointWrap = new SamplerState(TextureFilter.Point, TextureAddressMode.Wrap, "SamplerState.PointWrap");
PointClamp = new SamplerState(TextureFilter.Point, TextureAddressMode.Clamp, "SamplerState.PointClamp");
LinearWrap = new SamplerState(TextureFilter.Linear, TextureAddressMode.Wrap, "SamplerState.LinearWrap");
LinearClamp = new SamplerState(TextureFilter.Linear, TextureAddressMode.Clamp, "SamplerState.LinearClamp");
AnisotropicWrap = new SamplerState(TextureFilter.Anisotropic, TextureAddressMode.Wrap,
"SamplerState.AnisotropicWrap");
AnisotropicClamp = new SamplerState(TextureFilter.Anisotropic, TextureAddressMode.Clamp,
"SamplerState.AnisotropicClamp");
}
#endregion
#region Dispose
protected override void Dispose(bool disposeManaged)
{
if (disposeManaged)
{
if (this.nativeSamplerState != null)
{
this.nativeSamplerState.Dispose();
this.nativeSamplerState = null;
}
}
base.Dispose(disposeManaged);
}
#endregion
#region CreateNative
private void CreateNative()
{
var creator = AddInSystemFactory.Instance.GetDefaultCreator<IRenderSystemCreator>();
nativeSamplerState = creator.CreateSamplerState();
}
#endregion
#region ThrowIfBound
private void ThrowIfBound()
{
if (nativeSamplerState.IsBound)
throw new InvalidOperationException("You are not allowed to change SamplerState properties while it is " +
"bound to the GraphicsDevice.");
}
#endregion
}
}