diff --git a/glm/gtx/texture.hpp b/glm/gtx/texture.hpp index 1185e93a..312bf398 100644 --- a/glm/gtx/texture.hpp +++ b/glm/gtx/texture.hpp @@ -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 + T levels(vec const& Extent); /// @} }// namespace glm #include "texture.inl" -/// @ref gtx_texture -/// @file glm/gtx/texture.inl - -namespace glm -{ - -}//namespace glm - diff --git a/glm/gtx/texture.inl b/glm/gtx/texture.inl index 027d90f2..7c124f22 100644 --- a/glm/gtx/texture.inl +++ b/glm/gtx/texture.inl @@ -3,6 +3,16 @@ namespace glm { + template + inline T levels(vec const& Extent) + { + return glm::log2(compMax(Extent)) + static_cast(1); + } + template + inline T levels(T Extent) + { + return vec<1, T, defaultp>(Extent).x; + } }//namespace glm diff --git a/readme.md b/readme.md index ff374be0..53bfc8e1 100644 --- a/readme.md +++ b/readme.md @@ -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 diff --git a/test/gtx/gtx_texture.cpp b/test/gtx/gtx_texture.cpp index 2a31ac4d..0b98ed75 100644 --- a/test/gtx/gtx_texture.cpp +++ b/test/gtx/gtx_texture.cpp @@ -1,9 +1,22 @@ #define GLM_ENABLE_EXPERIMENTAL +#include #include +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; }