2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 13:07:42 +00:00

Implement triangle fan-to-strip stream converter

This commit is contained in:
Jack Andersen
2017-08-10 15:16:58 -10:00
parent 5e10f2e7ad
commit e0efcc0e5c
5 changed files with 91 additions and 25 deletions

View File

@@ -350,6 +350,47 @@ public:
}
};
template<class VTX>
class TriFanToStrip
{
std::vector<VTX>& m_vec;
size_t m_start;
size_t m_added = 0;
public:
explicit TriFanToStrip(std::vector<VTX>& vec) : m_vec(vec), m_start(vec.size()) {}
void AddVert(const VTX& vert)
{
++m_added;
if (m_added > 3)
{
const VTX& last = m_vec.back();
m_vec.reserve(m_vec.size() + 4);
m_vec.push_back(m_vec[m_start]);
m_vec.push_back(m_vec[m_start]);
m_vec.push_back(last);
}
m_vec.push_back(vert);
}
template<class... _Args>
void EmplaceVert(_Args&&... args)
{
++m_added;
if (m_added > 3)
{
const VTX& last = m_vec.back();
m_vec.reserve(m_vec.size() + 4);
m_vec.push_back(m_vec[m_start]);
m_vec.push_back(m_vec[m_start]);
m_vec.push_back(last);
}
m_vec.emplace_back(std::forward<_Args>(args)...);
}
void Draw() const { CGraphics::DrawArray(m_start, m_vec.size() - m_start); }
};
}
#endif // __URDE_CGRAPHICS_HPP__