ChunkSectionsToRender.java
net.minecraft.client.renderer.chunk.ChunkSectionsToRender
信息
- 全限定名:net.minecraft.client.renderer.chunk.ChunkSectionsToRender
- 类型:public record
- 包:net.minecraft.client.renderer.chunk
- 源码路径:src/main/java/net/minecraft/client/renderer/chunk/ChunkSectionsToRender.java
- 起始行号:L24
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void renderGroup(ChunkSectionLayerGroup group, GpuSampler sampler) @ L30
- 方法名:renderGroup
- 源码定位:L30
- 返回类型:void
- 修饰符:public
参数:
- group: ChunkSectionLayerGroup
- sampler: GpuSampler
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public record ChunkSectionsToRender(
GpuTextureView textureView,
EnumMap<ChunkSectionLayer, Int2ObjectOpenHashMap<List<RenderPass.Draw<GpuBufferSlice[]>>>> drawGroupsPerLayer,
int maxIndicesRequired,
GpuBufferSlice[] chunkSectionInfos
) {
public void renderGroup(ChunkSectionLayerGroup group, GpuSampler sampler) {
RenderSystem.AutoStorageIndexBuffer autoIndices = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS);
GpuBuffer defaultIndexBuffer = this.maxIndicesRequired == 0 ? null : autoIndices.getBuffer(this.maxIndicesRequired);
VertexFormat.IndexType defaultIndexType = this.maxIndicesRequired == 0 ? null : autoIndices.type();
ChunkSectionLayer[] layers = group.layers();
Minecraft minecraft = Minecraft.getInstance();
boolean wireframe = SharedConstants.DEBUG_HOTKEYS && minecraft.wireframe;
RenderTarget renderTarget = group.outputTarget();
try (RenderPass renderPass = RenderSystem.getDevice()
.createCommandEncoder()
.createRenderPass(
() -> "Section layers for " + group.label(),
renderTarget.getColorTextureView(),
OptionalInt.empty(),
renderTarget.getDepthTextureView(),
OptionalDouble.empty()
)) {
RenderSystem.bindDefaultUniforms(renderPass);
renderPass.bindTexture("Sampler0", this.textureView, sampler);
renderPass.bindTexture("Sampler2", minecraft.gameRenderer.lightmap(), RenderSystem.getSamplerCache().getClampToEdge(FilterMode.LINEAR));
for (ChunkSectionLayer layer : layers) {
renderPass.setPipeline(wireframe ? RenderPipelines.WIREFRAME : layer.pipeline());
Int2ObjectOpenHashMap<List<RenderPass.Draw<GpuBufferSlice[]>>> drawGroup = this.drawGroupsPerLayer.get(layer);
for (List<RenderPass.Draw<GpuBufferSlice[]>> draws : drawGroup.values()) {
if (!draws.isEmpty()) {
if (layer == ChunkSectionLayer.TRANSLUCENT) {
draws = draws.reversed();
}
renderPass.drawMultipleIndexed(draws, defaultIndexBuffer, defaultIndexType, List.of("ChunkSection"), this.chunkSectionInfos);
}
}
}
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
RenderSystem.bindDefaultUniforms(), RenderSystem.getDevice(), RenderSystem.getSamplerCache(), RenderSystem.getSequentialBuffer()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: