Browse Source

Added "mirroredrepeat" wrap mode.

Alex Szpakowski 10 years ago
parent
commit
60eceadc0a

+ 1 - 0
src/modules/graphics/Texture.cpp

@@ -121,6 +121,7 @@ StringMap<Texture::WrapMode, Texture::WRAP_MAX_ENUM>::Entry Texture::wrapModeEnt
 {
 	{ "clamp", Texture::WRAP_CLAMP },
 	{ "repeat", Texture::WRAP_REPEAT },
+	{ "mirroredrepeat", Texture::WRAP_MIRRORED_REPEAT },
 };
 
 StringMap<Texture::WrapMode, Texture::WRAP_MAX_ENUM> Texture::wrapModes(Texture::wrapModeEntries, sizeof(Texture::wrapModeEntries));

+ 1 - 0
src/modules/graphics/Texture.h

@@ -44,6 +44,7 @@ public:
 	{
 		WRAP_CLAMP,
 		WRAP_REPEAT,
+		WRAP_MIRRORED_REPEAT,
 		WRAP_MAX_ENUM
 	};
 

+ 14 - 24
src/modules/graphics/opengl/OpenGL.cpp

@@ -581,32 +581,22 @@ float OpenGL::setTextureFilter(graphics::Texture::Filter &f)
 
 void OpenGL::setTextureWrap(const graphics::Texture::Wrap &w)
 {
-	GLint gs, gt;
-
-	switch (w.s)
-	{
-	case Texture::WRAP_CLAMP:
-		gs = GL_CLAMP_TO_EDGE;
-		break;
-	case Texture::WRAP_REPEAT:
-	default:
-		gs = GL_REPEAT;
-		break;
-	}
-
-	switch (w.t)
+	auto glWrapMode = [](Texture::WrapMode wmode) -> GLint
 	{
-	case Texture::WRAP_CLAMP:
-		gt = GL_CLAMP_TO_EDGE;
-		break;
-	case Texture::WRAP_REPEAT:
-	default:
-		gt = GL_REPEAT;
-		break;
-	}
+		switch (wmode)
+		{
+		case Texture::WRAP_CLAMP:
+		default:
+			return GL_CLAMP_TO_EDGE;
+		case Texture::WRAP_REPEAT:
+			return GL_REPEAT;
+		case Texture::WRAP_MIRRORED_REPEAT:
+			return GL_MIRRORED_REPEAT;
+		}
+	};
 
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gs);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gt);
+	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapMode(w.s));
+	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapMode(w.t));
 }
 
 int OpenGL::getMaxTextureSize() const