Skip to content

Commit

Permalink
- Added mix implementation for matrices in EXT_matrix_common #842
Browse files Browse the repository at this point in the history
  • Loading branch information
Groovounet committed Mar 1, 2019
1 parent 96e7eb5 commit 6492c85
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 0 deletions.
36 changes: 36 additions & 0 deletions glm/ext/matrix_common.hpp
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions glm/ext/matrix_common.inl
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions test/ext/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
53 changes: 53 additions & 0 deletions test/ext/ext_matrix_common.cpp
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions test/gtc/gtc_matrix_transform.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/constants.hpp>
#include <glm/ext/matrix_relational.hpp>

int test_perspective()
{
Expand Down

0 comments on commit 6492c85

Please sign in to comment.