mirror of https://github.com/AxioDL/metaforce.git
HUD bug fixes
This commit is contained in:
parent
c00cc6cea9
commit
053ebd41c4
|
@ -215,6 +215,7 @@ void ViewManager::init(boo::IApplication* app)
|
|||
m_renderTex = root->renderTex();
|
||||
m_mainWindow->setWaitCursor(false);
|
||||
m_voiceEngine = boo::NewAudioVoiceEngine();
|
||||
m_voiceEngine->setVolume(0.7f);
|
||||
m_amuseAllocWrapper.emplace(*m_voiceEngine);
|
||||
|
||||
for (const auto& arg : app->getArgs())
|
||||
|
@ -223,6 +224,8 @@ void ViewManager::init(boo::IApplication* app)
|
|||
m_deferedProject = arg;
|
||||
if (arg == _S("--no-shader-warmup"))
|
||||
m_noShaderWarmup = true;
|
||||
else if (arg == _S("--no-sound"))
|
||||
m_voiceEngine->setVolume(0.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ struct CModelFlags
|
|||
u8 x0_blendMode = 0; /* >6: additive, >4: blend, else opaque */
|
||||
u8 x1_matSetIdx = 0;
|
||||
EExtendedShader m_extendedShader = EExtendedShader::Flat;
|
||||
bool m_noCull = false;
|
||||
u16 x2_flags = 0; /* Flags */
|
||||
zeus::CColor x4_color; /* Set into kcolor slot specified by material */
|
||||
zeus::CColor addColor = zeus::CColor::skClear;
|
||||
|
@ -33,14 +34,10 @@ struct CModelFlags
|
|||
|
||||
CModelFlags() = default;
|
||||
CModelFlags(u8 blendMode, u8 shadIdx, u16 flags, const zeus::CColor& col)
|
||||
: x0_blendMode(blendMode), x1_matSetIdx(shadIdx), x2_flags(flags), x4_color(col)
|
||||
: x0_blendMode(blendMode), x1_matSetIdx(shadIdx), m_extendedShader(EExtendedShader::Lighting),
|
||||
x2_flags(flags), x4_color(col)
|
||||
{
|
||||
if (blendMode > 6)
|
||||
m_extendedShader = EExtendedShader::ForcedAdditive;
|
||||
else if (blendMode > 4)
|
||||
m_extendedShader = EExtendedShader::ForcedAlpha;
|
||||
else
|
||||
m_extendedShader = EExtendedShader::Lighting;
|
||||
/* Blend mode will override this if the surface's original material is opaque */
|
||||
}
|
||||
|
||||
/* Flags
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -260,7 +260,7 @@ CModelShaders::GetShaderExtensionsGLSL(boo::IGraphicsDataFactory::Platform plat)
|
|||
ext.registerExtensionSlot({LightingGLSL, "LightingFunc"}, {MainPostGLSL, "MainPostFunc"},
|
||||
3, BlockNames, 0, nullptr, hecl::Backend::BlendFactor::SrcAlpha,
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha, hecl::Backend::ZTest::Original,
|
||||
hecl::Backend::CullMode::None, false, false, true);
|
||||
hecl::Backend::CullMode::None, true, false, true);
|
||||
|
||||
/* Forced additive shading without culling */
|
||||
ext.registerExtensionSlot({LightingGLSL, "LightingFunc"}, {MainPostGLSL, "MainPostFunc"},
|
||||
|
|
|
@ -243,7 +243,7 @@ CModelShaders::GetShaderExtensionsHLSL(boo::IGraphicsDataFactory::Platform plat)
|
|||
ext.registerExtensionSlot({LightingHLSL, "LightingFunc"}, {MainPostHLSL, "MainPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::SrcAlpha,
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha, hecl::Backend::ZTest::Original,
|
||||
hecl::Backend::CullMode::None, false, false, true);
|
||||
hecl::Backend::CullMode::None, true, false, true);
|
||||
|
||||
/* Forced additive shading without culling */
|
||||
ext.registerExtensionSlot({LightingHLSL, "LightingFunc"}, {MainPostHLSL, "MainPostFunc"},
|
||||
|
|
|
@ -250,7 +250,7 @@ CModelShaders::GetShaderExtensionsMetal(boo::IGraphicsDataFactory::Platform plat
|
|||
ext.registerExtensionSlot({LightingMetal, "LightingFunc"}, {MainPostMetal, "MainPostFunc"},
|
||||
1, BlockNames, 0, nullptr, hecl::Backend::BlendFactor::SrcAlpha,
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha, hecl::Backend::ZTest::Original,
|
||||
hecl::Backend::CullMode::None, false, false, true);
|
||||
hecl::Backend::CullMode::None, true, false, true);
|
||||
|
||||
/* Forced additive shading without culling */
|
||||
ext.registerExtensionSlot({LightingMetal, "LightingFunc"}, {MainPostMetal, "MainPostFunc"},
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace urde
|
||||
{
|
||||
|
||||
#define BLUR_SCALE (1.f / 32.f)
|
||||
#define BLUR_SCALE (1.f / 128.f)
|
||||
|
||||
void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
{
|
||||
|
|
|
@ -132,19 +132,30 @@ BOO_GLSL_BINDING_HEAD
|
|||
" //this will be our alpha sum\n"
|
||||
" float sum = 0.0;\n"
|
||||
"\n"
|
||||
" //apply blurring, using a 9-tap filter with predefined gaussian weights\n"
|
||||
"\n"
|
||||
" sum += texture(maskTex, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
"\n"
|
||||
" sum += texture(maskTex, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += texture(maskTex, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" //apply blurring, using a 23-tap filter with predefined gaussian weights\n"
|
||||
" sum += texture(maskTex, vtf.uv + -11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += texture(maskTex, vtf.uv + -1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 0.0 * vtf.blurDir).a * 0.081519;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
"\n"
|
||||
" colorOut = vec4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
|
|
|
@ -131,19 +131,30 @@ static const char* BlurFS =
|
|||
" //this will be our alpha sum\n"
|
||||
" float sum = 0.0;\n"
|
||||
"\n"
|
||||
" //apply blurring, using a 9-tap filter with predefined gaussian weights\n"
|
||||
"\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
"\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" //apply blurring, using a 23-tap filter with predefined gaussian weights\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + -1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 0.0 * vtf.blurDir).a * 0.081519;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
"\n"
|
||||
" return float4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
|
@ -230,10 +241,10 @@ CPhazonSuitFilter::Initialize(boo::ID3DDataFactory::Context& ctx)
|
|||
{nullptr, nullptr, boo::VertexSemantic::UV4}
|
||||
};
|
||||
s_BlurVtxFmt = ctx.newVertexFormat(2, BlurVtxVmt);
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::One,
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_BlurPipeline = ctx.newShaderPipeline(BlurVS, BlurFS, nullptr, nullptr, nullptr, s_BlurVtxFmt, boo::BlendFactor::One,
|
||||
|
|
|
@ -142,19 +142,30 @@ static const char* BlurFS =
|
|||
" //this will be our alpha sum\n"
|
||||
" float sum = 0.0;\n"
|
||||
"\n"
|
||||
" //apply blurring, using a 9-tap filter with predefined gaussian weights\n"
|
||||
"\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
"\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" //apply blurring, using a 23-tap filter with predefined gaussian weights\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + -1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv).a * 0.081519;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.079905;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.075252;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.068091;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.059195;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 5.0 * vtf.blurDir).a * 0.049444;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 6.0 * vtf.blurDir).a * 0.039680;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 7.0 * vtf.blurDir).a * 0.030595;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 8.0 * vtf.blurDir).a * 0.022665;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 9.0 * vtf.blurDir).a * 0.016133;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 10.0 * vtf.blurDir).a * 0.011032;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 11.0 * vtf.blurDir).a * 0.007249;\n"
|
||||
"\n"
|
||||
" return float4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
|
|
|
@ -9,25 +9,25 @@ namespace urde
|
|||
{
|
||||
|
||||
CGuiModel::CGuiModel(const CGuiWidgetParms& parms, CSimplePool* sp, CAssetId modelId, u32 lightMask, bool flag)
|
||||
: CGuiWidget(parms), x108_modelId(modelId), x10c_lightMask(lightMask)
|
||||
: CGuiWidget(parms), xc8_modelId(modelId), xcc_lightMask(lightMask)
|
||||
{
|
||||
if (!flag || !modelId.IsValid() ||
|
||||
parms.x0_frame->GetGuiSys().GetUsageMode() == CGuiSys::EUsageMode::Two)
|
||||
return;
|
||||
|
||||
xf8_model = sp->GetObj({SBIG('CMDL'), modelId});
|
||||
xb8_model = sp->GetObj({SBIG('CMDL'), modelId});
|
||||
}
|
||||
|
||||
std::vector<CAssetId> CGuiModel::GetModelAssets() const
|
||||
{
|
||||
return {x108_modelId};
|
||||
return {xc8_modelId};
|
||||
}
|
||||
|
||||
bool CGuiModel::GetIsFinishedLoadingWidgetSpecific() const
|
||||
{
|
||||
if (!xf8_model)
|
||||
if (!xb8_model)
|
||||
return true;
|
||||
const CModel* model = xf8_model.GetObj();
|
||||
const CModel* model = xb8_model.GetObj();
|
||||
if (!model)
|
||||
return false;
|
||||
model->GetInstance().Touch(0);
|
||||
|
@ -36,7 +36,7 @@ bool CGuiModel::GetIsFinishedLoadingWidgetSpecific() const
|
|||
|
||||
void CGuiModel::Touch() const
|
||||
{
|
||||
const CModel* model = xf8_model.GetObj();
|
||||
const CModel* model = xb8_model.GetObj();
|
||||
if (model)
|
||||
model->GetInstance().Touch(0);
|
||||
}
|
||||
|
@ -44,11 +44,11 @@ void CGuiModel::Touch() const
|
|||
void CGuiModel::Draw(const CGuiWidgetDrawParms& parms) const
|
||||
{
|
||||
CGraphics::SetModelMatrix(x34_worldXF);
|
||||
if (!xf8_model)
|
||||
if (!xb8_model)
|
||||
return;
|
||||
if (!GetIsFinishedLoading())
|
||||
return;
|
||||
const CModel* model = xf8_model.GetObj();
|
||||
const CModel* model = xb8_model.GetObj();
|
||||
if (!model)
|
||||
return;
|
||||
|
||||
|
@ -56,7 +56,7 @@ void CGuiModel::Draw(const CGuiWidgetDrawParms& parms) const
|
|||
{
|
||||
zeus::CColor moduCol = xa8_color2;
|
||||
moduCol.a *= parms.x0_alphaMod;
|
||||
xb0_frame->EnableLights(x10c_lightMask, const_cast<CBooModel&>(model->GetInstance()));
|
||||
xb0_frame->EnableLights(xcc_lightMask, const_cast<CBooModel&>(model->GetInstance()));
|
||||
//if (xb6_29_cullFaces)
|
||||
// CGraphics::SetCullMode(ERglCullMode::Front);
|
||||
|
||||
|
@ -78,29 +78,29 @@ void CGuiModel::Draw(const CGuiWidgetDrawParms& parms) const
|
|||
}
|
||||
case EGuiModelDrawFlags::Alpha:
|
||||
{
|
||||
CModelFlags flags(4, 0, (u32(xb7_24_depthWrite) << 1) | u32(xb6_31_depthTest), moduCol);
|
||||
flags.m_extendedShader = xb6_29_cullFaces ? EExtendedShader::ForcedAlpha : EExtendedShader::ForcedAlphaNoCull;
|
||||
CModelFlags flags(5, 0, (u32(xb7_24_depthWrite) << 1) | u32(xb6_31_depthTest), moduCol);
|
||||
flags.m_noCull = !xb6_29_cullFaces;
|
||||
model->Draw(flags);
|
||||
break;
|
||||
}
|
||||
case EGuiModelDrawFlags::Additive:
|
||||
{
|
||||
CModelFlags flags(3, 0, (u32(xb7_24_depthWrite) << 1) | u32(xb6_31_depthTest), moduCol);
|
||||
flags.m_extendedShader = xb6_29_cullFaces ? EExtendedShader::ForcedAdditive : EExtendedShader::ForcedAdditiveNoCull;
|
||||
CModelFlags flags(7, 0, (u32(xb7_24_depthWrite) << 1) | u32(xb6_31_depthTest), moduCol);
|
||||
flags.m_noCull = !xb6_29_cullFaces;
|
||||
model->Draw(flags);
|
||||
break;
|
||||
}
|
||||
case EGuiModelDrawFlags::AlphaAdditiveOverdraw:
|
||||
{
|
||||
CModelFlags flags(4, 0, xb6_31_depthTest, moduCol);
|
||||
flags.m_extendedShader = xb6_29_cullFaces ? EExtendedShader::ForcedAlpha : EExtendedShader::ForcedAlphaNoCull;
|
||||
CModelFlags flags(5, 0, xb6_31_depthTest, moduCol);
|
||||
flags.m_noCull = !xb6_29_cullFaces;
|
||||
model->Draw(flags);
|
||||
|
||||
flags.x0_blendMode = 5;
|
||||
flags.x0_blendMode = 7;
|
||||
flags.x1_matSetIdx = 0;
|
||||
flags.x2_flags = (u32(xb7_24_depthWrite) << 1) | u32(xb6_31_depthTest);
|
||||
flags.x4_color = moduCol;
|
||||
flags.m_extendedShader = xb6_29_cullFaces ? EExtendedShader::ForcedAdditive : EExtendedShader::ForcedAdditiveNoCull;
|
||||
flags.m_noCull = !xb6_29_cullFaces;
|
||||
model->Draw(flags);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@ class CSimplePool;
|
|||
|
||||
class CGuiModel : public CGuiWidget
|
||||
{
|
||||
TLockedToken<CModel> xf8_model;
|
||||
CAssetId x108_modelId;
|
||||
u32 x10c_lightMask;
|
||||
TLockedToken<CModel> xb8_model;
|
||||
CAssetId xc8_modelId;
|
||||
u32 xcc_lightMask;
|
||||
public:
|
||||
CGuiModel(const CGuiWidgetParms& parms, CSimplePool* sp, CAssetId modelId, u32 lightMask, bool flag);
|
||||
FourCC GetWidgetTypeID() const { return FOURCC('MODL'); }
|
||||
|
|
|
@ -137,18 +137,22 @@ void CHudVisorBeamMenu::UpdateMenuWidgetTransform(int idx, CGuiWidget& w, float
|
|||
w.SetO2WTransform(x18_basewidget_menu->GetWorldTransform() *
|
||||
zeus::CTransform::Translate(0.f, 0.f, translate) *
|
||||
zeus::CTransform::Scale(scale));
|
||||
break;
|
||||
case 1:
|
||||
w.SetO2WTransform(x18_basewidget_menu->GetWorldTransform() *
|
||||
zeus::CTransform::Translate(translate, 0.f, 0.f) *
|
||||
zeus::CTransform::Scale(scale));
|
||||
break;
|
||||
case 2:
|
||||
w.SetO2WTransform(x18_basewidget_menu->GetWorldTransform() *
|
||||
zeus::CTransform::Translate(0.f, 0.f, -translate) *
|
||||
zeus::CTransform::Scale(scale));
|
||||
break;
|
||||
case 3:
|
||||
w.SetO2WTransform(x18_basewidget_menu->GetWorldTransform() *
|
||||
zeus::CTransform::Translate(-translate, 0.f, 0.f) *
|
||||
zeus::CTransform::Scale(scale));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -250,6 +250,7 @@ int CTextExecuteBuffer::WrapOneLTR(const char16_t* str, int len)
|
|||
|
||||
void CTextExecuteBuffer::MoveWordLTR()
|
||||
{
|
||||
xa4_curLine->x8_curX -= (xb0_curX + xbc_spaceDistance);
|
||||
xa4_curLine->xc_curY = std::min(xa4_curLine->xc_curY, xb8_curWordY);
|
||||
xbc_spaceDistance = 0;
|
||||
--xa4_curLine->x4_wordCount;
|
||||
|
@ -258,7 +259,8 @@ void CTextExecuteBuffer::MoveWordLTR()
|
|||
xa4_curLine = static_cast<CLineInstruction*>(x0_instList.emplace(xa8_curWordIt,
|
||||
std::make_shared<CLineInstruction>(x18_textState.x80_just, x18_textState.x84_vjust, xc0_imageBaseline))->get());
|
||||
|
||||
x0_instList.emplace(xa8_curWordIt, std::make_shared<CWordInstruction>());
|
||||
// Dunno what's up with this in the original; seems fine without
|
||||
//x0_instList.emplace(xa8_curWordIt, std::make_shared<CWordInstruction>());
|
||||
|
||||
++xa0_curBlock->x34_lineCount;
|
||||
}
|
||||
|
|
|
@ -344,7 +344,8 @@ void CTextParser::ParseText(CTextExecuteBuffer& out, const char16_t* str, int le
|
|||
}
|
||||
if ((len == -1 || e+1 < len) && str[e+1] != u'&')
|
||||
{
|
||||
out.AddString(str + b, e - b);
|
||||
if (e > b)
|
||||
out.AddString(str + b, e - b);
|
||||
++e;
|
||||
b = e;
|
||||
|
||||
|
|
|
@ -199,10 +199,10 @@ void CTextRenderBuffer::Render(const zeus::CColor& col, float time) const
|
|||
CTextSupportShader::Uniform{mat, col};
|
||||
if (m_drawFlags == CGuiWidget::EGuiModelDrawFlags::AlphaAdditiveOverdraw)
|
||||
{
|
||||
zeus::CColor colSq = col * col;
|
||||
colSq.a = col.a;
|
||||
zeus::CColor colPremul = col * col.a;
|
||||
colPremul.a = col.a;
|
||||
const_cast<CTextRenderBuffer*>(this)->m_uniBuf2.access() =
|
||||
CTextSupportShader::Uniform{mat, colSq};
|
||||
CTextSupportShader::Uniform{mat, colPremul};
|
||||
}
|
||||
|
||||
for (const BooFontCharacters& chs : m_fontCharacters)
|
||||
|
|
|
@ -75,9 +75,9 @@ CInventoryScreen::CInventoryScreen(const CStateManager& mgr, CGuiFrame& frame, c
|
|||
: CPauseScreenBase(mgr, frame, pauseStrg)
|
||||
{
|
||||
CPlayerState& playerState = *mgr.GetPlayerState();
|
||||
x19c_samusDoll = std::make_unique<CSamusDoll>(suitDgrp, ballDgrp, CPlayerState::EPlayerSuit::Phazon
|
||||
/*CPlayerState::EPlayerSuit(int(playerState.GetCurrentSuit()) +
|
||||
playerState.IsFusionEnabled() * 4)*/,
|
||||
x19c_samusDoll = std::make_unique<CSamusDoll>(suitDgrp, ballDgrp,
|
||||
CPlayerState::EPlayerSuit(int(playerState.GetCurrentSuit()) +
|
||||
playerState.IsFusionEnabled() * 4),
|
||||
playerState.GetCurrentBeam(),
|
||||
playerState.HasPowerUp(CPlayerState::EItemType::SpiderBall),
|
||||
playerState.HasPowerUp(CPlayerState::EItemType::GrappleBeam));
|
||||
|
|
Loading…
Reference in New Issue