PrimitiveType.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using Ryujinx.Graphics.GAL;
  2. namespace Ryujinx.Graphics.Gpu.Engine.Types
  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. Points = 1,
  31. Lines = 2,
  32. LineStrip = 3,
  33. Triangles = 4,
  34. TriangleStrip = 5,
  35. TriangleFan = 0x1015,
  36. LinesAdjacency = 10,
  37. LineStripAdjacency = 11,
  38. TrianglesAdjacency = 12,
  39. TriangleStripAdjacency = 13,
  40. Patches = 14
  41. }
  42. static class PrimitiveTypeConverter
  43. {
  44. /// <summary>
  45. /// Converts the primitive type into something that can be used with the host API.
  46. /// </summary>
  47. /// <param name="type">The primitive type to convert</param>
  48. /// <returns>A host compatible enum value</returns>
  49. public static PrimitiveTopology Convert(this PrimitiveType type)
  50. {
  51. return type switch
  52. {
  53. PrimitiveType.Points => PrimitiveTopology.Points,
  54. PrimitiveType.Lines => PrimitiveTopology.Lines,
  55. PrimitiveType.LineLoop => PrimitiveTopology.LineLoop,
  56. PrimitiveType.LineStrip => PrimitiveTopology.LineStrip,
  57. PrimitiveType.Triangles => PrimitiveTopology.Triangles,
  58. PrimitiveType.TriangleStrip => PrimitiveTopology.TriangleStrip,
  59. PrimitiveType.TriangleFan => PrimitiveTopology.TriangleFan,
  60. PrimitiveType.Quads => PrimitiveTopology.Quads,
  61. PrimitiveType.QuadStrip => PrimitiveTopology.QuadStrip,
  62. PrimitiveType.Polygon => PrimitiveTopology.Polygon,
  63. PrimitiveType.LinesAdjacency => PrimitiveTopology.LinesAdjacency,
  64. PrimitiveType.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency,
  65. PrimitiveType.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency,
  66. PrimitiveType.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
  67. PrimitiveType.Patches => PrimitiveTopology.Patches,
  68. _ => PrimitiveTopology.Triangles
  69. };
  70. }
  71. /// <summary>
  72. /// Converts the primitive type into something that can be used with the host API.
  73. /// </summary>
  74. /// <param name="type">The primitive type to convert</param>
  75. /// <returns>A host compatible enum value</returns>
  76. public static PrimitiveTopology Convert(this PrimitiveTypeOverride type)
  77. {
  78. return type switch
  79. {
  80. PrimitiveTypeOverride.Points => PrimitiveTopology.Points,
  81. PrimitiveTypeOverride.Lines => PrimitiveTopology.Lines,
  82. PrimitiveTypeOverride.LineStrip => PrimitiveTopology.LineStrip,
  83. PrimitiveTypeOverride.Triangles => PrimitiveTopology.Triangles,
  84. PrimitiveTypeOverride.TriangleStrip => PrimitiveTopology.TriangleStrip,
  85. PrimitiveTypeOverride.TriangleFan => PrimitiveTopology.TriangleFan,
  86. PrimitiveTypeOverride.LinesAdjacency => PrimitiveTopology.LinesAdjacency,
  87. PrimitiveTypeOverride.LineStripAdjacency => PrimitiveTopology.LineStripAdjacency,
  88. PrimitiveTypeOverride.TrianglesAdjacency => PrimitiveTopology.TrianglesAdjacency,
  89. PrimitiveTypeOverride.TriangleStripAdjacency => PrimitiveTopology.TriangleStripAdjacency,
  90. PrimitiveTypeOverride.Patches => PrimitiveTopology.Patches,
  91. _ => PrimitiveTopology.Triangles
  92. };
  93. }
  94. }
  95. }