/// @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 class sampler1d_array : public sampler { private: typedef typename detail::interpolate::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 tvec1 normalized_type; typedef tvec4 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::func convert_type; typedef typename detail::convert::fetchFunc fetch_type; typedef typename detail::convert::writeFunc write_type; typedef typename detail::filterBase::filterFunc filter_type; texture_type Texture; convert_type Convert; texel_type BorderColor; filter_type Filter; }; typedef sampler1d_array fsampler1DArray; typedef sampler1d_array dsampler1DArray; typedef sampler1d_array usampler1DArray; typedef sampler1d_array isampler1DArray; }//namespace gli #include "./core/sampler1d_array.inl"