2012-08-09 09:45:04 +00:00
#region Using Statements
2011-10-31 05:36:24 +00:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using ANX.Framework.NonXNA ;
using ANX.Framework.Graphics ;
2011-11-09 19:39:21 +00:00
using System.Runtime.InteropServices ;
2011-10-31 05:36:24 +00:00
#endregion // Using Statements
2012-08-09 09:45:04 +00:00
// 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 GraphicsDevice : IDisposable
{
2011-11-04 20:22:32 +00:00
#region Private Members
2011-10-31 05:36:24 +00:00
private INativeGraphicsDevice nativeDevice ;
private IndexBuffer indexBuffer ;
private SamplerStateCollection samplerStateCollection ;
private Viewport viewport ;
private BlendState blendState ;
private RasterizerState rasterizerState ;
private DepthStencilState depthStencilState ;
2011-11-03 12:37:07 +00:00
private GraphicsAdapter currentAdapter ;
private PresentationParameters currentPresentationParameters ;
2011-11-07 11:26:19 +00:00
private bool isDisposed ;
private GraphicsProfile graphicsProfile ;
2011-11-07 13:04:42 +00:00
private VertexBufferBinding [ ] currentVertexBufferBindings ;
2011-11-07 13:18:30 +00:00
private RenderTargetBinding [ ] currentRenderTargetBindings ;
2011-11-07 14:53:33 +00:00
private TextureCollection vertexTextureCollection ;
private TextureCollection textureCollection ;
2011-10-31 05:36:24 +00:00
2011-11-04 20:22:32 +00:00
#endregion // Private Members
#region Events
public event EventHandler < EventArgs > Disposing ;
public event EventHandler < ResourceDestroyedEventArgs > ResourceDestroyed ;
public event EventHandler < ResourceCreatedEventArgs > ResourceCreated ;
public event EventHandler < EventArgs > DeviceLost ;
public event EventHandler < EventArgs > DeviceReset ;
public event EventHandler < EventArgs > DeviceResetting ;
2011-11-09 12:31:32 +00:00
2011-11-04 20:22:32 +00:00
#endregion // Events
2011-11-09 12:31:32 +00:00
#region Constructor & Destructor
2011-11-03 12:37:07 +00:00
public GraphicsDevice ( GraphicsAdapter adapter , GraphicsProfile graphicsProfile , PresentationParameters presentationParameters )
2011-10-31 05:36:24 +00:00
{
2011-11-03 12:37:07 +00:00
this . currentAdapter = adapter ;
2011-11-07 11:26:19 +00:00
this . graphicsProfile = graphicsProfile ;
2011-11-03 12:37:07 +00:00
2011-10-31 05:36:24 +00:00
this . viewport = new Viewport ( 0 , 0 , presentationParameters . BackBufferWidth , presentationParameters . BackBufferHeight ) ;
2011-11-30 13:58:55 +00:00
Recreate ( presentationParameters ) ;
2011-10-31 05:36:24 +00:00
this . samplerStateCollection = new SamplerStateCollection ( this , 8 ) ; //TODO: get maximum number of sampler states from capabilities
2011-11-07 14:53:33 +00:00
this . textureCollection = new TextureCollection ( ) ;
this . vertexTextureCollection = new TextureCollection ( ) ;
2011-11-22 14:51:30 +00:00
this . BlendState = BlendState . Opaque ;
this . DepthStencilState = DepthStencilState . Default ;
this . RasterizerState = RasterizerState . CullCounterClockwise ;
2011-10-31 05:36:24 +00:00
}
2011-11-07 09:01:42 +00:00
~ GraphicsDevice ( )
{
this . Dispose ( false ) ;
}
2011-11-09 12:31:32 +00:00
#endregion // Constructor & Destructor
#region Clear
public void Clear ( Color color )
2011-11-07 09:01:42 +00:00
{
2012-03-10 22:29:29 +00:00
ClearOptions options = ClearOptions . Target ;
if ( this . currentPresentationParameters . DepthStencilFormat ! = DepthFormat . None )
{
options | = ClearOptions . DepthBuffer ;
}
if ( this . currentPresentationParameters . DepthStencilFormat = = DepthFormat . Depth24Stencil8 )
{
options | = ClearOptions . Stencil ;
}
Clear ( options , color , 1 , 0 ) ;
// nativeDevice.Clear(ref color);
2011-11-07 09:01:42 +00:00
}
2011-11-09 12:31:32 +00:00
public void Clear ( ClearOptions options , Color color , float depth , int stencil )
2011-11-07 09:01:42 +00:00
{
2011-11-09 12:31:32 +00:00
Clear ( options , color . ToVector4 ( ) , depth , stencil ) ;
2011-11-07 09:01:42 +00:00
}
2011-11-09 12:31:32 +00:00
public void Clear ( ClearOptions options , Vector4 color , float depth , int stencil )
2011-10-31 05:36:24 +00:00
{
2011-12-05 13:52:44 +00:00
if ( ( options & ClearOptions . DepthBuffer ) = = ClearOptions . DepthBuffer & &
this . currentPresentationParameters . DepthStencilFormat = = DepthFormat . None )
{
throw new InvalidOperationException ( "The depth buffer can only be cleared if it exists. The current DepthStencilFormat is DepthFormat.None" ) ;
}
if ( ( options & ClearOptions . Stencil ) = = ClearOptions . Stencil & &
this . currentPresentationParameters . DepthStencilFormat ! = DepthFormat . Depth24Stencil8 )
{
throw new InvalidOperationException ( "The stencil buffer can only be cleared if it exists. The current DepthStencilFormat is not DepthFormat.Depth24Stencil8" ) ;
}
2011-11-09 12:31:32 +00:00
nativeDevice . Clear ( options , color , depth , stencil ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // Clear
#region Present
2011-10-31 05:36:24 +00:00
public void Present ( )
{
nativeDevice . Present ( ) ;
}
2012-08-29 18:29:57 +00:00
public void Present ( Nullable < Rectangle > sourceRectangle , Nullable < Rectangle > destinationRectangle , IntPtr overrideWindowHandle )
2011-11-07 09:01:42 +00:00
{
2011-11-22 14:51:30 +00:00
//TODO: implement
2011-11-07 09:01:42 +00:00
throw new NotImplementedException ( ) ;
}
2011-11-09 12:31:32 +00:00
#endregion // Present
#region DrawPrimitives & DrawIndexedPrimitives
2011-10-31 05:36:24 +00:00
public void DrawIndexedPrimitives ( PrimitiveType primitiveType , int baseVertex , int minVertexIndex , int numVertices , int startIndex , int primitiveCount )
{
nativeDevice . DrawIndexedPrimitives ( primitiveType , baseVertex , minVertexIndex , numVertices , startIndex , primitiveCount ) ;
}
2011-11-09 12:31:32 +00:00
public void DrawPrimitives ( PrimitiveType primitiveType , int startVertex , int primitiveCount )
2011-10-31 05:36:24 +00:00
{
2011-11-09 12:31:32 +00:00
nativeDevice . DrawPrimitives ( primitiveType , startVertex , primitiveCount ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // DrawPrimitives & DrawIndexedPrimitives
#region DrawInstancedPrimitives
public void DrawInstancedPrimitives ( PrimitiveType primitiveType , int baseVertex , int minVertexIndex , int numVertices , int startIndex , int primitiveCount , int instanceCount )
2011-10-31 05:36:24 +00:00
{
2011-11-09 12:31:32 +00:00
nativeDevice . DrawInstancedPrimitives ( primitiveType , baseVertex , minVertexIndex , numVertices , startIndex , primitiveCount , instanceCount ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // DrawInstancedPrimitives
#region DrawUserIndexedPrimitives < T >
2011-10-31 05:36:24 +00:00
public void DrawUserIndexedPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int numVertices , short [ ] indexData , int indexOffset , int primitiveCount ) where T : struct , IVertexType
{
2011-11-09 12:31:32 +00:00
//TODO: cache the instances to avoid reflection overhead
IVertexType vertexType = Activator . CreateInstance < T > ( ) ;
VertexDeclaration vertexDeclaration = vertexType . VertexDeclaration ;
nativeDevice . DrawUserIndexedPrimitives < T > ( primitiveType , vertexData , vertexOffset , numVertices , indexData , indexOffset , primitiveCount , vertexDeclaration , IndexElementSize . SixteenBits ) ;
2011-10-31 05:36:24 +00:00
}
public void DrawUserIndexedPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int numVertices , short [ ] indexData , int indexOffset , int primitiveCount , VertexDeclaration vertexDeclaration ) where T : struct , IVertexType
{
2011-11-09 12:31:32 +00:00
nativeDevice . DrawUserIndexedPrimitives < T > ( primitiveType , vertexData , vertexOffset , numVertices , indexData , indexOffset , primitiveCount , vertexDeclaration , IndexElementSize . SixteenBits ) ;
2011-10-31 05:36:24 +00:00
}
public void DrawUserIndexedPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int numVertices , int [ ] indexData , int indexOffset , int primitiveCount ) where T : struct , IVertexType
{
2011-11-09 12:31:32 +00:00
//TODO: cache the instances to avoid reflection overhead
IVertexType vertexType = Activator . CreateInstance < T > ( ) ;
VertexDeclaration vertexDeclaration = vertexType . VertexDeclaration ;
nativeDevice . DrawUserIndexedPrimitives < T > ( primitiveType , vertexData , vertexOffset , numVertices , indexData , indexOffset , primitiveCount , vertexDeclaration , IndexElementSize . ThirtyTwoBits ) ;
2011-10-31 05:36:24 +00:00
}
public void DrawUserIndexedPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int numVertices , int [ ] indexData , int indexOffset , int primitiveCount , VertexDeclaration vertexDeclaration ) where T : struct , IVertexType
{
2011-11-09 12:31:32 +00:00
nativeDevice . DrawUserIndexedPrimitives < T > ( primitiveType , vertexData , vertexOffset , numVertices , indexData , indexOffset , primitiveCount , vertexDeclaration , IndexElementSize . ThirtyTwoBits ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // DrawUserIndexedPrimitives<T>
#region DrawUserPrimitives < T >
2011-11-07 06:52:52 +00:00
public void DrawUserPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int primitiveCount ) where T : struct , IVertexType
2011-10-31 05:36:24 +00:00
{
2011-11-09 12:31:32 +00:00
//TODO: cache the instances to avoid reflection overhead
IVertexType vertexType = Activator . CreateInstance < T > ( ) ;
VertexDeclaration vertexDeclaration = vertexType . VertexDeclaration ;
nativeDevice . DrawUserPrimitives < T > ( primitiveType , vertexData , vertexOffset , primitiveCount , vertexDeclaration ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-07 06:52:52 +00:00
public void DrawUserPrimitives < T > ( PrimitiveType primitiveType , T [ ] vertexData , int vertexOffset , int primitiveCount , VertexDeclaration vertexDeclaration ) where T : struct , IVertexType
2011-10-31 05:36:24 +00:00
{
2011-11-09 12:31:32 +00:00
nativeDevice . DrawUserPrimitives < T > ( primitiveType , vertexData , vertexOffset , primitiveCount , vertexDeclaration ) ;
2011-10-31 05:36:24 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // DrawUserPrimitives<T>
2012-08-29 10:48:21 +00:00
#if XNAEXT
#region SetConstantBuffer
/// <summary>
/// Binds a ConstantBuffer to the current GraphicsDevice
/// </summary>
/// <param name="slot">The index of the constant buffer used in the shader</param>
/// <param name="constantBuffer">The managed constant buffer object to bind.</param>
public void SetConstantBuffer ( int slot , ConstantBuffer constantBuffer )
{
this . nativeDevice . SetConstantBuffer ( slot , constantBuffer ) ;
}
/// <summary>
/// Binds ConstantBuffer objects to the current GraphicsDevice.
/// </summary>
/// <param name="constantBuffers">The array of managed constant buffer objects to bind.</param>
/// <remarks>The constant buffer objects are bound in the order found in the passed array.</remarks>
public void SetConstantBuffers ( params ConstantBuffer [ ] constantBuffers )
{
for ( int slot = 0 ; slot < constantBuffers . Length ; slot + + )
{
this . nativeDevice . SetConstantBuffer ( slot , constantBuffers [ slot ] ) ;
}
}
#endregion
#endif
2011-11-09 12:31:32 +00:00
#region SetVertexBuffer
2011-10-31 05:36:24 +00:00
public void SetVertexBuffer ( VertexBuffer vertexBuffer )
{
2011-11-07 13:04:42 +00:00
VertexBufferBinding [ ] bindings = new VertexBufferBinding [ ] { new VertexBufferBinding ( vertexBuffer ) } ;
this . currentVertexBufferBindings = bindings ;
this . nativeDevice . SetVertexBuffers ( bindings ) ;
2011-10-31 05:36:24 +00:00
}
public void SetVertexBuffer ( VertexBuffer vertexBuffer , int vertexOffset )
{
2011-11-07 13:04:42 +00:00
VertexBufferBinding [ ] bindings = new VertexBufferBinding [ ] { new VertexBufferBinding ( vertexBuffer , vertexOffset ) } ;
this . currentVertexBufferBindings = bindings ;
this . nativeDevice . SetVertexBuffers ( bindings ) ;
2011-10-31 05:36:24 +00:00
}
2011-12-27 08:19:27 +00:00
public void SetVertexBuffers ( params Graphics . VertexBufferBinding [ ] vertexBuffers )
2011-10-31 05:36:24 +00:00
{
2011-11-07 13:04:42 +00:00
this . currentVertexBufferBindings = vertexBuffers ;
2011-10-31 05:36:24 +00:00
nativeDevice . SetVertexBuffers ( vertexBuffers ) ;
}
2011-11-09 12:31:32 +00:00
#endregion // SetVertexBuffer
#region SetRenderTarget
2011-11-07 06:52:52 +00:00
public void SetRenderTarget ( RenderTarget2D renderTarget )
{
2011-11-28 16:06:52 +00:00
if ( renderTarget ! = null )
{
RenderTargetBinding [ ] renderTargetBindings = new RenderTargetBinding [ ] { new RenderTargetBinding ( renderTarget ) } ;
this . currentRenderTargetBindings = renderTargetBindings ;
nativeDevice . SetRenderTargets ( renderTargetBindings ) ;
}
else
{
nativeDevice . SetRenderTargets ( null ) ;
}
2011-11-07 06:52:52 +00:00
}
public void SetRenderTarget ( RenderTargetCube renderTarget , CubeMapFace cubeMapFace )
{
2011-11-07 13:18:30 +00:00
RenderTargetBinding [ ] renderTargetBindings = new RenderTargetBinding [ ] { new RenderTargetBinding ( renderTarget , cubeMapFace ) } ;
this . currentRenderTargetBindings = renderTargetBindings ;
nativeDevice . SetRenderTargets ( renderTargetBindings ) ;
2011-11-07 06:52:52 +00:00
}
public void SetRenderTargets ( params RenderTargetBinding [ ] renderTargets )
{
2011-11-07 13:18:30 +00:00
this . currentRenderTargetBindings = renderTargets ;
2011-11-07 13:04:42 +00:00
nativeDevice . SetRenderTargets ( renderTargets ) ;
2011-11-07 06:52:52 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // SetRenderTarget
#region GetBackBufferData < T >
2011-11-07 06:52:52 +00:00
public void GetBackBufferData < T > ( Nullable < Rectangle > rect , T [ ] data , int startIndex , int elementCount ) where T : struct
{
2011-11-07 14:53:33 +00:00
nativeDevice . GetBackBufferData < T > ( rect , data , startIndex , elementCount ) ;
2011-11-07 06:52:52 +00:00
}
public void GetBackBufferData < T > ( T [ ] data ) where T : struct
{
2011-11-07 14:53:33 +00:00
nativeDevice . GetBackBufferData < T > ( data ) ;
2011-11-07 06:52:52 +00:00
}
public void GetBackBufferData < T > ( T [ ] data , int startIndex , int elementCount ) where T : struct
{
2011-11-07 14:53:33 +00:00
nativeDevice . GetBackBufferData < T > ( data , startIndex , elementCount ) ;
2011-11-07 06:52:52 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // GetBackBufferData<T>
2011-11-07 06:52:52 +00:00
public VertexBufferBinding [ ] GetVertexBuffers ( )
{
2011-11-07 13:04:42 +00:00
return this . currentVertexBufferBindings ;
2011-11-07 06:52:52 +00:00
}
public RenderTargetBinding [ ] GetRenderTargets ( )
{
2011-11-07 13:18:30 +00:00
return this . currentRenderTargetBindings ;
2011-11-07 06:52:52 +00:00
}
2011-11-09 12:31:32 +00:00
#region Reset
2011-11-03 12:37:07 +00:00
public void Reset ( )
{
this . Reset ( this . currentPresentationParameters , this . currentAdapter ) ;
}
public void Reset ( PresentationParameters presentationParameters )
{
this . Reset ( presentationParameters , this . currentAdapter ) ;
}
public void Reset ( PresentationParameters presentationParameters , GraphicsAdapter adapter )
{
2011-11-09 19:39:21 +00:00
if ( presentationParameters = = null )
{
throw new ArgumentNullException ( "presentationParameters" ) ;
}
if ( adapter = = null )
{
throw new ArgumentNullException ( "adapter" ) ;
}
if ( this . currentAdapter ! = adapter )
{
throw new InvalidOperationException ( "adapter switch not yet implemented" ) ;
}
raise_DeviceResetting ( this , EventArgs . Empty ) ;
2012-08-09 09:45:04 +00:00
// As it seems that no hardware Depth24 exists we handle Depth24
// and Depth24Stencil8 the same way. Problem is that the Clear method
// checks for Depth24Stencil8 when trying to clear the stencil buffer
// and the format is set to Depth24. Internally Depth24 is already
// handled as Depth24Stencil8 so it is interchangeable.
if ( ( this . currentPresentationParameters . DepthStencilFormat = = DepthFormat . Depth24 | |
this . currentPresentationParameters . DepthStencilFormat = = DepthFormat . Depth24Stencil8 ) & &
( presentationParameters . DepthStencilFormat = = DepthFormat . Depth24 | |
presentationParameters . DepthStencilFormat = = DepthFormat . Depth24Stencil8 ) )
2011-12-16 07:54:47 +00:00
{
this . currentPresentationParameters . DepthStencilFormat = presentationParameters . DepthStencilFormat ;
}
2011-11-09 19:39:21 +00:00
// reset presentation parameters
2012-02-18 22:43:08 +00:00
nativeDevice . ResizeBuffers ( presentationParameters ) ;
2012-08-19 14:38:58 +00:00
this . viewport = new Graphics . Viewport ( 0 , 0 , presentationParameters . BackBufferWidth , presentationParameters . BackBufferHeight ) ;
2011-11-09 19:39:21 +00:00
raise_DeviceReset ( this , EventArgs . Empty ) ;
2011-11-03 12:37:07 +00:00
}
2011-11-09 12:31:32 +00:00
#endregion // Reset
2011-10-31 05:36:24 +00:00
public void Dispose ( )
{
2011-11-22 14:51:30 +00:00
if ( this . nativeDevice ! = null )
{
this . nativeDevice . Dispose ( ) ;
this . nativeDevice = null ;
}
//TODO: more to dispose?
2011-10-31 05:36:24 +00:00
}
2012-08-09 09:45:04 +00:00
protected virtual void Dispose (
[MarshalAs(UnmanagedType.U1)] bool disposeManaged )
2011-11-07 09:01:42 +00:00
{
2011-11-07 11:26:19 +00:00
//TODO: implement
2011-11-07 09:01:42 +00:00
}
2011-11-22 14:51:30 +00:00
#region Public Properties
2011-10-31 05:36:24 +00:00
public IndexBuffer Indices
{
get
{
return this . indexBuffer ;
}
set
{
if ( this . indexBuffer ! = value )
{
this . indexBuffer = value ;
NativeDevice . SetIndexBuffer ( this . indexBuffer ) ;
}
}
}
public Viewport Viewport
{
get
{
return this . viewport ;
}
set
{
2011-12-27 08:19:27 +00:00
this . viewport = value ;
2011-10-31 05:36:24 +00:00
}
}
public BlendState BlendState
{
get
{
return this . blendState ;
}
set
{
if ( this . blendState ! = value )
{
if ( this . blendState ! = null )
{
this . blendState . NativeBlendState . Release ( ) ;
}
this . blendState = value ;
this . blendState . NativeBlendState . Apply ( this ) ;
}
}
}
public DepthStencilState DepthStencilState
{
get
{
return this . depthStencilState ;
}
set
{
if ( this . depthStencilState ! = value )
{
if ( this . depthStencilState ! = null )
{
this . depthStencilState . NativeDepthStencilState . Release ( ) ;
}
this . depthStencilState = value ;
this . depthStencilState . NativeDepthStencilState . Apply ( this ) ;
}
}
}
public RasterizerState RasterizerState
{
get
{
return this . rasterizerState ;
}
set
{
if ( this . rasterizerState ! = value )
{
if ( this . rasterizerState ! = null )
{
this . rasterizerState . NativeRasterizerState . Release ( ) ;
}
this . rasterizerState = value ;
this . rasterizerState . NativeRasterizerState . Apply ( this ) ;
}
}
}
public SamplerStateCollection SamplerStates
{
get
{
return this . samplerStateCollection ;
}
}
2011-11-09 12:31:32 +00:00
2011-11-04 20:22:32 +00:00
public bool IsDisposed
{
get
{
2011-11-07 11:26:19 +00:00
return this . isDisposed ;
2011-11-04 20:22:32 +00:00
}
}
public DisplayMode DisplayMode
{
get
{
2011-11-22 14:51:30 +00:00
return this . currentAdapter . CurrentDisplayMode ;
2011-11-04 20:22:32 +00:00
}
}
public GraphicsProfile GraphicsProfile
{
get
{
2011-11-07 11:26:19 +00:00
return this . graphicsProfile ;
2011-11-04 20:22:32 +00:00
}
}
public GraphicsAdapter Adapter
{
get
{
2011-11-07 11:26:19 +00:00
return this . currentAdapter ;
2011-11-04 20:22:32 +00:00
}
}
public PresentationParameters PresentationParameters
{
get
{
2011-11-07 11:26:19 +00:00
return this . currentPresentationParameters ;
2011-11-04 20:22:32 +00:00
}
}
public int ReferenceStencil
{
get
{
2011-11-07 11:26:19 +00:00
return DepthStencilState . ReferenceStencil ;
2011-11-04 20:22:32 +00:00
}
set
{
2011-11-07 11:26:19 +00:00
if ( DepthStencilState . ReferenceStencil ! = value )
{
DepthStencilState . ReferenceStencil = value ;
}
2011-11-04 20:22:32 +00:00
}
}
public int MultiSampleMask
{
get
{
2011-11-07 11:26:19 +00:00
return BlendState . MultiSampleMask ;
2011-11-04 20:22:32 +00:00
}
set
{
2011-11-07 11:26:19 +00:00
if ( BlendState . MultiSampleMask ! = value )
{
BlendState . MultiSampleMask = value ;
}
2011-11-04 20:22:32 +00:00
}
}
2011-11-09 12:31:32 +00:00
2011-11-04 20:22:32 +00:00
public Color BlendFactor
{
get
{
2011-11-07 11:26:19 +00:00
return BlendState . BlendFactor ;
2011-11-04 20:22:32 +00:00
}
set
{
2011-11-07 11:26:19 +00:00
if ( BlendState . BlendFactor ! = value )
{
BlendState . BlendFactor = value ;
}
2011-11-04 20:22:32 +00:00
}
}
public TextureCollection VertexTextures
{
get
{
2011-11-07 14:53:33 +00:00
return this . vertexTextureCollection ;
2011-11-04 20:22:32 +00:00
}
}
public TextureCollection Textures
{
get
{
2011-11-07 14:53:33 +00:00
return this . textureCollection ;
2011-11-04 20:22:32 +00:00
}
}
2011-11-22 14:51:30 +00:00
#endregion // Public Properties
public Rectangle ScissorRectangle
{
get
{
throw new NotImplementedException ( ) ;
}
set
{
throw new NotImplementedException ( ) ;
}
}
public GraphicsDeviceStatus GraphicsDeviceStatus
{
get
{
throw new NotImplementedException ( ) ;
}
}
2011-11-04 20:22:32 +00:00
public SamplerStateCollection VertexSamplerStates
{
get
{
throw new NotImplementedException ( ) ;
}
}
2011-11-07 09:01:42 +00:00
2011-11-30 16:03:51 +00:00
internal INativeGraphicsDevice NativeDevice
{
get
{
return this . nativeDevice ;
}
2011-12-07 08:40:40 +00:00
set
{
this . nativeDevice = value ;
}
2011-11-30 16:03:51 +00:00
}
internal void Recreate ( PresentationParameters presentationParameters )
{
if ( nativeDevice ! = null )
{
nativeDevice . Dispose ( ) ;
2011-12-07 08:40:40 +00:00
raise_ResourceDestroyed ( this , new ResourceDestroyedEventArgs ( "NativeGraphicsDevice" , nativeDevice ) ) ;
2011-11-30 16:03:51 +00:00
nativeDevice = null ;
}
if ( nativeDevice = = null )
{
this . currentPresentationParameters = presentationParameters ;
nativeDevice = AddInSystemFactory . Instance . GetDefaultCreator < IRenderSystemCreator > ( ) . CreateGraphicsDevice ( presentationParameters ) ;
this . viewport = new Viewport ( 0 , 0 , presentationParameters . BackBufferWidth , presentationParameters . BackBufferHeight ) ;
2011-12-09 08:46:25 +00:00
2011-12-07 08:40:40 +00:00
raise_ResourceCreated ( this , new ResourceCreatedEventArgs ( nativeDevice ) ) ;
2011-12-09 08:46:25 +00:00
GraphicsResourceTracker . Instance . UpdateGraphicsDeviceReference ( this ) ;
if ( this . indexBuffer ! = null )
{
NativeDevice . SetIndexBuffer ( this . indexBuffer ) ;
}
if ( this . currentVertexBufferBindings ! = null )
{
NativeDevice . SetVertexBuffers ( this . currentVertexBufferBindings ) ;
}
if ( this . blendState ! = null )
{
this . blendState . NativeBlendState . Apply ( this ) ;
}
if ( this . rasterizerState ! = null )
{
this . rasterizerState . NativeRasterizerState . Apply ( this ) ;
}
if ( this . depthStencilState ! = null )
{
this . depthStencilState . NativeDepthStencilState . Apply ( this ) ;
}
if ( this . samplerStateCollection ! = null )
{
for ( int i = 0 ; i < 8 ; i + + )
{
if ( this . samplerStateCollection [ i ] ! = null )
{
this . samplerStateCollection [ i ] . NativeSamplerState . Apply ( this , i ) ;
}
}
}
2011-11-30 16:03:51 +00:00
}
}
2011-11-07 09:01:42 +00:00
protected void raise_Disposing ( object sender , EventArgs args )
{
if ( Disposing ! = null )
{
Disposing ( sender , args ) ;
}
}
protected void raise_DeviceResetting ( object sender , EventArgs args )
{
2011-11-09 12:31:32 +00:00
if ( DeviceResetting ! = null )
2011-11-07 09:01:42 +00:00
{
DeviceResetting ( sender , args ) ;
}
}
2011-11-09 12:31:32 +00:00
2011-11-07 09:01:42 +00:00
protected void raise_DeviceReset ( object sender , EventArgs args )
{
2011-11-09 12:31:32 +00:00
if ( DeviceReset ! = null )
2011-11-07 09:01:42 +00:00
{
DeviceReset ( sender , args ) ;
}
}
protected void raise_DeviceLost ( object sender , EventArgs args )
{
2011-11-09 12:31:32 +00:00
if ( DeviceLost ! = null )
2011-11-07 09:01:42 +00:00
{
DeviceLost ( sender , args ) ;
}
}
protected void raise_ResourceCreated ( object sender , ResourceCreatedEventArgs args )
{
2011-11-09 12:31:32 +00:00
if ( ResourceCreated ! = null )
2011-11-07 09:01:42 +00:00
{
ResourceCreated ( sender , args ) ;
}
}
protected void raise_ResourceDestroyed ( object sender , ResourceDestroyedEventArgs args )
{
2011-11-09 12:31:32 +00:00
if ( ResourceDestroyed ! = null )
2011-11-07 09:01:42 +00:00
{
ResourceDestroyed ( sender , args ) ;
}
}
2011-10-31 05:36:24 +00:00
}
}