Arm cannon rendering fixes

This commit is contained in:
Jack Andersen 2018-01-14 21:39:25 -10:00
parent 89b9a6d7d3
commit 47b3d57c3a
19 changed files with 89 additions and 67 deletions

View File

@ -18,7 +18,7 @@ void ReadBabeDeadLightToBlender(hecl::blender::PyOutStream& os,
os.format("bg_node.inputs[0].default_value = (%f,%f,%f,1.0)\n"
"bg_node.inputs[1].default_value = %f\n",
light.color.vec[0], light.color.vec[1], light.color.vec[2],
light.q / 8.0);
light.q / 8.f);
return;
case BabeDeadLight::LightType::Directional:
os.format("lamp = bpy.data.lamps.new('LAMP_%01u_%03u', 'SUN')\n"
@ -66,7 +66,7 @@ void ReadBabeDeadLightToBlender(hecl::blender::PyOutStream& os,
"lamp.node_tree.links.new(hue_sat_node.outputs[0], lamp.node_tree.nodes['Emission'].inputs[0])\n"
"lamp_obj.location = (%f,%f,%f)\n"
"bpy.context.scene.objects.link(lamp_obj)\n"
"\n", s, light.lightType, light.q / 8.0,
"\n", s, light.lightType, light.q / 8.f,
light.color.vec[0], light.color.vec[1], light.color.vec[2],
light.position.vec[0], light.position.vec[1], light.position.vec[2]);
@ -118,8 +118,13 @@ void WriteBabeDeadLightFromBlender(BabeDeadLight& lightOut, const hecl::blender:
break;
}
if (lightIn.linear > lightIn.constant &&
lightIn.linear > lightIn.quadratic)
if (lightIn.type == InterType::Ambient)
{
lightOut.falloff = BabeDeadLight::Falloff::Constant;
lightOut.q = lightIn.energy * 8.f;
}
else if (lightIn.linear > lightIn.constant &&
lightIn.linear > lightIn.quadratic)
{
lightOut.falloff = BabeDeadLight::Falloff::Linear;
lightOut.q = 1.f / (lightIn.linear / 250.f);
@ -144,7 +149,7 @@ void WriteBabeDeadLightFromBlender(BabeDeadLight& lightOut, const hecl::blender:
lightOut.position.vec[2] = lightIn.sceneXf[2].vec[3];
zeus::CTransform lightXf(&lightIn.sceneXf[0]);
lightOut.direction = (lightXf.basis * zeus::CVector3f(0.f, 0.f, -1.f)).normalized();
lightOut.direction = (lightXf.basis.transposed() * zeus::CVector3f(0.f, 0.f, -1.f)).normalized();
}
template void WriteBabeDeadLightFromBlender<DNAMP1::MREA::BabeDeadLight>

View File

@ -395,7 +395,7 @@ void ANIM::ANIM2::write(athena::io::IStreamWriter& writer) const
}
}
head.keyBitmapBitCount = keyBmp.getBitCount();
head.duration = frameCount * mainInterval;
head.duration = frames.back() * mainInterval;
head.boneChannelCount = bones.size();
size_t keyframeCount = frameCount - 1;

View File

@ -37,13 +37,13 @@ bool CCameraManager::IsInFirstPersonCamera() const
zeus::CVector3f CCameraManager::GetGlobalCameraTranslation(const CStateManager& stateMgr) const
{
TCastToConstPtr<CGameCamera> camera(GetCurrentCamera(stateMgr));
return camera->GetTransform() * x30_shakeOffset;
const CGameCamera* camera = GetCurrentCamera(stateMgr);
return camera->GetTransform().rotate(x30_shakeOffset);
}
zeus::CTransform CCameraManager::GetCurrentCameraTransform(const CStateManager& stateMgr) const
{
TCastToConstPtr<CGameCamera> camera(GetCurrentCamera(stateMgr));
const CGameCamera* camera = GetCurrentCamera(stateMgr);
return camera->GetTransform() * zeus::CTransform::Translate(x30_shakeOffset);
}

View File

