LazyLoadedImage.java

net.minecraft.client.renderer.texture.atlas.sources.LazyLoadedImage

信息

  • 全限定名:net.minecraft.client.renderer.texture.atlas.sources.LazyLoadedImage
  • 类型:public class
  • 包:net.minecraft.client.renderer.texture.atlas.sources
  • 源码路径:src/main/java/net/minecraft/client/renderer/texture/atlas/sources/LazyLoadedImage.java
  • 起始行号:L15
  • 职责:

    TODO

字段/常量

  • id

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

      TODO

  • resource

    • 类型: Resource
    • 修饰符: private final
    • 源码定位: L17
    • 说明:

      TODO

  • image

    • 类型: AtomicReference<NativeImage>
    • 修饰符: private final
    • 源码定位: L18
    • 说明:

      TODO

  • referenceCount

    • 类型: AtomicInteger
    • 修饰符: private final
    • 源码定位: L19
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LazyLoadedImage(Identifier id, Resource resource, int count) @ L21

  • 构造器名:LazyLoadedImage
  • 源码定位:L21
  • 修饰符:public

参数:

  • id: Identifier
  • resource: Resource
  • count: int

说明:

TODO

方法

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

public NativeImage get() @ L27

  • 方法名:get
  • 源码定位:L27
  • 返回类型:NativeImage
  • 修饰符:public

参数:

说明:

TODO

public void release() @ L46

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

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LazyLoadedImage {
    private final Identifier id;
    private final Resource resource;
    private final AtomicReference<@Nullable NativeImage> image = new AtomicReference<>();
    private final AtomicInteger referenceCount;
 
    public LazyLoadedImage(Identifier id, Resource resource, int count) {
        this.id = id;
        this.resource = resource;
        this.referenceCount = new AtomicInteger(count);
    }
 
    public NativeImage get() throws IOException {
        NativeImage nativeImage = this.image.get();
        if (nativeImage == null) {
            synchronized (this) {
                nativeImage = this.image.get();
                if (nativeImage == null) {
                    try (InputStream stream = this.resource.open()) {
                        nativeImage = NativeImage.read(stream);
                        this.image.set(nativeImage);
                    } catch (IOException var9) {
                        throw new IOException("Failed to load image " + this.id, var9);
                    }
                }
            }
        }
 
        return nativeImage;
    }
 
    public void release() {
        int references = this.referenceCount.decrementAndGet();
        if (references <= 0) {
            NativeImage nativeImage = this.image.getAndSet(null);
            if (nativeImage != null) {
                nativeImage.close();
            }
        }
    }
}

引用的其他类

  • NativeImage

    • 引用位置: 字段/方法调用/返回值
    • 关联成员: NativeImage.read()
  • Identifier

    • 引用位置: 参数/字段
  • Resource

    • 引用位置: 参数/字段