예제 #1
0
        // Note: We only support a single user uniform buffer per shader
        void CreateBuffers()
        {
            m_VSConstantBuffers = new D3D11.Buffer[m_VSUniformBuffers.Count + (m_VSUserUniformBuffer != null ? 1 : 0)];

            foreach (ShaderUniformBufferDeclaration decl in m_VSUniformBuffers)
            {
                var desc = new D3D11.BufferDescription
                {
                    SizeInBytes    = decl.Size,
                    Usage          = D3D11.ResourceUsage.Dynamic,
                    BindFlags      = D3D11.BindFlags.ConstantBuffer,
                    CpuAccessFlags = D3D11.CpuAccessFlags.Write
                };
                m_VSConstantBuffers[decl.Register] = new D3D11.Buffer(Context.Instance.Dev, desc);
            }

            if (m_VSUserUniformBuffer != null)
            {
                ShaderUniformBufferDeclaration decl = m_VSUserUniformBuffer;

                var desc = new D3D11.BufferDescription
                {
                    SizeInBytes    = decl.Size,
                    Usage          = D3D11.ResourceUsage.Dynamic,
                    BindFlags      = D3D11.BindFlags.ConstantBuffer,
                    CpuAccessFlags = D3D11.CpuAccessFlags.Write
                };
                m_VSConstantBuffers[decl.Register] = new D3D11.Buffer(Context.Instance.Dev, desc);
            }

            m_PSConstantBuffers = new D3D11.Buffer[m_PSUniformBuffers.Count + (m_PSUserUniformBuffer != null ? 1 : 0)];

            foreach (ShaderUniformBufferDeclaration decl in m_PSUniformBuffers)
            {
                var desc = new D3D11.BufferDescription
                {
                    SizeInBytes    = decl.Size,
                    Usage          = D3D11.ResourceUsage.Dynamic,
                    BindFlags      = D3D11.BindFlags.ConstantBuffer,
                    CpuAccessFlags = D3D11.CpuAccessFlags.Write
                };
                m_PSConstantBuffers[decl.Register] = new D3D11.Buffer(Context.Instance.Dev, desc);
            }

            if (m_PSUserUniformBuffer != null)
            {
                ShaderUniformBufferDeclaration decl = m_PSUserUniformBuffer;

                var desc = new D3D11.BufferDescription
                {
                    SizeInBytes    = decl.Size,
                    Usage          = D3D11.ResourceUsage.Dynamic,
                    BindFlags      = D3D11.BindFlags.ConstantBuffer,
                    CpuAccessFlags = D3D11.CpuAccessFlags.Write
                };
                m_PSConstantBuffers[decl.Register] = new D3D11.Buffer(Context.Instance.Dev, desc);
            }
        }
예제 #2
0
        public VertexBuffer(BufferUsage usage = BufferUsage.STATIC)
        {
            m_Usage = usage;

            m_Desc = new D3D11.BufferDescription
            {
                Usage          = (D3D11.ResourceUsage)m_Usage,
                BindFlags      = D3D11.BindFlags.VertexBuffer,
                CpuAccessFlags = D3D11.CpuAccessFlags.Write
            };
        }
예제 #3
0
        public unsafe IndexBuffer(uint[] data)
        {
            Count = data.Length;
            var desc = new D3D11.BufferDescription
            {
                Usage          = D3D11.ResourceUsage.Default,
                SizeInBytes    = sizeof(uint) * Count,
                BindFlags      = D3D11.BindFlags.IndexBuffer,
                CpuAccessFlags = D3D11.CpuAccessFlags.None,
                OptionFlags    = D3D11.ResourceOptionFlags.None
            };

            DataStream dataStream = new DataStream(desc.SizeInBytes, true, true);

            foreach (uint i in data)
            {
                dataStream.Write(i);
            }
            dataStream.Position = 0;

            m_Handle = new D3D11.Buffer(Context.Instance.Dev, dataStream, desc);
        }