Пример #1
0
        /// <summary>
        /// Vertex shader stage.
        /// </summary>
        private void StageVertexShader(TVertexIn[] vertices, PrimitiveTopology primitiveTopology)
        {
            var verticesVsOut = new TVertex[vertices.Length];

            for (var i = 0; i < vertices.Length; i++)
            {
                verticesVsOut[i] = Shader.VertexShader(vertices[i]);
            }

            StageVertexPostProcessing(verticesVsOut, primitiveTopology);
        }
Пример #2
0
        /// <summary>
        /// Vertex post-processing stage.
        /// </summary>
        private void StageVertexPostProcessing(TVertex[] vertices, PrimitiveTopology primitiveTopology)
        {
            switch (primitiveTopology)
            {
            case PrimitiveTopology.PointList:
                for (var i = 0; i < vertices.Length; i++)
                {
                    VertexPostProcessingPoint(vertices[i]);
                }
                break;

            case PrimitiveTopology.LineList:
                for (var i = 0; i < vertices.Length; i += 2)
                {
                    VertexPostProcessingLine(vertices[i], vertices[i + 1]);
                }
                break;

            case PrimitiveTopology.LineStrip:
                for (var i = 0; i < vertices.Length - 1; i++)
                {
                    VertexPostProcessingLine(vertices[i], vertices[i + 1]);
                }
                break;

            case PrimitiveTopology.TriangleList:
                for (var i = 0; i < vertices.Length; i += 3)
                {
                    VertexPostProcessingTriangle(vertices[i], vertices[i + 1], vertices[i + 2]);
                }
                break;

            case PrimitiveTopology.TriangleStrip:
                for (var i = 0; i < vertices.Length - 2; i++)
                {
                    VertexPostProcessingTriangle(vertices[i], vertices[i + 1], vertices[i + 2]);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(primitiveTopology), primitiveTopology, null);
            }
        }
Пример #3
0
 /// <inheritdoc />
 public void Render(TVertexIn[] vertices, PrimitiveTopology primitiveTopology)
 {
     StageVertexShader(vertices, primitiveTopology);
 }