- Added mix implementation for matrices in EXT_matrix_common #842

This commit is contained in:
Christophe Riccio 2019-03-01 12:33:09 +01:00
parent 96e7eb52ac
commit 6492c8593f
6 changed files with 110 additions and 0 deletions

36
glm/ext/matrix_common.hpp Normal file
View File

@ -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"

16
glm/ext/matrix_common.inl Normal file
View File

@ -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

View File

@ -53,6 +53,9 @@ glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
## Release notes
### [GLM 0.9.9.4](https://github.com/g-truc/glm/tree/master) - 2018-1X-XX
#### Features:
- Added mix implementation for matrices in EXT_matrix_common #842
#### Improvements:
- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By default, it's disabled allowing constexpr support by default.

View File

@ -1,5 +1,6 @@
glmCreateTestGTC(ext_matrix_relational)
glmCreateTestGTC(ext_matrix_transform)
glmCreateTestGTC(ext_matrix_common)
glmCreateTestGTC(ext_quaternion_common)
glmCreateTestGTC(ext_quaternion_exponential)
glmCreateTestGTC(ext_quaternion_geometric)

View File

@ -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;
}

View File

@ -1,5 +1,6 @@
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/constants.hpp>
#include <glm/ext/matrix_relational.hpp>
int test_perspective()
{