* support -extlmhacksize N N input for non square lightmaps, for example -extlmhacksize 2048 1024

also enables this for -lightmapsize, legitimacy is questionable here
This commit is contained in:
Garux 2020-06-14 15:49:16 +03:00
parent 5977a04550
commit ae9fe08159
3 changed files with 23 additions and 16 deletions

View File

@ -2072,8 +2072,8 @@ int LightMain( int argc, char **argv ){
Sys_Printf( " lightning model: quake3\n" ); Sys_Printf( " lightning model: quake3\n" );
} }
lmCustomSize = game->lightmapSize; lmCustomSizeW = lmCustomSizeH = game->lightmapSize;
Sys_Printf( " lightmap size: %d x %d pixels\n", lmCustomSize, lmCustomSize ); Sys_Printf( " lightmap size: %d x %d pixels\n", lmCustomSizeW, lmCustomSizeH );
lightmapGamma = game->lightmapGamma; lightmapGamma = game->lightmapGamma;
Sys_Printf( " lightning gamma: %f\n", lightmapGamma ); Sys_Printf( " lightning gamma: %f\n", lightmapGamma );
@ -2496,21 +2496,27 @@ int LightMain( int argc, char **argv ){
else if ( strEqual( argv[ i ], "-lightmapsize" ) else if ( strEqual( argv[ i ], "-lightmapsize" )
|| strEqual( argv[ i ], "-extlmhacksize" ) ) { || strEqual( argv[ i ], "-extlmhacksize" ) ) {
lmCustomSize = atoi( argv[ i + 1 ] ); const bool extlmhack = strEqual( argv[ i ], "-extlmhacksize" );
/* must be a power of 2 and greater than 2 */ lmCustomSizeW = lmCustomSizeH = atoi( argv[ i + 1 ] );
if ( ( ( lmCustomSize - 1 ) & lmCustomSize ) || lmCustomSize < 2 ) { if( i + 2 < argc - 1 && argv[ i + 2 ][0] != '-' && 0 != atoi( argv[ i + 2 ] ) ){
Sys_Warning( "Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" ); lmCustomSizeH = atoi( argv[ i + 2 ] );
lmCustomSize = game->lightmapSize; i++;
} }
i++; i++;
Sys_Printf( "Default lightmap size set to %d x %d pixels\n", lmCustomSize, lmCustomSize ); /* must be a power of 2 and greater than 2 */
if ( ( ( lmCustomSizeW - 1 ) & lmCustomSizeW ) || lmCustomSizeW < 2 ||
( ( lmCustomSizeH - 1 ) & lmCustomSizeH ) || lmCustomSizeH < 2 ) {
Sys_Warning( "Lightmap size must be a power of 2, greater or equal to 2 pixels.\n" );
lmCustomSizeW = lmCustomSizeH = game->lightmapSize;
}
Sys_Printf( "Default lightmap size set to %d x %d pixels\n", lmCustomSizeW, lmCustomSizeH );
/* enable external lightmaps */ /* enable external lightmaps */
if ( lmCustomSize != game->lightmapSize ) { if ( lmCustomSizeW != game->lightmapSize || lmCustomSizeH != game->lightmapSize ) {
/* -lightmapsize might just require -external for native external lms, but it has already been used in existing batches alone, /* -lightmapsize might just require -external for native external lms, but it has already been used in existing batches alone,
so brand new switch here for external lms, referenced by shaders hack/behavior */ so brand new switch here for external lms, referenced by shaders hack/behavior */
externalLightmaps = !strEqual( argv[ i - 1 ], "-extlmhacksize" ); externalLightmaps = !extlmhack;
Sys_Printf( "Storing all lightmaps externally\n" ); Sys_Printf( "Storing all lightmaps externally\n" );
} }
} }
@ -2921,7 +2927,7 @@ int LightMain( int argc, char **argv ){
/* fix up lightmap search power */ /* fix up lightmap search power */
if ( lightmapMergeSize ) { if ( lightmapMergeSize ) {
lightmapSearchBlockSize = ( lightmapMergeSize / lmCustomSize ) * ( lightmapMergeSize / lmCustomSize ); lightmapSearchBlockSize = ( lightmapMergeSize / lmCustomSizeW ) * ( lightmapMergeSize / lmCustomSizeW ); //? should use min or max( lmCustomSizeW, lmCustomSizeH )? :thinking:
if ( lightmapSearchBlockSize < 1 ) { if ( lightmapSearchBlockSize < 1 ) {
lightmapSearchBlockSize = 1; lightmapSearchBlockSize = 1;
} }

View File

@ -2300,7 +2300,8 @@ Q_EXTERN bool noCollapse Q_ASSIGN( false );
Q_EXTERN int lightmapSearchBlockSize Q_ASSIGN( 0 ); Q_EXTERN int lightmapSearchBlockSize Q_ASSIGN( 0 );
Q_EXTERN bool exportLightmaps Q_ASSIGN( false ); Q_EXTERN bool exportLightmaps Q_ASSIGN( false );
Q_EXTERN bool externalLightmaps Q_ASSIGN( false ); Q_EXTERN bool externalLightmaps Q_ASSIGN( false );
Q_EXTERN int lmCustomSize Q_ASSIGN( LIGHTMAP_WIDTH ); Q_EXTERN int lmCustomSizeW Q_ASSIGN( LIGHTMAP_WIDTH );
Q_EXTERN int lmCustomSizeH Q_ASSIGN( LIGHTMAP_WIDTH );
Q_EXTERN char * lmCustomDir Q_ASSIGN( NULL ); Q_EXTERN char * lmCustomDir Q_ASSIGN( NULL );
Q_EXTERN int lmLimitSize Q_ASSIGN( 0 ); Q_EXTERN int lmLimitSize Q_ASSIGN( 0 );

View File

@ -653,8 +653,8 @@ static shaderInfo_t *AllocShaderInfo( void ){
TCModIdentity( si->mod ); TCModIdentity( si->mod );
/* ydnar: lightmaps can now be > 128x128 in certain games or an externally generated tga */ /* ydnar: lightmaps can now be > 128x128 in certain games or an externally generated tga */
si->lmCustomWidth = lmCustomSize; si->lmCustomWidth = lmCustomSizeW;
si->lmCustomHeight = lmCustomSize; si->lmCustomHeight = lmCustomSizeH;
/* return to sender */ /* return to sender */
return si; return si;
@ -1571,8 +1571,8 @@ static void ParseShaderFile( const char *filename ){
( ( si->lmCustomHeight - 1 ) & si->lmCustomHeight ) ) { ( ( si->lmCustomHeight - 1 ) & si->lmCustomHeight ) ) {
Sys_Warning( "Non power-of-two lightmap size specified (%d, %d)\n", Sys_Warning( "Non power-of-two lightmap size specified (%d, %d)\n",
si->lmCustomWidth, si->lmCustomHeight ); si->lmCustomWidth, si->lmCustomHeight );
si->lmCustomWidth = lmCustomSize; si->lmCustomWidth = lmCustomSizeW;
si->lmCustomHeight = lmCustomSize; si->lmCustomHeight = lmCustomSizeH;
} }
} }