/// <summary> /// Updates buffer resources from system memory buffer. /// </summary> private bool _updateBufferResources(BufferBase systemMemoryBuffer, ref BufferResources bufferResources) { Contract.RequiresNotNull(bufferResources, "Cannot update BufferResources in D3D9HardwareIndexBuffer!"); Contract.RequiresNotNull(bufferResources.IndexBuffer, "Cannot update BufferResources in D3D9HardwareIndexBuffer!"); Contract.Requires(bufferResources.IsOutOfDate); DX.DataStream dstBytes; // Lock the buffer try { dstBytes = bufferResources.IndexBuffer.Lock(bufferResources.LockOffset, bufferResources.LockLength, D3D9Helper.ConvertEnum(bufferResources.LockOptions, usage)); } catch (Exception ex) { throw new AxiomException("Cannot lock D3D9 index buffer!", ex); } var src = systemMemoryBuffer.Offset(bufferResources.LockOffset); { using (var dest = BufferBase.Wrap(dstBytes.DataPointer, bufferResources.LockLength)) { Memory.Copy(src, dest, bufferResources.LockLength); } } // Unlock the buffer. var hr = bufferResources.IndexBuffer.Unlock(); if (hr.Failure) { throw new AxiomException("Cannot unlock D3D9 index buffer: {0}", hr.ToString()); } bufferResources.IsOutOfDate = false; bufferResources.LockOffset = sizeInBytes; bufferResources.LockLength = 0; bufferResources.LockOptions = BufferLocking.Normal; return(true); }
private bool _updateBufferResources( BufferBase systemMemoryBuffer, ref BufferResources bufferResources ) { Contract.RequiresNotNull( bufferResources, "Cannot update BufferResources in D3D9HardwareVertexBuffer!" ); Contract.RequiresNotNull( bufferResources.VertexBuffer, "Cannot update BufferResources in D3D9HardwareVertexBuffer!" ); Contract.Requires( bufferResources.IsOutOfDate ); DX.DataStream dstBytes; // Lock the buffer try { dstBytes = bufferResources.VertexBuffer.Lock( bufferResources.LockOffset, bufferResources.LockLength, D3D9Helper.ConvertEnum( bufferResources.LockOptions, usage ) ); } catch ( Exception ex ) { throw new AxiomException( "Cannot lock D3D9 vertex buffer!", ex ); } var src = systemMemoryBuffer.Offset( bufferResources.LockOffset ); { using ( var dest = BufferBase.Wrap( dstBytes.DataPointer, bufferResources.LockLength ) ) { Memory.Copy( src, dest, bufferResources.LockLength ); } } // Unlock the buffer. var hr = bufferResources.VertexBuffer.Unlock(); if ( hr.Failure ) { throw new AxiomException( "Cannot unlock D3D9 vertex buffer: {0}", hr.ToString() ); } bufferResources.IsOutOfDate = false; bufferResources.LockOffset = sizeInBytes; bufferResources.LockLength = 0; bufferResources.LockOptions = BufferLocking.Normal; return true; }