summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/glm/test/external/gli/sampler1d_array.hpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/glm/test/external/gli/sampler1d_array.hpp')
-rw-r--r--3rdparty/glm/test/external/gli/sampler1d_array.hpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/3rdparty/glm/test/external/gli/sampler1d_array.hpp b/3rdparty/glm/test/external/gli/sampler1d_array.hpp
new file mode 100644
index 00000000000..d07b342a097
--- /dev/null
+++ b/3rdparty/glm/test/external/gli/sampler1d_array.hpp
@@ -0,0 +1,72 @@
+/// @brief Include to sample 1d array textures.
+/// @file gli/sampler1d_array.hpp
+
+#pragma once
+
+#include "sampler.hpp"
+#include "texture1d_array.hpp"
+#include "core/mipmaps_compute.hpp"
+#include "core/convert_func.hpp"
+
+namespace gli
+{
+ /// 1d array texture sampler
+ /// @tparam T Sampler can fetch, write and interpret any texture format but will expose and process the data through type T conversions.
+ /// @tparam P Precision in term of ULPs
+ template <typename T, precision P = defaultp>
+ class sampler1d_array : public sampler
+ {
+ private:
+ typedef typename detail::interpolate<T>::type interpolate_type;
+
+ public:
+ typedef texture1d_array texture_type;
+ typedef typename texture_type::size_type size_type;
+ typedef typename texture_type::extent_type extent_type;
+ typedef interpolate_type level_type;
+ typedef vec<1, interpolate_type, P> normalized_type;
+ typedef vec<4, T, P> texel_type;
+
+ sampler1d_array(texture_type const& Texture, wrap Wrap, filter Mip = FILTER_NEAREST, filter Min = FILTER_NEAREST, texel_type const& BorderColor = texel_type(0, 0, 0, 1));
+
+ /// Access the sampler texture object
+ texture_type const& operator()() const;
+
+ /// Fetch a texel from the sampler texture
+ texel_type texel_fetch(extent_type const& TexelCoord, size_type layer, size_type Level) const;
+
+ /// Write a texel in the sampler texture
+ void texel_write(extent_type const& TexelCoord, size_type layer, size_type Level, texel_type const & Texel);
+
+ /// Clear the sampler texture with a uniform texel
+ void clear(texel_type const& Texel);
+
+ /// Sample the sampler texture at a specific level
+ texel_type texture_lod(normalized_type const& SampleCoord, size_type layer, level_type Level) const;
+
+ /// Generate all the mipmaps of the sampler texture from the texture base level
+ void generate_mipmaps(filter Minification);
+
+ /// Generate the mipmaps of the sampler texture from the texture base level to the texture max level included
+ void generate_mipmaps(size_type BaseLayer, size_type MaxLayer, size_type BaseLevel, size_type MaxLevel, filter Minification);
+
+ private:
+ typedef typename detail::convert<texture_type, T, P>::func convert_type;
+ typedef typename detail::convert<texture_type, T, P>::fetchFunc fetch_type;
+ typedef typename detail::convert<texture_type, T, P>::writeFunc write_type;
+ typedef typename detail::filterBase<detail::DIMENSION_1D, texture_type, interpolate_type, normalized_type, fetch_type, texel_type>::filterFunc filter_type;
+
+ texture_type Texture;
+ convert_type Convert;
+ texel_type BorderColor;
+ filter_type Filter;
+ };
+
+ typedef sampler1d_array<float> fsampler1DArray;
+ typedef sampler1d_array<double> dsampler1DArray;
+ typedef sampler1d_array<unsigned int> usampler1DArray;
+ typedef sampler1d_array<int> isampler1DArray;
+
+}//namespace gli
+
+#include "./core/sampler1d_array.inl"