MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / xModelBucket_RenderAlphaLayer

Function xModelBucket_RenderAlphaLayer

src/SB/Core/x/xModelBucket.cpp:420–601  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

418}
419
420void xModelBucket_RenderAlphaLayer(S32 maxLayer)
421{
422 U32 pipeMask, curPipeFlags, lastPipeFlags;
423 RwFogType oldfogtype;
424 S32 layer;
425 xModelInstance* minst;
426 RpAtomic* oldmodel;
427 S32 oldHack;
428 F32 oldAlpha;
429
430 pipeMask = 0xFF01FF3C;
431 lastPipeFlags = 0x6500;
432 oldfogtype = xglobals->fog.type;
433 if (oldfogtype == rwFOGTYPENAFOGTYPE)
434 {
435 pipeMask &= ~0x10000;
436 }
437
438 while (sAlphaStart < sAlphaCurr)
439 {
440 layer = sAlphaList[sAlphaStart].Layer;
441 if (layer > maxLayer)
442 break;
443
444 minst = sAlphaList[sAlphaStart].MInst;
445 oldmodel = minst->Data;
446 minst->Data = sAlphaList[sAlphaStart].Data;
447
448 xLightKit_Enable(minst->LightKit, xglobals->currWorld);
449
450 oldHack = iModelHack_DisablePrelight;
451 if ((minst->PipeFlags & 0xC0) == 0x80)
452 {
453 iModelHack_DisablePrelight = 0;
454 }
455
456 if (minst->Surf)
457 {
458 xEntSetupPipeline(minst->Surf, minst->Data);
459 }
460
461 curPipeFlags = minst->PipeFlags;
462 if (!(curPipeFlags & 0xF00))
463 {
464 curPipeFlags |= 0x500;
465 }
466 if (!(curPipeFlags & 0xF000))
467 {
468 curPipeFlags |= 0x6000;
469 }
470 curPipeFlags &= pipeMask;
471
472 U32 xorPipeFlags = curPipeFlags ^ lastPipeFlags;
473 F32 fade = sAlphaList[sAlphaStart].AlphaFade;
474
475 oldAlpha = minst->Alpha;
476 minst->Alpha *= fade;
477

Callers 1

xModelBucket_RenderAlphaFunction · 0.50

Calls 6

xEntRestorePipelineFunction · 0.85
xLightKit_EnableFunction · 0.70
xEntSetupPipelineFunction · 0.70
xModelRenderSingleFunction · 0.70
iDrawSetFBMSKFunction · 0.50

Tested by

no test coverage detected