void CreateViews(string name, BindFlags flags, SlimDX.Direct3D11.Resource resource) { if (flags.HasFlag(BindFlags.RenderTarget)) { var view = new RenderTargetView(m_D3dDevice, resource); m_RTVList.Add(name, view); } if (flags.HasFlag(BindFlags.DepthStencil)) { var view = new DepthStencilView(m_D3dDevice, resource); m_DSVList.Add(name, view); } if (flags.HasFlag(BindFlags.ShaderResource)) { var view = new ShaderResourceView(m_D3dDevice, resource); m_SRVList.Add(name, view); } if (flags.HasFlag(BindFlags.UnorderedAccess)) { var view = new UnorderedAccessView(m_D3dDevice, resource); m_UAVList.Add(name, view); } }
void resize(int capacity) { if (maximumCapacity > 0 && capacity > maximumCapacity) { throw new ArgumentException("Attempting to resize a dynamic buffer over it’s maximum capacity"); } BufferDesc desc = new BufferDesc(false); desc.Usage = Usage.Dynamic; desc.BindFlags = usage; desc.CPUAccessFlags = CpuAccessFlags.Write; desc.uiSizeInBytes = capacity; if (usage.HasFlag(BindFlags.ShaderResource)) { desc.Mode = BufferMode.Structured; desc.ElementByteStride = 16; } using (var device = context.renderContext.device) buffer = device.CreateBuffer(ref desc, null, IntPtr.Zero, 0); this.capacity = capacity; if (null != m_resizedEvent) { foreach (var sub in m_resizedEvent) { sub(this, capacity); } } }
/// <summary>Construct the buffer</summary> public DynamicBuffer(Context context, BindFlags usage, int initialCapacity, int maxCapacity = 0) { if (RuntimeEnvironment.runningLinux && usage.HasFlag(BindFlags.UniformBuffer)) { maxCapacity = Math.Min(maxCapacity, 64 * 1024); // That 64kb value is reported by GL_MAX_VERTEX_UNIFORM_VECTORS and GL_MAX_FRAGMENT_UNIFORM_VECTORS } maximumCapacity = maxCapacity; this.usage = usage; this.context = context; initialCapacity = Math.Min(initialCapacity, 1024 * 2); resize(initialCapacity.nextPowerOf2()); }
private void LoadArraySlices(BindFlags bindFlags) { LoadArraySlices(bindFlags.HasFlag(BindFlags.RenderTarget), bindFlags.HasFlag(BindFlags.ShaderResource), bindFlags.HasFlag(BindFlags.DepthStencil)); }