ModelPartFeatureRenderer.java
net.minecraft.client.renderer.feature.ModelPartFeatureRenderer
信息
- 全限定名:net.minecraft.client.renderer.feature.ModelPartFeatureRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.feature
- 源码路径:src/main/java/net/minecraft/client/renderer/feature/ModelPartFeatureRenderer.java
- 起始行号:L23
- 职责:
TODO
字段/常量
poseStack- 类型:
PoseStack - 修饰符:
private final - 源码定位:
L24 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.feature.ModelPartFeatureRenderer.Storage- 类型:
class - 修饰符:
public static - 源码定位:
L102 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public void renderSolid(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource, OutlineBufferSource outlineBufferSource, MultiBufferSource.BufferSource crumblingBufferSource) @ L26
- 方法名:renderSolid
- 源码定位:L26
- 返回类型:void
- 修饰符:public
参数:
- nodeCollection: SubmitNodeCollection
- bufferSource: MultiBufferSource.BufferSource
- outlineBufferSource: OutlineBufferSource
- crumblingBufferSource: MultiBufferSource.BufferSource
说明:
TODO
public void renderTranslucent(SubmitNodeCollection nodeCollection, MultiBufferSource.BufferSource bufferSource, OutlineBufferSource outlineBufferSource, MultiBufferSource.BufferSource crumblingBufferSource) @ L36
- 方法名:renderTranslucent
- 源码定位:L36
- 返回类型:void
- 修饰符:public
参数:
- nodeCollection: SubmitNodeCollection
- bufferSource: MultiBufferSource.BufferSource
- outlineBufferSource: OutlineBufferSource
- crumblingBufferSource: MultiBufferSource.BufferSource
说明:
TODO
private void render(Map<RenderType,List<SubmitNodeStorage.ModelPartSubmit>> modelPartSubmitsMap, MultiBufferSource.BufferSource bufferSource, OutlineBufferSource outlineBufferSource, MultiBufferSource.BufferSource crumblingBufferSource) @ L46
- 方法名:render
- 源码定位:L46
- 返回类型:void
- 修饰符:private
参数:
- modelPartSubmitsMap: Map<RenderType,List<SubmitNodeStorage.ModelPartSubmit>>
- bufferSource: MultiBufferSource.BufferSource
- outlineBufferSource: OutlineBufferSource
- crumblingBufferSource: MultiBufferSource.BufferSource
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ModelPartFeatureRenderer {
private final PoseStack poseStack = new PoseStack();
public void renderSolid(
SubmitNodeCollection nodeCollection,
MultiBufferSource.BufferSource bufferSource,
OutlineBufferSource outlineBufferSource,
MultiBufferSource.BufferSource crumblingBufferSource
) {
ModelPartFeatureRenderer.Storage storage = nodeCollection.getModelPartSubmits();
this.render(storage.solidModelPartSubmits, bufferSource, outlineBufferSource, crumblingBufferSource);
}
public void renderTranslucent(
SubmitNodeCollection nodeCollection,
MultiBufferSource.BufferSource bufferSource,
OutlineBufferSource outlineBufferSource,
MultiBufferSource.BufferSource crumblingBufferSource
) {
ModelPartFeatureRenderer.Storage storage = nodeCollection.getModelPartSubmits();
this.render(storage.translucentModelPartSubmits, bufferSource, outlineBufferSource, crumblingBufferSource);
}
private void render(
Map<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> modelPartSubmitsMap,
MultiBufferSource.BufferSource bufferSource,
OutlineBufferSource outlineBufferSource,
MultiBufferSource.BufferSource crumblingBufferSource
) {
for (Entry<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> entry : modelPartSubmitsMap.entrySet()) {
RenderType renderType = entry.getKey();
List<SubmitNodeStorage.ModelPartSubmit> modelPartSubmits = entry.getValue();
VertexConsumer buffer = bufferSource.getBuffer(renderType);
for (SubmitNodeStorage.ModelPartSubmit modelPartSubmit : modelPartSubmits) {
VertexConsumer actualBuffer;
if (modelPartSubmit.sprite() != null) {
if (modelPartSubmit.hasFoil()) {
actualBuffer = modelPartSubmit.sprite()
.wrap(ItemFeatureRenderer.getFoilBuffer(bufferSource, renderType, modelPartSubmit.sheeted(), true));
} else {
actualBuffer = modelPartSubmit.sprite().wrap(buffer);
}
} else if (modelPartSubmit.hasFoil()) {
actualBuffer = ItemFeatureRenderer.getFoilBuffer(bufferSource, renderType, modelPartSubmit.sheeted(), true);
} else {
actualBuffer = buffer;
}
this.poseStack.last().set(modelPartSubmit.pose());
modelPartSubmit.modelPart()
.render(this.poseStack, actualBuffer, modelPartSubmit.lightCoords(), modelPartSubmit.overlayCoords(), modelPartSubmit.tintedColor());
if (modelPartSubmit.outlineColor() != 0 && (renderType.outline().isPresent() || renderType.isOutline())) {
outlineBufferSource.setColor(modelPartSubmit.outlineColor());
VertexConsumer outlineBuffer = outlineBufferSource.getBuffer(renderType);
modelPartSubmit.modelPart()
.render(
this.poseStack,
modelPartSubmit.sprite() == null ? outlineBuffer : modelPartSubmit.sprite().wrap(outlineBuffer),
modelPartSubmit.lightCoords(),
modelPartSubmit.overlayCoords(),
modelPartSubmit.tintedColor()
);
}
if (modelPartSubmit.crumblingOverlay() != null) {
VertexConsumer breakingBuffer = new SheetedDecalTextureGenerator(
crumblingBufferSource.getBuffer(ModelBakery.DESTROY_TYPES.get(modelPartSubmit.crumblingOverlay().progress())),
modelPartSubmit.crumblingOverlay().cameraPose(),
1.0F
);
modelPartSubmit.modelPart()
.render(this.poseStack, breakingBuffer, modelPartSubmit.lightCoords(), modelPartSubmit.overlayCoords(), modelPartSubmit.tintedColor());
}
}
}
}
@OnlyIn(Dist.CLIENT)
public static class Storage {
private final Map<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> solidModelPartSubmits = new HashMap<>();
private final Map<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> translucentModelPartSubmits = new HashMap<>();
private final Set<RenderType> solidModelPartSubmitsUsage = new ObjectOpenHashSet<>();
private final Set<RenderType> translucentModelPartSubmitsUsage = new ObjectOpenHashSet<>();
public void add(RenderType renderType, SubmitNodeStorage.ModelPartSubmit submit) {
if (!renderType.hasBlending()) {
this.solidModelPartSubmits.computeIfAbsent(renderType, ignored -> new ArrayList<>()).add(submit);
} else {
this.translucentModelPartSubmits.computeIfAbsent(renderType, ignored -> new ArrayList<>()).add(submit);
}
}
public void clear() {
for (Entry<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> entry : this.solidModelPartSubmits.entrySet()) {
if (!entry.getValue().isEmpty()) {
this.solidModelPartSubmitsUsage.add(entry.getKey());
entry.getValue().clear();
}
}
for (Entry<RenderType, List<SubmitNodeStorage.ModelPartSubmit>> entryx : this.translucentModelPartSubmits.entrySet()) {
if (!entryx.getValue().isEmpty()) {
this.translucentModelPartSubmitsUsage.add(entryx.getKey());
entryx.getValue().clear();
}
}
}
public void endFrame() {
this.solidModelPartSubmits.keySet().removeIf(renderType -> !this.solidModelPartSubmitsUsage.contains(renderType));
this.solidModelPartSubmitsUsage.clear();
this.translucentModelPartSubmits.keySet().removeIf(renderType -> !this.translucentModelPartSubmitsUsage.contains(renderType));
this.translucentModelPartSubmitsUsage.clear();
}
}
}引用的其他类
-
- 引用位置:
字段/构造调用 - 关联成员:
PoseStack()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
SheetedDecalTextureGenerator()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ItemFeatureRenderer.getFoilBuffer()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: