694871da |
#include <gltexturend.hpp>
#include <functional>
#include <numeric>
#include <utility>
#include <globject.hpp>
#include <gltexture.hpp>
// NOLINTNEXTLINE
#define STR_EXCEPTION GLObject<>::Exception
#include <str.hpp>
/// Special member functions
template<std::size_t N>
inline GLTextureND<N>::GLTextureND(
// NOLINTNEXTLINE
std::string object_label,
GLenum target,
GLenum binding,
GLenum size_max_name,
Size size,
GLenum internal_format,
GLenum wrap,
GLenum min_filter,
GLenum mag_filter
)
:
GLTexture(
STR_JOIN(" ", it, it, {
str_size_(size),
std::move(object_label)
}),
target,
binding,
internal_format,
wrap,
min_filter,
mag_filter
),
size_{size}
{
check_size_max_(size_max_name);
}
/// Core
template<std::size_t N>
std::size_t GLTextureND<N>::data_size_() const
{
return std::accumulate(
size_.begin(),
size_.end(),
std::size_t{1},
std::multiplies<std::size_t>{}
);
}
/// Check
template<std::size_t N>
void GLTextureND<N>::check_size_max_(GLenum size_max_name)
{
auto static const size_max = integer(size_max_name);
for (auto size : size_)
if (size > size_max)
STR_THROW(
"Expected max size " << size_max << ", " <<
"got " << str_size_(size_) << "."
);
}
/// String
template<std::size_t N>
std::string GLTextureND<N>::str_size_(Size size)
{
return STR("{" << STR_JOIN(", ", it, it, size) << "}");
}
/// Explicit template instantiation
template class GLTextureND<1>;
template class GLTextureND<2>;
template class GLTextureND<3>;
|