diff --git a/stepmania/README-FIRST.html b/stepmania/README-FIRST.html index e68253a2d4..08f2729691 100644 --- a/stepmania/README-FIRST.html +++ b/stepmania/README-FIRST.html @@ -256,6 +256,9 @@ If you experience any visual errors, please visit your video card manufacturer's web site and download the latest Direct3D 8.1 drivers. Below is a list of known issues that are thought to be video card driver bugs:

+* Voodoo 3
+Blah
+
* S3 Savage family cards (e.g. Diamond Stealth)
Symptom: The right edge of some graphics appears "cut off".
Explanation: Drivers do not properly handle textures >= 512x512, resulting in diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index c3660d8a7e..06c430cf93 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -143,9 +143,13 @@ void Actor::BeginDraw() // set the world matrix and calculate actor properties DISPLAY->Translate( m_temp.pos.x, m_temp.pos.y, m_temp.pos.z ); DISPLAY->Scale( m_temp.scale.x, m_temp.scale.y, m_temp.scale.z ); - if( m_temp.rotation.x != 0 ) DISPLAY->RotateX( m_temp.rotation.x ); - if( m_temp.rotation.y != 0 ) DISPLAY->RotateY( m_temp.rotation.y ); - if( m_temp.rotation.z != 0 ) DISPLAY->RotateZ( m_temp.rotation.z ); + + if( m_temp.rotation.x != 0 ) + DISPLAY->RotateX( m_temp.rotation.x ); + if( m_temp.rotation.y != 0 ) + DISPLAY->RotateY( m_temp.rotation.y ); + if( m_temp.rotation.z != 0 ) + DISPLAY->RotateZ( m_temp.rotation.z ); } void Actor::EndDraw() diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 5949ddce71..d553a5135a 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -284,6 +284,8 @@ void Player::DrawPrimitives() DISPLAY->LookAt(Eye, At, Up); } + else + DISPLAY->PushMatrix(); m_GrayArrowRow.Draw(); m_NoteField.Draw(); @@ -294,6 +296,8 @@ void Player::DrawPrimitives() DISPLAY->ExitPerspective(); DISPLAY->PopMatrix(); } + else + DISPLAY->PopMatrix(); m_Judgment.Draw(); diff --git a/stepmania/src/RageDisplay.cpp b/stepmania/src/RageDisplay.cpp index f0b88042ee..f9b20023cd 100644 --- a/stepmania/src/RageDisplay.cpp +++ b/stepmania/src/RageDisplay.cpp @@ -780,7 +780,10 @@ void RageDisplay::RotateY( float r ) void RageDisplay::RotateZ( float r ) { - glRotatef(r* 180/PI, 0, 0, 1); + // HACK: Rotation about (0,0,1) seems to be broken in many Voodoo3 drivers, + // but only while using orthographic projections. Strange... + // Adding a tiny X component fixes the problem. -Chris + glRotatef(r* 180/PI, 0.00001f, 0, 1); } void RageDisplay::smPostMultMatrixf( const RageMatrix &f ) diff --git a/stepmania/src/arch/Sound/DSoundHelpers.cpp b/stepmania/src/arch/Sound/DSoundHelpers.cpp index 6eed4e36f5..ac1cbedbc2 100644 --- a/stepmania/src/arch/Sound/DSoundHelpers.cpp +++ b/stepmania/src/arch/Sound/DSoundHelpers.cpp @@ -27,7 +27,7 @@ DSound::DSound() HRESULT hr; // Initialize COM - if( hr = CoInitialize( NULL ) ) + if( FAILED( hr = CoInitialize( NULL ) ) ) RageException::ThrowNonfatal(hr_ssprintf(hr, "CoInitialize")); // Create IDirectSound using the primary sound device diff --git a/stepmania/src/archutils/Win32/DebugInfoHunt.cpp b/stepmania/src/archutils/Win32/DebugInfoHunt.cpp index 22da6cb004..e4e9fedfd9 100644 --- a/stepmania/src/archutils/Win32/DebugInfoHunt.cpp +++ b/stepmania/src/archutils/Win32/DebugInfoHunt.cpp @@ -2,56 +2,134 @@ #include "DebugInfoHunt.h" #include "RageLog.h" #include "RageUtil.h" +#include "../../archutils/Win32/GotoURL.h" -void PrintDebugInfoWin9x() +struct VideoDriverInfo +{ + CString sProvider; + CString sDescription; + CString sVersion; + CString sDate; + CString sDeviceID; +}; + +CString GetRegValue( HKEY hKey, CString sName ) +{ + char szBuffer[MAX_PATH]; + DWORD nSize = sizeof(szBuffer)-1; + if( RegQueryValueEx(hKey, sName, NULL, NULL, (LPBYTE)szBuffer, &nSize) == ERROR_SUCCESS ) + return szBuffer; + else + return ""; +} + +bool GetDebugInfoWin9x( VideoDriverInfo& infoOut ) { HKEY hkey; if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Class\\Display\\0000", &hkey) != ERROR_SUCCESS) - return; + return false; - char szBuffer[MAX_PATH]; - DWORD nSize; - -#define GETSZ2(a) nSize = sizeof(szBuffer)-1; if( RegQueryValueEx(hkey, a, NULL, NULL, (LPBYTE)szBuffer, &nSize) == ERROR_SUCCESS ) LOG->Info("%-15s:\t%s", a, szBuffer); - - LOG->Info("Video Driver Information (win9x):"); - GETSZ2("DriverDate"); - GETSZ2("DriverDesc"); - GETSZ2("MatchingDeviceId"); - GETSZ2("ProviderName"); - GETSZ2("Ver"); + infoOut.sDate = GetRegValue( hkey, "DriverDate"); + infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); + infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); + infoOut.sProvider = GetRegValue( hkey, "ProviderName"); + infoOut.sVersion = GetRegValue( hkey, "Ver"); RegCloseKey(hkey); + return true; } -void PrintDebugInfoWinNT() +bool GetDebugInfoWinNT( VideoDriverInfo& infoOut ) { HKEY hkey; if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\0000", &hkey) != ERROR_SUCCESS) - return; + return false; - char szBuffer[MAX_PATH]; - DWORD nSize; - -#define GETSZ2(a) nSize = sizeof(szBuffer)-1; if( RegQueryValueEx(hkey, a, NULL, NULL, (LPBYTE)szBuffer, &nSize) == ERROR_SUCCESS ) LOG->Info("%-15s:\t%s", a, szBuffer); - - LOG->Info("Video Driver Information (winnt):"); - GETSZ2("DriverDate"); - GETSZ2("DriverDesc"); - GETSZ2("DriverVersion"); - GETSZ2("InfSection"); - GETSZ2("ProviderName"); - GETSZ2("MatchingDeviceId"); + infoOut.sDate = GetRegValue( hkey, "DriverDate"); + infoOut.sDescription = GetRegValue( hkey, "DriverDesc"); + infoOut.sDeviceID = GetRegValue( hkey, "MatchingDeviceId"); + infoOut.sProvider = GetRegValue( hkey, "ProviderName"); + infoOut.sVersion = GetRegValue( hkey, "DriverVersion"); RegCloseKey(hkey); + return true; } +void HandleKnownTerribleDriver( VideoDriverInfo info ) +{ + struct ProblemAndBookmark + { + char szProblemProvider[1024]; + char szProblemDescription[1024]; + char szReadMeBookmark[64]; + }; + ProblemAndBookmark ENTRIES[] = + { + // Hacked around the bug in the V3 driver. -Chris +// {"3dfx Interactive, Inc. (Optimized by Amigamerlin)", "Voodoo3 PCI", "Voodoo3"}, + {"blah", "blah", "Voodoo3"}, + }; + const int NUM_ENTRIES = sizeof(ENTRIES) / sizeof(ENTRIES[0]); + + for( int i=0; iWarn( "Failed to get video card driver info." ); + return; + +got_debug_info: + + LOG->Info("Video Driver Information:"); + LOG->Info("%-15s:\t%s", "Provider", info.sProvider.GetString()); + LOG->Info("%-15s:\t%s", "Description", info.sDescription.GetString()); + LOG->Info("%-15s:\t%s", "Version", info.sVersion.GetString()); + LOG->Info("%-15s:\t%s", "Date", info.sDate.GetString()); + LOG->Info("%-15s:\t%s", "DeviceID", info.sDeviceID.GetString()); + + HandleKnownTerribleDriver( info ); } static CString wo_ssprintf( MMRESULT err, const char *fmt, ...)