src/gltexturecubemap.cpp
694871da
 #include <gltexturecubemap.hpp>
 
 #include <ostream>
 
 #include <globject.hpp>
 #include <gltexturend.hpp>
 
 // NOLINTNEXTLINE
 #define STR_EXCEPTION GLObject<>::Exception
 #include <str.hpp>
 
 
 /// TGA
 
 
 GLTextureCubemap GLTextureCubemap::tga_read(
     Paths const & paths,
     GLenum        format,
     GLenum        internal_format,
     GLenum        wrap,
     GLenum        min_filter,
     GLenum        mag_filter
 )
 try
 {
     check_cubemap_paths_(paths);
     auto texture = GLTextureCubemap(
         str_paths_(paths),
         TGA::read(paths[0]).size(),
         internal_format,
         wrap,
         min_filter,
         mag_filter
     );
     for (auto face = GLuint{0}; face < faces_; ++face)
         texture.data(
             TGA::read(path_prefix_(paths[face], prefix())).data(),
             GL_TEXTURE_CUBE_MAP_POSITIVE_X + face,
             format
         );
     return texture;
 }
 catch (...)
 {
     STR_THROW_NESTED(
         "Failed to read GLTextureCubemap TGA " << str_paths_(paths) << ":"
     );
 }
 
 
 void GLTextureCubemap::tga_write(
     Paths const & paths,
     GLenum        format
 ) const
 try
 {
     check_cubemap_paths_(paths);
     for (auto face = GLuint{0}; face < faces_; ++face)
         TGA(size(), data(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, format))
             .write(path_prefix_(paths[face], prefix()));
 }
 catch (...)
 {
     STR_THROW_NESTED(
         "Failed to write GLTextureCubemap TGA " << str_paths_(paths) << ":"
     );
 }
 
 
 /// Check
 
 
 void GLTextureCubemap::check_cubemap_paths_(Paths const & paths)
 {
     if (paths.size() != faces_)
         STR_THROW(
             "Expected number of paths " << GLuint{faces_} << ", " <<
             "got "                      << paths.size()   << "."
         );
 }
 
 
 void GLTextureCubemap::check_cubemap_size_() const
 {
     if (size()[0] != size()[1])
         STR_THROW(
             "Expected size " << "to be square"    << ", " <<
             "got "           << str_size_(size()) << "."
         );
 }