2017-01-03 06:37:50 +00:00
|
|
|
#include "Combiner.h"
|
|
|
|
#include "CombinerKey.h"
|
|
|
|
|
|
|
|
|
|
|
|
/*---------------CombinerKey-------------*/
|
|
|
|
|
2017-10-24 15:23:27 +00:00
|
|
|
CombinerKey::CombinerKey(u64 _mux, bool _setModeBits)
|
2017-01-03 06:37:50 +00:00
|
|
|
{
|
|
|
|
m_key.mux = _mux;
|
2017-10-24 15:23:27 +00:00
|
|
|
if (!_setModeBits)
|
|
|
|
return;
|
2017-01-03 06:37:50 +00:00
|
|
|
|
|
|
|
// High byte of muxs0 is zero. We can use it for addtional combiner flags:
|
|
|
|
// [0 - 0] polygon type: 0 - triangle, 1 - rect
|
|
|
|
// [1 - 2] cycle type
|
2017-12-10 15:03:42 +00:00
|
|
|
// [3 - 3] bi_lerp1
|
|
|
|
// [4 - 4] bi_lerp0
|
2017-01-03 06:37:50 +00:00
|
|
|
u32 flags = CombinerInfo::get().isRectMode() ? 1U : 0U;
|
2017-12-10 15:03:42 +00:00
|
|
|
const u32 cycleType = gDP.otherMode.cycleType;
|
|
|
|
const u32 bilerp = (gDP.otherMode.h >> 10) & 3;
|
|
|
|
flags |= (cycleType << 1);
|
|
|
|
flags |= (bilerp << 3);
|
2017-01-03 06:37:50 +00:00
|
|
|
|
|
|
|
m_key.muxs0 |= (flags << 24);
|
|
|
|
}
|
|
|
|
|
|
|
|
CombinerKey::CombinerKey(const CombinerKey & _other)
|
|
|
|
{
|
|
|
|
m_key.mux = _other.m_key.mux;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CombinerKey::operator=(u64 _mux)
|
|
|
|
{
|
|
|
|
m_key.mux = _mux;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CombinerKey::operator=(const CombinerKey & _other)
|
|
|
|
{
|
|
|
|
m_key.mux = _other.m_key.mux;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CombinerKey::operator==(const CombinerKey & _other) const
|
|
|
|
{
|
|
|
|
return m_key.mux == _other.m_key.mux;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CombinerKey::operator<(const CombinerKey & _other) const
|
|
|
|
{
|
|
|
|
return m_key.mux < _other.m_key.mux;
|
|
|
|
}
|
|
|
|
|
2017-01-07 15:46:51 +00:00
|
|
|
u32 CombinerKey::getCycleType() const
|
|
|
|
{
|
|
|
|
return (m_key.muxs0 >> 25) & 3;
|
|
|
|
}
|
|
|
|
|
2017-12-10 15:03:42 +00:00
|
|
|
u32 CombinerKey::getBilerp() const
|
|
|
|
{
|
|
|
|
return (m_key.muxs0 >> 27) & 3;
|
|
|
|
}
|
|
|
|
|
2017-01-03 06:37:50 +00:00
|
|
|
bool CombinerKey::isRectKey() const
|
|
|
|
{
|
2017-01-07 15:46:51 +00:00
|
|
|
return ((m_key.muxs0 >> 24) & 1) != 0;
|
|
|
|
}
|
|
|
|
|
2017-12-14 08:45:41 +00:00
|
|
|
void CombinerKey::read(std::istream & _is)
|
|
|
|
{
|
2020-11-14 09:54:28 +00:00
|
|
|
_is.read(reinterpret_cast<char*>(&m_key.mux), sizeof(m_key.mux));
|
2017-01-03 06:37:50 +00:00
|
|
|
}
|
2017-12-14 08:45:41 +00:00
|
|
|
|
|
|
|
const CombinerKey & CombinerKey::getEmpty()
|
|
|
|
{
|
|
|
|
static CombinerKey emptyKey;
|
|
|
|
return emptyKey;
|
|
|
|
}
|