@ -507,10 +507,6 @@ std::vector<CLight> CActorLights::BuildLightVector() const
{
std::vector<CLight> lights;
zeus::CColor ambColor = x288_ambientColor;
ambColor.a = 1.f;
lights.push_back(CLight::BuildLocalAmbient(zeus::CVector3f::skZero, ambColor));
if (x0_areaLights.size())
{
if (x2dc_brightLightLag && x299_25_useBrightLightLag)
@ -537,6 +533,10 @@ std::vector<CLight> CActorLights::BuildLightVector() const
for (const CLight& light : x144_dynamicLights)
lights.push_back(light);
zeus::CColor ambColor = x288_ambientColor;
ambColor.a = 1.f;
lights.push_back(CLight::BuildLocalAmbient(zeus::CVector3f::skZero, ambColor));
return lights;
}

View File

@ -303,12 +303,10 @@ void CBooRenderer::RenderBucketItems(CAreaListItem* item)
}
}
void CBooRenderer::HandleUnsortedModel(CAreaListItem* item, CBooModel& model)
void CBooRenderer::HandleUnsortedModel(CAreaListItem* item, CBooModel& model, const CModelFlags& flags)
{
//ActivateLightsForModel(item, model);
CBooSurface* surf = model.x38_firstUnsortedSurface;
CModelFlags flags;
flags.m_extendedShader = EExtendedShader::Lighting;
while (surf)
{
model.DrawSurface(*surf, flags);
@ -790,12 +788,18 @@ void CBooRenderer::DisablePVS()
xc8_pvs = std::experimental::nullopt;
}
void CBooRenderer::UpdateAreaUniforms(int areaIdx)
void CBooRenderer::UpdateAreaUniforms(int areaIdx, bool shadowRender)
{
SetupRendererStates();
CModelFlags flags;
flags.m_extendedShader = EExtendedShader::Lighting;
if (shadowRender)
{
flags.m_extendedShader = EExtendedShader::SolidColor;
flags.x4_color = zeus::CColor::skBlack;
}
else
flags.m_extendedShader = EExtendedShader::Lighting;
for (CAreaListItem& item : x1c_areaListItems)
{
@ -803,7 +807,7 @@ void CBooRenderer::UpdateAreaUniforms(int areaIdx)
continue;
item.m_shaderSet->m_geomLayout->Update(flags, nullptr, nullptr, &item.m_shaderSet->m_matSet,
item.m_shaderSet->m_geomLayout->m_sharedBuffer);
item.m_shaderSet->m_geomLayout->m_sharedBuffer[shadowRender]);
for (auto it = item.x10_models.begin(); it != item.x10_models.end(); ++it)
{
@ -811,7 +815,7 @@ void CBooRenderer::UpdateAreaUniforms(int areaIdx)
if (model->TryLockTextures())
{
ActivateLightsForModel(&item, *model);
model->UpdateUniformData(flags, nullptr, nullptr);
model->UpdateUniformData(flags, nullptr, nullptr, shadowRender);
}
}
}
@ -863,9 +867,12 @@ void CBooRenderer::DrawAreaGeometry(int areaIdx, int mask, int targetMask)
x318_30_inAreaDraw = false;
}
void CBooRenderer::DrawUnsortedGeometry(int areaIdx, int mask, int targetMask)
void CBooRenderer::DrawUnsortedGeometry(int areaIdx, int mask, int targetMask, bool shadowRender)
{
//SetupRendererStates();
CModelFlags flags;
flags.m_extendedShader = shadowRender ? EExtendedShader::SolidColor : EExtendedShader::Lighting;
CAreaListItem* lastOctreeItem = nullptr;
for (CAreaListItem& item : x1c_areaListItems)
@ -932,7 +939,7 @@ void CBooRenderer::DrawUnsortedGeometry(int areaIdx, int mask, int targetMask)
}
model->x40_25_modelVisible = true;
HandleUnsortedModel(lastOctreeItem, *model);
HandleUnsortedModel(lastOctreeItem, *model, flags);
}
}

View File

