Skip to content

Commit 42f7d0b

Browse files
committed
refactor(26.2): Update IconExport to 26.2-snapshot-5
1 parent 0bf536f commit 42f7d0b

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

  • common/src/main/java/net/blay09/mods/balm/client/platform/util

common/src/main/java/net/blay09/mods/balm/client/platform/util/IconExport.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@
66
import com.mojang.blaze3d.pipeline.TextureTarget;
77
import com.mojang.blaze3d.platform.Lighting;
88
import com.mojang.blaze3d.platform.NativeImage;
9+
import com.mojang.blaze3d.systems.CommandEncoder;
910
import com.mojang.blaze3d.systems.RenderSystem;
10-
import com.mojang.blaze3d.textures.GpuTexture;
11+
import com.mojang.blaze3d.vertex.PoseStack;
1112
import net.minecraft.client.Minecraft;
1213
import net.minecraft.client.renderer.Projection;
1314
import net.minecraft.client.renderer.ProjectionMatrixBuffer;
15+
import net.minecraft.client.renderer.SubmitNodeStorage;
1416
import net.minecraft.client.renderer.item.TrackingItemStackRenderState;
1517
import net.minecraft.client.renderer.texture.OverlayTexture;
1618
import net.minecraft.core.registries.BuiltInRegistries;
1719
import net.minecraft.resources.Identifier;
1820
import net.minecraft.util.LightCoordsUtil;
1921
import net.minecraft.world.item.CreativeModeTabs;
22+
import net.minecraft.world.item.ItemDisplayContext;
2023
import org.slf4j.Logger;
2124
import org.slf4j.LoggerFactory;
2225

@@ -76,21 +79,21 @@ private static void exportItem(Minecraft minecraft, ProjectionMatrixBuffer proje
7679
renderTarget = new TextureTarget("balm_icon_export", EXPORT_SIZE, EXPORT_SIZE, true);
7780
final var colorTexture = Objects.requireNonNull(renderTarget.getColorTexture(), "color texture missing");
7881
final var depthTexture = Objects.requireNonNull(renderTarget.getDepthTexture(), "depth texture missing");
82+
final var offscreenCommandEncoder = RenderSystem.getDevice().createCommandEncoder();
7983

8084
final var projection = new Projection();
8185
projection.setupOrtho(-1000f, 1000f, EXPORT_SIZE, EXPORT_SIZE, true);
8286

83-
final var commandEncoder = RenderSystem.getDevice().createCommandEncoder();
84-
commandEncoder.clearColorAndDepthTextures(colorTexture, 0, depthTexture, 1.0);
87+
offscreenCommandEncoder.clearColorAndDepthTextures(colorTexture, 0, depthTexture, 0.0);
8588

8689
final var gameRenderer = minecraft.gameRenderer;
8790
final var trackingState = new TrackingItemStackRenderState();
88-
minecraft.getItemModelResolver().updateForTopItem(trackingState, itemStack, net.minecraft.world.item.ItemDisplayContext.GUI, minecraft.level, minecraft.player, 0);
91+
final var submitNodeStorage = new SubmitNodeStorage();
92+
minecraft.getItemModelResolver().updateForTopItem(trackingState, itemStack, ItemDisplayContext.GUI, minecraft.level, minecraft.player, 0);
8993

90-
final var poseStack = new com.mojang.blaze3d.vertex.PoseStack();
94+
final var poseStack = new PoseStack();
9195
poseStack.translate(EXPORT_SIZE / 2f, EXPORT_SIZE / 2f, 0f);
92-
poseStack.scale(ITEM_RENDER_SCALE, ITEM_RENDER_SCALE, -ITEM_RENDER_SCALE);
93-
poseStack.scale(1f, -1f, -1f);
96+
poseStack.scale(ITEM_RENDER_SCALE, -ITEM_RENDER_SCALE, ITEM_RENDER_SCALE);
9497

9598
final var previousColorOverride = RenderSystem.outputColorTextureOverride;
9699
final var previousDepthOverride = RenderSystem.outputDepthTextureOverride;
@@ -106,9 +109,9 @@ private static void exportItem(Minecraft minecraft, ProjectionMatrixBuffer proje
106109
gameRenderer.lighting().setupFor(Lighting.Entry.ITEMS_FLAT);
107110
}
108111

109-
trackingState.submit(poseStack, gameRenderer.submitNodeStorage(), LightCoordsUtil.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, 0);
110-
gameRenderer.featureRenderDispatcher().renderAllFeatures();
111-
gameRenderer.renderBuffers().bufferSource().uploadAndDraw();
112+
trackingState.submit(poseStack, submitNodeStorage, LightCoordsUtil.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, 0);
113+
gameRenderer.featureRenderDispatcher().renderAllFeatures(submitNodeStorage);
114+
gameRenderer.renderBuffers().endFrame();
112115
} finally {
113116
RenderSystem.outputColorTextureOverride = previousColorOverride;
114117
RenderSystem.outputDepthTextureOverride = previousDepthOverride;
@@ -122,11 +125,18 @@ private static void exportItem(Minecraft minecraft, ProjectionMatrixBuffer proje
122125
(long) EXPORT_SIZE * EXPORT_SIZE * pixelSize);
123126

124127
final var targetFile = new File(exportFolder, itemId.getPath() + ".png");
128+
final var readCommandEncoder = RenderSystem.getDevice().createCommandEncoder();
125129
final var bufferToRead = screenshotBuffer;
126130
final var renderTargetToDestroy = renderTarget;
127131
renderTarget = null;
128132
screenshotBuffer = null;
129-
commandEncoder.copyTextureToBuffer(colorTexture, bufferToRead, 0, () -> writeExportedImage(bufferToRead, renderTargetToDestroy, targetFile), 0);
133+
offscreenCommandEncoder.copyTextureToBuffer(
134+
colorTexture,
135+
bufferToRead,
136+
0,
137+
() -> writeExportedImage(readCommandEncoder, bufferToRead, renderTargetToDestroy, targetFile),
138+
0);
139+
offscreenCommandEncoder.submit();
130140
} catch (Exception e) {
131141
if (screenshotBuffer != null) {
132142
screenshotBuffer.close();
@@ -138,9 +148,9 @@ private static void exportItem(Minecraft minecraft, ProjectionMatrixBuffer proje
138148
}
139149
}
140150

141-
private static void writeExportedImage(GpuBuffer screenshotBuffer, RenderTarget renderTarget, File targetFile) {
151+
private static void writeExportedImage(CommandEncoder readCommandEncoder, GpuBuffer screenshotBuffer, RenderTarget renderTarget, File targetFile) {
142152
try (screenshotBuffer;
143-
final var readView = RenderSystem.getDevice().createCommandEncoder().mapBuffer(screenshotBuffer, true, false);
153+
final var readView = readCommandEncoder.mapBuffer(screenshotBuffer, true, false);
144154
final var nativeImage = new NativeImage(EXPORT_SIZE, EXPORT_SIZE, false)) {
145155
final var byteBuffer = readView.data();
146156
for (int y = 0; y < EXPORT_SIZE; y++) {

0 commit comments

Comments
 (0)