OGLEnumConverter.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using OpenTK.Graphics.OpenGL;
  2. using System;
  3. namespace Ryujinx.Graphics.Gal.OpenGL
  4. {
  5. static class OGLEnumConverter
  6. {
  7. public static DrawElementsType GetDrawElementsType(GalIndexFormat Format)
  8. {
  9. switch (Format)
  10. {
  11. case GalIndexFormat.Byte: return DrawElementsType.UnsignedByte;
  12. case GalIndexFormat.Int16: return DrawElementsType.UnsignedShort;
  13. case GalIndexFormat.Int32: return DrawElementsType.UnsignedInt;
  14. }
  15. throw new ArgumentException(nameof(Format));
  16. }
  17. public static PrimitiveType GetPrimitiveType(GalPrimitiveType Type)
  18. {
  19. switch (Type)
  20. {
  21. case GalPrimitiveType.Points: return PrimitiveType.Points;
  22. case GalPrimitiveType.Lines: return PrimitiveType.Lines;
  23. case GalPrimitiveType.LineLoop: return PrimitiveType.LineLoop;
  24. case GalPrimitiveType.LineStrip: return PrimitiveType.LineStrip;
  25. case GalPrimitiveType.Triangles: return PrimitiveType.Triangles;
  26. case GalPrimitiveType.TriangleStrip: return PrimitiveType.TriangleStrip;
  27. case GalPrimitiveType.TriangleFan: return PrimitiveType.TriangleFan;
  28. case GalPrimitiveType.Quads: return PrimitiveType.Quads;
  29. case GalPrimitiveType.QuadStrip: return PrimitiveType.QuadStrip;
  30. case GalPrimitiveType.Polygon: return PrimitiveType.Polygon;
  31. case GalPrimitiveType.LinesAdjacency: return PrimitiveType.LinesAdjacency;
  32. case GalPrimitiveType.LineStripAdjacency: return PrimitiveType.LineStripAdjacency;
  33. case GalPrimitiveType.TrianglesAdjacency: return PrimitiveType.TrianglesAdjacency;
  34. case GalPrimitiveType.TriangleStripAdjacency: return PrimitiveType.TriangleStripAdjacency;
  35. case GalPrimitiveType.Patches: return PrimitiveType.Patches;
  36. }
  37. throw new ArgumentException(nameof(Type));
  38. }
  39. public static ShaderType GetShaderType(GalShaderType Type)
  40. {
  41. switch (Type)
  42. {
  43. case GalShaderType.Vertex: return ShaderType.VertexShader;
  44. case GalShaderType.TessControl: return ShaderType.TessControlShader;
  45. case GalShaderType.TessEvaluation: return ShaderType.TessEvaluationShader;
  46. case GalShaderType.Geometry: return ShaderType.GeometryShader;
  47. case GalShaderType.Fragment: return ShaderType.FragmentShader;
  48. }
  49. throw new ArgumentException(nameof(Type));
  50. }
  51. public static (PixelFormat, PixelType) GetTextureFormat(GalTextureFormat Format)
  52. {
  53. switch (Format)
  54. {
  55. case GalTextureFormat.A8B8G8R8: return (PixelFormat.Rgba, PixelType.UnsignedByte);
  56. case GalTextureFormat.A1B5G5R5: return (PixelFormat.Rgba, PixelType.UnsignedShort5551);
  57. case GalTextureFormat.B5G6R5: return (PixelFormat.Rgb, PixelType.UnsignedShort565);
  58. }
  59. throw new NotImplementedException(Format.ToString());
  60. }
  61. public static PixelInternalFormat GetCompressedTextureFormat(GalTextureFormat Format)
  62. {
  63. switch (Format)
  64. {
  65. case GalTextureFormat.BC1: return PixelInternalFormat.CompressedRgbaS3tcDxt1Ext;
  66. case GalTextureFormat.BC2: return PixelInternalFormat.CompressedRgbaS3tcDxt3Ext;
  67. case GalTextureFormat.BC3: return PixelInternalFormat.CompressedRgbaS3tcDxt5Ext;
  68. }
  69. throw new NotImplementedException(Format.ToString());
  70. }
  71. public static TextureWrapMode GetTextureWrapMode(GalTextureWrap Wrap)
  72. {
  73. switch (Wrap)
  74. {
  75. case GalTextureWrap.Repeat: return TextureWrapMode.Repeat;
  76. case GalTextureWrap.MirroredRepeat: return TextureWrapMode.MirroredRepeat;
  77. case GalTextureWrap.ClampToEdge: return TextureWrapMode.ClampToEdge;
  78. case GalTextureWrap.ClampToBorder: return TextureWrapMode.ClampToBorder;
  79. case GalTextureWrap.Clamp: return TextureWrapMode.Clamp;
  80. //TODO: Those needs extensions (and are currently wrong).
  81. case GalTextureWrap.MirrorClampToEdge: return TextureWrapMode.ClampToEdge;
  82. case GalTextureWrap.MirrorClampToBorder: return TextureWrapMode.ClampToBorder;
  83. case GalTextureWrap.MirrorClamp: return TextureWrapMode.Clamp;
  84. }
  85. throw new ArgumentException(nameof(Wrap));
  86. }
  87. public static TextureMinFilter GetTextureMinFilter(
  88. GalTextureFilter MinFilter,
  89. GalTextureMipFilter MipFilter)
  90. {
  91. //TODO: Mip (needs mipmap support first).
  92. switch (MinFilter)
  93. {
  94. case GalTextureFilter.Nearest: return TextureMinFilter.Nearest;
  95. case GalTextureFilter.Linear: return TextureMinFilter.Linear;
  96. }
  97. throw new ArgumentException(nameof(MinFilter));
  98. }
  99. public static TextureMagFilter GetTextureMagFilter(GalTextureFilter Filter)
  100. {
  101. switch (Filter)
  102. {
  103. case GalTextureFilter.Nearest: return TextureMagFilter.Nearest;
  104. case GalTextureFilter.Linear: return TextureMagFilter.Linear;
  105. }
  106. throw new ArgumentException(nameof(Filter));
  107. }
  108. public static BlendEquationMode GetBlendEquation(GalBlendEquation BlendEquation)
  109. {
  110. return (BlendEquationMode)BlendEquation;
  111. }
  112. public static BlendingFactorSrc GetBlendFactorSrc(GalBlendFactor BlendFactor)
  113. {
  114. return (BlendingFactorSrc)(BlendFactor - 0x4000);
  115. }
  116. public static BlendingFactorDest GetBlendFactorDst(GalBlendFactor BlendFactor)
  117. {
  118. return (BlendingFactorDest)(BlendFactor - 0x4000);
  119. }
  120. }
  121. }