Skip to content

Commit

Permalink
1.21 Port II
Browse files Browse the repository at this point in the history
  • Loading branch information
IThundxr committed Jul 10, 2024
1 parent d587ec0 commit d092417
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.engine_room.flywheel.impl.mixin;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import com.mojang.blaze3d.vertex.BufferBuilder;

@Mixin(BufferBuilder.class)
public interface BufferBuilderAccessor {
@Accessor("building")
boolean flywheel$getBuilding();
}
1 change: 1 addition & 0 deletions common/src/main/resources/flywheel.impl.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"refmap": "flywheel.refmap.json",
"client": [
"BlockEntityTypeMixin",
"BufferBuilderAccessor",
"ClientChunkCacheMixin",
"ClientLevelMixin",
"EntityTypeMixin",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,33 @@
import org.jetbrains.annotations.UnknownNullability;

import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;

import dev.engine_room.flywheel.impl.mixin.BufferBuilderAccessor;
import net.minecraft.client.renderer.RenderType;

class MeshEmitter {
private final RenderType renderType;
private final BufferBuilder bufferBuilder;
private final ByteBufferBuilder byteBufferBuilder;
private BufferBuilder bufferBuilder;

private BakedModelBufferer.@UnknownNullability ResultConsumer resultConsumer;
private boolean currentShade;

MeshEmitter(RenderType renderType) {
this.renderType = renderType;
this.bufferBuilder = new BufferBuilder(renderType.bufferSize());
this.byteBufferBuilder = new ByteBufferBuilder(renderType.bufferSize());
this.bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}

public void prepare(BakedModelBufferer.ResultConsumer resultConsumer) {
this.resultConsumer = resultConsumer;
}

public void end() {
if (bufferBuilder.building()) {
if (((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
emit();
}
resultConsumer = null;
Expand All @@ -37,22 +41,22 @@ public BufferBuilder getBuffer(boolean shade) {
}

void prepareForGeometry(boolean shade) {
if (!bufferBuilder.building()) {
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
if (!((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
} else if (shade != currentShade) {
emit();
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}

currentShade = shade;
}

void emit() {
var renderedBuffer = bufferBuilder.endOrDiscardIfEmpty();
var renderedBuffer = bufferBuilder.build();

if (renderedBuffer != null) {
resultConsumer.accept(renderType, currentShade, renderedBuffer);
renderedBuffer.release();
renderedBuffer.close();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,36 @@
import org.jetbrains.annotations.UnknownNullability;

import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;

import dev.engine_room.flywheel.impl.mixin.BufferBuilderAccessor;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;

class MeshEmitter implements VertexConsumer {
private final RenderType renderType;
private final BufferBuilder bufferBuilder;
private final ByteBufferBuilder byteBufferBuilder;
private BufferBuilder bufferBuilder;

private BakedModelBufferer.@UnknownNullability ResultConsumer resultConsumer;
private boolean currentShade;

MeshEmitter(RenderType renderType) {
this.renderType = renderType;
this.bufferBuilder = new BufferBuilder(renderType.bufferSize());
}
MeshEmitter(RenderType renderType) {
this.renderType = renderType;
this.byteBufferBuilder = new ByteBufferBuilder(renderType.bufferSize());
this.bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}

public void prepare(BakedModelBufferer.ResultConsumer resultConsumer) {
this.resultConsumer = resultConsumer;
}

public void end() {
if (bufferBuilder.building()) {
if (((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
emit();
}
resultConsumer = null;
Expand All @@ -39,12 +43,12 @@ public BufferBuilder unwrap(boolean shade) {
return bufferBuilder;
}

private void prepareForGeometry(boolean shade) {
if (!bufferBuilder.building()) {
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
void prepareForGeometry(boolean shade) {
if (!((BufferBuilderAccessor) bufferBuilder).flywheel$getBuilding()) {
bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
} else if (shade != currentShade) {
emit();
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
}

currentShade = shade;
Expand All @@ -55,11 +59,11 @@ private void prepareForGeometry(BakedQuad quad) {
}

private void emit() {
var renderedBuffer = bufferBuilder.endOrDiscardIfEmpty();
var renderedBuffer = bufferBuilder.build();

if (renderedBuffer != null) {
resultConsumer.accept(renderType, currentShade, renderedBuffer);
renderedBuffer.release();
renderedBuffer.close();
}
}

Expand Down

0 comments on commit d092417

Please sign in to comment.