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