Browse Source

- Added GTX_texture: levels function

Christophe Riccio 8 years ago
parent
commit
30ee2cd1bb
4 changed files with 34 additions and 8 deletions
  1. 10 8
      glm/gtx/texture.hpp
  2. 10 0
      glm/gtx/texture.inl
  3. 1 0
      readme.md
  4. 13 0
      test/gtx/gtx_texture.cpp

+ 10 - 8
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 <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
-

+ 10 - 0
glm/gtx/texture.inl

@@ -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
 

+ 1 - 0
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

+ 13 - 0
test/gtx/gtx_texture.cpp

@@ -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;
 }