From da68591f0345f0caeb2803671f8bc6694d0eea7c Mon Sep 17 00:00:00 2001 From: Crow-bar Date: Thu, 16 Jun 2022 14:14:55 +0300 Subject: [PATCH] ref_gu: .bss size reduction --- ref_gu/gu_alias.c | 10 +++++++++- ref_gu/gu_studio.c | 39 ++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/ref_gu/gu_alias.c b/ref_gu/gu_alias.c index 0fa0693e..8ee371fa 100644 --- a/ref_gu/gu_alias.c +++ b/ref_gu/gu_alias.c @@ -22,6 +22,14 @@ GNU General Public License for more details. #include "pm_local.h" #include "pmtrace.h" +// Quake 1 +#undef MAXALIASVERTS +#undef MAXALIASFRAMES +#undef MAXALIASTRIS +#define MAXALIASVERTS 1024 +#define MAXALIASFRAMES 256 +#define MAXALIASTRIS 2048 + extern cvar_t r_shadows; typedef struct @@ -56,7 +64,7 @@ static aliashdr_t *m_pAliasHeader; static trivertex_t *g_poseverts[MAXALIASFRAMES]; static dtriangle_t g_triangles[MAXALIASTRIS]; static stvert_t g_stverts[MAXALIASVERTS]; -static int g_used[8192]; +static byte g_used[8192]; // a pose is a single set of vertexes. a frame may be // an animating sequence of poses diff --git a/ref_gu/gu_studio.c b/ref_gu/gu_studio.c index 3f51e662..1b8f6eaf 100644 --- a/ref_gu/gu_studio.c +++ b/ref_gu/gu_studio.c @@ -25,6 +25,11 @@ GNU General Public License for more details. //#include "client.h" #include "pmtrace.h" +//#define STUDIO_DRAWELEMENTS + +#undef MAXSTUDIOVERTS +#define MAXSTUDIOVERTS 1024 + #define EVENT_CLIENT 5000 // less than this value it's a server-side studio events #define MAX_LOCALLIGHTS 4 @@ -59,11 +64,6 @@ typedef struct sortedmesh_s int flags; // face flags } sortedmesh_t; -#if XASH_LOW_MEMORY - #undef MAXSTUDIOVERTS - #define MAXSTUDIOVERTS 1024 -#endif - typedef struct { double time; @@ -122,11 +122,14 @@ typedef struct // playermodels player_model_t player_models[MAX_CLIENTS]; +#ifdef STUDIO_DRAWELEMENTS // drawelements renderer gu_vert_ftcv_t arrayverts[MAXSTUDIOVERTS]; unsigned short arrayelems[MAXSTUDIOVERTS * 6]; uint numverts; uint numelems; +#endif // STUDIO_DRAWELEMENTS + } studio_draw_state_t; // studio-related cvars @@ -1914,7 +1917,7 @@ void R_StudioRenderShadow( int iSprite, float *p1, float *p2, float *p3, float * { TriRenderMode( kRenderTransAlpha ); TriColor4f( 0.0f, 0.0f, 0.0f, 1.0f ); -#if 1 + gu_vert_t* const out = ( gu_vert_t* )sceGuGetMemory( sizeof( gu_vert_t ) * 4 ); out[0].uv[0] = 0.0f; out[0].uv[1] = 0.0f; @@ -1929,18 +1932,7 @@ void R_StudioRenderShadow( int iSprite, float *p1, float *p2, float *p3, float * out[3].uv[1] = 0.0f; VectorCopy( p4, out[3].xyz ); sceGuDrawArray( GU_TRIANGLE_FAN, GU_TEXTURE_32BITF | GU_VERTEX_32BITF, 4, 0, out ); -#else - pglBegin( GL_QUADS ); - pglTexCoord2f( 0.0f, 0.0f ); - pglVertex3fv( p1 ); - pglTexCoord2f( 0.0f, 1.0f ); - pglVertex3fv( p2 ); - pglTexCoord2f( 1.0f, 1.0f ); - pglVertex3fv( p3 ); - pglTexCoord2f( 1.0f, 0.0f ); - pglVertex3fv( p4 ); - pglEnd(); -#endif + TriRenderMode( kRenderNormal ); } } @@ -2108,7 +2100,7 @@ _inline void R_StudioDrawChromeMesh( short *ptricmds, vec3_t *pstudionorms, floa } } - +#ifdef STUDIO_DRAWELEMENTS _inline int R_StudioBuildIndices( qboolean tri_strip, int vertexState ) { // build in indices @@ -2390,6 +2382,7 @@ _inline void R_StudioDrawArrays( uint startverts, uint startelems ) GU_VERTEX_32BITF | GU_INDEX_16BIT, g_studio.numelems - startelems, &g_studio.arrayelems[startelems], g_studio.arrayverts ); } +#endif // STUDIO_DRAWELEMENTS /* =============== @@ -2413,8 +2406,9 @@ static void R_StudioDrawPoints( void ) if( !m_pStudioHeader ) return; - +#ifdef STUDIO_DRAWELEMENTS g_studio.numverts = g_studio.numelems = 0; +#endif // STUDIO_DRAWELEMENTS // safety bounding the skinnum m_skinnum = bound( 0, RI.currententity->curstate.skin, ( m_pStudioHeader->numskinfamilies - 1 )); @@ -2513,8 +2507,10 @@ static void R_StudioDrawPoints( void ) for( j = 0; j < m_pSubModel->nummesh; j++ ) { float oldblend = tr.blend; +#ifdef STUDIO_DRAWELEMENTS uint startArrayVerts = g_studio.numverts; uint startArrayElems = g_studio.numelems; +#endif // STUDIO_DRAWELEMENTS short *ptricmds; float s, t; @@ -2549,7 +2545,7 @@ static void R_StudioDrawPoints( void ) } R_StudioSetupSkin( m_pStudioHeader, pskinref[pmesh->skinref] ); - +#ifdef STUDIO_DRAWELEMENTS if( CVAR_TO_BOOL(r_studio_drawelements) ) { if( FBitSet( g_nFaceFlags, STUDIO_NF_CHROME )) @@ -2561,6 +2557,7 @@ static void R_StudioDrawPoints( void ) R_StudioDrawArrays( startArrayVerts, startArrayElems ); } else +#endif // STUDIO_DRAWELEMENTS { if( FBitSet( g_nFaceFlags, STUDIO_NF_CHROME )) R_StudioDrawChromeMesh( ptricmds, pstudionorms, s, t, shellscale );