2011-10-31 05:36:24 +00:00
#region Using Statements
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
#region License
//
// This file is part of the ANX.Framework created by the "ANX.Framework developer group".
//
// This file is released under the Ms-PL license.
//
//
//
// Microsoft Public License (Ms-PL)
//
// This license governs use of the accompanying software. If you use the software, you accept this license.
// If you do not accept the license, do not use the software.
//
// 1.Definitions
// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning
// here as under U.S. copyright law.
// A "contribution" is the original software, or any additions or changes to the software.
// A "contributor" is any person that distributes its contribution under this license.
// "Licensed patents" are a contributor's patent claims that read directly on its contribution.
//
// 2.Grant of Rights
// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations
// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to
// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution
// or any derivative works that you create.
// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in
// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed
// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution
// in the software or derivative works of the contribution in the software.
//
// 3.Conditions and Limitations
// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your
// patent license from such contributor to the software ends automatically.
// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
// notices that are present in the software.
// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including
// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or
// object code form, you may only do so under a license that complies with this license.
// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees,
// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the
// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a
// particular purpose and non-infringement.
#endregion // License
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
{
2011-11-09 12:31:32 +00:00
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 ( ) ;
}
2011-11-07 09:01:42 +00:00
public void Present ( Nullable < Rectangle > sourceRectangle , Nullable < Rectangle > destinationRectangle , IntPtr overrideWindowHandle )
{
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>
#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
}
public void SetVertexBuffers ( Graphics . VertexBufferBinding [ ] vertexBuffers )
{
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 ) ;
// reset presentation parameters
nativeDevice . ResizeBuffers ( presentationParameters ) ; //TODO: check if necessary
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
}
2011-11-07 09:01:42 +00:00
protected virtual void Dispose ( Boolean disposeManaged )
{
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
{
this . Viewport = value ;
}
}
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 ) ;
2011-12-07 08:40:40 +00:00
GraphicsResourceTracker . Instance . UpdateGraphicsDeviceReference ( this ) ;
2011-11-30 16:03:51 +00:00
this . viewport = new Viewport ( 0 , 0 , presentationParameters . BackBufferWidth , presentationParameters . BackBufferHeight ) ;
2011-12-07 08:40:40 +00:00
raise_ResourceCreated ( this , new ResourceCreatedEventArgs ( nativeDevice ) ) ;
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
}
}