aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-08-25 16:39:08 -0300
committergdkchan <gab.dark.100@gmail.com>2018-08-25 16:39:08 -0300
commit43c4e7c78d98b09e8dc51e3450396cd99b2b3a92 (patch)
tree2c2205be004df3b68c2f375084fc318f396bdcf7 /Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
parenta42ab2e40cae5db96cc58634f1e70c4e31bb095d (diff)
Use mirrored texture wraps when available (#361)
Diffstat (limited to 'Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs')
-rw-r--r--Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs35
1 files changed, 25 insertions, 10 deletions
diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
index e04a59d4..64f670a5 100644
--- a/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
+++ b/Ryujinx.Graphics/Gal/OpenGL/OGLEnumConverter.cs
@@ -215,16 +215,31 @@ namespace Ryujinx.Graphics.Gal.OpenGL
{
switch (Wrap)
{
- case GalTextureWrap.Repeat: return TextureWrapMode.Repeat;
- case GalTextureWrap.MirroredRepeat: return TextureWrapMode.MirroredRepeat;
- case GalTextureWrap.ClampToEdge: return TextureWrapMode.ClampToEdge;
- case GalTextureWrap.ClampToBorder: return TextureWrapMode.ClampToBorder;
- case GalTextureWrap.Clamp: return TextureWrapMode.Clamp;
-
- //TODO: Those needs extensions (and are currently wrong).
- case GalTextureWrap.MirrorClampToEdge: return TextureWrapMode.ClampToEdge;
- case GalTextureWrap.MirrorClampToBorder: return TextureWrapMode.ClampToBorder;
- case GalTextureWrap.MirrorClamp: return TextureWrapMode.Clamp;
+ case GalTextureWrap.Repeat: return TextureWrapMode.Repeat;
+ case GalTextureWrap.MirroredRepeat: return TextureWrapMode.MirroredRepeat;
+ case GalTextureWrap.ClampToEdge: return TextureWrapMode.ClampToEdge;
+ case GalTextureWrap.ClampToBorder: return TextureWrapMode.ClampToBorder;
+ case GalTextureWrap.Clamp: return TextureWrapMode.Clamp;
+ }
+
+ if (OGLExtension.HasTextureMirrorClamp())
+ {
+ switch (Wrap)
+ {
+ case GalTextureWrap.MirrorClampToEdge: return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt;
+ case GalTextureWrap.MirrorClampToBorder: return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt;
+ case GalTextureWrap.MirrorClamp: return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt;
+ }
+ }
+ else
+ {
+ //Fallback to non-mirrored clamps
+ switch (Wrap)
+ {
+ case GalTextureWrap.MirrorClampToEdge: return TextureWrapMode.ClampToEdge;
+ case GalTextureWrap.MirrorClampToBorder: return TextureWrapMode.ClampToBorder;
+ case GalTextureWrap.MirrorClamp: return TextureWrapMode.Clamp;
+ }
}
throw new ArgumentException(nameof(Wrap));