#pragma once #include #include #include #include #include namespace Magnum::Examples { struct atlas_texture final { atlas_texture(const Trade::ImageData2D& img, Vector2i dims); std::array texcoords_for_id(int id) const; static std::array floor_quad(Vector3 center, Vector2 size); static std::array wall_quad(Vector3 center, Vector3 size); static std::array indices(int N); GL::Texture2D& texture() { return tex_; } constexpr int size() const { return dims_.product(); } constexpr Vector2i tile_size() const { return tile_size_; } atlas_texture(const atlas_texture&) = delete; atlas_texture& operator=(const atlas_texture&) = delete; private: GL::Texture2D tex_; Vector2i size_, dims_, tile_size_; }; } // namespace Magnum::Examples