diff options
Diffstat (limited to 'include/SSVOpenHexagon/Utils/FastVertexVector.hpp')
-rw-r--r-- | include/SSVOpenHexagon/Utils/FastVertexVector.hpp | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/include/SSVOpenHexagon/Utils/FastVertexVector.hpp b/include/SSVOpenHexagon/Utils/FastVertexVector.hpp index f53874ef..33545bee 100644 --- a/include/SSVOpenHexagon/Utils/FastVertexVector.hpp +++ b/include/SSVOpenHexagon/Utils/FastVertexVector.hpp @@ -151,13 +151,66 @@ public: return _data[i]._v; } + + [[nodiscard, gnu::always_inline]] sf::Vertex* begin() noexcept + { + SSVOH_ASSERT(_data != nullptr); + return &(_data[0]._v); + } + + [[nodiscard, gnu::always_inline]] const sf::Vertex* begin() const noexcept + { + SSVOH_ASSERT(_data != nullptr); + return &(_data[0]._v); + } + + [[nodiscard, gnu::always_inline]] sf::Vertex* end() noexcept + { + return begin() + _size; + } + + [[nodiscard, gnu::always_inline]] const sf::Vertex* end() const noexcept + { + return begin() + _size; + } }; class FastVertexVectorTris : public FastVertexVector<sf::PrimitiveType::Triangles> -{}; +{ +public: + [[gnu::always_inline]] void batch_unsafe_emplace_back_quad( + const sf::Color& color, const sf::Vector2f& nw, const sf::Vector2f& sw, + const sf::Vector2f& se, const sf::Vector2f& ne) + { + batch_unsafe_emplace_back(color, // + nw, sw, se, // + nw, se, ne); + } + + [[gnu::always_inline]] void unsafe_emplace_back_quad( // + const sf::Vector2f& nw, const sf::Color& colorNW, // + const sf::Vector2f& sw, const sf::Color& colorSW, // + const sf::Vector2f& se, const sf::Color& colorSE, // + const sf::Vector2f& ne, const sf::Color& colorNE) + { + unsafe_emplace_back(nw, colorNW); + unsafe_emplace_back(sw, colorSW); + unsafe_emplace_back(se, colorSE); + unsafe_emplace_back(nw, colorNW); + unsafe_emplace_back(se, colorSE); + unsafe_emplace_back(ne, colorNE); + } -class FastVertexVectorQuads : public FastVertexVector<sf::PrimitiveType::Quads> -{}; + [[gnu::always_inline]] void reserve_more_quad(const std::size_t n) + { + reserve_more(n * 6); + } + + [[gnu::always_inline]] void reserve_quad(const std::size_t n) + { + reserve(n * 6); + } +}; } // namespace hg::Utils |