Skip to content

Commit e7082de

Browse files
committed
slight improvements to keyboardwidget & co
1 parent 9960e87 commit e7082de

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

src/main/java/dev/isxander/controlify/screenkeyboard/KeyboardWidget.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -56,25 +56,30 @@ public KeyboardWidget(Screen screen, int x, int y, int width, int height, KeyPre
5656

5757
@Override
5858
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
59-
Blit.drawSpecial(guiGraphics, bufferSource -> {
59+
for (T key : keys) {
60+
// vanilla widget render does other stuff like mouse hover update etc
61+
// render method of keys are empty - this doesn't actually do any rendering
62+
key.render(guiGraphics, mouseX, mouseY, partialTick);
63+
}
64+
65+
// draw in a managed context so we can batch render calls
66+
// everything within here is rendered in a single draw call
67+
Blit.drawManaged(guiGraphics, bufferSource -> {
6068
guiGraphics.fill(getX(), getY(), getX() + getWidth(), getY() + getHeight(), 0x80000000);
6169
guiGraphics.renderOutline(getX(), getY(), getWidth(), getHeight(), 0xFFAAAAAA);
6270

63-
for (T key : keys) {
64-
// doesn't do any actual rendering
65-
key.render(guiGraphics, mouseX, mouseY, partialTick);
66-
}
67-
6871
ControlifyVertexConsumer vertexConsumer = ControlifyVertexConsumer.of(
6972
bufferSource.getBuffer(ExtraRenderTypes.guiTextured(Key.SPRITE.atlas()))
7073
);
71-
7274
for (T key : keys) {
75+
// every key background is rendered into the same vertex buffer to upload at once
7376
Matrix4f pose = guiGraphics.pose().last().pose();
7477
key.renderKeyBackground(vertexConsumer, pose, mouseX, mouseY, partialTick);
7578
}
7679

80+
// renders all foreground after background to prevent context switching
7781
for (T key : keys) {
82+
// text rendering is batched by default in managed mode
7883
key.renderKeyForeground(guiGraphics, mouseX, mouseY, partialTick);
7984
}
8085
});

src/main/java/dev/isxander/controlify/utils/render/Blit.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dev.isxander.controlify.utils.render;
22

3-
import com.mojang.blaze3d.systems.RenderSystem;
43
import dev.isxander.controlify.utils.ColorUtils;
54
import net.minecraft.client.gui.GuiGraphics;
65
import net.minecraft.client.renderer.*;
@@ -10,7 +9,7 @@
109
import java.util.function.Consumer;
1110

1211
public final class Blit {
13-
public static void drawSpecial(GuiGraphics graphics, Consumer<MultiBufferSource> consumer) {
12+
public static void drawManaged(GuiGraphics graphics, Consumer<MultiBufferSource> consumer) {
1413
//? if >=1.21.2 {
1514
graphics.drawSpecial(consumer);
1615
//?} else {

src/main/java/dev/isxander/controlify/utils/render/SpriteUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
public class SpriteUtils {
88
public static void blitSprite(GuiGraphics graphics, ControlifySprite sprite, int x, int y, int width, int height) {
9-
Blit.drawSpecial(graphics, multiBufferSource -> {
9+
Blit.drawManaged(graphics, multiBufferSource -> {
1010
blitSprite(multiBufferSource, graphics.pose().last().pose(), sprite, x, y, width, height);
1111
});
1212
}

0 commit comments

Comments
 (0)