Fixed build with C++98 compilers

master
Christophe Riccio ago%!(EXTRA string=12 years)
parent edbe66cb00
commit 7fd1cdc477
  1. 2
      glm/detail/setup.hpp
  2. 10
      glm/gtx/io.hpp
  3. 101
      glm/gtx/io.inl
  4. 13
      glm/gtx/simd_mat4.hpp
  5. 6
      glm/gtx/simd_mat4.inl

@ -701,7 +701,7 @@
# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC8)) # if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC8))
# define GLM_INLINE __forceinline # define GLM_INLINE __forceinline
# elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34)) # elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
# define GLM_INLINE __attribute__((always_inline)) # define GLM_INLINE __attribute__((always_inline)) inline
# elif(GLM_COMPILER & GLM_COMPILER_CLANG) # elif(GLM_COMPILER & GLM_COMPILER_CLANG)
# define GLM_INLINE __attribute__((always_inline)) # define GLM_INLINE __attribute__((always_inline))
# else # else

@ -72,11 +72,10 @@ namespace glm
}; };
enum class order_t { column_major, row_major, }; class format_guard
{
class format_guard {
public: public:
enum order_t { column_major, row_major, };
GLM_FUNC_DECL explicit format_guard(); GLM_FUNC_DECL explicit format_guard();
GLM_FUNC_DECL ~format_guard(); GLM_FUNC_DECL ~format_guard();
@ -85,7 +84,6 @@ namespace glm
order_t order_; order_t order_;
char cr_; char cr_;
}; };
// decimal places (dflt: 3) // decimal places (dflt: 3)
@ -95,7 +93,7 @@ namespace glm
GLM_FUNC_DECL unsigned& value_width(); GLM_FUNC_DECL unsigned& value_width();
// matrix output order (dflt: row_major) // matrix output order (dflt: row_major)
GLM_FUNC_DECL order_t& order(); GLM_FUNC_DECL format_guard::order_t& order();
// carriage/return char (dflt: '\n') // carriage/return char (dflt: '\n')
GLM_FUNC_DECL char& cr(); GLM_FUNC_DECL char& cr();

@ -12,10 +12,9 @@
// std::setw // std::setw
#include <ostream> // std::basic_ostream<> #include <ostream> // std::basic_ostream<>
namespace glm namespace glm{
namespace io
{ {
namespace io
{
/* explicit */ GLM_FUNC_QUALIFIER /* explicit */ GLM_FUNC_QUALIFIER
precision_guard::precision_guard() precision_guard::precision_guard()
@ -43,26 +42,23 @@ namespace glm
order() = order_; order() = order_;
} }
GLM_FUNC_QUALIFIER unsigned& GLM_FUNC_QUALIFIER unsigned& precision()
precision()
{ {
static unsigned p(3); static unsigned p(3);
return p; return p;
} }
GLM_FUNC_QUALIFIER unsigned& GLM_FUNC_QUALIFIER unsigned& value_width()
value_width()
{ {
static unsigned p(9); static unsigned p(9);
return p; return p;
} }
GLM_FUNC_QUALIFIER order_t& GLM_FUNC_QUALIFIER format_guard::order_t& order()
order()
{ {
static order_t p(order_t::row_major); static format_guard::order_t p(format_guard::row_major);
return p; return p;
} }
@ -73,47 +69,41 @@ namespace glm
static char p('\n'); return p; static char p('\n'); return p;
} }
GLM_FUNC_QUALIFIER std::ios_base& GLM_FUNC_QUALIFIER std::ios_base& column_major(std::ios_base& os)
column_major(std::ios_base& os)
{ {
order() = order_t::column_major; order() = format_guard::column_major;
return os; return os;
} }
GLM_FUNC_QUALIFIER std::ios_base& GLM_FUNC_QUALIFIER std::ios_base& row_major(std::ios_base& os)
row_major(std::ios_base& os)
{ {
order() = order_t::row_major; order() = format_guard::row_major;
return os; return os;
} }
GLM_FUNC_QUALIFIER std::ios_base& GLM_FUNC_QUALIFIER std::ios_base& formatted(std::ios_base& os)
formatted(std::ios_base& os)
{ {
cr() = '\n'; cr() = '\n';
return os; return os;
} }
GLM_FUNC_QUALIFIER std::ios_base& GLM_FUNC_QUALIFIER std::ios_base& unformatted(std::ios_base& os)
unformatted(std::ios_base& os)
{ {
cr() = ' '; cr() = ' ';
return os; return os;
} }
} // namespace io } // namespace io
namespace detail
namespace detail { {
// functions, inlined (inline) // functions, inlined (inline)
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tquat<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tquat<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
@ -133,8 +123,7 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec2<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tvec2<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
@ -152,8 +141,7 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec3<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tvec3<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
@ -172,8 +160,7 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec4<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tvec4<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
@ -193,15 +180,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x2<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x2<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat2x2<T,P> m(a); tmat2x2<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::order_t::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -214,15 +200,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x3<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x3<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat3x2<T,P> m(a); tmat3x2<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -236,15 +221,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x4<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x4<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat4x2<T,P> m(a); tmat4x2<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -259,15 +243,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x2<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x2<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat2x3<T,P> m(a); tmat2x3<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -280,15 +263,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x3<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x3<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat3x3<T,P> m(a); tmat3x3<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -302,15 +284,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x4<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x4<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat4x3<T,P> m(a); tmat4x3<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -325,15 +306,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x2<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x2<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat2x4<T,P> m(a); tmat2x4<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -346,15 +326,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x3<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x3<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat3x4<T,P> m(a); tmat3x4<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -368,15 +347,14 @@ namespace glm
} }
template <typename CTy, typename CTr, typename T, precision P> template <typename CTy, typename CTr, typename T, precision P>
GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x4<T,P> const& a)
operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x4<T,P> const& a)
{ {
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os); typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
if (cerberus) { if (cerberus) {
tmat4x4<T,P> m(a); tmat4x4<T,P> m(a);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
m = transpose(a); m = transpose(a);
} }
@ -401,7 +379,7 @@ namespace glm
tmat4x4<T,P> ml(a.first); tmat4x4<T,P> ml(a.first);
tmat4x4<T,P> mr(a.second); tmat4x4<T,P> mr(a.second);
if (io::order_t::row_major == io::order()) { if (io::format_guard::row_major == io::order()) {
ml = transpose(a.first); ml = transpose(a.first);
mr = transpose(a.second); mr = transpose(a.second);
} }
@ -415,6 +393,5 @@ namespace glm
return os; return os;
} }
}//namespace detail
}//namespace detail
}//namespace glm }//namespace glm

