Disabled OpenGL 3.0 for Intel GPUs

This commit is contained in:
Anuken
2025-08-31 14:10:59 -04:00
parent 3b1e1435d6
commit d639dd516e
3 changed files with 48 additions and 5 deletions

View File

@@ -55,11 +55,16 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
Log.info("[GL] Version: @", graphics.getGLVersion());
Log.info("[GL] Max texture size: @", maxTextureSize);
Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2");
if(gl30 == null) Log.warn("[GL] Your device or video drivers do not support OpenGL 3. This will cause performance issues.");
if(NvGpuInfo.hasMemoryInfo()){
Log.info("[GL] Total available VRAM: @mb", NvGpuInfo.getMaxMemoryKB()/1024);
}
if(GpuDetect.gpus.size > 0) Log.info("[GL] Detected GPU: @", GpuDetect.gpus.toString(", "));
if(GpuDetect.isIntel) Log.warn("[GL] Intel GPU detected. Due to memory corruption issues, OpenGL 3 support has been disabled for Intel GPUs. See issue #11041.");
if(gl30 == null && !GpuDetect.isIntel) Log.warn("[GL] Your device or video drivers do not support OpenGL 3. This will cause performance issues.");
if(NvGpuInfo.hasMemoryInfo()) Log.info("[GL] Total available VRAM: @mb", NvGpuInfo.getMaxMemoryKB()/1024);
if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues.");
Log.info("[JAVA] Version: @", OS.javaVersion);
if(Core.app.isAndroid()){
Log.info("[ANDROID] API level: @", Core.app.getVersion());

View File

@@ -0,0 +1,28 @@
package mindustry.graphics;
import arc.struct.*;
import arc.util.*;
import java.util.*;
/** GPU detection for Windows only. All fields will be false or empty on other platforms, even if #init() is called. */
public class GpuDetect{
public static String rawGpuString = "";
public static Seq<String> gpus = new Seq<>();
public static boolean isIntel, isNvidia, isAMD;
public static void init(){
if(OS.isWindows){
try{
rawGpuString = OS.exec("wmic", "path", "win32_VideoController", "get", "name");
gpus = Seq.with(rawGpuString.split("\n")).map(s -> s.trim()).removeAll(s -> s.isEmpty() || s.equalsIgnoreCase("name"));
isIntel = rawGpuString.toLowerCase(Locale.ROOT).contains("intel");
isNvidia = rawGpuString.toLowerCase(Locale.ROOT).contains("nvidia");
isAMD = rawGpuString.toLowerCase(Locale.ROOT).contains("amd") || rawGpuString.toLowerCase(Locale.ROOT).contains("radeon");
}catch(Exception e){
Log.err(e);
}
}
}
}