#include #include namespace psemek::gfx { template struct basic_texture<1, gl::TEXTURE_1D>; template struct basic_texture<2, gl::TEXTURE_1D_ARRAY>; template struct basic_texture<2, gl::TEXTURE_2D>; template struct basic_texture<3, gl::TEXTURE_2D_ARRAY>; template struct basic_texture<3, gl::TEXTURE_3D>; template struct basic_texture<2, gl::TEXTURE_CUBE_MAP>; namespace detail { static std::optional get_max_anisotropy() { if (!gl::exts::var_EXT_texture_filter_anisotropic) return std::nullopt; float level; gl::GetFloatv(gl::MAX_TEXTURE_MAX_ANISOTROPY_EXT, &level); return level; } std::optional max_anisotropy() { static std::optional level = get_max_anisotropy(); return level; } } void texture_cubemap::load(int f, GLint internal_format, geom::vector const & size, GLenum format, GLenum type, const void * data) { bind(); gl::TexImage2D(face_to_gl(f), 0, internal_format, size[0], size[1], 0, format, type, data); size_ = size; } void texture_cubemap::pixels(int f, GLenum format, GLenum type, void * data) const { bind(); gl::GetTexImage(face_to_gl(f), 0, format, type, data); } GLenum texture_cubemap::face_to_gl(int f) { return gl::TEXTURE_CUBE_MAP_POSITIVE_X + f; } }