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

HUD bug fixes

This commit is contained in:
Jack Andersen
2017-12-20 17:19:54 -10:00
parent c00cc6cea9
commit 053ebd41c4
17 changed files with 154 additions and 84 deletions

View File

@@ -626,10 +626,40 @@ void CBooModel::DrawSurface(const CBooSurface& surf, const CModelFlags& flags) c
return;
const std::vector<boo::ObjToken<boo::IShaderDataBinding>>& extendeds = inst.m_shaderDataBindings[surf.selfIdx];
boo::ObjToken<boo::IShaderDataBinding> binding = extendeds[0];
if (flags.m_extendedShader < extendeds.size())
binding = extendeds[flags.m_extendedShader];
EExtendedShader extended = EExtendedShader::Flat;
if (flags.m_extendedShader == EExtendedShader::Lighting)
{
if (data.heclIr.m_blendSrc == boo::BlendFactor::One && data.heclIr.m_blendDst == boo::BlendFactor::Zero)
{
/* Override shader if originally opaque */
if (flags.x0_blendMode > 6)
extended = flags.m_noCull ? EExtendedShader::ForcedAdditiveNoCull : EExtendedShader::ForcedAdditive;
else if (flags.x0_blendMode > 4)
extended = flags.m_noCull ? EExtendedShader::ForcedAlphaNoCull : EExtendedShader::ForcedAlpha;
else
extended = EExtendedShader::Lighting;
}
else if (flags.m_noCull)
{
/* Substitute no-cull pipeline if available */
if (data.heclIr.m_blendDst == boo::BlendFactor::InvSrcAlpha)
extended = EExtendedShader::ForcedAlphaNoCull;
else if (data.heclIr.m_blendDst == boo::BlendFactor::One)
extended = EExtendedShader::ForcedAdditiveNoCull;
else
extended = EExtendedShader::Lighting;
}
else
{
extended = EExtendedShader::Lighting;
}
}
else if (flags.m_extendedShader < extendeds.size())
{
extended = flags.m_extendedShader;
}
boo::ObjToken<boo::IShaderDataBinding> binding = extendeds[extended];
CGraphics::SetShaderDataBinding(binding);
CGraphics::DrawArrayIndexed(surf.m_data.idxStart, surf.m_data.idxCount);
}