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:
@@ -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__
|
||||
|
||||
Reference in New Issue
Block a user