GpuWarnlistManager.java

net.minecraft.client.renderer.GpuWarnlistManager

信息

  • 全限定名:net.minecraft.client.renderer.GpuWarnlistManager
  • 类型:public class
  • 包:net.minecraft.client.renderer
  • 源码路径:src/main/java/net/minecraft/client/renderer/GpuWarnlistManager.java
  • 起始行号:L29
  • 继承:SimplePreparableReloadListener<GpuWarnlistManager.Preparations>
  • 职责:

    TODO

字段/常量

  • LOGGER

    • 类型: Logger
    • 修饰符: private static final
    • 源码定位: L30
    • 说明:

      TODO

  • GPU_WARNLIST_LOCATION

    • 类型: Identifier
    • 修饰符: private static final
    • 源码定位: L31
    • 说明:

      TODO

  • warnings

    • 类型: ImmutableMap<String,String>
    • 修饰符: private
    • 源码定位: L32
    • 说明:

      TODO

  • showWarning

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L33
    • 说明:

      TODO

  • warningDismissed

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L34
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.renderer.GpuWarnlistManager.Preparations
    • 类型: class
    • 修饰符: protected static final
    • 源码定位: L121
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

public boolean hasWarnings() @ L36

  • 方法名:hasWarnings
  • 源码定位:L36
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public boolean willShowWarning() @ L40

  • 方法名:willShowWarning
  • 源码定位:L40
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public void showWarning() @ L44

  • 方法名:showWarning
  • 源码定位:L44
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public void dismissWarning() @ L48

  • 方法名:dismissWarning
  • 源码定位:L48
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public boolean isShowingWarning() @ L52

  • 方法名:isShowingWarning
  • 源码定位:L52
  • 返回类型:boolean
  • 修饰符:public

参数:

说明:

TODO

public void resetWarnings() @ L56

  • 方法名:resetWarnings
  • 源码定位:L56
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public String getRendererWarnings() @ L61

  • 方法名:getRendererWarnings
  • 源码定位:L61
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public String getVersionWarnings() @ L65

  • 方法名:getVersionWarnings
  • 源码定位:L65
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public String getVendorWarnings() @ L69

  • 方法名:getVendorWarnings
  • 源码定位:L69
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public String getAllWarnings() @ L73

  • 方法名:getAllWarnings
  • 源码定位:L73
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

protected GpuWarnlistManager.Preparations prepare(ResourceManager manager, ProfilerFiller profiler) @ L79

  • 方法名:prepare
  • 源码定位:L79
  • 返回类型:GpuWarnlistManager.Preparations
  • 修饰符:protected

参数:

  • manager: ResourceManager
  • profiler: ProfilerFiller

说明:

TODO

protected void apply(GpuWarnlistManager.Preparations preparations, ResourceManager manager, ProfilerFiller profiler) @ L95

  • 方法名:apply
  • 源码定位:L95
  • 返回类型:void
  • 修饰符:protected

参数:

  • preparations: GpuWarnlistManager.Preparations
  • manager: ResourceManager
  • profiler: ProfilerFiller

说明:

TODO

private static void compilePatterns(JsonArray jsonArray, List<Pattern> patternList) @ L99

  • 方法名:compilePatterns
  • 源码定位:L99
  • 返回类型:void
  • 修饰符:private static

参数:

  • jsonArray: JsonArray
  • patternList: List

说明:

TODO

private static JsonObject parseJson(ResourceManager manager, ProfilerFiller profiler) @ L103

  • 方法名:parseJson
  • 源码定位:L103
  • 返回类型:JsonObject
  • 修饰符:private static

