public GLESHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer ) : base( manager, type, numIndices, usage, false, useShadowBuffer ) { if ( type == IndexType.Size32 ) { throw new AxiomException( "32 bit hardware buffers are not allowed in OpenGL ES." ); } if ( !useShadowBuffer ) { throw new AxiomException( "Only support with shadowBuffer" ); } OpenGL.GenBuffers( 1, ref this._bufferId ); GLESConfig.GlCheckError( this ); if ( this._bufferId == 0 ) { throw new AxiomException( "Cannot create GL index buffer" ); } OpenGL.BindBuffer( All.ElementArrayBuffer, this._bufferId ); GLESConfig.GlCheckError( this ); OpenGL.BufferData( All.ElementArrayBuffer, new IntPtr( sizeInBytes ), IntPtr.Zero, GLESHardwareBufferManager.GetGLUsage( usage ) ); GLESConfig.GlCheckError( this ); }
public GLESHardwareIndexBuffer(HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer) : base(manager, type, numIndices, usage, false, useShadowBuffer) { if (type == IndexType.Size32) { throw new AxiomException("32 bit hardware buffers are not allowed in OpenGL ES."); } if (!useShadowBuffer) { throw new AxiomException("Only support with shadowBuffer"); } OpenGL.GenBuffers(1, ref this._bufferId); GLESConfig.GlCheckError(this); if (this._bufferId == 0) { throw new AxiomException("Cannot create GL index buffer"); } OpenGL.BindBuffer(All.ElementArrayBuffer, this._bufferId); GLESConfig.GlCheckError(this); OpenGL.BufferData(All.ElementArrayBuffer, new IntPtr(sizeInBytes), IntPtr.Zero, GLESHardwareBufferManager.GetGLUsage(usage)); GLESConfig.GlCheckError(this); }
public VertexData(HardwareBufferManagerBase mgr) : this(OgrePINVOKE.new_VertexData__SWIG_0(HardwareBufferManagerBase.getCPtr(mgr)), true) { if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } }
public XnaHardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, GraphicsDevice dev, bool useSystemMemory, bool useShadowBuffer ) : base( manager, vertexDeclaration, numVertices, usage, useSystemMemory, useShadowBuffer ) { _device = dev; if ( !( vertexDeclaration is XnaVertexDeclaration ) ) { throw new AxiomException( "Invalid VertexDeclaration supplied, must be created by HardwareBufferManager.CreateVertexDeclaration()" ); } if ( usage == BufferUsage.Dynamic || usage == BufferUsage.DynamicWriteOnly ) { _buffer = new DynamicVertexBuffer( _device, ( (XnaVertexDeclaration)vertexDeclaration ).XFGVertexDeclaration, numVertices, XnaHelper.Convert( usage ) ); } else { _buffer = new VertexBuffer( _device, ( (XnaVertexDeclaration)vertexDeclaration ).XFGVertexDeclaration, numVertices, XnaHelper.Convert( usage ) ); } _bufferBytes = new byte[vertexDeclaration.GetVertexSize()*numVertices]; _bufferBytes.Initialize(); }
/// <summary> /// Constructor. /// </summary> ///<param name="manager"></param> ///<param name="type">Type of index (16 or 32 bit).</param> /// <param name="numIndices">Number of indices to create in this buffer.</param> /// <param name="usage">Buffer usage.</param> /// <param name="useSystemMemory">Create in system memory?</param> /// <param name="useShadowBuffer">Use a shadow buffer for reading/writing?</param> public HardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer ) : base( usage, useSystemMemory, useShadowBuffer ) { this.type = type; this.numIndices = numIndices; this.Manager = manager; // calc the index buffer size sizeInBytes = numIndices; if ( type == IndexType.Size32 ) { indexSize = Marshal.SizeOf( typeof( int ) ); } else { indexSize = Marshal.SizeOf( typeof( short ) ); } sizeInBytes *= indexSize; // create a shadow buffer if required if ( useShadowBuffer ) { shadowBuffer = new DefaultHardwareIndexBuffer( Manager, type, numIndices, BufferUsage.Dynamic ); } }
public XnaHardwareIndexBuffer(HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, GraphicsDevice device, bool useSystemMemory, bool useShadowBuffer) : base(manager, Validate(type), numIndices, usage, useSystemMemory, useShadowBuffer) { if (this.type == IndexType.Size16) { _bufferType = IndexElementSize.SixteenBits; } #if !SILVERLIGHT else { _bufferType = IndexElementSize.ThirtyTwoBits; } #endif // create the buffer if (usage == BufferUsage.Dynamic || usage == BufferUsage.DynamicWriteOnly) { _xnaBuffer = new IndexBuffer(device, _bufferType, numIndices, XnaHelper.Convert(usage)); } else { _xnaBuffer = new IndexBuffer(device, _bufferType, numIndices, Microsoft.Xna.Framework.Graphics.BufferUsage.None); } _bufferBytes = new byte[sizeInBytes]; _bufferBytes.Initialize(); }
public XnaHardwareVertexBuffer(HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, GraphicsDevice dev, bool useSystemMemory, bool useShadowBuffer) : base(manager, vertexDeclaration, numVertices, usage, useSystemMemory, useShadowBuffer) { _device = dev; if (!(vertexDeclaration is XnaVertexDeclaration)) { throw new AxiomException( "Invalid VertexDeclaration supplied, must be created by HardwareBufferManager.CreateVertexDeclaration()"); } if (usage == BufferUsage.Dynamic || usage == BufferUsage.DynamicWriteOnly) { _buffer = new DynamicVertexBuffer(_device, ((XnaVertexDeclaration)vertexDeclaration).XFGVertexDeclaration, numVertices, XnaHelper.Convert(usage)); } else { _buffer = new VertexBuffer(_device, ((XnaVertexDeclaration)vertexDeclaration).XFGVertexDeclaration, numVertices, XnaHelper.Convert(usage)); } _bufferBytes = new byte[vertexDeclaration.GetVertexSize() * numVertices]; _bufferBytes.Initialize(); }
public void reorganiseBuffers(VertexDeclaration newDeclaration, HardwareBufferManagerBase mgr) { OgrePINVOKE.VertexData_reorganiseBuffers__SWIG_2(swigCPtr, VertexDeclaration.getCPtr(newDeclaration), HardwareBufferManagerBase.getCPtr(mgr)); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } }
public void setHardwareBufferManager(HardwareBufferManagerBase bufferManager) { OgrePINVOKE.Mesh_setHardwareBufferManager(swigCPtr, HardwareBufferManagerBase.getCPtr(bufferManager)); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } }
protected internal HardwareBufferManager( HardwareBufferManagerBase baseInstance ) : base() { if ( instance == null ) { instance = this; this._baseInstance = baseInstance; } }
public HardwareBufferManagerBase getHardwareBufferManager() { global::System.IntPtr cPtr = OgrePINVOKE.Mesh_getHardwareBufferManager(swigCPtr); HardwareBufferManagerBase ret = (cPtr == global::System.IntPtr.Zero) ? null : new HardwareBufferManagerBase(cPtr, false); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } return(ret); }
public VertexData clone(bool copyData, HardwareBufferManagerBase mgr) { global::System.IntPtr cPtr = OgrePINVOKE.VertexData_clone__SWIG_0(swigCPtr, copyData, HardwareBufferManagerBase.getCPtr(mgr)); VertexData ret = (cPtr == global::System.IntPtr.Zero) ? null : new VertexData(cPtr, false); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } return(ret); }
unsafe public XnaHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, XFG.GraphicsDevice device, bool useSystemMemory, bool useShadowBuffer ) : base( manager, type, numIndices, usage, useSystemMemory, useShadowBuffer ) { _bufferType = ( type == IndexType.Size16 ) ? XFG.IndexElementSize.SixteenBits : XFG.IndexElementSize.ThirtyTwoBits; // create the buffer if (usage == BufferUsage.Dynamic || usage == BufferUsage.DynamicWriteOnly) { _xnaBuffer = new XFG.IndexBuffer(device, _bufferType, numIndices, XnaHelper.Convert(usage)); } else _xnaBuffer = new XFG.IndexBuffer(device, _bufferType, numIndices, XFG.BufferUsage.None); _bufferBytes = new byte[ sizeInBytes ]; _bufferBytes.Initialize(); }
public GLHardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useShadowBuffer ) : base( manager, vertexDeclaration, numVertices, usage, false, useShadowBuffer ) { bufferID = 0; Gl.glGenBuffersARB( 1, out bufferID ); if ( bufferID == 0 ) { throw new Exception( "Cannot create GL vertex buffer" ); } Gl.glBindBufferARB( Gl.GL_ARRAY_BUFFER_ARB, bufferID ); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB( Gl.GL_ARRAY_BUFFER_ARB, new IntPtr( sizeInBytes ), IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); // TAO 2.0 //Gl.glBufferDataARB( Gl.GL_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); }
public HardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer ) : base( usage, useSystemMemory, useShadowBuffer ) { this.vertexDeclaration = vertexDeclaration; this.numVertices = numVertices; this.Manager = manager; // calculate the size in bytes of this buffer sizeInBytes = vertexDeclaration.GetVertexSize()*numVertices; // create a shadow buffer if required if ( useShadowBuffer ) { shadowBuffer = new DefaultHardwareVertexBuffer( this.Manager, vertexDeclaration, numVertices, BufferUsage.Dynamic ); } this.useCount = 0; }
/// <summary> /// Constructor. /// </summary> /// <param name="manager"> the HardwareBufferManager instance that created this buffer. </param> /// <param name="type"> Index type (16 or 32 bit). </param> /// <param name="numIndices"> Number of indices in the buffer. </param> /// <param name="usage"> Usage flags. </param> /// <param name="useShadowBuffer"> Should this buffer be backed by a software shadow buffer? </param> public GLHardwareIndexBuffer(HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer) : base(manager, type, numIndices, usage, false, useShadowBuffer) { // generate the buffer Gl.glGenBuffersARB(1, out this._bufferId); if (this._bufferId == 0) { throw new Exception("OGL: Cannot create GL index buffer"); } Gl.glBindBufferARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, this._bufferId); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr(sizeInBytes), IntPtr.Zero, GLHelper.ConvertEnum(usage)); LogManager.Instance.Write("OGL: Created IndexBuffer[{0}].", this._bufferId); }
/// <summary> /// Constructor. /// </summary> /// <param name="manager"> the HardwareBufferManager instance that created this buffer. </param> /// <param name="type"> Index type (16 or 32 bit). </param> /// <param name="numIndices"> Number of indices in the buffer. </param> /// <param name="usage"> Usage flags. </param> /// <param name="useShadowBuffer"> Should this buffer be backed by a software shadow buffer? </param> public GLHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer ) : base( manager, type, numIndices, usage, false, useShadowBuffer ) { // generate the buffer Gl.glGenBuffersARB( 1, out this._bufferId ); if ( this._bufferId == 0 ) { throw new Exception( "OGL: Cannot create GL index buffer" ); } Gl.glBindBufferARB( Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, this._bufferId ); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB( Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr( sizeInBytes ), IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); LogManager.Instance.Write( "OGL: Created IndexBuffer[{0}].", this._bufferId ); }
public GLHardwareVertexBuffer(HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useShadowBuffer) : base(manager, vertexDeclaration, numVertices, usage, false, useShadowBuffer) { this.bufferID = 0; Gl.glGenBuffersARB(1, out this.bufferID); if (this.bufferID == 0) { throw new Exception("Cannot create GL vertex buffer"); } Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, this.bufferID); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, new IntPtr(sizeInBytes), IntPtr.Zero, GLHelper.ConvertEnum(usage)); // TAO 2.0 //Gl.glBufferDataARB( Gl.GL_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); }
public D3D9HardwareVertexBuffer(HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer) : base(manager, vertexDeclaration, numVertices, usage, useSystemMemory, useShadowBuffer) { //Entering critical section this.LockDeviceAccess(); this._mapDeviceToBufferResources = new Dictionary <D3D9.Device, BufferResources>(); #if AXIOM_D3D_MANAGE_BUFFERS var eResourcePool = useSystemMemory ? D3D9.Pool.SystemMemory : // If not system mem, use managed pool UNLESS buffer is discardable // if discardable, keeping the software backing is expensive ((usage & BufferUsage.Discardable) != 0) ? D3D9.Pool.Default : D3D9.Pool.Managed; #else var eResourcePool = useSystemMemory ? D3D9.Pool.SystemMemory : D3D9.Pool.Default; #endif // Set the desired memory pool. this._bufferDesc.Pool = eResourcePool; // Allocate the system memory buffer. this._systemMemoryBuffer = BufferBase.Wrap(new byte[sizeInBytes]); // Case we have to create this buffer resource on loading. if (D3D9RenderSystem.ResourceManager.CreationPolicy == D3D9ResourceManager.ResourceCreationPolicy.CreateOnAllDevices) { foreach (var d3d9Device in D3D9RenderSystem.ResourceCreationDevices) { CreateBuffer(d3d9Device, this._bufferDesc.Pool); } } D3D9RenderSystem.ResourceManager.NotifyResourceCreated(this); //Leaving critical section this.UnlockDeviceAccess(); }
public GLESHardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useShadowBuffer ) : base( manager, vertexDeclaration, numVertices, usage, false, useShadowBuffer ) { if ( !useShadowBuffer ) { throw new AxiomException( "Only supported with shadowBuffer" ); } var buffers = new int[ 1 ]; GL.GenBuffers( 1, buffers ); GLESConfig.GlCheckError( this ); this._bufferID = buffers[ 0 ]; if ( this._bufferID == 0 ) { throw new AxiomException( "Cannot create GL ES vertex buffer" ); } ( Root.Instance.RenderSystem as GLESRenderSystem ).BindGLBuffer( GLenum.ArrayBuffer, this._bufferID ); GL.BufferData( GLenum.ArrayBuffer, new IntPtr( sizeInBytes ), IntPtr.Zero, GLESHardwareBufferManager.GetGLUsage( usage ) ); GLESConfig.GlCheckError( this ); }
public D3DHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, D3D.Device device, bool useSystemMemory, bool useShadowBuffer ) : base( manager, type, numIndices, usage, useSystemMemory, useShadowBuffer ) { #if !NO_AXIOM_D3D_MANAGE_BUFFERS d3dPool = useSystemMemory ? D3D.Pool.SystemMemory : // If not system mem, use managed pool UNLESS buffer is discardable // if discardable, keeping the software backing is expensive ( ( usage & BufferUsage.Discardable ) != 0 ) ? D3D.Pool.Default : D3D.Pool.Managed; #else d3dPool = useSystemMemory ? Pool.SystemMemory : Pool.Default; #endif device = D3DRenderSystem.ActiveD3D9Device; // temp hack (update to 1.7) // create the buffer d3dBuffer = new D3D.IndexBuffer( device, sizeInBytes, D3DHelper.ConvertEnum( usage ), d3dPool, type == IndexType.Size16 ); }
/// <summary> /// Constructor. /// </summary> /// <param name="type">Index type (16 or 32 bit).</param> /// <param name="numIndices">Number of indices in the buffer.</param> /// <param name="usage">Usage flags.</param> /// <param name="useShadowBuffer">Should this buffer be backed by a software shadow buffer?</param> public GLHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer ) : base( manager, type, numIndices, usage, false, useShadowBuffer ) { // generate the buffer Gl.glGenBuffersARB( 1, out bufferID ); if ( bufferID == 0 ) throw new Exception( "Cannot create GL index buffer" ); Gl.glBindBufferARB( Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, bufferID ); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB( Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr( sizeInBytes ), IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); // TAO 2.0 //Gl.glBufferDataARB( // Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, // sizeInBytes, // IntPtr.Zero, // GLHelper.ConvertEnum( usage ) ); }
public GLES2HardwareVertexBuffer(HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useShadowBuffer) : base(manager, vertexDeclaration, numVertices, usage, false, useShadowBuffer) { if (!useShadowBuffer) { throw new AxiomException("Only supported with shadowBuffer"); } var buffers = new int[1]; GL.GenBuffers(1, buffers); GLES2Config.GlCheckError(this); this._bufferID = buffers[0]; if (this._bufferID == 0) { throw new AxiomException("Cannot create GL ES vertex buffer"); } (Root.Instance.RenderSystem as GLES2RenderSystem).BindGLBuffer(GLenum.ArrayBuffer, this._bufferID); GL.BufferData(GLenum.ArrayBuffer, new IntPtr(sizeInBytes), IntPtr.Zero, GLES2HardwareBufferManager.GetGLUsage(usage)); GLES2Config.GlCheckError(this); }
public XnaHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, GraphicsDevice device, bool useSystemMemory, bool useShadowBuffer ) : base(manager, Validate(type), numIndices, usage, useSystemMemory, useShadowBuffer) { if (this.type == IndexType.Size16) _bufferType = IndexElementSize.SixteenBits; #if !SILVERLIGHT else _bufferType = IndexElementSize.ThirtyTwoBits; #endif // create the buffer if ( usage == BufferUsage.Dynamic || usage == BufferUsage.DynamicWriteOnly ) { _xnaBuffer = new IndexBuffer( device, _bufferType, numIndices, XnaHelper.Convert( usage ) ); } else { _xnaBuffer = new IndexBuffer( device, _bufferType, numIndices, Microsoft.Xna.Framework.Graphics.BufferUsage.None ); } _bufferBytes = new byte[sizeInBytes]; _bufferBytes.Initialize(); }
public DefaultHardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage ) : base( manager, vertexDeclaration, numVertices, usage, true, false ) // always software, never shadowed { _mpData = new byte[ base.sizeInBytes ]; }
public GLDefaultHardwareVertexBuffer( HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer ) : base( manager, vertexDeclaration, numVertices, usage, useSystemMemory, useShadowBuffer ) { }
public GLDefaultHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer ) : base( manager, type, numIndices, usage, useSystemMemory, useShadowBuffer ) { }
public void reorganiseBuffers(VertexDeclaration newDeclaration, SWIGTYPE_p_std__vectorT_Ogre__HardwareBuffer__Usage_t bufferUsage, HardwareBufferManagerBase mgr) { OgrePINVOKE.VertexData_reorganiseBuffers__SWIG_0(swigCPtr, VertexDeclaration.getCPtr(newDeclaration), SWIGTYPE_p_std__vectorT_Ogre__HardwareBuffer__Usage_t.getCPtr(bufferUsage), HardwareBufferManagerBase.getCPtr(mgr)); if (OgrePINVOKE.SWIGPendingException.Pending) { throw OgrePINVOKE.SWIGPendingException.Retrieve(); } }
public VertexData( VertexDeclaration dcl, VertexBufferBinding bind ) : base() { // this is a fallback rather than actively used this._mgr = HardwareBufferManager.Instance; this.vertexDeclaration = dcl; this.vertexBufferBinding = bind; DeleteDclBinding = false; }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(HardwareBufferManagerBase obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
public DefaultHardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType idxType, int numIndexes, BufferUsage usage ) : base( manager, idxType, numIndexes, usage, true, false ) { _mpData = new byte[ sizeInBytes ]; }
public VertexData( HardwareBufferManagerBase mgr ) : base() { this._mgr = mgr != null ? mgr : HardwareBufferManager.Instance; this.vertexBufferBinding = HardwareBufferManager.Instance.CreateVertexBufferBinding(); this.vertexDeclaration = HardwareBufferManager.Instance.CreateVertexDeclaration(); DeleteDclBinding = true; }
public D3D9HardwareIndexBuffer( HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useSystemMemory, bool useShadowBuffer ) : base( manager, type, numIndices, usage, useSystemMemory, useShadowBuffer ) { //Entering critical section this.LockDeviceAccess(); this._mapDeviceToBufferResources = new Dictionary<D3D9.Device, BufferResources>(); #if AXIOM_D3D_MANAGE_BUFFERS var eResourcePool = useSystemMemory ? D3D9.Pool.SystemMemory : // If not system mem, use managed pool UNLESS buffer is discardable // if discardable, keeping the software backing is expensive ( ( usage & BufferUsage.Discardable ) != 0 ) ? D3D9.Pool.Default : D3D9.Pool.Managed; #else var eResourcePool = useSystemMemory ? D3D9.Pool.SystemMemory : D3D9.Pool.Default; #endif // Set the desired memory pool. this._bufferDesc.Pool = eResourcePool; // Allocate the system memory buffer. this._systemMemoryBuffer = BufferBase.Wrap( new byte[sizeInBytes] ); // Case we have to create this buffer resource on loading. if ( D3D9RenderSystem.ResourceManager.CreationPolicy == D3D9ResourceManager.ResourceCreationPolicy.CreateOnAllDevices ) { foreach ( var d3d9Device in D3D9RenderSystem.ResourceCreationDevices ) { CreateBuffer( d3d9Device, this._bufferDesc.Pool ); } } D3D9RenderSystem.ResourceManager.NotifyResourceCreated( this ); //Leaving critical section this.UnlockDeviceAccess(); }