Exemple #1
0
        public void CanGetVertexStreamForLineListWithMultipleVertexBuffers()
        {
            // Arrange.
            var device         = new Device();
            var inputAssembler = new InputAssemblerStage(device);
            var inputSignature = GetTestVertexPositionNormalTextureShaderBytecode();
            var inputElements  = TestVertex.PositionNormal.InputElements
                                 .Union(new[] { new InputElement("TEXCOORD", 0, Format.R32G32_Float, 1, 0) })
                                 .ToArray();

            inputAssembler.InputLayout       = new InputLayout(device, inputElements, inputSignature);
            inputAssembler.PrimitiveTopology = PrimitiveTopology.LineList;
            var positionsAndNormals = new[]
            {
                new TestVertex.PositionNormal(new Vector3(1, 2, 3), new Vector3(3, 2, 1)),
                new TestVertex.PositionNormal(new Vector3(4, 5, 6), new Vector3(4, 6, 8))
            };
            var texCoords = new[]
            {
                new Vector2(3, 4),
                new Vector2(0.5f, 0.3f)
            };

            inputAssembler.SetVertexBuffers(0, new[]
            {
                new VertexBufferBinding(device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), positionsAndNormals),
                                        0, TestVertex.PositionNormal.SizeInBytes),
                new VertexBufferBinding(device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), texCoords),
                                        0, Vector2.SizeInBytes)
            });

            // Act.
            var vertexStream = inputAssembler.GetVertexStream(inputSignature, 2, 0).ToList();

            // Assert.
            Assert.That(vertexStream, Has.Count.EqualTo(2));

            Assert.That(vertexStream[0].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[0].VertexID, Is.EqualTo(0));
            Assert.That(vertexStream[0].Data, Is.EqualTo(new[]
            {
                new Number4(1.0f, 2.0f, 3.0f, 0.0f),
                new Number4(3.0f, 2.0f, 1.0f, 0.0f),
                new Number4(3.0f, 4.0f, 0.0f, 0.0f)
            }));

            Assert.That(vertexStream[1].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[1].VertexID, Is.EqualTo(1));
            Assert.That(vertexStream[1].Data, Is.EqualTo(new[]
            {
                new Number4(4.0f, 5.0f, 6.0f, 0.0f),
                new Number4(4.0f, 6.0f, 8.0f, 0.0f),
                new Number4(0.5f, 0.3f, 0.0f, 0.0f)
            }));
        }
Exemple #2
0
        public void CanGetVertexStreamForTriangleListWithNoBuffersBound()
        {
            // Arrange.
            var device         = new Device();
            var inputAssembler = new InputAssemblerStage(device);

            inputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            var inputSignature = new InputSignatureChunk
            {
                Parameters =
                {
                    new SignatureParameterDescription("SV_VertexID",                                      0, Name.VertexID,   RegisterComponentType.UInt32,
                                                      0,                                    ComponentMask.X, ComponentMask.X),
                    new SignatureParameterDescription("SV_InstanceID",                                    0, Name.InstanceID, RegisterComponentType.UInt32,
                                                      1,                                    ComponentMask.X, ComponentMask.X),
                }
            };

            // Act.
            var vertexStream = inputAssembler.GetVertexStream(inputSignature, 3, 0).ToList();

            // Assert.
            Assert.That(vertexStream, Has.Count.EqualTo(3));

            Assert.That(vertexStream[0].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[0].VertexID, Is.EqualTo(0));
            Assert.That(vertexStream[0].Data, Is.EqualTo(new[]
            {
                new Number4(0.0f, 0, 0, 0),
                new Number4(0.0f, 0, 0, 0)
            }));

            Assert.That(vertexStream[1].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[1].VertexID, Is.EqualTo(1));
            Assert.That(vertexStream[1].Data, Is.EqualTo(new[]
            {
                new Number4(1.0f, 0, 0, 0),
                new Number4(0.0f, 0, 0, 0)
            }));

            Assert.That(vertexStream[2].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[2].VertexID, Is.EqualTo(2));
            Assert.That(vertexStream[2].Data, Is.EqualTo(new[]
            {
                new Number4(2.0f, 0, 0, 0),
                new Number4(0.0f, 0, 0, 0)
            }));
        }
Exemple #3
0
        public void CanGetVertexStreamForLineList()
        {
            // Arrange.
            var device         = new Device();
            var inputAssembler = new InputAssemblerStage(device);
            var inputSignature = GetTestVertexPositionNormalTextureShaderBytecode();

            inputAssembler.InputLayout       = new InputLayout(device, TestVertex.PositionNormalTexture.InputElements, inputSignature);
            inputAssembler.PrimitiveTopology = PrimitiveTopology.LineList;
            var vertices = new[]
            {
                new TestVertex.PositionNormalTexture(new Vector3(1, 2, 3), new Vector3(3, 2, 1), new Vector2(3, 4)),
                new TestVertex.PositionNormalTexture(new Vector3(4, 5, 6), new Vector3(4, 6, 8), new Vector2(0.5f, 0.3f))
            };
            var vertexBuffer = device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), vertices);

            inputAssembler.SetVertexBuffers(0, new[]
            {
                new VertexBufferBinding(vertexBuffer, 0, TestVertex.PositionNormalTexture.SizeInBytes)
            });

            // Act.
            var vertexStream = inputAssembler.GetVertexStream(inputSignature, 2, 0).ToList();

            // Assert.
            Assert.That(vertexStream, Has.Count.EqualTo(2));

            Assert.That(vertexStream[0].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[0].VertexID, Is.EqualTo(0));
            Assert.That(vertexStream[0].Data, Is.EqualTo(new[]
            {
                new Number4(1.0f, 2.0f, 3.0f, 0.0f),
                new Number4(3.0f, 2.0f, 1.0f, 0.0f),
                new Number4(3.0f, 4.0f, 0.0f, 0.0f)
            }));

            Assert.That(vertexStream[1].InstanceID, Is.EqualTo(0));
            Assert.That(vertexStream[1].VertexID, Is.EqualTo(1));
            Assert.That(vertexStream[1].Data, Is.EqualTo(new[]
            {
                new Number4(4.0f, 5.0f, 6.0f, 0.0f),
                new Number4(4.0f, 6.0f, 8.0f, 0.0f),
                new Number4(0.5f, 0.3f, 0.0f, 0.0f)
            }));
        }
Exemple #4
0
 public void Draw(int vertexCount, int startVertexLocation)
 {
     DiagnosticUtilities.RaiseEvent(this, Drawing, vertexCount, startVertexLocation);
     DrawInternal(_inputAssembler.GetVertexStream(_vertexShader.Shader.Bytecode.InputSignature, vertexCount, startVertexLocation));
 }