PrimitiveType.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Ryujinx.Graphics.GAL;
  2. namespace Ryujinx.Graphics.Gpu.State
  3. {
  4. /// <summary>
  5. /// Draw primitive type.
  6. /// </summary>
  7. enum PrimitiveType
  8. {
  9. Points,
  10. Lines,
  11. LineLoop,
  12. LineStrip,
  13. Triangles,
  14. TriangleStrip,
  15. TriangleFan,
  16. Quads,
  17. QuadStrip,
  18. Polygon,
  19. LinesAdjacency,
  20. LineStripAdjacency,
  21. TrianglesAdjacency,
  22. TriangleStripAdjacency,
  23. Patches
  24. }
  25. /// <summary>
  26. /// Alternative primitive type that might override <see cref="PrimitiveType"/>.
  27. /// </summary>
  28. enum PrimitiveTypeOverride
  29. {
  30. Invalid = 0,
  31. Points = 1,
  32. Lines = 2,
  33. LineStrip = 3,
  34. Triangles = 4,
  35. TriangleStrip = 5,
  36. TriangleFan = 0x1015,
  37. LinesAdjacency = 10,
  38. LineStripAdjacency = 11,
  39. TrianglesAdjacency = 12,
  40. TriangleStripAdjacency = 13,
  41. Patches = 14
  42. }
  43. static class PrimitiveTypeConverter
  44. {
  45. /// <summary>
  46. /// Converts the primitive type into something that can be used with the host API.
  47. /// </summary>
  48. /// <param name="type">The primitive type to convert</param>
  49. /// <returns>A host compatible enum value</returns>
  50. public static PrimitiveTopology Convert(this PrimitiveType type)
  51. {
  52. return type switch
  53. {
  54. PrimitiveType.Points => PrimitiveTopology.Points,
  55. PrimitiveType.Lines => PrimitiveTopology.Lines,
  56. PrimitiveType.LineLoop => PrimitiveTopology.LineLoop,
  57. PrimitiveType.LineStrip => PrimitiveTopology.LineStrip,
  58. PrimitiveType.Triangles => PrimitiveTopology.Triangles,
  59. PrimitiveType.TriangleStrip => PrimitiveTopology.TriangleStrip,
  60. PrimitiveType.TriangleFan => PrimitiveTopology.TriangleFan,
  61. PrimitiveType.Quads => PrimitiveTopology.Quads,
  62. PrimitiveType.QuadStrip => PrimitiveTopology.QuadStrip,
  63. PrimitiveType.Polygon => PrimitiveTopology.Polygon,
  64. PrimitiveType.LinesAdjacency => PrimitiveTopology.LinesAdjacency,
  65. PrimitiveType.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency,
  66. PrimitiveType.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency,
  67. PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
  68. PrimitiveType.Patches => PrimitiveTopology.Patches,
  69. _ => PrimitiveTopology.Triangles
  70. };
  71. }
  72. /// <summary>
  73. /// Converts the primitive type into something that can be used with the host API.
  74. /// </summary>
  75. /// <param name="type">The primitive type to convert</param>
  76. /// <returns>A host compatible enum value</returns>
  77. public static PrimitiveTopology Convert(this PrimitiveTypeOverride type)
  78. {
  79. return type switch
  80. {
  81. PrimitiveTypeOverride.Points => PrimitiveTopology.Points,
  82. PrimitiveTypeOverride.Lines => PrimitiveTopology.Lines,
  83. PrimitiveTypeOverride.LineStrip => PrimitiveTopology.LineStrip,
  84. PrimitiveTypeOverride.Triangles => PrimitiveTopology.Triangles,
  85. PrimitiveTypeOverride.TriangleStrip => PrimitiveTopology.TriangleStrip,
  86. PrimitiveTypeOverride.TriangleFan => PrimitiveTopology.TriangleFan,
  87. PrimitiveTypeOverride.LinesAdjacency => PrimitiveTopology.LinesAdjacency,
  88. PrimitiveTypeOverride.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency,
  89. PrimitiveTypeOverride.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency,
  90. PrimitiveTypeOverride.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
  91. PrimitiveTypeOverride.Patches => PrimitiveTopology.Patches,
  92. _ => PrimitiveTopology.Triangles
  93. };
  94. }
  95. }
  96. }