aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2018-12-03 12:00:05 +0100
committerRay <raysan5@gmail.com>2018-12-03 12:00:05 +0100
commit8b75a1a990baa6f4cbd0ad0b5dfc06ef6448ac89 (patch)
treec87de9dc1d3422e363d4935dd90ec356b5336bc8
parentf552d4354795d74bb448758d9cac9a25bbf1557e (diff)
downloadraylib-8b75a1a990baa6f4cbd0ad0b5dfc06ef6448ac89.tar.gz
raylib-8b75a1a990baa6f4cbd0ad0b5dfc06ef6448ac89.zip
Improved textures wrap support
-rw-r--r--src/raylib.h3
-rw-r--r--src/rlgl.h18
-rw-r--r--src/textures.c11
3 files changed, 16 insertions, 16 deletions
diff --git a/src/raylib.h b/src/raylib.h
index e3b51dc5..85272943 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -731,7 +731,8 @@ typedef enum {
typedef enum {
WRAP_REPEAT = 0, // Repeats texture in tiled mode
WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode
- WRAP_MIRROR // Mirrors the texture in tiled mode
+ WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode
+ WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode
} TextureWrapMode;
// Font type, defines generation method
diff --git a/src/rlgl.h b/src/rlgl.h
index 18bbb7e1..f2134e70 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -130,7 +130,8 @@
#define RL_WRAP_REPEAT 0x2901 // GL_REPEAT
#define RL_WRAP_CLAMP 0x812F // GL_CLAMP_TO_EDGE
-#define RL_WRAP_CLAMP_MIRROR 0x8742 // GL_MIRROR_CLAMP_EXT
+#define RL_WRAP_MIRROR_REPEAT 0x8370 // GL_MIRRORED_REPEAT
+#define RL_WRAP_MIRROR_CLAMP 0x8742 // GL_MIRROR_CLAMP_EXT
// Matrix modes (equivalent to OpenGL)
#define RL_MODELVIEW 0x1700 // GL_MODELVIEW
@@ -303,13 +304,6 @@ typedef unsigned char byte;
FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x
} TextureFilterMode;
- // Texture parameters: wrap mode
- typedef enum {
- WRAP_REPEAT = 0,
- WRAP_CLAMP,
- WRAP_MIRROR
- } TextureWrapMode;
-
// Color blending modes (pre-defined)
typedef enum {
BLEND_ALPHA = 0,
@@ -863,7 +857,7 @@ static bool texAnisotropicFilterSupported = false; // Anisotropic texture filte
static float maxAnisotropicLevel = 0.0f; // Maximum anisotropy level supported (minimum is 2.0f)
// Extension supported flag: Clamp mirror wrap mode
-static bool texClampMirrorSupported = false; // Clamp mirror wrap mode supported
+static bool texMirrorClampSupported = false; // Clamp mirror wrap mode supported
#if defined(GRAPHICS_API_OPENGL_ES2)
// NOTE: VAO functionality is exposed through extensions (OES)
@@ -1423,7 +1417,7 @@ void rlTextureParameters(unsigned int id, int param, int value)
case RL_TEXTURE_WRAP_S:
case RL_TEXTURE_WRAP_T:
{
- if ((value == RL_WRAP_CLAMP_MIRROR) && !texClampMirrorSupported) TraceLog(LOG_WARNING, "Clamp mirror wrap mode not supported");
+ if ((value == RL_WRAP_MIRROR_CLAMP) && !texMirrorClampSupported) TraceLog(LOG_WARNING, "Clamp mirror wrap mode not supported");
else glTexParameteri(GL_TEXTURE_2D, param, value);
} break;
case RL_TEXTURE_MAG_FILTER:
@@ -1719,7 +1713,7 @@ void rlglInit(int width, int height)
}
// Clamp mirror wrap mode supported
- if (strcmp(extList[i], (const char *)"GL_EXT_texture_mirror_clamp") == 0) texClampMirrorSupported = true;
+ if (strcmp(extList[i], (const char *)"GL_EXT_texture_mirror_clamp") == 0) texMirrorClampSupported = true;
// Debug marker support
if(strcmp(extList[i], (const char *)"GL_EXT_debug_marker") == 0) debugMarkerSupported = true;
@@ -1744,7 +1738,7 @@ void rlglInit(int width, int height)
if (texCompASTCSupported) TraceLog(LOG_INFO, "[EXTENSION] ASTC compressed textures supported");
if (texAnisotropicFilterSupported) TraceLog(LOG_INFO, "[EXTENSION] Anisotropic textures filtering supported (max: %.0fX)", maxAnisotropicLevel);
- if (texClampMirrorSupported) TraceLog(LOG_INFO, "[EXTENSION] Clamp mirror wrap texture mode supported");
+ if (texMirrorClampSupported) TraceLog(LOG_INFO, "[EXTENSION] Mirror clamp wrap texture mode supported");
if (debugMarkerSupported) TraceLog(LOG_INFO, "[EXTENSION] Debug Marker supported");
diff --git a/src/textures.c b/src/textures.c
index 8169aae8..4d01e81a 100644
--- a/src/textures.c
+++ b/src/textures.c
@@ -2354,10 +2354,15 @@ void SetTextureWrap(Texture2D texture, int wrapMode)
rlTextureParameters(texture.id, RL_TEXTURE_WRAP_S, RL_WRAP_CLAMP);
rlTextureParameters(texture.id, RL_TEXTURE_WRAP_T, RL_WRAP_CLAMP);
} break;
- case WRAP_MIRROR:
+ case WRAP_MIRROR_REPEAT:
{
- rlTextureParameters(texture.id, RL_TEXTURE_WRAP_S, RL_WRAP_CLAMP_MIRROR);
- rlTextureParameters(texture.id, RL_TEXTURE_WRAP_T, RL_WRAP_CLAMP_MIRROR);
+ rlTextureParameters(texture.id, RL_TEXTURE_WRAP_S, RL_WRAP_MIRROR_REPEAT);
+ rlTextureParameters(texture.id, RL_TEXTURE_WRAP_T, RL_WRAP_MIRROR_REPEAT);
+ } break;
+ case WRAP_MIRROR_CLAMP:
+ {
+ rlTextureParameters(texture.id, RL_TEXTURE_WRAP_S, RL_WRAP_MIRROR_CLAMP);
+ rlTextureParameters(texture.id, RL_TEXTURE_WRAP_T, RL_WRAP_MIRROR_CLAMP);
} break;
default: break;
}