@ -185,7 +185,7 @@ class CBooRenderer : public IRenderer
void ActivateLightsForModel(CAreaListItem* item, CBooModel& model);
void RenderBucketItems(CAreaListItem* item);
void HandleUnsortedModel(CAreaListItem* item, CBooModel& model);
void HandleUnsortedModel(CAreaListItem* item, CBooModel& model, const CModelFlags& flags);
static void CalcDrawFogFan(const zeus::CPlane* planes, int numPlanes, const zeus::CVector3f* verts,
int numVerts, int iteration, int level, CFogVolumePlaneShader& fogVol);
static void DrawFogSlices(const zeus::CPlane* planes, int numPlanes, int iteration,
@ -211,10 +211,10 @@ public:
const SShader* shaderSet);
void EnablePVS(const CPVSVisSet&, u32);
void DisablePVS();
void UpdateAreaUniforms(int areaIdx);
void UpdateAreaUniforms(int areaIdx, bool shadowRender = false);
void RemoveStaticGeometry(const std::vector<CMetroidModelInstance>*);
void DrawAreaGeometry(int areaIdx, int mask, int targetMask);
void DrawUnsortedGeometry(int areaIdx, int mask, int targetMask);
void DrawUnsortedGeometry(int areaIdx, int mask, int targetMask, bool shadowRender = false);
void DrawSortedGeometry(int areaIdx, int mask, int targetMask);
void DrawStaticGeometry(int areaIdx, int mask, int targetMask);
void DrawModelFlat(const CModel& model, const CModelFlags& flags, bool unsortedOnly);

View File

@ -97,8 +97,8 @@ CLineRenderer::CLineRenderer(EPrimitiveMode mode, u32 maxVerts,
});
}
rstl::reserved_vector<CLineRenderer::SDrawVertTex, 256> CLineRenderer::g_StaticLineVertsTex = {};
rstl::reserved_vector<CLineRenderer::SDrawVertNoTex, 256> CLineRenderer::g_StaticLineVertsNoTex = {};
rstl::reserved_vector<CLineRenderer::SDrawVertTex, 1024> CLineRenderer::g_StaticLineVertsTex = {};
rstl::reserved_vector<CLineRenderer::SDrawVertNoTex, 1024> CLineRenderer::g_StaticLineVertsNoTex = {};
static zeus::CVector2f IntersectLines(const zeus::CVector2f& pa1, const zeus::CVector2f& pa2,
const zeus::CVector2f& pb1, const zeus::CVector2f& pb2)

View File

@ -59,8 +59,8 @@ private:
zeus::CColor m_lastColor;
float m_lastWidth;
static rstl::reserved_vector<SDrawVertTex, 256> g_StaticLineVertsTex;
static rstl::reserved_vector<SDrawVertNoTex, 256> g_StaticLineVertsNoTex;
static rstl::reserved_vector<SDrawVertTex, 1024> g_StaticLineVertsTex;
static rstl::reserved_vector<SDrawVertNoTex, 1024> g_StaticLineVertsNoTex;
static hecl::VertexBufferPool<SDrawVertTex> s_vertPoolTex;
static hecl::VertexBufferPool<SDrawVertNoTex> s_vertPoolNoTex;

View File

@ -73,7 +73,7 @@ using UVAnimation = DataSpec::DNAMP1::MaterialSet::Material::UVAnimation;
struct GeometryUniformLayout
{
boo::ObjToken<boo::IGraphicsBufferD> m_sharedBuffer;
boo::ObjToken<boo::IGraphicsBufferD> m_sharedBuffer[2];
size_t m_geomBufferSize = 0;
size_t m_skinBankCount = 0;
size_t m_weightVecCount = 0;
@ -174,7 +174,7 @@ private:
boo::ObjToken<boo::ITexture> m_lastDrawnShadowMap;
ModelInstance* PushNewModelInstance();
ModelInstance* PushNewModelInstance(int sharedLayoutBuf = -1);
void DrawAlphaSurfaces(const CModelFlags& flags) const;
void DrawNormalSurfaces(const CModelFlags& flags) const;
void DrawSurfaces(const CModelFlags& flags) const;
@ -216,7 +216,8 @@ public:
void VerifyCurrentShader(int shaderIdx);
boo::ObjToken<boo::IGraphicsBufferD> UpdateUniformData(const CModelFlags& flags,
const CSkinRules* cskr,
const CPoseAsTransforms* pose) const;
const CPoseAsTransforms* pose,
int sharedLayoutBuf = -1) const;
void DrawAlpha(const CModelFlags& flags,
const CSkinRules* cskr,
const CPoseAsTransforms* pose) const;

