aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/Types/PrimitiveType.cs
blob: dae631248d61d0308d929e0a5ca119e0d9af8f9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using Ryujinx.Graphics.GAL;

namespace Ryujinx.Graphics.Gpu.Engine.Types
{
    /// <summary>
    /// Draw primitive type.
    /// </summary>
    enum PrimitiveType
    {
        Points,
        Lines,
        LineLoop,
        LineStrip,
        Triangles,
        TriangleStrip,
        TriangleFan,
        Quads,
        QuadStrip,
        Polygon,
        LinesAdjacency,
        LineStripAdjacency,
        TrianglesAdjacency,
        TriangleStripAdjacency,
        Patches
    }

    /// <summary>
    /// Alternative primitive type that might override <see cref="PrimitiveType"/>.
    /// </summary>
    enum PrimitiveTypeOverride
    {
        Points = 1,
        Lines = 2,
        LineStrip = 3,
        Triangles = 4,
        TriangleStrip = 5,
        TriangleFan = 0x1015,
        LinesAdjacency = 10,
        LineStripAdjacency = 11,
        TrianglesAdjacency = 12,
        TriangleStripAdjacency = 13,
        Patches = 14
    }

    static class PrimitiveTypeConverter
    {
        /// <summary>
        /// Converts the primitive type into something that can be used with the host API.
        /// </summary>
        /// <param name="type">The primitive type to convert</param>
        /// <returns>A host compatible enum value</returns>
        public static PrimitiveTopology Convert(this PrimitiveType type)
        {
            return type switch
            {
                PrimitiveType.Points                 => PrimitiveTopology.Points,
                PrimitiveType.Lines                  => PrimitiveTopology.Lines,
                PrimitiveType.LineLoop               => PrimitiveTopology.LineLoop,
                PrimitiveType.LineStrip              => PrimitiveTopology.LineStrip,
                PrimitiveType.Triangles              => PrimitiveTopology.Triangles,
                PrimitiveType.TriangleStrip          => PrimitiveTopology.TriangleStrip,
                PrimitiveType.TriangleFan            => PrimitiveTopology.TriangleFan,
                PrimitiveType.Quads                  => PrimitiveTopology.Quads,
                PrimitiveType.QuadStrip              => PrimitiveTopology.QuadStrip,
                PrimitiveType.Polygon                => PrimitiveTopology.Polygon,
                PrimitiveType.LinesAdjacency         => PrimitiveTopology.LinesAdjacency,
                PrimitiveType.LineStripAdjacency     => PrimitiveTopology.LineStripAdjacency,
                PrimitiveType.TrianglesAdjacency     => PrimitiveTopology.TrianglesAdjacency,
                PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
                PrimitiveType.Patches                => PrimitiveTopology.Patches,
                _                                    => PrimitiveTopology.Triangles
            };
        }

        /// <summary>
        /// Converts the primitive type into something that can be used with the host API.
        /// </summary>
        /// <param name="type">The primitive type to convert</param>
        /// <returns>A host compatible enum value</returns>
        public static PrimitiveTopology Convert(this PrimitiveTypeOverride type)
        {
            return type switch
            {
                PrimitiveTypeOverride.Points                 => PrimitiveTopology.Points,
                PrimitiveTypeOverride.Lines                  => PrimitiveTopology.Lines,
                PrimitiveTypeOverride.LineStrip              => PrimitiveTopology.LineStrip,
                PrimitiveTypeOverride.Triangles              => PrimitiveTopology.Triangles,
                PrimitiveTypeOverride.TriangleStrip          => PrimitiveTopology.TriangleStrip,
                PrimitiveTypeOverride.TriangleFan            => PrimitiveTopology.TriangleFan,
                PrimitiveTypeOverride.LinesAdjacency         => PrimitiveTopology.LinesAdjacency,
                PrimitiveTypeOverride.LineStripAdjacency     => PrimitiveTopology.LineStripAdjacency,
                PrimitiveTypeOverride.TrianglesAdjacency     => PrimitiveTopology.TrianglesAdjacency,
                PrimitiveTypeOverride.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
                PrimitiveTypeOverride.Patches                => PrimitiveTopology.Patches,
                _                                            => PrimitiveTopology.Triangles
            };
        }
    }
}