diff --git a/source-code/source/plugins/Launcher/Resources.restext b/source-code/source/plugins/Launcher/Resources.restext index 0f572ec..b5328d0 100644 --- a/source-code/source/plugins/Launcher/Resources.restext +++ b/source-code/source/plugins/Launcher/Resources.restext @@ -246,6 +246,7 @@ HOWTO_CLEAN_INSTALL=How to do a clean installation HOWTO_CLEAN_INSTALL_HINT=Delete:\n- dnsapi.dll or dinput8.dll\n- patches/\n- plugins/\n\nRestore:\n- glut32.dll\n\nThen install PD Loader from the official repository. # gpu +GPU_WINE_DISABLE_MOVIES=(remember to disable movies!) GPU_INFO_NAME=GPU Info: GPU_AMD_NOVIDIA_NAME=Issues: AMD GPU support is unofficial. GPU_AMD_NOVIDIA_HINT=AMD GPUs are not supported without mods.\nThe PD Loader AMDPack seems to be installed, but please keep in mind that it may have issues. @@ -271,4 +272,6 @@ GPU_OLD_NAME=Issues: GPU too old! 3D rendering might be broken.\n(Click for more GPU_OLD_HINT=Your GPU is very old and does not support rendering techniques used by the game.\nYou may be able to play, but graphics will likely have major issues.\nPlease upgrade to a GTX 600 series or later GPU. GPU_UNKNOWN_NAME=Issues: Unable to detect GPU architecture.\n(Click for more information) GPU_UNKNOWN_HINT=It looks like you have an NVIDIA GPU, but something went wrong while trying to determine your GPU's architecture (type).\nThis may be a caused by a bug, but it probably indicates potential issues.\nPlease make sure you have a GTX 600 series or later GPU. (GTX 400 series or later should also work) +GPU_DRIVER_ISSUES_NAME=Driver has known issues. +GPU_DRIVER_ISSUES_HINT=The graphics driver you're using has known issues. Please install the latest driver from your GPU vendor's website. SHOW_GPU_DIALOG_HINT=You can disable this message from the options tab. \ No newline at end of file diff --git a/source-code/source/plugins/Launcher/ui.h b/source-code/source/plugins/Launcher/ui.h index daa51d8..4156d65 100644 --- a/source-code/source/plugins/Launcher/ui.h +++ b/source-code/source/plugins/Launcher/ui.h @@ -238,17 +238,24 @@ namespace Launcher { vendor = vendor->Replace(" Corporation", ""); // this is useless.. remove it to help ensure the GPU type line fits String^ renderer = gcnew String((char*)glGetString(GL_RENDERER)); String^ version = gcnew String((char*)glGetString(GL_VERSION)); + version = version->Replace(" Profile Context", ""); // we don't need this, either String^ gpuModel = gcnew String(GPUModel::getGpuName().c_str()); String^ wineVersion = gcnew String(WineVer::getWineVer().c_str()); + auto version_split = version->Split(' '); + String^ driver_version = gcnew String(version_split[version_split->Length - 1]); + auto driver_version_split_major_minor = driver_version->Split('.'); + int driver_version_major = int::Parse(driver_version_split_major_minor[0]); + int driver_version_minor = int::Parse(driver_version_split_major_minor[1]); + glutDestroyWindow(window); // destroy the window so it doesn't remain on screen if (glutMainLoopEventDynamic != NULL) glutMainLoopEventDynamic(); // freeglut needs this if (wineVersion != "") { - this->labelGPU->Text = "Wine " + wineVersion + " (remember to disable movies!)\n"; + this->labelGPU->Text = "Wine " + wineVersion + " " + i18n::GetStringFallback("GPU_WINE_DISABLE_MOVIES") + "\n"; } else this->labelGPU->Text = i18n::GetStringFallback("GPU_INFO_NAME") + "\n"; this->labelGPU->Text += i18n::GetStringFallback(vendor + " " + renderer + "\n"); @@ -256,7 +263,7 @@ namespace Launcher { int linkStart = this->labelGPU->Text->Length; bool showGpuDialog = false; - if (vendor->Contains("AMD") || vendor->Contains("ATI")) // check OpenGL to get actual GPU being used for vendor check (to get accurate results for iGPU) + if (vendor->Contains("ATI") || vendor->Contains("AMD")) // check OpenGL to get actual GPU being used for vendor check (to get accurate results for iGPU) { bool hasNovidia = false; for (PluginInfo i : AllPlugins) @@ -267,9 +274,19 @@ namespace Launcher { if (hasNovidia) { - this->labelGPU->Text += i18n::GetStringFallback("GPU_AMD_NOVIDIA_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_AMD_NOVIDIA_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Yellow; + if (wineVersion == "" && (driver_version_major < 21 || (driver_version_major == 21 && driver_version_minor < 6))) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_DRIVER_ISSUES_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_DRIVER_ISSUES_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Orange; + showGpuDialog = true; + } + else + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_AMD_NOVIDIA_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_AMD_NOVIDIA_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Lime; + } } else { @@ -279,65 +296,75 @@ namespace Launcher { showGpuDialog = true; } } - else if (!vendor->Contains("NVIDIA")) + else if (vendor->Contains("NVIDIA")) { - this->labelGPU->Text += i18n::GetStringFallback("GPU_UNSUPPORTED_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_UNSUPPORTED_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Red; - showGpuDialog = true; - } - else if (gpuModel->StartsWith("GA")) // unconfirmed?? - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_GA_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_GA_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Yellow; - } - else if (gpuModel->StartsWith("TU")) - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_TU_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_TU_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Yellow; - } - else if (gpuModel->StartsWith("GM") || gpuModel->StartsWith("GP") || gpuModel->StartsWith("GV")) - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_GM_NEWER_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_GM_NEWER_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Teal; - } - else if (gpuModel->StartsWith("GK")) - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_GK_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_GK_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::LightBlue; - } - else if (gpuModel->StartsWith("GF")) - { - if (version[0] < '4') + if (wineVersion == "" && (driver_version_major > 446 && driver_version_major < 460)) { - this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_DRIVER_OLD_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_GF_DRIVER_OLD_HINT"); + this->labelGPU->Text += i18n::GetStringFallback("GPU_DRIVER_ISSUES_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_DRIVER_ISSUES_HINT"); this->labelGPU->LinkColor = System::Drawing::Color::Orange; showGpuDialog = true; } - else + else if (gpuModel->StartsWith("GA")) // unconfirmed?? { - this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_GF_HINT"); + this->labelGPU->Text += i18n::GetStringFallback("GPU_GA_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_GA_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Yellow; + } + else if (gpuModel->StartsWith("TU")) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_TU_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_TU_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Yellow; + } + else if (gpuModel->StartsWith("GM") || gpuModel->StartsWith("GP") || gpuModel->StartsWith("GV")) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_GM_NEWER_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_GM_NEWER_HINT"); this->labelGPU->LinkColor = System::Drawing::Color::Teal; } - } - else if (version[0] >= '4' && gpuModel->Length > 0 && !gpuModel->StartsWith("Unk") && !gpuModel->StartsWith("Oth")) - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_TOO_NEW_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_TOO_NEW_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Orange; - } - else if (gpuModel->StartsWith("G") || gpuModel->StartsWith("NV") || gpuModel->StartsWith("NB") || gpuModel->StartsWith("N10") || gpuModel->StartsWith("MCP")) - { - this->labelGPU->Text += i18n::GetStringFallback("GPU_OLD_NAME"); - GPUIssueText = i18n::GetStringFallback("GPU_OLD_HINT"); - this->labelGPU->LinkColor = System::Drawing::Color::Orange; - showGpuDialog = true; + else if (gpuModel->StartsWith("GK")) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_GK_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_GK_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::LightBlue; + } + else if (gpuModel->StartsWith("GF")) + { + if (version[0] < '4') + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_DRIVER_OLD_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_GF_DRIVER_OLD_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Orange; + showGpuDialog = true; + } + else + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_GF_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_GF_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Teal; + } + } + else if (gpuModel->StartsWith("G") || gpuModel->StartsWith("NV") || gpuModel->StartsWith("NB") || gpuModel->StartsWith("N10") || gpuModel->StartsWith("MCP")) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_OLD_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_OLD_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Orange; + showGpuDialog = true; + } + else if (version[0] >= '4' && gpuModel->Length > 0 && !gpuModel->StartsWith("Unk") && !gpuModel->StartsWith("Oth")) + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_TOO_NEW_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_TOO_NEW_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Orange; + } + else + { + this->labelGPU->Text += i18n::GetStringFallback("GPU_UNSUPPORTED_NAME"); + GPUIssueText = i18n::GetStringFallback("GPU_UNSUPPORTED_HINT"); + this->labelGPU->LinkColor = System::Drawing::Color::Red; + showGpuDialog = true; + } } else //if (gpuModel->Length == 0 || gpuModel->StartsWith("Unk") || gpuModel->StartsWith("Oth")) {