- Added GTX_texture: levels function

This commit is contained in:
Christophe Riccio 2017-09-20 15:32:29 +02:00
parent a2497e6174
commit 30ee2cd1bb
4 changed files with 34 additions and 8 deletions

View File

@ -14,6 +14,8 @@
// Dependency:
#include "../glm.hpp"
#include "../gtc/integer.hpp"
#include "../gtx/component_wise.hpp"
#ifndef GLM_ENABLE_EXPERIMENTAL
# error "GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
@ -28,17 +30,17 @@ namespace glm
/// @addtogroup gtx_texture
/// @{
/// Compute the number of mipmaps levels necessary to create a mipmap complete texture
///
/// @param Extent Extent of the texture base level mipmap
/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector
/// @tparam T Floating-point or signed integer scalar types
/// @tparam Q Value from qualifier enum
template <length_t L, typename T, qualifier Q>
T levels(vec<L, T, Q> const& Extent);
/// @}
}// namespace glm
#include "texture.inl"
/// @ref gtx_texture
/// @file glm/gtx/texture.inl
namespace glm
{
}//namespace glm

View File

@ -3,6 +3,16 @@
namespace glm
{
template <length_t L, typename T, qualifier Q>
inline T levels(vec<L, T, Q> const& Extent)
{
return glm::log2(compMax(Extent)) + static_cast<T>(1);
}
template <typename T>
inline T levels(T Extent)
{
return vec<1, T, defaultp>(Extent).x;
}
}//namespace glm

View File

@ -65,6 +65,7 @@ glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
- Added fmin, fmax and fclamp to GTX_extended_min_max #372
- Added EXT_vector_relational: extend equal and notEqual to take an epsilon argument
- Added EXT_vec1: *vec1 types
- Added GTX_texture: levels function
#### Improvements:
- No more default initialization of vector, matrix and quaternion types

View File

@ -1,9 +1,22 @@
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/vec2.hpp>
#include <glm/gtx/texture.hpp>
int test_levels()
{
int Error = 0;
int const Levels = glm::levels(glm::ivec2(3, 2));
Error += Levels == 2 ? 0 : 1;
return Error;
}
int main()
{
int Error = 0;
Error += test_levels();
return Error;
}