CrossFrameResourcePool.java
com.mojang.blaze3d.resource.CrossFrameResourcePool
信息
- 全限定名:com.mojang.blaze3d.resource.CrossFrameResourcePool
- 类型:public class
- 包:com.mojang.blaze3d.resource
- 源码路径:src/main/java/com/mojang/blaze3d/resource/CrossFrameResourcePool.java
- 起始行号:L12
- 实现:GraphicsResourceAllocator, AutoCloseable
- 职责:
TODO
字段/常量
-
framesToKeepResource- 类型:
int - 修饰符:
private final - 源码定位:
L13 - 说明:
TODO
- 类型:
-
pool- 类型:
Deque<CrossFrameResourcePool.ResourceEntry<?>> - 修饰符:
private final - 源码定位:
L14 - 说明:
TODO
- 类型:
内部类/嵌套类型
com.mojang.blaze3d.resource.CrossFrameResourcePool.ResourceEntry- 类型:
class - 修饰符:
protected static final - 源码定位:
L75 - 说明:
TODO
- 类型:
构造器
public CrossFrameResourcePool(int framesToKeepResource) @ L16
- 构造器名:CrossFrameResourcePool
- 源码定位:L16
- 修饰符:public
参数:
- framesToKeepResource: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void endFrame() @ L20
- 方法名:endFrame
- 源码定位:L20
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public <T> T acquire(ResourceDescriptor<T> descriptor) @ L32
- 方法名:acquire
- 源码定位:L32
- 返回类型:
T - 修饰符:public
参数:
- descriptor: ResourceDescriptor
说明:
TODO
private <T> T acquireWithoutPreparing(ResourceDescriptor<T> descriptor) @ L39
- 方法名:acquireWithoutPreparing
- 源码定位:L39
- 返回类型:
T - 修饰符:private
参数:
- descriptor: ResourceDescriptor
说明:
TODO
public <T> void release(ResourceDescriptor<T> descriptor, T resource) @ L53
- 方法名:release
- 源码定位:L53
- 返回类型:
void - 修饰符:public
参数:
- descriptor: ResourceDescriptor
- resource: T
说明:
TODO
public void clear() @ L58
- 方法名:clear
- 源码定位:L58
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void close() @ L63
- 方法名:close
- 源码定位:L63
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
protected Collection<CrossFrameResourcePool.ResourceEntry<?>> entries() @ L68
- 方法名:entries
- 源码定位:L68
- 返回类型:Collection<CrossFrameResourcePool.ResourceEntry<?>>
- 修饰符:protected
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class CrossFrameResourcePool implements GraphicsResourceAllocator, AutoCloseable {
private final int framesToKeepResource;
private final Deque<CrossFrameResourcePool.ResourceEntry<?>> pool = new ArrayDeque<>();
public CrossFrameResourcePool(int framesToKeepResource) {
this.framesToKeepResource = framesToKeepResource;
}
public void endFrame() {
Iterator<? extends CrossFrameResourcePool.ResourceEntry<?>> iterator = this.pool.iterator();
while (iterator.hasNext()) {
CrossFrameResourcePool.ResourceEntry<?> entry = (CrossFrameResourcePool.ResourceEntry<?>)iterator.next();
if (entry.framesToLive-- == 0) {
entry.close();
iterator.remove();
}
}
}
@Override
public <T> T acquire(ResourceDescriptor<T> descriptor) {
T resource = this.acquireWithoutPreparing(descriptor);
descriptor.prepare(resource);
return resource;
}
private <T> T acquireWithoutPreparing(ResourceDescriptor<T> descriptor) {
Iterator<? extends CrossFrameResourcePool.ResourceEntry<?>> iterator = this.pool.iterator();
while (iterator.hasNext()) {
CrossFrameResourcePool.ResourceEntry<?> entry = (CrossFrameResourcePool.ResourceEntry<?>)iterator.next();
if (descriptor.canUsePhysicalResource(entry.descriptor)) {
iterator.remove();
return (T)entry.value;
}
}
return descriptor.allocate();
}
@Override
public <T> void release(ResourceDescriptor<T> descriptor, T resource) {
this.pool.addFirst(new CrossFrameResourcePool.ResourceEntry<>(descriptor, resource, this.framesToKeepResource));
}
public void clear() {
this.pool.forEach(CrossFrameResourcePool.ResourceEntry::close);
this.pool.clear();
}
@Override
public void close() {
this.clear();
}
@VisibleForTesting
protected Collection<CrossFrameResourcePool.ResourceEntry<?>> entries() {
return this.pool;
}
@OnlyIn(Dist.CLIENT)
@VisibleForTesting
protected static final class ResourceEntry<T> implements AutoCloseable {
private final ResourceDescriptor<T> descriptor;
private final T value;
private int framesToLive;
private ResourceEntry(ResourceDescriptor<T> descriptor, T value, int framesToLive) {
this.descriptor = descriptor;
this.value = value;
this.framesToLive = framesToLive;
}
@Override
public void close() {
this.descriptor.free(this.value);
}
}
}引用的其他类
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置: