#include #include #include #include // NOLINTNEXTLINE #define STR_EXCEPTION GLObject<>::Exception #include /// 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()) << "." ); }