@ -38,8 +38,8 @@
#ifndef GLM_GTX_simd_mat4 #ifndef GLM_GTX_simd_mat4
#define GLM_GTX_simd_mat4 #define GLM_GTX_simd_mat4
// Dependency: // Dependencies
#include "../glm.hpp" #include "../detail/setup.hpp"
#if(GLM_ARCH != GLM_ARCH_PURE) #if(GLM_ARCH != GLM_ARCH_PURE)
@ -61,14 +61,15 @@ namespace detail
/// \ingroup gtx_simd_mat4 /// \ingroup gtx_simd_mat4
GLM_ALIGNED_STRUCT(16) fmat4x4SIMD GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
{ {
enum ctor{null}; enum ctor{_null};
typedef float value_type; typedef float value_type;
typedef fvec4SIMD col_type; typedef fvec4SIMD col_type;
typedef fvec4SIMD row_type; typedef fvec4SIMD row_type;
typedef std::size_t size_type; typedef std::size_t size_type;
static size_type value_size(); typedef fmat4x4SIMD type;
static bool is_matrix(); typedef fmat4x4SIMD transpose_type;
GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
fvec4SIMD Data[4]; fvec4SIMD Data[4];

@ -10,9 +10,9 @@
namespace glm{ namespace glm{
namespace detail{ namespace detail{
GLM_FUNC_QUALIFIER fmat4x4SIMD::size_type fmat4x4SIMD::value_size() GLM_FUNC_QUALIFIER GLM_CONSTEXPR length_t fmat4x4SIMD::length() const
{ {
return sizeof(value_type); return 4;
} }
GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD() GLM_FUNC_QUALIFIER fmat4x4SIMD::fmat4x4SIMD()
@ -551,7 +551,7 @@ GLM_FUNC_QUALIFIER detail::fmat4x4SIMD outerProduct
__m128 Shu2 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(2, 2, 2, 2)); __m128 Shu2 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(2, 2, 2, 2));
__m128 Shu3 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(3, 3, 3, 3)); __m128 Shu3 = _mm_shuffle_ps(r.Data, r.Data, _MM_SHUFFLE(3, 3, 3, 3));
detail::fmat4x4SIMD result(detail::fmat4x4SIMD::null); detail::fmat4x4SIMD result(detail::fmat4x4SIMD::_null);
result[0].Data = _mm_mul_ps(c.Data, Shu0); result[0].Data = _mm_mul_ps(c.Data, Shu0);
result[1].Data = _mm_mul_ps(c.Data, Shu1); result[1].Data = _mm_mul_ps(c.Data, Shu1);
result[2].Data = _mm_mul_ps(c.Data, Shu2); result[2].Data = _mm_mul_ps(c.Data, Shu2);

Loading…
Cancel
Save