|
|
|
@ -12,6 +12,41 @@ namespace glm |
|
|
|
|
namespace core{ |
|
|
|
|
namespace function{ |
|
|
|
|
namespace noise{ |
|
|
|
|
namespace detail |
|
|
|
|
{ |
|
|
|
|
template <typenane valType, typenane vecType> |
|
|
|
|
inline vecType permute |
|
|
|
|
( |
|
|
|
|
vecType const & x0, |
|
|
|
|
detail::tvec3<valType> const & p |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
vecType x1 = mod(x0 * p.y, p.x); |
|
|
|
|
return floor( mod( (x1 + p.z) *x0, p.x )); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline detail::tvec2<T> permute |
|
|
|
|
( |
|
|
|
|
detail::tvec2<T> const & x0, |
|
|
|
|
detail::tvec3<valType> const & p |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
vec2 x1 = mod(x0 * p.y, p.x); |
|
|
|
|
return floor( mod( (x1 + p.z) *x0, p.x )); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline vec3 permute(vec3 x0,vec3 p) |
|
|
|
|
{ |
|
|
|
|
vec3 x1 = mod(x0 * p.y, p.x); |
|
|
|
|
return floor( mod( (x1 + p.z) *x0, p.x )); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline vec4 permute(vec4 x0,vec3 p) |
|
|
|
|
{ |
|
|
|
|
vec4 x1 = mod(x0 * p.y, p.x); |
|
|
|
|
return floor( mod( (x1 + p.z) *x0, p.x )); |
|
|
|
|
} |
|
|
|
|
}//namespace detail |
|
|
|
|
|
|
|
|
|
// noise1 |
|
|
|
|
template <typename genType> |
|
|
|
|