Saturday, July 30, 2016

[Slimdx] Question About Setting Constant Buffers

[Slimdx] Question About Setting Constant Buffers

Too long didn't read:  I'm trying to find the SlimDX version of this line:

deviceContext->VSSetConstantBuffers(0, 1, &m_vertexPerObjectBuffer);

Trying to learn SlimDX and converting a C++ project I built into SlimDX.   I'm running into trouble on how to actually set a Constant Buffer.   I have managed to Create the Buffers, and update them like so: 

            vertexPerObject = new Buffer(device, new BufferDescription
            {
                Usage = ResourceUsage.Default,
                SizeInBytes = Utility.SizeOf<VertexPerObject>(),
                BindFlags = BindFlags.ConstantBuffer
            });
            var data = new DataStream(Utility.SizeOf<VertexPerObject>(), true, true);
           
            Matrix worldViewProj = Matrix.Multiply(worldMatrix, viewMatrix);
            worldViewProj = Matrix.Multiply(worldViewProj, projectionMatrix);

            data.Write(worldViewProj);
            data.Position = 0;
            device.ImmediateContext.UpdateSubresource(new DataBox(0, 0, data), vertexPerObject, 0);


However, the only source of setting a Constant Buffer I can find in the SlimDX library occurs in the VertexShaderWrapper class.   Here is the definition intellisense gives me on a peek:

public class VertexShaderWrapper
    {
        public VertexShader Get();
        public VertexShader Get(ClassInstance[] classInstances);
        public Buffer[] GetConstantBuffers(int startSlot, int count);
        public SamplerState[] GetSamplers(int startSlot, int count);
        public ShaderResourceView[] GetShaderResources(int startSlot, int count);
        public void Set(VertexShader shader);
        public void Set(VertexShader shader, ClassInstance[] classInstances);
        public void SetConstantBuffer(Buffer constantBuffer, int slot);
        public void SetConstantBuffers(Buffer[] constantBuffers, int startSlot, int count);
        public void SetSampler(SamplerState sampler, int slot);
        public void SetSamplers(SamplerState[] samplers, int startSlot, int count);
        public void SetShaderResource(ShaderResourceView resourceView, int slot);
        public void SetShaderResources(ShaderResourceView[] resourceViews, int startSlot, int count);
    }

I assume this means it has an Abstract Contructor that takes 0 arguments since its not static.  but trying this:

VertexShaderWrapper vsw = new VertexShaderWrapper();

Just gives me the error:   VertexShaderWrapper does not contain a Constructor that takes 0 arguments. 


No comments:

Post a Comment