参数:

  • manager: ResourceManager
  • profiler: ProfilerFiller

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class GpuWarnlistManager extends SimplePreparableReloadListener<GpuWarnlistManager.Preparations> {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final Identifier GPU_WARNLIST_LOCATION = Identifier.withDefaultNamespace("gpu_warnlist.json");
    private ImmutableMap<String, String> warnings = ImmutableMap.of();
    private boolean showWarning;
    private boolean warningDismissed;
 
    public boolean hasWarnings() {
        return !this.warnings.isEmpty();
    }
 
    public boolean willShowWarning() {
        return this.hasWarnings() && !this.warningDismissed;
    }
 
    public void showWarning() {
        this.showWarning = true;
    }
 
    public void dismissWarning() {
        this.warningDismissed = true;
    }
 
    public boolean isShowingWarning() {
        return this.showWarning && !this.warningDismissed;
    }
 
    public void resetWarnings() {
        this.showWarning = false;
        this.warningDismissed = false;
    }
 
    public @Nullable String getRendererWarnings() {
        return this.warnings.get("renderer");
    }
 
    public @Nullable String getVersionWarnings() {
        return this.warnings.get("version");
    }
 
    public @Nullable String getVendorWarnings() {
        return this.warnings.get("vendor");
    }
 
    public @Nullable String getAllWarnings() {
        StringBuilder sb = new StringBuilder();
        this.warnings.forEach((k, v) -> sb.append(k).append(": ").append(v));
        return sb.isEmpty() ? null : sb.toString();
    }
 
    protected GpuWarnlistManager.Preparations prepare(ResourceManager manager, ProfilerFiller profiler) {
        List<Pattern> rendererPatterns = Lists.newArrayList();
        List<Pattern> versionPatterns = Lists.newArrayList();
        List<Pattern> vendorPatterns = Lists.newArrayList();
        JsonObject root = parseJson(manager, profiler);
        if (root != null) {
            try (Zone ignored = profiler.zone("compile_regex")) {
                compilePatterns(root.getAsJsonArray("renderer"), rendererPatterns);
                compilePatterns(root.getAsJsonArray("version"), versionPatterns);
                compilePatterns(root.getAsJsonArray("vendor"), vendorPatterns);
            }
        }
 
        return new GpuWarnlistManager.Preparations(rendererPatterns, versionPatterns, vendorPatterns);
    }
 
    protected void apply(GpuWarnlistManager.Preparations preparations, ResourceManager manager, ProfilerFiller profiler) {
        this.warnings = preparations.apply();
    }
 
    private static void compilePatterns(JsonArray jsonArray, List<Pattern> patternList) {
        jsonArray.forEach(e -> patternList.add(Pattern.compile(e.getAsString(), 2)));
    }
 
    private static @Nullable JsonObject parseJson(ResourceManager manager, ProfilerFiller profiler) {
        try {
            JsonObject var4;
            try (
                Zone ignored = profiler.zone("parse_json");
                Reader resource = manager.openAsReader(GPU_WARNLIST_LOCATION);
            ) {
                var4 = StrictJsonParser.parse(resource).getAsJsonObject();
            }
 
            return var4;
        } catch (JsonSyntaxException | IOException var10) {
            LOGGER.warn("Failed to load GPU warnlist", (Throwable)var10);
            return null;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    protected static final class Preparations {
        private final List<Pattern> rendererPatterns;
        private final List<Pattern> versionPatterns;
        private final List<Pattern> vendorPatterns;
 
        private Preparations(List<Pattern> rendererPatterns, List<Pattern> versionPatterns, List<Pattern> vendorPatterns) {
            this.rendererPatterns = rendererPatterns;
            this.versionPatterns = versionPatterns;
            this.vendorPatterns = vendorPatterns;
        }
 
        private static String matchAny(List<Pattern> patterns, String input) {
            List<String> allMatches = Lists.newArrayList();
 
            for (Pattern pattern : patterns) {
                Matcher matcher = pattern.matcher(input);
 
                while (matcher.find()) {
                    allMatches.add(matcher.group());
                }
            }
 
            return String.join(", ", allMatches);
        }
 
        private ImmutableMap<String, String> apply() {
            Builder<String, String> map = new Builder<>();
            GpuDevice device = RenderSystem.getDevice();
            if (device.getBackendName().equals("OpenGL")) {
                String rendererFails = matchAny(this.rendererPatterns, device.getRenderer());
                if (!rendererFails.isEmpty()) {
                    map.put("renderer", rendererFails);
                }
 
                String versionFails = matchAny(this.versionPatterns, device.getVersion());
                if (!versionFails.isEmpty()) {
                    map.put("version", versionFails);
                }
 
                String vendorFails = matchAny(this.vendorPatterns, device.getVendor());
                if (!vendorFails.isEmpty()) {
                    map.put("vendor", vendorFails);
                }
            }
 
            return map.build();
        }
    }
}

引用的其他类