This is an automated email from the git hooks/post-receive script. tobi pushed a commit to branch master in repository dhewm3.
commit 45cf427f02d869f9f64f3a5f0e85f2f0a934bece Author: Tobias Frost <[email protected]> Date: Thu Jul 7 17:52:04 2016 +0200 Imported Upstream version 1.4.1+dfsg --- README.md | 13 ++- neo/cm/CollisionModel_load.cpp | 4 +- neo/d3xp/Pvs.cpp | 8 +- neo/d3xp/SecurityCamera.cpp | 2 +- neo/d3xp/Weapon.cpp | 9 +- neo/d3xp/ai/AI.cpp | 2 +- neo/d3xp/gamesys/SysCmds.cpp | 2 +- neo/framework/FileSystem.cpp | 6 +- neo/framework/Licensee.h | 2 +- neo/game/Pvs.cpp | 8 +- neo/game/SecurityCamera.cpp | 2 +- neo/game/Weapon.cpp | 8 +- neo/game/ai/AI.cpp | 2 +- neo/game/gamesys/SysCmds.cpp | 2 +- neo/idlib/Lib.cpp | 10 ++- neo/idlib/math/Matrix.h | 3 + neo/idlib/math/Polynomial.h | 8 ++ neo/idlib/math/Simd.cpp | 160 ++++++++++++++++++------------------ neo/renderer/Model_ma.cpp | 13 ++- neo/renderer/RenderSystem_init.cpp | 65 +++++++++++++-- neo/sys/events.cpp | 40 ++++++++- neo/sys/posix/posix_net.cpp | 1 + neo/tools/compilers/roqvq/codec.cpp | 8 +- neo/ui/Winvar.cpp | 2 +- neo/ui/Winvar.h | 2 +- 25 files changed, 255 insertions(+), 127 deletions(-) diff --git a/README.md b/README.md index 4615146..2b5537c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ABOUT -_dhewm 3_ is a _Doom 3_ GPL source modification. +_dhewm 3_ is a _Doom 3_ GPL source port, know to work on at least Windows, Linux, Mac OS X and FreeBSD. The goal of _dhewm 3_ is bring _DOOM 3_ with the help of SDL to all suitable platforms. @@ -10,6 +10,8 @@ altering the original gameplay. **The project is hosted at:** https://github.com/dhewm +**Download latest Release:** https://github.com/dhewm/dhewm3/releases/latest + **Consult the FAQ at:** https://github.com/dhewm/dhewm3/wiki/FAQ **Report bugs here:** https://github.com/dhewm/dhewm3/issues @@ -22,7 +24,7 @@ Compared to the original _DOOM 3_, the changes of _dhewm 3_ worth mentioning are - 64bit port - SDL for low level OS support, OpenGL and input handling - OpenAL for audio output, all OS specific audio backends are gone -- OpenAL EFX for EAX reverb effects (read: EAX on all platforms) +- OpenAL EFX for EAX reverb effects (read: EAX-like sound effects on all platforms/hardware) - Better support for widescreen (and arbitrary display resolutions) - A portable build system based on CMake - (Cross-)compilation with mingw-w64 @@ -82,7 +84,7 @@ the cmake command there, pointing it at the neo/ folder from this repository: OSX users need to point cmake at OpenAL Soft (better solutions welcome): -`cmake -DOPENAL_LIBRARY=/usr/local/lib/libopenal.dylib -DOPENAL_INCLUDE_DIR=/usr/local/include /path/to/repository/neo` +`cmake -DOPENAL_LIBRARY=/usr/local/opt/openal-soft/lib/libopenal.dylib -DOPENAL_INCLUDE_DIR=/usr/local/opt/openal-soft/include /path/to/repository/neo` ## Using the provided Windows binaries @@ -131,6 +133,11 @@ The Doom 3 GPL source code release does not include functionality enabling rende of stencil shadows via the "depth fail" method, a functionality commonly known as "Carmack's Reverse". +***Note*** that this **does *not* change the visual appereance** of the game. +The shadows look the same, they're just created in a slightly different way. +In theory there might be a small performance impact, but on hardware less than +ten years old it shouldn't make a difference. + ## MayaImport The code for our Maya export plugin is included, if you are a Maya licensee diff --git a/neo/cm/CollisionModel_load.cpp b/neo/cm/CollisionModel_load.cpp index ef786a0..acd2a3d 100644 --- a/neo/cm/CollisionModel_load.cpp +++ b/neo/cm/CollisionModel_load.cpp @@ -1887,7 +1887,7 @@ static int CM_FindSplitter( const cm_node_t *node, const idBounds &bounds, int * continue; } // find the most centered splitter - t = abs((bounds[1][type] - dist) - (dist - bounds[0][type])); + t = idMath::Fabs((bounds[1][type] - dist) - (dist - bounds[0][type])); if ( t < bestt ) { bestt = t; *planeType = type; @@ -1907,7 +1907,7 @@ static int CM_FindSplitter( const cm_node_t *node, const idBounds &bounds, int * continue; } // find the most centered splitter - t = abs((bounds[1][type] - dist) - (dist - bounds[0][type])); + t = idMath::Fabs((bounds[1][type] - dist) - (dist - bounds[0][type])); if ( t < bestt ) { bestt = t; *planeType = type; diff --git a/neo/d3xp/Pvs.cpp b/neo/d3xp/Pvs.cpp index 74781e7..46e16f1 100644 --- a/neo/d3xp/Pvs.cpp +++ b/neo/d3xp/Pvs.cpp @@ -861,20 +861,20 @@ idPVS::Shutdown */ void idPVS::Shutdown( void ) { if ( connectedAreas ) { - delete connectedAreas; + delete[] connectedAreas; connectedAreas = NULL; } if ( areaQueue ) { - delete areaQueue; + delete[] areaQueue; areaQueue = NULL; } if ( areaPVS ) { - delete areaPVS; + delete[] areaPVS; areaPVS = NULL; } if ( currentPVS ) { for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) { - delete currentPVS[i].pvs; + delete[] currentPVS[i].pvs; currentPVS[i].pvs = NULL; } } diff --git a/neo/d3xp/SecurityCamera.cpp b/neo/d3xp/SecurityCamera.cpp index c16405a..36a0cbe 100644 --- a/neo/d3xp/SecurityCamera.cpp +++ b/neo/d3xp/SecurityCamera.cpp @@ -140,7 +140,7 @@ void idSecurityCamera::Spawn( void ) { } negativeSweep = ( sweepAngle < 0 ) ? true : false; - sweepAngle = abs( sweepAngle ); + sweepAngle = idMath::Fabs( sweepAngle ); scanFovCos = cos( scanFov * idMath::PI / 360.0f ); diff --git a/neo/d3xp/Weapon.cpp b/neo/d3xp/Weapon.cpp index 2101381..30f8882 100644 --- a/neo/d3xp/Weapon.cpp +++ b/neo/d3xp/Weapon.cpp @@ -3446,7 +3446,14 @@ void idWeapon::Event_LaunchProjectiles( int num_projectiles, float spread, float // make sure the projectile starts inside the bounding box of the owner if ( i == 0 ) { muzzle_pos = muzzleOrigin + playerViewAxis[ 0 ] * 2.0f; - if ( ( ownerBounds - projBounds).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) { + + // DG: sometimes the assertion in idBounds::operator-(const idBounds&) triggers + // (would get bounding box with negative volume) + // => check that before doing ownerBounds - projBounds (equivalent to the check in the assertion) + idVec3 obDiff = ownerBounds[1] - ownerBounds[0]; + idVec3 pbDiff = projBounds[1] - projBounds[0]; + bool boundsSubLegal = obDiff.x > pbDiff.x && obDiff.y > pbDiff.y && obDiff.z > pbDiff.z; + if ( boundsSubLegal && ( ownerBounds - projBounds ).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) { start = muzzle_pos + distance * playerViewAxis[0]; } else { start = ownerBounds.GetCenter(); diff --git a/neo/d3xp/ai/AI.cpp b/neo/d3xp/ai/AI.cpp index 1353689..887594b 100644 --- a/neo/d3xp/ai/AI.cpp +++ b/neo/d3xp/ai/AI.cpp @@ -2233,7 +2233,7 @@ bool idAI::NewWanderDir( const idVec3 &dest ) { } // try other directions - if ( ( gameLocal.random.RandomInt() & 1 ) || abs( deltay ) > abs( deltax ) ) { + if ( ( gameLocal.random.RandomInt() & 1 ) || idMath::Fabs( deltay ) > idMath::Fabs( deltax ) ) { tdir = d[ 1 ]; d[ 1 ] = d[ 2 ]; d[ 2 ] = tdir; diff --git a/neo/d3xp/gamesys/SysCmds.cpp b/neo/d3xp/gamesys/SysCmds.cpp index 8dc894a..9871fe0 100644 --- a/neo/d3xp/gamesys/SysCmds.cpp +++ b/neo/d3xp/gamesys/SysCmds.cpp @@ -140,7 +140,7 @@ void Cmd_ListSpawnArgs_f( const idCmdArgs &args ) { for ( i = 0; i < ent->spawnArgs.GetNumKeyVals(); i++ ) { const idKeyValue *kv = ent->spawnArgs.GetKeyVal( i ); - gameLocal.Printf( "\"%s\" "S_COLOR_WHITE"\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); + gameLocal.Printf( "\"%s\" " S_COLOR_WHITE "\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); } } diff --git a/neo/framework/FileSystem.cpp b/neo/framework/FileSystem.cpp index e5bab70..4800278 100644 --- a/neo/framework/FileSystem.cpp +++ b/neo/framework/FileSystem.cpp @@ -1344,7 +1344,7 @@ pack_t *idFileSystemLocal::LoadZipFile( const char *zipfile ) { unzClose(uf); delete[] buildBuffer; delete pack; - + Mem_Free( fs_headerLongs ); return NULL; } } @@ -3368,7 +3368,7 @@ size_t idFileSystemLocal::CurlWriteFunction( void *ptr, size_t size, size_t nmem return size * nmemb; } #ifdef _WIN32 - return _write( static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()->_file, ptr, size * nmemb ); + return _write( _fileno(static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()), ptr, size * nmemb ); #else return fwrite( ptr, size, nmemb, static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr() ); #endif @@ -3416,7 +3416,7 @@ int BackgroundDownloadThread( void *pexit ) { if ( bgl->opcode == DLTYPE_FILE ) { // use the low level read function, because fread may allocate memory #if defined(WIN32) - _read( static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()->_file, bgl->file.buffer, bgl->file.length ); + _read( _fileno(static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()), bgl->file.buffer, bgl->file.length ); #else fread( bgl->file.buffer, bgl->file.length, 1, static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr() ); #endif diff --git a/neo/framework/Licensee.h b/neo/framework/Licensee.h index 991c929..1225127 100644 --- a/neo/framework/Licensee.h +++ b/neo/framework/Licensee.h @@ -36,7 +36,7 @@ If you have questions concerning this license or the applicable additional terms #define GAME_NAME "dhewm 3" // appears on window titles and errors -#define ENGINE_VERSION "dhewm 3 1.4.0" // printed in console +#define ENGINE_VERSION "dhewm 3 1.4.1" // printed in console // paths #define BASE_GAMEDIR "base" diff --git a/neo/game/Pvs.cpp b/neo/game/Pvs.cpp index 5c189e0..16e845a 100644 --- a/neo/game/Pvs.cpp +++ b/neo/game/Pvs.cpp @@ -861,20 +861,20 @@ idPVS::Shutdown */ void idPVS::Shutdown( void ) { if ( connectedAreas ) { - delete connectedAreas; + delete[] connectedAreas; connectedAreas = NULL; } if ( areaQueue ) { - delete areaQueue; + delete[] areaQueue; areaQueue = NULL; } if ( areaPVS ) { - delete areaPVS; + delete[] areaPVS; areaPVS = NULL; } if ( currentPVS ) { for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) { - delete currentPVS[i].pvs; + delete[] currentPVS[i].pvs; currentPVS[i].pvs = NULL; } } diff --git a/neo/game/SecurityCamera.cpp b/neo/game/SecurityCamera.cpp index c16405a..36a0cbe 100644 --- a/neo/game/SecurityCamera.cpp +++ b/neo/game/SecurityCamera.cpp @@ -140,7 +140,7 @@ void idSecurityCamera::Spawn( void ) { } negativeSweep = ( sweepAngle < 0 ) ? true : false; - sweepAngle = abs( sweepAngle ); + sweepAngle = idMath::Fabs( sweepAngle ); scanFovCos = cos( scanFov * idMath::PI / 360.0f ); diff --git a/neo/game/Weapon.cpp b/neo/game/Weapon.cpp index d889c68..a381ae2 100644 --- a/neo/game/Weapon.cpp +++ b/neo/game/Weapon.cpp @@ -2941,7 +2941,13 @@ void idWeapon::Event_LaunchProjectiles( int num_projectiles, float spread, float // make sure the projectile starts inside the bounding box of the owner if ( i == 0 ) { muzzle_pos = muzzleOrigin + playerViewAxis[ 0 ] * 2.0f; - if ( ( ownerBounds - projBounds).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) { + // DG: sometimes the assertion in idBounds::operator-(const idBounds&) triggers + // (would get bounding box with negative volume) + // => check that before doing ownerBounds - projBounds (equivalent to the check in the assertion) + idVec3 obDiff = ownerBounds[1] - ownerBounds[0]; + idVec3 pbDiff = projBounds[1] - projBounds[0]; + bool boundsSubLegal = obDiff.x > pbDiff.x && obDiff.y > pbDiff.y && obDiff.z > pbDiff.z; + if ( boundsSubLegal && ( ownerBounds - projBounds ).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) { start = muzzle_pos + distance * playerViewAxis[0]; } else { start = ownerBounds.GetCenter(); diff --git a/neo/game/ai/AI.cpp b/neo/game/ai/AI.cpp index cc99b87..2ac9948 100644 --- a/neo/game/ai/AI.cpp +++ b/neo/game/ai/AI.cpp @@ -2148,7 +2148,7 @@ bool idAI::NewWanderDir( const idVec3 &dest ) { } // try other directions - if ( ( gameLocal.random.RandomInt() & 1 ) || abs( deltay ) > abs( deltax ) ) { + if ( ( gameLocal.random.RandomInt() & 1 ) || idMath::Fabs( deltay ) > idMath::Fabs( deltax ) ) { tdir = d[ 1 ]; d[ 1 ] = d[ 2 ]; d[ 2 ] = tdir; diff --git a/neo/game/gamesys/SysCmds.cpp b/neo/game/gamesys/SysCmds.cpp index 670a90c..732d506 100644 --- a/neo/game/gamesys/SysCmds.cpp +++ b/neo/game/gamesys/SysCmds.cpp @@ -140,7 +140,7 @@ void Cmd_ListSpawnArgs_f( const idCmdArgs &args ) { for ( i = 0; i < ent->spawnArgs.GetNumKeyVals(); i++ ) { const idKeyValue *kv = ent->spawnArgs.GetKeyVal( i ); - gameLocal.Printf( "\"%s\" "S_COLOR_WHITE"\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); + gameLocal.Printf( "\"%s\" " S_COLOR_WHITE "\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); } } diff --git a/neo/idlib/Lib.cpp b/neo/idlib/Lib.cpp index 954adc5..0976c85 100644 --- a/neo/idlib/Lib.cpp +++ b/neo/idlib/Lib.cpp @@ -26,7 +26,7 @@ If you have questions concerning this license or the applicable additional terms =========================================================================== */ -#if defined( MACOS_X ) +#if defined( MACOS_X ) || defined(__unix__) #include <signal.h> #include <sys/types.h> #endif @@ -514,8 +514,14 @@ void AssertFailed( const char *file, int line, const char *expression ) { idLib::sys->DebugPrintf( "\n\nASSERTION FAILED!\n%s(%d): '%s'\n", file, line, expression ); #ifdef _MSC_VER __debugbreak(); + _exit(1); +#elif defined(__unix__) + // __builtin_trap() causes an illegal instruction which is kinda ugly. + // especially if you'd like to be able to continue after the assertion during debugging + raise(SIGTRAP); // this will break into the debugger. #elif defined( __GNUC__ ) __builtin_trap(); -#endif _exit(1); +#endif + } diff --git a/neo/idlib/math/Matrix.h b/neo/idlib/math/Matrix.h index 24ed20f..785ac8f 100644 --- a/neo/idlib/math/Matrix.h +++ b/neo/idlib/math/Matrix.h @@ -30,6 +30,9 @@ If you have questions concerning this license or the applicable additional terms #define __MATH_MATRIX_H__ #include "idlib/math/Vector.h" +#ifdef _WIN32 + #include <malloc.h> +#endif /* =============================================================================== diff --git a/neo/idlib/math/Polynomial.h b/neo/idlib/math/Polynomial.h index 840d098..a2ce875 100644 --- a/neo/idlib/math/Polynomial.h +++ b/neo/idlib/math/Polynomial.h @@ -31,6 +31,9 @@ If you have questions concerning this license or the applicable additional terms #include "idlib/math/Complex.h" #include "idlib/Heap.h" +#ifdef _WIN32 + #include <malloc.h> +#endif /* =============================================================================== @@ -50,6 +53,11 @@ public: explicit idPolynomial( float a, float b, float c, float d ); explicit idPolynomial( float a, float b, float c, float d, float e ); + ~idPolynomial() // DG: don't leak coefficient's memory! + { + Mem_Free16( coefficient ); + } + float operator[]( int index ) const; float & operator[]( int index ); diff --git a/neo/idlib/math/Simd.cpp b/neo/idlib/math/Simd.cpp index 8caf5b2..7fbad1e 100644 --- a/neo/idlib/math/Simd.cpp +++ b/neo/idlib/math/Simd.cpp @@ -289,7 +289,7 @@ void TestAdd( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Add( float + float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -314,7 +314,7 @@ void TestAdd( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Add( float[] + float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -363,7 +363,7 @@ void TestSub( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Sub( float + float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -388,7 +388,7 @@ void TestSub( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Sub( float[] + float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -437,7 +437,7 @@ void TestMul( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Mul( float * float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -463,7 +463,7 @@ void TestMul( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Mul( float[] * float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -515,7 +515,7 @@ void TestDiv( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Div( float * float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -541,7 +541,7 @@ void TestDiv( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Div( float[] * float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -596,7 +596,7 @@ void TestMulAdd( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MulAdd( float * float[%2d] ) %s", j, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -652,7 +652,7 @@ void TestMulSub( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MulSub( float * float[%2d] ) %s", j, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -718,7 +718,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idVec3 * idVec3[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -744,7 +744,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idVec3 * idPlane[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -770,7 +770,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idVec3 * idDrawVert[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -796,7 +796,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idPlane * idVec3[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -822,7 +822,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idPlane * idPlane[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -848,7 +848,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idPlane * idDrawVert[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -874,7 +874,7 @@ void TestDot( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( idVec3[] * idVec3[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -899,7 +899,7 @@ void TestDot( void ) { StopRecordTime( end ); GetBest( start, end, bestClocksSIMD ); } - result = idMath::Fabs( dot1 - dot2 ) < 1e-4f ? "ok" : S_COLOR_RED"X"; + result = idMath::Fabs( dot1 - dot2 ) < 1e-4f ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Dot( float[%2d] * float[%2d] ) %s", j, j, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -947,7 +947,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpGT( float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -974,7 +974,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpGT( 2, float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); // ====================== @@ -1001,7 +1001,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpGE( float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1028,7 +1028,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpGE( 2, float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); // ====================== @@ -1055,7 +1055,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpLT( float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1082,7 +1082,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpLT( 2, float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); // ====================== @@ -1109,7 +1109,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpLE( float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1136,7 +1136,7 @@ void TestCompare( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CmpLE( 2, float[] >= float ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -1192,7 +1192,7 @@ void TestMinMax( void ) { GetBest( start, end, bestClocksSIMD ); } - result = ( min == min2 && max == max2 ) ? "ok" : S_COLOR_RED"X"; + result = ( min == min2 && max == max2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MinMax( float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1212,7 +1212,7 @@ void TestMinMax( void ) { GetBest( start, end, bestClocksSIMD ); } - result = ( v2min == v2min2 && v2max == v2max2 ) ? "ok" : S_COLOR_RED"X"; + result = ( v2min == v2min2 && v2max == v2max2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MinMax( idVec2[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1232,7 +1232,7 @@ void TestMinMax( void ) { GetBest( start, end, bestClocksSIMD ); } - result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X"; + result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MinMax( idVec3[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1252,7 +1252,7 @@ void TestMinMax( void ) { GetBest( start, end, bestClocksSIMD ); } - result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X"; + result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MinMax( idDrawVert[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -1272,7 +1272,7 @@ void TestMinMax( void ) { GetBest( start, end, bestClocksSIMD ); } - result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X"; + result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MinMax( idDrawVert[], indexes[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -1319,7 +1319,7 @@ void TestClamp( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Clamp( float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -1345,7 +1345,7 @@ void TestClamp( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->ClampMin( float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); @@ -1371,7 +1371,7 @@ void TestClamp( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->ClampMax( float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -1396,7 +1396,7 @@ void TestMemcpy( void ) { p_simd->Memcpy( test1, test0, 8192 ); for ( j = 0; j < i; j++ ) { if ( test1[j] != test0[j] ) { - idLib::common->Printf( " simd->Memcpy() "S_COLOR_RED"X\n" ); + idLib::common->Printf( " simd->Memcpy() " S_COLOR_RED "X\n" ); return; } } @@ -1422,7 +1422,7 @@ void TestMemset( void ) { p_simd->Memset( test, j, i ); for ( k = 0; k < i; k++ ) { if ( test[k] != (byte)j ) { - idLib::common->Printf( " simd->Memset() "S_COLOR_RED"X\n" ); + idLib::common->Printf( " simd->Memset() " S_COLOR_RED "X\n" ); return; } } @@ -1480,7 +1480,7 @@ void TestMatXMultiplyVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyVecX %dx%d*%dx1 %s", i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1510,7 +1510,7 @@ void TestMatXMultiplyVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyVecX %dx6*6x1 %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1539,7 +1539,7 @@ void TestMatXMultiplyVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyVecX 6x%d*%dx1 %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -1591,7 +1591,7 @@ void TestMatXMultiplyAddVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyAddVecX %dx%d*%dx1 %s", i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1621,7 +1621,7 @@ void TestMatXMultiplyAddVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyAddVecX %dx6*6x1 %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1651,7 +1651,7 @@ void TestMatXMultiplyAddVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyAddVecX 6x%d*%dx1 %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -1703,7 +1703,7 @@ void TestMatXTransposeMultiplyVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransposeMulVecX %dx6*%dx1 %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1733,7 +1733,7 @@ void TestMatXTransposeMultiplyVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransposeMulVecX 6x%d*6x1 %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -1785,7 +1785,7 @@ void TestMatXTransposeMultiplyAddVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransposeMulAddVecX %dx6*%dx1 %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1815,7 +1815,7 @@ void TestMatXTransposeMultiplyAddVecX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransposeMulAddVecX 6x%d*6x1 %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -1861,7 +1861,7 @@ void TestMatXMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyMatX %dx%d*%dx6 %s", i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1892,7 +1892,7 @@ void TestMatXMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyMatX 6x%d*%dx6 %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1923,7 +1923,7 @@ void TestMatXMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyMatX %dx6*6x%d %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -1954,7 +1954,7 @@ void TestMatXMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_MultiplyMatX 6x6*6x%d %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -1997,7 +1997,7 @@ void TestMatXTransposeMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransMultiplyMatX %dx6*%dx%d %s", i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } @@ -2028,7 +2028,7 @@ void TestMatXTransposeMultiplyMatX( void ) { GetBest( start, end, bestClocksSIMD ); } - result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_TransMultiplyMatX 6x%d*6x6 %s", i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -2078,7 +2078,7 @@ void TestMatXLowerTriangularSolve( void ) { GetBest( start, end, bestClocksSIMD ); } - result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_LowerTriangularSolve %dx%d %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -2125,7 +2125,7 @@ void TestMatXLowerTriangularSolveTranspose( void ) { GetBest( start, end, bestClocksSIMD ); } - result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_LowerTriangularSolveT %dx%d %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -2175,7 +2175,7 @@ void TestMatXLDLTFactor( void ) { GetBest( start, end, bestClocksSIMD ); } - result = mat1.Compare( mat2, MATX_LDLT_SIMD_EPSILON ) && invDiag1.Compare( invDiag2, MATX_LDLT_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X"; + result = mat1.Compare( mat2, MATX_LDLT_SIMD_EPSILON ) && invDiag1.Compare( invDiag2, MATX_LDLT_SIMD_EPSILON ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MatX_LDLTFactor %dx%d %s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric ); } } @@ -2248,7 +2248,7 @@ void TestBlendJoints( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->BlendJoints() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2300,7 +2300,7 @@ void TestConvertJointQuatsToJointMats( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->ConvertJointQuatsToJointMats() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2359,7 +2359,7 @@ void TestConvertJointMatsToJointQuats( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->ConvertJointMatsToJointQuats() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2421,7 +2421,7 @@ void TestTransformJoints( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->TransformJoints() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2483,7 +2483,7 @@ void TestUntransformJoints( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->UntransformJoints() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2550,7 +2550,7 @@ void TestTransformVerts( void ) { break; } } - result = ( i >= NUMVERTS ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= NUMVERTS ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->TransformVerts() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2608,7 +2608,7 @@ void TestTracePointCull( void ) { break; } } - result = ( i >= COUNT && totalOr1 == totalOr2 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT && totalOr1 == totalOr2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->TracePointCull() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2669,7 +2669,7 @@ void TestDecalPointCull( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->DecalPointCull() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2727,7 +2727,7 @@ void TestOverlayPointCull( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->OverlayPointCull() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2786,7 +2786,7 @@ void TestDeriveTriPlanes( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->DeriveTriPlanes() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2871,7 +2871,7 @@ void TestDeriveTangents( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->DeriveTangents() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -2948,7 +2948,7 @@ void TestDeriveUnsmoothedTangents( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->DeriveUnsmoothedTangents() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -3009,7 +3009,7 @@ void TestNormalizeTangents( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->NormalizeTangents() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -3071,7 +3071,7 @@ void TestGetTextureSpaceLightVectors( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CreateTextureSpaceLightVectors() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -3136,7 +3136,7 @@ void TestGetSpecularTextureCoords( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CreateSpecularTextureCoords() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -3207,7 +3207,7 @@ void TestCreateShadowCache( void ) { } } - result = ( i >= COUNT && numVerts1 == numVerts2 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT && numVerts1 == numVerts2 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CreateShadowCache() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -3235,7 +3235,7 @@ void TestCreateShadowCache( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->CreateVertexProgramShadowCache() %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } @@ -3294,7 +3294,7 @@ void TestSoundUpSampling( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*numSpeakers ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*numSpeakers ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->UpSamplePCMTo44kHz( %d, %d ) %s", kHz, numSpeakers, result ), MIXBUFFER_SAMPLES*numSpeakers*kHz/44100, bestClocksSIMD, bestClocksGeneric ); } } @@ -3324,7 +3324,7 @@ void TestSoundUpSampling( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->UpSampleOGGTo44kHz( %d, %d ) %s", kHz, numSpeakers, result ), MIXBUFFER_SAMPLES*numSpeakers*kHz/44100, bestClocksSIMD, bestClocksGeneric ); } } @@ -3391,7 +3391,7 @@ void TestSoundMixing( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MixSoundTwoSpeakerMono() %s", result ), MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -3423,7 +3423,7 @@ void TestSoundMixing( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MixSoundTwoSpeakerStereo() %s", result ), MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric ); @@ -3456,7 +3456,7 @@ void TestSoundMixing( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MixSoundSixSpeakerMono() %s", result ), MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric ); bestClocksGeneric = 0; @@ -3488,7 +3488,7 @@ void TestSoundMixing( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MixSoundSixSpeakerStereo() %s", result ), MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric ); @@ -3524,7 +3524,7 @@ void TestSoundMixing( void ) { break; } } - result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->MixedSoundToSamples() %s", result ), MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric ); } @@ -3983,7 +3983,7 @@ void TestNegate( void ) { break; } } - result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X"; + result = ( i >= COUNT ) ? "ok" : S_COLOR_RED "X"; PrintClocks( va( " simd->Negate16( float[] ) %s", result ), COUNT, bestClocksSIMD, bestClocksGeneric ); } diff --git a/neo/renderer/Model_ma.cpp b/neo/renderer/Model_ma.cpp index e31ca40..1cd672a 100644 --- a/neo/renderer/Model_ma.cpp +++ b/neo/renderer/Model_ma.cpp @@ -203,7 +203,7 @@ bool MA_ParseVertex(idParser& parser, maAttribHeader_t* header) { //Allocate enough space for all the verts if this is the first attribute for verticies if(!pMesh->vertexes) { - pMesh->numVertexes = header->size; + pMesh->numVertexes = header->size; // XXX: +1? pMesh->vertexes = (idVec3 *)Mem_Alloc( sizeof( idVec3 ) * pMesh->numVertexes ); } @@ -692,7 +692,16 @@ void MA_ParseMesh(idParser& parser) { //Now apply the pt transformations for(int i = 0; i < pMesh->numVertTransforms; i++) { - pMesh->vertexes[(int)pMesh->vertTransforms[i].w] += pMesh->vertTransforms[i].ToVec3(); + int idx = (int)pMesh->vertTransforms[i].w; + if(idx < 0 || idx >= pMesh->numVertexes) + { + // this happens with d3xp/models/david/hell_h7.ma in the d3xp hell level + // TODO: if it happens for other models, too, maybe it's intended and the .ma parsing is broken + common->Warning( "Model %s tried to set an out-of-bounds vertex transform (%d, but max vert. index is %d)!", + parser.GetFileName(), idx, pMesh->numVertexes-1 ); + continue; + } + pMesh->vertexes[idx] += pMesh->vertTransforms[i].ToVec3(); } MA_VERBOSE((va("MESH %s - parent %s\n", header.name, header.parent))); diff --git a/neo/renderer/RenderSystem_init.cpp b/neo/renderer/RenderSystem_init.cpp index 9c7d575..ffd60f3 100644 --- a/neo/renderer/RenderSystem_init.cpp +++ b/neo/renderer/RenderSystem_init.cpp @@ -482,8 +482,10 @@ vidmode_t r_vidModes[] = { { "Mode 19: 3200x2400", 3200, 2400 }, { "Mode 20: 3840x2160", 3840, 2160 }, { "Mode 21: 4096x2304", 4096, 2304 }, + { "Mode 22: 2880x1800", 2880, 1800 }, }; -static int s_numVidModes = ( sizeof( r_vidModes ) / sizeof( r_vidModes[0] ) ); +// DG: made this an enum so even stupid compilers accept it as array length below +enum { s_numVidModes = sizeof( r_vidModes ) / sizeof( r_vidModes[0] ) }; static bool R_GetModeInfo( int *width, int *height, int mode ) { vidmode_t *vm; @@ -513,6 +515,45 @@ static bool R_GetModeInfo( int *width, int *height, int mode ) { return true; } +// DG: I added all this vidModeInfoPtr stuff, so I can have a second list of vidmodes +// that are sorted (by width, height), instead of just r_mode index. +// That way I can add modes without breaking r_mode, but still display them +// sorted in the menu. + +struct vidModePtr { + vidmode_t* vidMode; + int modeIndex; +}; + +static vidModePtr sortedVidModes[s_numVidModes]; + +static int vidModeCmp(const void* vm1, const void* vm2) +{ + const vidModePtr* v1 = static_cast<const vidModePtr*>(vm1); + const vidModePtr* v2 = static_cast<const vidModePtr*>(vm2); + + // sort primarily by width, secondarily by height + int wdiff = v1->vidMode->width - v2->vidMode->width; + return (wdiff != 0) ? wdiff : (v1->vidMode->height - v2->vidMode->height); +} + +static void initSortedVidModes() +{ + if(sortedVidModes[0].vidMode != NULL) + { + // already initialized + return; + } + + for(int i=0; i<s_numVidModes; ++i) + { + sortedVidModes[i].modeIndex = i; + sortedVidModes[i].vidMode = &r_vidModes[i]; + } + + qsort(sortedVidModes, s_numVidModes, sizeof(vidModePtr), vidModeCmp); +} + // DG: the following two functions are part of a horrible hack in ChoiceWindow.cpp // to overwrite the default resolution list in the system options menu @@ -520,14 +561,14 @@ static bool R_GetModeInfo( int *width, int *height, int mode ) { idStr R_GetVidModeListString() { idStr ret = "r_custom*"; - // for some reason, modes 0-2 are not used. maybe too small for GUI? - for(int mode=3; mode<s_numVidModes; ++mode) + + for(int i=0; i<s_numVidModes; ++i) { - int w, h; - if(R_GetModeInfo(&w, &h, mode)) + // for some reason, modes 0-2 are not used. maybe too small for GUI? + if(sortedVidModes[i].modeIndex >= 3 && sortedVidModes[i].vidMode != NULL) { idStr modeStr; - sprintf(modeStr, ";%dx%d", w, h); + sprintf(modeStr, ";%dx%d", sortedVidModes[i].vidMode->width, sortedVidModes[i].vidMode->height); ret += modeStr; } } @@ -538,10 +579,14 @@ idStr R_GetVidModeListString() idStr R_GetVidModeValsString() { idStr ret = "-1"; // for custom resolutions using r_customWidth/r_customHeight - for(int mode=3; mode<s_numVidModes; ++mode) + for(int i=0; i<s_numVidModes; ++i) { - ret += ";"; - ret += mode; + // for some reason, modes 0-2 are not used. maybe too small for GUI? + if(sortedVidModes[i].modeIndex >= 3 && sortedVidModes[i].vidMode != NULL) + { + ret += ";"; + ret += sortedVidModes[i].modeIndex; + } } return ret; } @@ -579,6 +624,8 @@ void R_InitOpenGL( void ) { tr.viewportOffset[0] = 0; tr.viewportOffset[1] = 0; + initSortedVidModes(); + // // initialize OS specific portions of the renderSystem // diff --git a/neo/sys/events.cpp b/neo/sys/events.cpp index ff9bb09..92b175d 100644 --- a/neo/sys/events.cpp +++ b/neo/sys/events.cpp @@ -484,8 +484,8 @@ sysEvent_t Sys_GetEvent() { // fall through case SDL_KEYUP: - key = mapkey(ev.key.keysym.sym); #if !SDL_VERSION_ATLEAST(2, 0, 0) + key = mapkey(ev.key.keysym.sym); if (!key) { unsigned char c; // check if its an unmapped console key @@ -500,6 +500,27 @@ sysEvent_t Sys_GetEvent() { } } #else + { + // workaround for AZERTY-keyboards, which don't have 1, 2, ..., 9, 0 in first row: + // always map those physical keys (scancodes) to those keycodes anyway + // see also https://bugzilla.libsdl.org/show_bug.cgi?id=3188 + SDL_Scancode sc = ev.key.keysym.scancode; + if(sc == SDL_SCANCODE_0) + { + key = '0'; + } + else if(sc >= SDL_SCANCODE_1 && sc <= SDL_SCANCODE_9) + { + // note that the SDL_SCANCODEs are SDL_SCANCODE_1, _2, ..., _9, SDL_SCANCODE_0 + // while in ASCII it's '0', '1', ..., '9' => handle 0 and 1-9 separately + // (doom3 uses the ASCII values for those keys) + key = '1' + (sc - SDL_SCANCODE_1); + } + else + { + key = mapkey(ev.key.keysym.sym); + } + if(!key) { if (ev.key.keysym.scancode == SDL_SCANCODE_GRAVE) { // TODO: always do this check? key = Sys_GetConsoleKey(true); @@ -510,7 +531,7 @@ sysEvent_t Sys_GetEvent() { continue; // handle next event } } - + } #endif res.evType = SE_KEY; @@ -607,6 +628,18 @@ sysEvent_t Sys_GetEvent() { mouse_polls.Append(mouse_poll_t(M_DELTAZ, -1)); break; #endif + default: +#if SDL_VERSION_ATLEAST(2, 0, 0) + // handle X1 button and above + if( ev.button.button < SDL_BUTTON_LEFT + 8 ) // doesn't support more than 8 mouse buttons + { + int buttonIndex = ev.button.button - SDL_BUTTON_LEFT; + res.evValue = K_MOUSE1 + buttonIndex; + mouse_polls.Append( mouse_poll_t( M_ACTION1 + buttonIndex, ev.button.state == SDL_PRESSED ? 1 : 0 ) ); + } + else +#endif + continue; // handle next event } res.evValue2 = ev.button.state == SDL_PRESSED ? 1 : 0; @@ -629,7 +662,8 @@ sysEvent_t Sys_GetEvent() { continue; // handle next event } default: - common->Warning("unknown SDL event 0x%x", ev.type); + // ok, I don't /really/ care about unknown SDL events. only uncomment this for debugging. + // common->Warning("unknown SDL event 0x%x", ev.type); continue; // handle next event } } diff --git a/neo/sys/posix/posix_net.cpp b/neo/sys/posix/posix_net.cpp index 1ff3451..db83fa9 100644 --- a/neo/sys/posix/posix_net.cpp +++ b/neo/sys/posix/posix_net.cpp @@ -318,6 +318,7 @@ void Sys_InitNetworking(void) if (num_interfaces >= MAX_INTERFACES) break; } + freeifaddrs(ifap); } /* diff --git a/neo/tools/compilers/roqvq/codec.cpp b/neo/tools/compilers/roqvq/codec.cpp index 344232f..612d088 100644 --- a/neo/tools/compilers/roqvq/codec.cpp +++ b/neo/tools/compilers/roqvq/codec.cpp @@ -322,7 +322,7 @@ void codec::Segment( int *alist, float *flist, int numElements, float rmse) int codec::BestCodeword( unsigned char *tempvector, int dimension, VQDATA **codebook ) { VQDATA dist; - VQDATA bestDist = HUGE_VAL; + VQDATA bestDist = idMath::INFINITY; VQDATA tempvq[64]; int bestIndex = -1; @@ -1505,7 +1505,7 @@ void codec::VQ( const int numEntries, const int dimension, const unsigned char * // // find the closest two and eliminate one // - double bestDist = HUGE_VAL; + double bestDist = idMath::INFINITY; double dist, simport; int bestIndex = -1; int bestOtherIndex = 0; @@ -1571,7 +1571,7 @@ void codec::VQ( const int numEntries, const int dimension, const unsigned char * // until we have reduced it to 256 entries, find one to toss // do { - bestDist = HUGE_VAL; + bestDist = idMath::INFINITY; bestIndex = -1; bestOtherIndex = -1; if (optimize) { @@ -1586,7 +1586,7 @@ void codec::VQ( const int numEntries, const int dimension, const unsigned char * } } if (bestIndex == -1 || !optimize) { - bestDist = HUGE_VAL; + bestDist = idMath::INFINITY; bestIndex = -1; bestOtherIndex = 0; aentries = 0; diff --git a/neo/ui/Winvar.cpp b/neo/ui/Winvar.cpp index 1d20770..db726c3 100644 --- a/neo/ui/Winvar.cpp +++ b/neo/ui/Winvar.cpp @@ -42,7 +42,7 @@ idWinVar::idWinVar() { } idWinVar::~idWinVar() { - delete name; + delete[] name; name = NULL; } diff --git a/neo/ui/Winvar.h b/neo/ui/Winvar.h index 8ab296f..856fed3 100644 --- a/neo/ui/Winvar.h +++ b/neo/ui/Winvar.h @@ -51,7 +51,7 @@ public: return ""; } void SetName(const char *_name) { - delete []name; + delete[] name; name = NULL; if (_name) { name = new char[strlen(_name)+1]; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/dhewm3.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

