mirror of
https://github.com/g-truc/glm.git
synced 2024-11-26 10:14:35 +00:00
- Added mix implementation for matrices in EXT_matrix_common #842
This commit is contained in:
parent
96e7eb52ac
commit
6492c8593f
36
glm/ext/matrix_common.hpp
Normal file
36
glm/ext/matrix_common.hpp
Normal 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
16
glm/ext/matrix_common.inl
Normal 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
|
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
53
test/ext/ext_matrix_common.cpp
Normal file
53
test/ext/ext_matrix_common.cpp
Normal 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;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/constants.hpp>
|
||||
#include <glm/ext/matrix_relational.hpp>
|
||||
|
||||
int test_perspective()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user