public static DX11VertexBuffer CreateWriteable(DxDevice device, int verticesCount, int vertexSize, eVertexBufferWriteMode mode = eVertexBufferWriteMode.None) { BufferDescription bd = new BufferDescription() { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, SizeInBytes = vertexSize * verticesCount, Usage = ResourceUsage.Default }; bd.BindFlags |= BindFlags.ShaderResource; bd.OptionFlags = ResourceOptionFlags.BufferAllowRawViews; if (mode == eVertexBufferWriteMode.StreamOut) { bd.BindFlags |= BindFlags.StreamOutput; } else if (mode == eVertexBufferWriteMode.Raw) { bd.BindFlags |= BindFlags.UnorderedAccess; } return(new DX11VertexBuffer(device, verticesCount, vertexSize, bd, null)); }
public ResourcePoolEntry <DX11VertexBuffer> LockVertexBuffer <T>(int verticescount, eVertexBufferWriteMode mode) where T : struct { return(this.vbopool.Lock(verticescount, Marshal.SizeOf(typeof(T)), mode)); }
public ResourcePoolEntry <DX11VertexBuffer> Lock(int verticescount, int vertexsize, eVertexBufferWriteMode mode) { lock (lockObject) { //We can lock any buffer of the right size int totalsize = vertexsize * verticescount; foreach (ResourcePoolEntry <DX11VertexBuffer> entry in this.pool) { DX11VertexBuffer tr = entry.Element; if (!entry.IsLocked && totalsize == tr.TotalSize && mode == tr.WriteMode) { entry.Lock(); return(entry); } } DX11VertexBuffer res = DX11VertexBuffer.CreateWriteable(this.device, verticescount, vertexsize, mode); ResourcePoolEntry <DX11VertexBuffer> newentry = new ResourcePoolEntry <DX11VertexBuffer>(res); this.pool.Add(newentry); return(newentry); } }
public ResourcePoolEntry <DX11VertexBuffer> LockVertexBuffer(int verticescount, int vertexsize, eVertexBufferWriteMode mode) { return(this.vbopool.Lock(verticescount, vertexsize, mode)); }