mirror of
https://github.com/g-truc/glm.git
synced 2024-11-22 17:04: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
|
## Release notes
|
||||||
|
|
||||||
### [GLM 0.9.9.4](https://github.com/g-truc/glm/tree/master) - 2018-1X-XX
|
### [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:
|
#### Improvements:
|
||||||
- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By default, it's disabled allowing constexpr support by default.
|
- 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_relational)
|
||||||
glmCreateTestGTC(ext_matrix_transform)
|
glmCreateTestGTC(ext_matrix_transform)
|
||||||
|
glmCreateTestGTC(ext_matrix_common)
|
||||||
glmCreateTestGTC(ext_quaternion_common)
|
glmCreateTestGTC(ext_quaternion_common)
|
||||||
glmCreateTestGTC(ext_quaternion_exponential)
|
glmCreateTestGTC(ext_quaternion_exponential)
|
||||||
glmCreateTestGTC(ext_quaternion_geometric)
|
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/matrix_transform.hpp>
|
||||||
#include <glm/gtc/constants.hpp>
|
#include <glm/gtc/constants.hpp>
|
||||||
|
#include <glm/ext/matrix_relational.hpp>
|
||||||
|
|
||||||
int test_perspective()
|
int test_perspective()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user