CustomFeatureRenderer.java
net.minecraft.client.renderer.feature.CustomFeatureRenderer
信息
- 全限定名:net.minecraft.client.renderer.feature.CustomFeatureRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.feature
- 源码路径:src/main/java/net/minecraft/client/renderer/feature/CustomFeatureRenderer.java
- 起始行号:L21
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
net.minecraft.client.renderer.feature.CustomFeatureRenderer.Storage- 类型:
class - 修饰符:
public static - 源码定位:
L47 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void renderSolid(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource) @ L22
- 方法名:renderSolid
- 源码定位:L22
- 返回类型:void
- 修饰符:public
参数:
- nodeCollection: SubmitNodeCollection
- bufferSource: MultiBufferSource.BufferSource
说明:
TODO
public void renderTranslucent(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource) @ L34
- 方法名:renderTranslucent
- 源码定位:L34
- 返回类型:void
- 修饰符:public
参数:
- nodeCollection: SubmitNodeCollection
- bufferSource: MultiBufferSource.BufferSource
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class CustomFeatureRenderer {
public void renderSolid(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource) {
CustomFeatureRenderer.Storage storage = nodeCollection.getCustomGeometrySubmits();
for (Entry<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> entry : storage.solidCustomGeometrySubmits.entrySet()) {
VertexConsumer buffer = bufferSource.getBuffer(entry.getKey());
for (SubmitNodeStorage.CustomGeometrySubmit customGeometrySubmit : entry.getValue()) {
customGeometrySubmit.customGeometryRenderer().render(customGeometrySubmit.pose(), buffer);
}
}
}
public void renderTranslucent(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource) {
CustomFeatureRenderer.Storage storage = nodeCollection.getCustomGeometrySubmits();
for (Entry<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> entry : storage.translucentCustomGeometrySubmits.entrySet()) {
VertexConsumer buffer = bufferSource.getBuffer(entry.getKey());
for (SubmitNodeStorage.CustomGeometrySubmit customGeometrySubmit : entry.getValue()) {
customGeometrySubmit.customGeometryRenderer().render(customGeometrySubmit.pose(), buffer);
}
}
}
@OnlyIn(Dist.CLIENT)
public static class Storage {
private final Map<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> solidCustomGeometrySubmits = new HashMap<>();
private final Map<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> translucentCustomGeometrySubmits = new HashMap<>();
private final Set<RenderType> solidCustomGeometrySubmitsUsage = new ObjectOpenHashSet<>();
private final Set<RenderType> translucentCustomGeometrySubmitsUsage = new ObjectOpenHashSet<>();
public void add(PoseStack poseStack, RenderType renderType, SubmitNodeCollector.CustomGeometryRenderer customGeometryRenderer) {
SubmitNodeStorage.CustomGeometrySubmit submit = new SubmitNodeStorage.CustomGeometrySubmit(poseStack.last().copy(), customGeometryRenderer);
if (!renderType.hasBlending()) {
this.solidCustomGeometrySubmits.computeIfAbsent(renderType, rt -> new ArrayList<>()).add(submit);
} else {
this.translucentCustomGeometrySubmits.computeIfAbsent(renderType, rt -> new ArrayList<>()).add(submit);
}
}
public void clear() {
for (Entry<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> entry : this.solidCustomGeometrySubmits.entrySet()) {
if (!entry.getValue().isEmpty()) {
this.solidCustomGeometrySubmitsUsage.add(entry.getKey());
entry.getValue().clear();
}
}
for (Entry<RenderType, List<SubmitNodeStorage.CustomGeometrySubmit>> entryx : this.translucentCustomGeometrySubmits.entrySet()) {
if (!entryx.getValue().isEmpty()) {
this.translucentCustomGeometrySubmitsUsage.add(entryx.getKey());
entryx.getValue().clear();
}
}
}
public void endFrame() {
this.solidCustomGeometrySubmits.keySet().removeIf(renderType -> !this.solidCustomGeometrySubmitsUsage.contains(renderType));
this.solidCustomGeometrySubmitsUsage.clear();
this.translucentCustomGeometrySubmits.keySet().removeIf(renderType -> !this.translucentCustomGeometrySubmitsUsage.contains(renderType));
this.translucentCustomGeometrySubmitsUsage.clear();
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
CustomGeometrySubmit(), SubmitNodeStorage.CustomGeometrySubmit()
- 引用位置: