MultiBufferSource.java
net.minecraft.client.renderer.MultiBufferSource
信息
- 全限定名:net.minecraft.client.renderer.MultiBufferSource
- 类型:public interface
- 包:net.minecraft.client.renderer
- 源码路径:src/main/java/net/minecraft/client/renderer/MultiBufferSource.java
- 起始行号:L18
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
net.minecraft.client.renderer.MultiBufferSource.BufferSource- 类型:
class - 修饰符:
public static - 源码定位:
L30 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
static MultiBufferSource.BufferSource immediate(ByteBufferBuilder buffer) @ L19
- 方法名:immediate
- 源码定位:L19
- 返回类型:MultiBufferSource.BufferSource
- 修饰符:static
参数:
- buffer: ByteBufferBuilder
说明:
TODO
static MultiBufferSource.BufferSource immediateWithBuffers(SequencedMap<RenderType,ByteBufferBuilder> fixedBuffers, ByteBufferBuilder sharedBuffer) @ L23
- 方法名:immediateWithBuffers
- 源码定位:L23
- 返回类型:MultiBufferSource.BufferSource
- 修饰符:static
参数:
- fixedBuffers: SequencedMap<RenderType,ByteBufferBuilder>
- sharedBuffer: ByteBufferBuilder
说明:
TODO
VertexConsumer getBuffer(RenderType renderType) @ L27
- 方法名:getBuffer
- 源码定位:L27
- 返回类型:VertexConsumer
- 修饰符:package-private
参数:
- renderType: RenderType
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public interface MultiBufferSource {
static MultiBufferSource.BufferSource immediate(ByteBufferBuilder buffer) {
return immediateWithBuffers(Object2ObjectSortedMaps.emptyMap(), buffer);
}
static MultiBufferSource.BufferSource immediateWithBuffers(SequencedMap<RenderType, ByteBufferBuilder> fixedBuffers, ByteBufferBuilder sharedBuffer) {
return new MultiBufferSource.BufferSource(sharedBuffer, fixedBuffers);
}
VertexConsumer getBuffer(final RenderType renderType);
@OnlyIn(Dist.CLIENT)
public static class BufferSource implements MultiBufferSource {
protected final ByteBufferBuilder sharedBuffer;
protected final SequencedMap<RenderType, ByteBufferBuilder> fixedBuffers;
protected final Map<RenderType, BufferBuilder> startedBuilders = new HashMap<>();
protected @Nullable RenderType lastSharedType;
protected BufferSource(ByteBufferBuilder sharedBuffer, SequencedMap<RenderType, ByteBufferBuilder> fixedBuffers) {
this.sharedBuffer = sharedBuffer;
this.fixedBuffers = fixedBuffers;
}
@Override
public VertexConsumer getBuffer(RenderType renderType) {
BufferBuilder builder = this.startedBuilders.get(renderType);
if (builder != null && !renderType.canConsolidateConsecutiveGeometry()) {
this.endBatch(renderType, builder);
builder = null;
}
if (builder != null) {
return builder;
} else {
ByteBufferBuilder fixedBuffer = this.fixedBuffers.get(renderType);
if (fixedBuffer != null) {
builder = new BufferBuilder(fixedBuffer, renderType.mode(), renderType.format());
} else {
if (this.lastSharedType != null) {
this.endBatch(this.lastSharedType);
}
builder = new BufferBuilder(this.sharedBuffer, renderType.mode(), renderType.format());
this.lastSharedType = renderType;
}
this.startedBuilders.put(renderType, builder);
return builder;
}
}
public void endLastBatch() {
if (this.lastSharedType != null) {
this.endBatch(this.lastSharedType);
this.lastSharedType = null;
}
}
public void endBatch() {
this.endLastBatch();
for (RenderType renderType : this.fixedBuffers.keySet()) {
this.endBatch(renderType);
}
}
public void endBatch(RenderType type) {
BufferBuilder builder = this.startedBuilders.remove(type);
if (builder != null) {
this.endBatch(type, builder);
}
}
private void endBatch(RenderType type, BufferBuilder builder) {
MeshData mesh = builder.build();
if (mesh != null) {
if (type.sortOnUpload()) {
ByteBufferBuilder buffer = this.fixedBuffers.getOrDefault(type, this.sharedBuffer);
mesh.sortQuads(buffer, RenderSystem.getProjectionType().vertexSorting());
}
type.draw(mesh);
}
if (type.equals(this.lastSharedType)) {
this.lastSharedType = null;
}
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
RenderSystem.getProjectionType()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
BufferBuilder()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置: