mirror of https://github.com/AxioDL/metaforce.git
Implement FlatDraw/DrawFlat calls, add CRandom16 seed value display
This commit is contained in:
parent
52e9afbe98
commit
ec9e0bfc0f
|
@ -6,9 +6,12 @@ CRandom16* CRandom16::g_randomNumber = nullptr; // &DefaultRandom
|
||||||
CGlobalRandom* CGlobalRandom::g_currentGlobalRandom = nullptr; //&DefaultGlobalRandom;
|
CGlobalRandom* CGlobalRandom::g_currentGlobalRandom = nullptr; //&DefaultGlobalRandom;
|
||||||
namespace {
|
namespace {
|
||||||
u32 g_numNextCalls = 0;
|
u32 g_numNextCalls = 0;
|
||||||
|
u32 g_lastSeed = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
void CRandom16::IncrementNumNextCalls() { ++g_numNextCalls; }
|
void CRandom16::IncrementNumNextCalls() { ++g_numNextCalls; }
|
||||||
u32 CRandom16::GetNumNextCalls() { return g_numNextCalls; }
|
u32 CRandom16::GetNumNextCalls() { return g_numNextCalls; }
|
||||||
void CRandom16::ResetNumNextCalls() { g_numNextCalls = 0; }
|
void CRandom16::ResetNumNextCalls() { g_numNextCalls = 0; }
|
||||||
|
u32 CRandom16::GetLastSeed() { return g_lastSeed; }
|
||||||
|
void CRandom16::SetLastSeed(u32 seed) { g_lastSeed = seed; }
|
||||||
} // namespace metaforce
|
} // namespace metaforce
|
||||||
|
|
|
@ -14,6 +14,7 @@ public:
|
||||||
s32 Next() {
|
s32 Next() {
|
||||||
IncrementNumNextCalls();
|
IncrementNumNextCalls();
|
||||||
m_seed = (m_seed * 0x41c64e6d) + 0x00003039;
|
m_seed = (m_seed * 0x41c64e6d) + 0x00003039;
|
||||||
|
SetLastSeed(m_seed);
|
||||||
return (m_seed >> 16) & 0xffff;
|
return (m_seed >> 16) & 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +33,8 @@ public:
|
||||||
static void IncrementNumNextCalls();
|
static void IncrementNumNextCalls();
|
||||||
static u32 GetNumNextCalls();
|
static u32 GetNumNextCalls();
|
||||||
static void ResetNumNextCalls();
|
static void ResetNumNextCalls();
|
||||||
|
static u32 GetLastSeed();
|
||||||
|
static void SetLastSeed(u32 seed);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CGlobalRandom {
|
class CGlobalRandom {
|
||||||
|
|
|
@ -360,6 +360,21 @@ void CModelData::Render(EWhichModel which, const zeus::CTransform& xf, const CAc
|
||||||
x14_24_renderSorted = false;
|
x14_24_renderSorted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CModelData::FlatDraw(EWhichModel which, const zeus::CTransform& xf, bool unsortedOnly, const CModelFlags& flags) {
|
||||||
|
g_Renderer->SetModelMatrix(xf * zeus::CTransform::Scale(x0_scale));
|
||||||
|
CGraphics::DisableAllLights();
|
||||||
|
if (!x10_animData) {
|
||||||
|
g_Renderer->DrawModelFlat(*PickStaticModel(which), flags, unsortedOnly, nullptr, nullptr);
|
||||||
|
} else {
|
||||||
|
auto model = PickAnimatedModel(which);
|
||||||
|
x10_animData->SetupRender(model, nullptr, nullptr);
|
||||||
|
model.DoDrawCallback([=](TConstVectorRef positions, TConstVectorRef normals) {
|
||||||
|
auto m = model.GetModel();
|
||||||
|
g_Renderer->DrawModelFlat(*m, flags, unsortedOnly, positions, normals);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CModelData::MultiLightingDraw(EWhichModel which, const zeus::CTransform& xf, const CActorLights* lights,
|
void CModelData::MultiLightingDraw(EWhichModel which, const zeus::CTransform& xf, const CActorLights* lights,
|
||||||
const zeus::CColor& alphaColor, const zeus::CColor& additiveColor) {
|
const zeus::CColor& alphaColor, const zeus::CColor& additiveColor) {
|
||||||
CModel* model = nullptr;
|
CModel* model = nullptr;
|
||||||
|
|
|
@ -121,6 +121,7 @@ public:
|
||||||
void Render(const CStateManager& stateMgr, const zeus::CTransform& xf, const CActorLights* lights,
|
void Render(const CStateManager& stateMgr, const zeus::CTransform& xf, const CActorLights* lights,
|
||||||
const CModelFlags& drawFlags);
|
const CModelFlags& drawFlags);
|
||||||
void Render(EWhichModel, const zeus::CTransform& xf, const CActorLights* lights, const CModelFlags& drawFlags);
|
void Render(EWhichModel, const zeus::CTransform& xf, const CActorLights* lights, const CModelFlags& drawFlags);
|
||||||
|
void FlatDraw(EWhichModel which, const zeus::CTransform& xf, bool unsortedOnly, const CModelFlags& flags);
|
||||||
|
|
||||||
void MultiLightingDraw(EWhichModel which, const zeus::CTransform& xf, const CActorLights* lights,
|
void MultiLightingDraw(EWhichModel which, const zeus::CTransform& xf, const CActorLights* lights,
|
||||||
const zeus::CColor& alphaColor, const zeus::CColor& additiveColor);
|
const zeus::CColor& alphaColor, const zeus::CColor& additiveColor);
|
||||||
|
|
|
@ -941,6 +941,7 @@ void ImGuiConsole::ShowDebugOverlay() {
|
||||||
|
|
||||||
ImGuiStringViewText(
|
ImGuiStringViewText(
|
||||||
fmt::format(FMT_STRING("CRandom16::Next calls: {}\n"), metaforce::CRandom16::GetNumNextCalls()));
|
fmt::format(FMT_STRING("CRandom16::Next calls: {}\n"), metaforce::CRandom16::GetNumNextCalls()));
|
||||||
|
ImGuiStringViewText(fmt::format(FMT_STRING("CRandom16::LastSeed: 0x{:08X}\n"), CRandom16::GetLastSeed()));
|
||||||
}
|
}
|
||||||
if (m_resourceStats && g_SimplePool != nullptr) {
|
if (m_resourceStats && g_SimplePool != nullptr) {
|
||||||
if (hasPrevious) {
|
if (hasPrevious) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "Runtime/CGameState.hpp"
|
#include "Runtime/CGameState.hpp"
|
||||||
#include "Runtime/CSimplePool.hpp"
|
#include "Runtime/CSimplePool.hpp"
|
||||||
#include "Runtime/GameGlobalObjects.hpp"
|
#include "Runtime/GameGlobalObjects.hpp"
|
||||||
|
#include "Runtime/Graphics/CCubeRenderer.hpp"
|
||||||
#include "Runtime/Graphics/CSkinnedModel.hpp"
|
#include "Runtime/Graphics/CSkinnedModel.hpp"
|
||||||
#include "Runtime/Graphics/CVertexMorphEffect.hpp"
|
#include "Runtime/Graphics/CVertexMorphEffect.hpp"
|
||||||
#include "Runtime/Weapon/CEnergyProjectile.hpp"
|
#include "Runtime/Weapon/CEnergyProjectile.hpp"
|
||||||
|
@ -503,17 +504,15 @@ void CGunWeapon::DrawHologram(const CStateManager& mgr, const zeus::CTransform&
|
||||||
// TODO
|
// TODO
|
||||||
if (x218_29_drawHologram) {
|
if (x218_29_drawHologram) {
|
||||||
CModelFlags useFlags = flags;
|
CModelFlags useFlags = flags;
|
||||||
// useFlags.m_extendedShader = EExtendedShader::Flat;
|
x60_holoModelData->FlatDraw(CModelData::EWhichModel::Normal, xf, false, useFlags);
|
||||||
x60_holoModelData->Render(CModelData::EWhichModel::Normal, xf, nullptr, useFlags);
|
|
||||||
} else {
|
} else {
|
||||||
CGraphics::SetModelMatrix(xf * zeus::CTransform::Scale(x10_solidModelData->GetScale()));
|
CGraphics::SetModelMatrix(xf * zeus::CTransform::Scale(x10_solidModelData->GetScale()));
|
||||||
// CGraphics::DisableAllLights();
|
CGraphics::DisableAllLights();
|
||||||
// g_Renderer->SetAmbientColor(zeus::skWhite);
|
g_Renderer->SetAmbientColor(zeus::skWhite);
|
||||||
CSkinnedModel& model = *x60_holoModelData->GetAnimationData()->GetModelData();
|
CSkinnedModel& model = *x60_holoModelData->GetAnimationData()->GetModelData();
|
||||||
// model.GetModelInst()->ActivateLights({CLight::BuildLocalAmbient({}, zeus::skWhite)});
|
|
||||||
x10_solidModelData->GetAnimationData()->Render(model, flags, nullptr, nullptr);
|
x10_solidModelData->GetAnimationData()->Render(model, flags, nullptr, nullptr);
|
||||||
// g_Renderer->SetAmbientColor(zeus::skWhite);
|
g_Renderer->SetAmbientColor(zeus::skWhite);
|
||||||
// CGraphics::DisableAllLights();
|
CGraphics::DisableAllLights();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue