From ac8796cbc9e4aab47fe1bcde2baa78b04c51683f Mon Sep 17 00:00:00 2001 From: Roman971 <32455037+Roman971@users.noreply.github.com> Date: Sat, 15 Aug 2020 20:04:27 +0200 Subject: [PATCH] Fix _DW with permuter and GeometryMode macros (#323) --- include/ultra64/gbi.h | 17 ++++++++--------- src/code/z_eff_shield_particle.c | 5 +---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/include/ultra64/gbi.h b/include/ultra64/gbi.h index 4b46e2dc0f..9e821d6d9a 100644 --- a/include/ultra64/gbi.h +++ b/include/ultra64/gbi.h @@ -7,6 +7,8 @@ /* Types */ +/* Private macro to wrap other macros in do {...} while (0) */ +#define _DW(macro) do {macro} while (0) #define F3DEX_GBI_2 @@ -2743,11 +2745,11 @@ _DW({ \ * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly. */ #define gSPGeometryMode(pkt, c, s) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\ _g->words.w1 = (u32)(s); \ -} +}) #define gsSPGeometryMode(c, s) \ { \ @@ -2762,12 +2764,12 @@ _DW({ \ #else /* F3DEX_GBI_2 */ #define gSPSetGeometryMode(pkt, word) \ -_DW({ \ +{ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ _g->words.w1 = (unsigned int)(word); \ -}) +} #define gsSPSetGeometryMode(word) \ { \ @@ -2775,12 +2777,12 @@ _DW({ \ } #define gSPClearGeometryMode(pkt, word) \ -_DW({ \ +{ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ _g->words.w1 = (unsigned int)(word); \ -}) +} #define gsSPClearGeometryMode(word) \ { \ @@ -4495,7 +4497,4 @@ _DW({ \ #endif -/* Private macro to wrap other macros in do {...} while (0) */ -#define _DW(macro) do {macro} while (0) - #endif diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c index 855161765f..efdc19eec9 100644 --- a/src/code/z_eff_shield_particle.c +++ b/src/code/z_eff_shield_particle.c @@ -169,8 +169,7 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) { gDPLoadTextureBlock(gfxCtx->polyXlu.p++, D_04038FB0, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); - if (1) {} // Both necessary to match - if (1) {} + if (1) {} // Necessary to match gDPSetCombineLERP(gfxCtx->polyXlu.p++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); @@ -179,8 +178,6 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) { G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR); gSPSetGeometryMode(gfxCtx->polyXlu.p++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH); - if (1) {} // Also necessary to match - EffectShieldParticle_GetColors(this, &primColor, &envColor); gDPSetPrimColor(gfxCtx->polyXlu.p++, 0, 0, primColor.r, primColor.g, primColor.b, primColor.a);