diff options
Diffstat (limited to '3rdparty/glm/test/external/gli/sampler1d_array.hpp')
| -rw-r--r-- | 3rdparty/glm/test/external/gli/sampler1d_array.hpp | 72 |
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" |
