diff options
Diffstat (limited to '3rdparty/glm/test/external/gli/sampler2d.hpp')
| -rw-r--r-- | 3rdparty/glm/test/external/gli/sampler2d.hpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/3rdparty/glm/test/external/gli/sampler2d.hpp b/3rdparty/glm/test/external/gli/sampler2d.hpp new file mode 100644 index 00000000000..8eaf11a82df --- /dev/null +++ b/3rdparty/glm/test/external/gli/sampler2d.hpp @@ -0,0 +1,72 @@ +/// @brief Include to sample 2d textures. +/// @file gli/sampler2d.hpp + +#pragma once + +#include "sampler.hpp" +#include "texture2d.hpp" +#include "core/mipmaps_compute.hpp" +#include "core/convert_func.hpp" + +namespace gli +{ + /// 2d 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 sampler2d : public sampler + { + private: + typedef typename detail::interpolate<T>::type interpolate_type; + + public: + typedef texture2d 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<2, interpolate_type, P> normalized_type; + typedef vec<4, T, P> texel_type; + + sampler2d(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 const& Level) const; + + /// Write a texel in the sampler texture + void texel_write(extent_type const& TexelCoord, size_type const& 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, 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 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_2D, 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 sampler2d<float> fsampler2D; + typedef sampler2d<double> dsampler2D; + typedef sampler2d<unsigned int> usampler2D; + typedef sampler2d<int> isampler2D; + +}//namespace gli + +#include "./core/sampler2d.inl" |
