1
0
Fork 0

Renderers: make sure that wave tables do not contains zero values to avoid potential division-by-zero in RB_CalcStretchTexCoords()

Code cleanup
This commit is contained in:
Eugene 2022-01-02 19:31:00 +02:00
parent 3478d7f4be
commit 5aeab4a25f
4 changed files with 59 additions and 45 deletions

View File

@ -299,7 +299,7 @@ typedef enum {
typedef union {
struct {
unsigned r_m : 3; // direct or indirect register operand with opt.sidplacement, REX.b can extend this by 1 bit
unsigned r_m : 3; // direct or indirect register operand with opt.displacement, REX.b can extend this by 1 bit
unsigned r_x : 3; // register or opcode extension, REX.r can extend this by 1 bit
unsigned mod : 2; // see mod_t
} s;

View File

@ -1661,6 +1661,7 @@ static void R_Register( void )
" 4 - linear filtering, preserve aspect ratio (black bars on sides)\n" );
}
#define EPSILON 1e-6
/*
===============
@ -1680,8 +1681,8 @@ void R_Init( void ) {
Com_Memset( &tess, 0, sizeof( tess ) );
Com_Memset( &glState, 0, sizeof( glState ) );
if (sizeof(glconfig_t) != 11332)
ri.Error( ERR_FATAL, "Mod ABI incompatible: sizeof(glconfig_t) == %u != 11332", (unsigned int) sizeof(glconfig_t));
if ( sizeof( glconfig_t ) != 11332 )
ri.Error( ERR_FATAL, "Mod ABI incompatible: sizeof(glconfig_t) == %u != 11332", (unsigned int) sizeof( glconfig_t ) );
if ( (intptr_t)tess.xyz & 15 ) {
ri.Printf( PRINT_WARNING, "tess.xyz not 16 byte aligned\n" );
@ -1691,27 +1692,33 @@ void R_Init( void ) {
//
// init function tables
//
for ( i = 0; i < FUNCTABLE_SIZE; i++ )
{
tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ( ( float ) ( FUNCTABLE_SIZE - 1 ) ) ) );
tr.squareTable[i] = ( i < FUNCTABLE_SIZE/2 ) ? 1.0f : -1.0f;
tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE;
tr.inverseSawToothTable[i] = 1.0f - tr.sawToothTable[i];
if ( i < FUNCTABLE_SIZE / 2 )
{
if ( i < FUNCTABLE_SIZE / 4 )
{
tr.triangleTable[i] = ( float ) i / ( FUNCTABLE_SIZE / 4 );
}
else
{
tr.triangleTable[i] = 1.0f - tr.triangleTable[i-FUNCTABLE_SIZE / 4];
}
for ( i = 0; i < FUNCTABLE_SIZE; i++ ) {
if ( i == 0 ) {
tr.sinTable[i] = EPSILON;
} else if ( i == (FUNCTABLE_SIZE - 1) ) {
tr.sinTable[i] = -EPSILON;
} else {
tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ((float)(FUNCTABLE_SIZE - 1)) ) );
}
else
{
tr.triangleTable[i] = -tr.triangleTable[i-FUNCTABLE_SIZE/2];
tr.squareTable[i] = (i < FUNCTABLE_SIZE / 2) ? 1.0f : -1.0f;
if ( i == 0 ) {
tr.sawToothTable[i] = EPSILON;
} else {
tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE;
}
tr.inverseSawToothTable[i] = 1.0f - tr.sawToothTable[i];
if ( i < FUNCTABLE_SIZE / 2 ) {
if ( i < FUNCTABLE_SIZE / 4 ) {
if ( i == 0 ) {
tr.triangleTable[i] = EPSILON;
} else {
tr.triangleTable[i] = (float)i / (FUNCTABLE_SIZE / 4);
}
} else {
tr.triangleTable[i] = 1.0f - tr.triangleTable[i - FUNCTABLE_SIZE / 4];
}
} else {
tr.triangleTable[i] = -tr.triangleTable[i - FUNCTABLE_SIZE / 2];
}
}

View File

@ -1704,6 +1704,7 @@ static void R_Register( void )
#endif // USE_VULKAN
}
#define EPSILON 1e-6
/*
===============
@ -1736,27 +1737,33 @@ void R_Init( void ) {
//
// init function tables
//
for ( i = 0; i < FUNCTABLE_SIZE; i++ )
{
tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ( ( float ) ( FUNCTABLE_SIZE - 1 ) ) ) );
tr.squareTable[i] = ( i < FUNCTABLE_SIZE/2 ) ? 1.0f : -1.0f;
tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE;
tr.inverseSawToothTable[i] = 1.0f - tr.sawToothTable[i];
if ( i < FUNCTABLE_SIZE / 2 )
{
if ( i < FUNCTABLE_SIZE / 4 )
{
tr.triangleTable[i] = ( float ) i / ( FUNCTABLE_SIZE / 4 );
}
else
{
tr.triangleTable[i] = 1.0f - tr.triangleTable[i-FUNCTABLE_SIZE / 4];
}
for ( i = 0; i < FUNCTABLE_SIZE; i++ ) {
if ( i == 0 ) {
tr.sinTable[i] = EPSILON;
} else if ( i == (FUNCTABLE_SIZE - 1) ) {
tr.sinTable[i] = -EPSILON;
} else {
tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ((float)(FUNCTABLE_SIZE - 1)) ) );
}
else
{
tr.triangleTable[i] = -tr.triangleTable[i-FUNCTABLE_SIZE/2];
tr.squareTable[i] = (i < FUNCTABLE_SIZE / 2) ? 1.0f : -1.0f;
if ( i == 0 ) {
tr.sawToothTable[i] = EPSILON;
} else {
tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE;
}
tr.inverseSawToothTable[i] = 1.0f - tr.sawToothTable[i];
if ( i < FUNCTABLE_SIZE / 2 ) {
if ( i < FUNCTABLE_SIZE / 4 ) {
if ( i == 0 ) {
tr.triangleTable[i] = EPSILON;
} else {
tr.triangleTable[i] = (float)i / (FUNCTABLE_SIZE / 4);
}
} else {
tr.triangleTable[i] = 1.0f - tr.triangleTable[i - FUNCTABLE_SIZE / 4];
}
} else {
tr.triangleTable[i] = -tr.triangleTable[i - FUNCTABLE_SIZE / 2];
}
}

View File

@ -161,8 +161,8 @@ void SV_AddServerCommand( client_t *client, const char *cmd ) {
Com_Printf( "===== pending server commands =====\n" );
n = client->reliableSequence - client->reliableAcknowledge;
for ( i = 0; i < n; i++ ) {
const int index = client->reliableAcknowledge + 1 + i;
Com_Printf( "cmd %5d: %s\n", i, client->reliableCommands[ index & ( MAX_RELIABLE_COMMANDS - 1 ) ] );
const int idx = client->reliableAcknowledge + 1 + i;
Com_Printf( "cmd %5d: %s\n", i, client->reliableCommands[ idx & ( MAX_RELIABLE_COMMANDS - 1 ) ] );
}
Com_Printf( "cmd %5d: %s\n", i, cmd );
SV_DropClient( client, "Server command overflow" );