summaryrefslogtreecommitdiff
path: root/include/SSVOpenHexagon/Utils/FastVertexVector.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/SSVOpenHexagon/Utils/FastVertexVector.hpp')
-rw-r--r--include/SSVOpenHexagon/Utils/FastVertexVector.hpp59
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