- Added mix implementation for matrices in EXT_matrix_common #842
parent
96e7eb52ac
commit
6492c8593f
6 changed files with 110 additions and 0 deletions
@ -0,0 +1,36 @@ |
||||
/// @ref ext_matrix_common
|
||||
/// @file glm/ext/matrix_common.hpp
|
||||
///
|
||||
/// @defgroup ext_matrix_common GLM_EXT_matrix_common
|
||||
/// @ingroup ext
|
||||
///
|
||||
/// Defines functions for common matrix operations.
|
||||
///
|
||||
/// Include <glm/ext/matrix_common.hpp> to use the features of this extension.
|
||||
///
|
||||
/// @see ext_matrix_common
|
||||
|
||||
#pragma once |
||||
|
||||
#include "../detail/qualifier.hpp" |
||||
#include "../detail/_fixes.hpp" |
||||
|
||||
#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) |
||||
# pragma message("GLM: GLM_EXT_matrix_transform extension included") |
||||
#endif |
||||
|
||||
namespace glm |
||||
{ |
||||
/// @addtogroup ext_matrix_common
|
||||
/// @{
|
||||
|
||||
template<length_t C, length_t R, typename T, typename U, qualifier Q> |
||||
GLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a); |
||||
|
||||
template<length_t C, length_t R, typename T, typename U, qualifier Q> |
||||
GLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a); |
||||
|
||||
/// @}
|
||||
}//namespace glm
|
||||
|
||||
#include "matrix_common.inl" |
@ -0,0 +1,16 @@ |
||||
#include "../matrix.hpp" |
||||
|
||||
namespace glm |
||||
{ |
||||
template<length_t C, length_t R, typename T, typename U, qualifier Q> |
||||
GLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a) |
||||
{ |
||||
return mat<C, R, U, Q>(x) * (static_cast<U>(1) - a) + mat<C, R, U, Q>(y) * a; |
||||
} |
||||
|
||||
template<length_t C, length_t R, typename T, typename U, qualifier Q> |
||||
GLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a) |
||||
{ |
||||
return matrixCompMult(mat<C, R, U, Q>(x), static_cast<U>(1) - a) + matrixCompMult(mat<C, R, U, Q>(y), a); |
||||
} |
||||
}//namespace glm |
@ -0,0 +1,53 @@ |
||||
#include <glm/ext/matrix_common.hpp> |
||||
#include <glm/ext/matrix_double4x4.hpp> |
||||
#include <glm/ext/matrix_float4x4.hpp> |
||||
#include <glm/ext/matrix_relational.hpp> |
||||
#include <glm/ext/vector_bool4.hpp> |
||||
|
||||
static int test_mix() |
||||
{ |
||||
int Error = 0; |
||||
|
||||
{ |
||||
glm::mat4 A(2); |
||||
glm::mat4 B(4); |
||||
glm::mat4 C = glm::mix(A, B, 0.5f); |
||||
glm::bvec4 const D = glm::equal(C, glm::mat4(3), 1); |
||||
Error += glm::all(D) ? 0 : 1; |
||||
} |
||||
|
||||
{ |
||||
glm::mat4 A(2); |
||||
glm::mat4 B(4); |
||||
glm::mat4 C = glm::mix(A, B, 0.5); |
||||
glm::bvec4 const D = glm::equal(C, glm::mat4(3), 1); |
||||
Error += glm::all(D) ? 0 : 1; |
||||
} |
||||
|
||||
{ |
||||
glm::dmat4 A(2); |
||||
glm::dmat4 B(4); |
||||
glm::dmat4 C = glm::mix(A, B, 0.5); |
||||
glm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1); |
||||
Error += glm::all(D) ? 0 : 1; |
||||
} |
||||
|
||||
{ |
||||
glm::dmat4 A(2); |
||||
glm::dmat4 B(4); |
||||
glm::dmat4 C = glm::mix(A, B, 0.5f); |
||||
glm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1); |
||||
Error += glm::all(D) ? 0 : 1; |
||||
} |
||||
|
||||
return Error; |
||||
} |
||||
|
||||
int main() |
||||
{ |
||||
int Error = 0; |
||||
|
||||
Error += test_mix(); |
||||
|
||||
return Error; |
||||
} |
Loading…
Reference in New Issue