From ba1e384f6930370510328cf8467e6e4a72dea7b5 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Tue, 7 Feb 2023 11:51:32 +0100 Subject: [PATCH] Keep track of the leaf a model is in, so that it doesn't need to be looked up every frame but instead only when the model moves. --- n64e1m1.ps1bsp | Bin 1092797 -> 1093029 bytes n64e2m2.ps1bsp | Bin 1214609 -> 1214813 bytes n64start.ps1bsp | Bin 631339 -> 631415 bytes ps1bsp.h | 1 + world.c | 29 +++++++++++++++++------------ 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/n64e1m1.ps1bsp b/n64e1m1.ps1bsp index 11e032364abac4997c254454f8723237499810ab..63c6a616aaf09d9d721cb0af20ceb49227127588 100755 GIT binary patch delta 19747 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 delta 21682 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 q61r+R657V%PQLBt+g`q2|IoC*g3 diff --git a/n64e2m2.ps1bsp b/n64e2m2.ps1bsp index 7a6f64cb9a98bafece4192672a337f5282b281ee..91a7580094b30579a430d14d52e22be8af17e6c7 100755 GIT binary patch delta 16336 zcmXY&cc2v2*~afKb=G??a7CI(5k+Q2P&$f&1z}bJQB+VA6h&t(AT|U6717L!y}Uvc zdzsbGZq}&L*qx1CVplZQSxus`#uC5ZGc$j%Kc4sWGv}N+=e%<-y|ncHWu;5z_UP58 zt?8&CO-*O+(bn|Q-c3ypZQj;2zvJ0U)-1`bS(0C~q}`e&?bj^nux3feHA_0JS<-pU z5@*el!kQ(UJ-DR#s+V$OYtGBf{d2iK=Dq?an)gccyj)KUUuj;I8)5FN&DRkYz1lnx zqw^YSOAB8kY;*ftgkeJxJmyq_pn z=w;sf}}zfRaLT#KZ(uQ~rArV1&3n-wNf zcsXN5q*B$4b#XM6%~<#jP1hGQmLT=;QU%1JF&MljAp7{>Svp|?) zq0@3558Nw|3kzO>BFL;j*nD#~1LMuzj3`qqlA2}lW<(ioUNedTpCV``%0P2lF!nP~ zIMDnQK??~+S=>UDeipQ%4zswGC?}fJrDYY>4Z2XXoz3rxac2v<5_6Hc-I9j+-7p?% zfiT3vZY1AmP8;eMbK6LMlZ8^(TGU3mVdig+T4llJEt~QuI#%vZmwwX8D&1Rl%iU&C zcXF+mvjvfSbGIP7)fQ|)N?u?+2xFx5AdF>OiW$+P<#7@OJzE~nugF=c7f4lP5ORB1*bnYuk-+;Wh0~ve6V30BkrqfDWwF#z<_u_= zr=_|)fQ|?)9Dwx(i$H!mR+j-(85RbnRWA-C)^PI&lIVu^R+kwzMBX!nty3077N=6i zve=)NXRL}1CP&7GIG*%_;J(Zbu`k`4u`JGI#SsTG-v_lk#&YIwLuGqeAoQ>hf**-D4LX&v{34}HaQiR*nh2^{zhEfAq6bI8~ z;#YYq52dHuEF4NA_Af)pmxX%=Kn+p^J21{M4omWNg-+%TBg!xfP#SC1VPpsEkXL1_ zNQ2E8PNW{@4QB}THFrmvM@x20G6;7hY=p%EFS4DI%)On6LTz?RjIoSt%|>ACZ~h2W ze+xzsMz;%;FcRY=b4Q}~H(wz6NXnybqX_dYOc4oZSuB*z8BLy}%pc7R+SmLs7>8Ie zhKYETxnofk^MudL7Z}Z{F-(n-aHhq=%jS%uSXMD%Ukg%1

  • ;%^OdYbIccxvS2*Z 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 delta 16332 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 diff --git a/ps1bsp.h b/ps1bsp.h index c8f5e0a..e9adef3 100755 --- a/ps1bsp.h +++ b/ps1bsp.h @@ -168,6 +168,7 @@ typedef struct ps1bsp_model_s // Run-time data const struct ps1bsp_model_s* nextModel; + const struct ps1bsp_leaf_s* currentLeaf; } ps1bsp_model_t; // Pre-parsed and encoded entity data (this runs the risk of becoming too bloated) diff --git a/world.c b/world.c index c7acaba..3a83b28 100644 --- a/world.c +++ b/world.c @@ -264,21 +264,26 @@ static void world_sortModels(const world_t *world) for (u_short modelIdx = 1; modelIdx < world->numModels; ++modelIdx) { ps1bsp_model_t* model = (ps1bsp_model_t*)&world->models[modelIdx]; - - // TODO: refence leaf in model, update only when model moves - - VECTOR pos; - pos.vx = model->origin.vx + model->boundingSphere.vx; - pos.vy = model->origin.vy + model->boundingSphere.vy; - pos.vz = model->origin.vz + model->boundingSphere.vz; + ps1bsp_leaf_t* leaf = (ps1bsp_leaf_t*)model->currentLeaf; - short leafIdx = world_leafAtPoint(world, &pos); - if (leafIdx >= 0) + // Update the model's current leaf. This only needs to be done when the model moves. + if (leaf == NULL) { - ps1bsp_leaf_t *leaf = (ps1bsp_leaf_t*)&world->leaves[leafIdx]; - model->nextModel = leaf->models; - leaf->models = model; + VECTOR pos; + pos.vx = model->origin.vx + model->boundingSphere.vx; + pos.vy = model->origin.vy + model->boundingSphere.vy; + pos.vz = model->origin.vz + model->boundingSphere.vz; + + short leafIdx = world_leafAtPoint(world, &pos); + if (leafIdx <= 0) + continue; + + leaf = (ps1bsp_leaf_t*)&world->leaves[leafIdx]; + model->currentLeaf = leaf; } + + model->nextModel = leaf->models; + leaf->models = model; } }