Example #1
0
        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));
 }
Example #3
0
        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));
 }