/// @ref gtx_wrap namespace glm { template GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) { return glm::clamp(Texcoord, vec(0), vec(1)); } template GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) { return clamp(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) { return glm::fract(Texcoord); } template GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) { return repeat(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) { return glm::fract(glm::abs(Texcoord)); } template GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) { return mirrorClamp(vec<1, genType, defaultp>(Texcoord)).x; } template GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) { vec const Abs = glm::abs(Texcoord); vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); vec const Floor = glm::floor(Abs); vec const Rest = Abs - Floor; vec const Mirror = Clamp + Rest; return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); } template GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) { return mirrorRepeat(vec<1, genType, defaultp>(Texcoord)).x; } }//namespace glm