View File

@ -270,7 +270,7 @@ GeometryUniformLayout::GeometryUniformLayout(const CModel* model, const Material
}
}
CBooModel::ModelInstance* CBooModel::PushNewModelInstance()
CBooModel::ModelInstance* CBooModel::PushNewModelInstance(int sharedLayoutBuf)
{
if (!x40_24_texturesLoaded && !g_DummyTextures)
return nullptr;
@ -284,8 +284,10 @@ CBooModel::ModelInstance* CBooModel::PushNewModelInstance()
{
/* Build geometry uniform buffer if shared not available */
boo::ObjToken<boo::IGraphicsBufferD> geomUniformBuf;
if (m_geomLayout->m_sharedBuffer)
geomUniformBuf = m_geomLayout->m_sharedBuffer;
if (sharedLayoutBuf >= 0)
{
geomUniformBuf = m_geomLayout->m_sharedBuffer[sharedLayoutBuf];
}
else
{
geomUniformBuf = ctx.newDynamicBuffer(boo::BufferUse::Uniform, m_geomLayout->m_geomBufferSize, 1);
@ -767,9 +769,10 @@ void CBooModel::UVAnimationBuffer::ProcessAnimation(u8*& bufOut, const UVAnimati
texMtxOut.vec[3].zeroOut();
postMtxOut.vec[0].x = 0.5f;
postMtxOut.vec[1].y = 0.f;
postMtxOut.vec[2].y = 0.5f;
postMtxOut.vec[3].x = CGraphics::g_GXModelMatrix.origin.x * 0.5f;
postMtxOut.vec[3].y = CGraphics::g_GXModelMatrix.origin.y * 0.5f;
postMtxOut.vec[3].x = CGraphics::g_GXModelMatrix.origin.x * 0.05f;
postMtxOut.vec[3].y = CGraphics::g_GXModelMatrix.origin.y * 0.05f;
break;
}
case UVAnimation::Mode::CylinderEnvironment:
@ -982,7 +985,8 @@ void GeometryUniformLayout::Update(const CModelFlags& flags,
boo::ObjToken<boo::IGraphicsBufferD> CBooModel::UpdateUniformData(const CModelFlags& flags,
const CSkinRules* cskr,
const CPoseAsTransforms* pose) const
const CPoseAsTransforms* pose,
int sharedLayoutBuf) const
{
/* Invalidate instances if new shadow being drawn */
if (flags.m_extendedShader == EExtendedShader::WorldShadow &&
@ -995,7 +999,7 @@ boo::ObjToken<boo::IGraphicsBufferD> CBooModel::UpdateUniformData(const CModelFl
const ModelInstance* inst;
if (m_instances.size() <= m_uniUpdateCount)
{
inst = const_cast<CBooModel*>(this)->PushNewModelInstance();
inst = const_cast<CBooModel*>(this)->PushNewModelInstance(sharedLayoutBuf);
if (!inst)
return nullptr;
}

View File

@ -38,13 +38,15 @@ void CSkinnedModel::Calculate(const CPoseAsTransforms& pose,
{
if (morphEffect || g_PointGenFunc)
{
boo::ObjToken<boo::IGraphicsBufferD> vertBuf = m_modelInst->UpdateUniformData(drawFlags, nullptr, nullptr);
x10_skinRules->TransformVerticesCPU(m_vertWorkspace, pose, *x4_model);
if (morphEffect)
morphEffect->MorphVertices(m_vertWorkspace, morphMagnitudes, x10_skinRules, pose);
if (g_PointGenFunc)
g_PointGenFunc(g_PointGenCtx, m_vertWorkspace);
x4_model->ApplyVerticesCPU(vertBuf, m_vertWorkspace);
if (boo::ObjToken<boo::IGraphicsBufferD> vertBuf = m_modelInst->UpdateUniformData(drawFlags, nullptr, nullptr))
{
x10_skinRules->TransformVerticesCPU(m_vertWorkspace, pose, *x4_model);
if (morphEffect)
morphEffect->MorphVertices(m_vertWorkspace, morphMagnitudes, x10_skinRules, pose);
if (g_PointGenFunc)
g_PointGenFunc(g_PointGenCtx, m_vertWorkspace);
x4_model->ApplyVerticesCPU(vertBuf, m_vertWorkspace);
}
}
else
{

View File

@ -51,7 +51,7 @@ public:
virtual void DisablePVS()=0;
virtual void RemoveStaticGeometry(const std::vector<CMetroidModelInstance>*)=0;
virtual void DrawAreaGeometry(int areaIdx, int mask, int targetMask)=0;
virtual void DrawUnsortedGeometry(int areaIdx, int mask, int targetMask)=0;
virtual void DrawUnsortedGeometry(int areaIdx, int mask, int targetMask, bool shadowRender = false)=0;
virtual void DrawSortedGeometry(int areaIdx, int mask, int targetMask)=0;
virtual void DrawStaticGeometry(int areaIdx, int mask, int targetMask)=0;
virtual void DrawModelFlat(const CModel& model, const CModelFlags& flags, bool unsortedOnly)=0;

View File

@ -58,6 +58,7 @@ public:
void drawVerts(const zeus::CColor& color, const Vert verts[4], float lod=0.f);
void DrawFilter(EFilterShape shape, const zeus::CColor& color, float t);
const TLockedToken<CTexture>& GetTex() const { return m_tex; }
const boo::ObjToken<boo::ITexture>& GetBooTex() const { return m_booTex; }
using _CLS = CTexturedQuadFilter;
#include "TMultiBlendShaderDecl.hpp"

View File

@ -10,7 +10,7 @@ CWorldShadowShader::CWorldShadowShader(u32 w, u32 h)
{
m_vbo = ctx.newDynamicBuffer(boo::BufferUse::Vertex, 16, 4);
m_uniBuf = ctx.newDynamicBuffer(boo::BufferUse::Uniform, sizeof(Uniform), 1);
m_dataBind = TShader<CWorldShadowShader>::BuildShaderDataBinding(ctx, *this);
TShader<CWorldShadowShader>::BuildShaderDataBinding(ctx, *this);
m_tex = ctx.newRenderTexture(m_w, m_h, boo::TextureClampMode::ClampToWhite, 1, 0);
return true;
});
@ -54,7 +54,7 @@ void CWorldShadowShader::blendPreviousShadow()
void CWorldShadowShader::resolveTexture()
{
boo::SWindowRect rect = {0, 0, int(m_w), int(m_h)};
CGraphics::g_BooMainCommandQueue->resolveBindTexture(m_tex, rect, false, 0, true, false);
CGraphics::g_BooMainCommandQueue->resolveBindTexture(m_tex, rect, false, 0, true, false, true);
}
URDE_SPECIALIZE_SHADER(CWorldShadowShader)

View File

@ -55,10 +55,10 @@ CPlayerGun::CPlayerGun(TUniqueId playerId)
playerId, EMaterialTypes::Player, sGunScale);
x774_holoTransitionGen = std::make_unique<CElementGen>(
g_SimplePool->GetObj(SObjectTag{FOURCC('PART'), g_tweakGunRes->x24_holoTransition}));
x82c_shadow = std::make_unique<CWorldShadow>(32, 32, true);
x82c_shadow = std::make_unique<CWorldShadow>(256, 256, true);
x832_31_inRestPose = true;
x833_24_isFidgeting = true;
x833_24_notFidgeting = true;
x833_30_canShowAuxMuzzleEffect = true;
x6e0_rightHandModel.SetSortThermal(true);
@ -1933,7 +1933,7 @@ void CPlayerGun::UpdateGunIdle(bool inStrikeCooldown, float camBobT, float dt, C
x388_enterFreeLookDelayTimer = 0.f;
if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed)
{
x833_24_isFidgeting = (player.GetSurfaceRestraint() != CPlayer::ESurfaceRestraints::Water &&
x833_24_notFidgeting = !(player.GetSurfaceRestraint() != CPlayer::ESurfaceRestraints::Water &&
mgr.GetPlayerState()->GetCurrentVisor() != CPlayerState::EPlayerVisor::Scan &&
(x2f4_fireButtonStates & 0x3) == 0 && x32c_chargePhase == EChargePhase::NotCharging &&
!x832_29_lockedOn && (x2f8_stateFlags & 0x8) != 0x8 && x364_gunStrikeCoolTimer <= 0.f &&
@ -1944,7 +1944,7 @@ void CPlayerGun::UpdateGunIdle(bool inStrikeCooldown, float camBobT, float dt, C
player.GetGunHolsterState() == CPlayer::EGunHolsterState::Drawn &&
player.GetGrappleState() == CPlayer::EGrappleState::None && !x834_30_inBigStrike &&
!x835_25_inPhazonBeam);
if (x833_24_isFidgeting)
if (x833_24_notFidgeting)
{
if (!x834_30_inBigStrike)
{
@ -1966,7 +1966,7 @@ void CPlayerGun::UpdateGunIdle(bool inStrikeCooldown, float camBobT, float dt, C
if (!doWander || x834_26_animPlaying)
ResetIdle(mgr);
}
if (x394_damageTimer > 0.f)
else if (x394_damageTimer > 0.f)
{
x394_damageTimer -= dt;
}
@ -2011,7 +2011,7 @@ void CPlayerGun::UpdateGunIdle(bool inStrikeCooldown, float camBobT, float dt, C
case CFidget::EState::StillMinorFidget:
case CFidget::EState::StillMajorFidget:
x550_camBob.SetState(CPlayerCameraBob::ECameraBobState::Walk, mgr);
x833_24_isFidgeting = false;
x833_24_notFidgeting = false;
x834_26_animPlaying = x834_25_gunMotionFidgeting ? x73c_gunMotion->IsAnimPlaying() :
x72c_currentBeam->GetSolidModelData().GetAnimationData()->IsAnimTimeRemaining(0.001f, "Whole Body");
if (!x834_26_animPlaying)

View File

@ -284,7 +284,7 @@ private:
bool x832_30_requestReturnToDefault : 1;
bool x832_31_inRestPose : 1;
bool x833_24_isFidgeting : 1;
bool x833_24_notFidgeting : 1;
bool x833_25_ : 1;
bool x833_26_ : 1;
bool x833_27_ : 1;
@ -379,7 +379,7 @@ public:
void AsyncLoadSuit(CStateManager& mgr);
void TouchModel(const CStateManager& stateMgr);
EMissleMode GetMissleMode() const { return x31c_missileMode; }
bool IsFidgeting() const { return x833_24_isFidgeting; }
bool IsFidgeting() const { return x833_24_notFidgeting; }
bool IsCharging() const { return x834_24_charging; }
float GetChargeBeamFactor() const { return x340_chargeBeamFactor; }
bool IsBombReady() const { return x835_28_bombReady; }

View File

@ -164,7 +164,7 @@ void CAreaRenderOctTree::Node::RecursiveBuildOverlaps(u32* bmpOut,
for (u32 c=0 ; c<childCount ; ++c)
{
zeus::CAABox childAABB = GetNodeBounds(curAABB, c);
reinterpret_cast<Node*>(parent.x38_entries[parent.x34_indirectionTable[x4_children[c]]])->
reinterpret_cast<const Node*>(parent.x38_entries + parent.x34_indirectionTable[x4_children[c]])->
RecursiveBuildOverlaps(bmpOut, parent, childAABB, testAABB);
}
}
@ -174,13 +174,13 @@ void CAreaRenderOctTree::Node::RecursiveBuildOverlaps(u32* bmpOut,
void CAreaRenderOctTree::FindOverlappingModels(std::vector<u32>& out, const zeus::CAABox& testAABB) const
{
out.resize(x14_bitmapWordCount);
reinterpret_cast<Node*>(x38_entries[x34_indirectionTable[0]])->
reinterpret_cast<const Node*>(x38_entries + x34_indirectionTable[0])->
RecursiveBuildOverlaps(out.data(), *this, x18_aabb, testAABB);
}
void CAreaRenderOctTree::FindOverlappingModels(u32* out, const zeus::CAABox& testAABB) const
{
reinterpret_cast<Node*>(x38_entries[x34_indirectionTable[0]])->
reinterpret_cast<const Node*>(x38_entries + x34_indirectionTable[0])->
RecursiveBuildOverlaps(out, *this, x18_aabb, testAABB);
}
@ -1217,9 +1217,10 @@ void CGameArea::FillInStaticGeometry(bool textures)
CGraphics::CommitResources([&](boo::IGraphicsDataFactory::Context& ctx) -> bool
{
/* Shared geometry uniform buffer */
matSet.m_geomLayout->m_sharedBuffer =
ctx.newDynamicBuffer(boo::BufferUse::Uniform, matSet.m_geomLayout->m_geomBufferSize, 1);
/* Shared geometry uniform buffer - one for normal render, one for shadow render */
for (int i=0 ; i<2 ; ++i)
matSet.m_geomLayout->m_sharedBuffer[i] =
ctx.newDynamicBuffer(boo::BufferUse::Uniform, matSet.m_geomLayout->m_geomBufferSize, 1);
/* Models */
for (CMetroidModelInstance& inst : x12c_postConstructed->x4c_insts)

View File

@ -88,7 +88,7 @@ CMorphBall::CMorphBall(CPlayer& player, float radius)
x19d0_ballInnerGlowGen = std::make_unique<CElementGen>(x1988_ballInnerGlow);
x19d4_spiderBallMagnetEffectGen = std::make_unique<CElementGen>(x1990_spiderBallMagnetEffect);
x19d8_boostBallGlowGen = std::make_unique<CElementGen>(x1998_boostBallGlow);
x1c14_worldShadow = std::make_unique<CWorldShadow>(16, 16, false);
x1c14_worldShadow = std::make_unique<CWorldShadow>(128, 128, false);
x1c18_actorLights = std::make_unique<CActorLights>(8, zeus::CVector3f::skZero, 4, 4, false, false, false, 0.1f);
x1c1c_rainSplashGen = std::make_unique<CRainSplashGenerator>(x58_ballModel->GetScale(), 40, 2, 0.15f, 0.5f);
x1de4_24_inBoost = false;

View File

@ -89,7 +89,8 @@ void CWorldShadow::BuildLightShadowTexture(const CStateManager& mgr, TAreaId aid
CGraphics::SetModelMatrix(zeus::CTransform::Identity());
CBooModel::SetDrawingOccluders(true);
g_Renderer->PrepareDynamicLights({});
g_Renderer->DrawUnsortedGeometry(aid, 0, 0);
g_Renderer->UpdateAreaUniforms(aid, true);
g_Renderer->DrawUnsortedGeometry(aid, 0, 0, true);
CBooModel::SetDrawingOccluders(false);
if (lighten)
@ -97,7 +98,7 @@ void CWorldShadow::BuildLightShadowTexture(const CStateManager& mgr, TAreaId aid
CGraphics::SetModelMatrix(x34_model);
/* No depth test or write */
/* Color white 25% alpha */
m_shader.lightenShadow();
//m_shader.lightenShadow();
}
if (motionBlur && !x88_blurReset)
@ -105,7 +106,7 @@ void CWorldShadow::BuildLightShadowTexture(const CStateManager& mgr, TAreaId aid
/* No depth test or write */
/* Color white 85% alpha */
/* Draw in shadow texture */
m_shader.blendPreviousShadow();
//m_shader.blendPreviousShadow();
}
x88_blurReset = false;