From fe086a089da50b4c63ba49003d607d05df850f26 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 2 Mar 2025 14:17:10 +1100 Subject: [PATCH] NDS: Implement water translucency partially --- src/Graphics_NDS.c | 13 ++++++------- src/_GraphicsBase.h | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Graphics_NDS.c b/src/Graphics_NDS.c index 7d6535de6..01b28d9b5 100644 --- a/src/Graphics_NDS.c +++ b/src/Graphics_NDS.c @@ -101,7 +101,7 @@ void ResetGPU(void) { GFX_ALPHA_TEST = 7; // Alpha threshold ranges from 0 to 15 - GFX_CONTROL = GL_ANTIALIAS | GL_TEXTURE_2D | GL_FOG; + GFX_CONTROL = GL_ANTIALIAS | GL_TEXTURE_2D | GL_FOG | GL_BLEND; GFX_CLEAR_DEPTH = GL_MAX_DEPTH; GFX_TEX_FORMAT = 0; @@ -703,14 +703,16 @@ void Gfx_DeleteDynamicVb(GfxResourceID* vb) { Gfx_DeleteVb(vb); } *#########################################################################################################################*/ static cc_bool skipRendering; static cc_bool backfaceCull; +static cc_bool alphaBlend; static cc_bool fogEnabled; static FogFunc fogMode; static float fogDensityEnd; static void SetPolygonMode() { + int blend = !gfx_rendering2D && alphaBlend; u32 fmt = - POLY_ALPHA(31) | + POLY_ALPHA(blend ? 14 : 31) | (backfaceCull ? POLY_CULL_BACK : POLY_CULL_NONE) | (fogEnabled ? POLY_FOG : 0) | POLY_RENDER_FAR_POLYS | @@ -725,11 +727,8 @@ void Gfx_SetFaceCulling(cc_bool enabled) { } static void SetAlphaBlend(cc_bool enabled) { - /*if (enabled) { - glEnable(GL_BLEND); - } else { - glDisable(GL_BLEND); - }*/ + alphaBlend = enabled; + SetPolygonMode(); } void Gfx_SetAlphaArgBlend(cc_bool enabled) { } diff --git a/src/_GraphicsBase.h b/src/_GraphicsBase.h index e5d8e9e4e..75f26a42b 100644 --- a/src/_GraphicsBase.h +++ b/src/_GraphicsBase.h @@ -243,6 +243,7 @@ void Gfx_Make2DQuad(const struct Texture* tex, PackedCol color, struct VertexTex static cc_bool gfx_hadFog; void Gfx_Begin2D(int width, int height) { + gfx_rendering2D = true; struct Matrix ortho; /* intentionally biased more towards positive Z to reduce 2D clipping issues on the DS */ Gfx_CalcOrthoMatrix(&ortho, (float)width, (float)height, -100.0f, 1000.0f); @@ -255,16 +256,15 @@ void Gfx_Begin2D(int width, int height) { gfx_hadFog = Gfx_GetFog(); if (gfx_hadFog) Gfx_SetFog(false); - gfx_rendering2D = true; } void Gfx_End2D(void) { + gfx_rendering2D = false; Gfx_SetDepthTest(true); Gfx_SetDepthWrite(true); Gfx_SetAlphaBlending(false); if (gfx_hadFog) Gfx_SetFog(true); - gfx_rendering2D = false; } #endif