Remove VertexViewProvider and VertexViewProvider registry

This commit is contained in:
PepperCode1 2024-05-30 17:30:39 -07:00
parent c880cdc2a7
commit ee3958b140
34 changed files with 64 additions and 480 deletions

View file

@ -2,13 +2,10 @@ package dev.engine_room.flywheel.api.internal;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.backend.Backend; import dev.engine_room.flywheel.api.backend.Backend;
import dev.engine_room.flywheel.api.layout.LayoutBuilder; import dev.engine_room.flywheel.api.layout.LayoutBuilder;
import dev.engine_room.flywheel.api.registry.IdRegistry; import dev.engine_room.flywheel.api.registry.IdRegistry;
import dev.engine_room.flywheel.api.registry.Registry; import dev.engine_room.flywheel.api.registry.Registry;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
import dev.engine_room.flywheel.api.visualization.EntityVisualizer; import dev.engine_room.flywheel.api.visualization.EntityVisualizer;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
@ -35,10 +32,6 @@ public interface FlwApiLink {
LayoutBuilder createLayoutBuilder(); LayoutBuilder createLayoutBuilder();
VertexViewProvider getVertexViewProvider(VertexFormat format);
void setVertexViewProvider(VertexFormat format, VertexViewProvider provider);
boolean supportsVisualization(@Nullable LevelAccessor level); boolean supportsVisualization(@Nullable LevelAccessor level);
@Nullable @Nullable

View file

@ -1,5 +0,0 @@
package dev.engine_room.flywheel.api.vertex;
public interface VertexViewProvider {
VertexView createVertexView();
}

View file

@ -1,18 +0,0 @@
package dev.engine_room.flywheel.api.vertex;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.internal.FlwApiLink;
public final class VertexViewProviderRegistry {
private VertexViewProviderRegistry() {
}
public static VertexViewProvider getProvider(VertexFormat format) {
return FlwApiLink.INSTANCE.getVertexViewProvider(format);
}
public static void setProvider(VertexFormat format, VertexViewProvider provider) {
FlwApiLink.INSTANCE.setVertexViewProvider(format, provider);
}
}

View file

@ -1,23 +1,15 @@
package dev.engine_room.flywheel.lib.model; package dev.engine_room.flywheel.lib.model;
import java.nio.ByteBuffer;
import java.util.Collection; import java.util.Collection;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.joml.Vector3f; import org.joml.Vector3f;
import org.joml.Vector4f; import org.joml.Vector4f;
import org.lwjgl.system.MemoryUtil;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.BufferBuilder.DrawState;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh; import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexList; import dev.engine_room.flywheel.api.vertex.VertexList;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.api.vertex.VertexViewProviderRegistry;
import dev.engine_room.flywheel.lib.internal.FlwLibXplat; import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
import dev.engine_room.flywheel.lib.material.Materials; import dev.engine_room.flywheel.lib.material.Materials;
import dev.engine_room.flywheel.lib.memory.MemoryBlock; import dev.engine_room.flywheel.lib.memory.MemoryBlock;
@ -36,27 +28,6 @@ public final class ModelUtil {
private ModelUtil() { private ModelUtil() {
} }
public static MemoryBlock convertVanillaBuffer(BufferBuilder.RenderedBuffer buffer, VertexView vertexView) {
DrawState drawState = buffer.drawState();
int vertexCount = drawState.vertexCount();
VertexFormat srcFormat = drawState.format();
ByteBuffer src = buffer.vertexBuffer();
MemoryBlock dst = MemoryBlock.malloc((long) vertexCount * vertexView.stride());
long srcPtr = MemoryUtil.memAddress(src);
long dstPtr = dst.ptr();
VertexView srcView = VertexViewProviderRegistry.getProvider(srcFormat).createVertexView();
srcView.ptr(srcPtr);
vertexView.ptr(dstPtr);
srcView.vertexCount(vertexCount);
vertexView.vertexCount(vertexCount);
srcView.writeAll(vertexView);
return dst;
}
@Nullable @Nullable
public static Material getMaterial(RenderType chunkRenderType, boolean shaded) { public static Material getMaterial(RenderType chunkRenderType, boolean shaded) {
if (chunkRenderType == RenderType.solid()) { if (chunkRenderType == RenderType.solid()) {

View file

@ -0,0 +1,47 @@
package dev.engine_room.flywheel.lib.model.baked;
import java.nio.ByteBuffer;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.system.MemoryUtil;
import com.mojang.blaze3d.vertex.BufferBuilder;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
final class MeshHelper {
private MeshHelper() {
}
public static SimpleMesh blockVerticesToMesh(BufferBuilder.RenderedBuffer buffer, @Nullable String meshDescriptor) {
BufferBuilder.DrawState drawState = buffer.drawState();
int vertexCount = drawState.vertexCount();
long srcStride = drawState.format().getVertexSize();
VertexView vertexView = new NoOverlayVertexView();
long dstStride = vertexView.stride();
ByteBuffer src = buffer.vertexBuffer();
MemoryBlock dst = MemoryBlock.malloc((long) vertexCount * dstStride);
long srcPtr = MemoryUtil.memAddress(src);
long dstPtr = dst.ptr();
// The first 31 bytes of each vertex in a block vertex buffer are guaranteed to contain the same data in the
// same order regardless of whether the format is extended by mods like Iris or OptiFine. Copy these bytes and
// ignore the rest.
long bytesToCopy = Math.min(dstStride, 31);
for (int i = 0; i < vertexCount; i++) {
// It is safe to copy bytes directly since the NoOverlayVertexView uses the same memory layout as the first
// 31 bytes of the block vertex format, vanilla or otherwise.
MemoryUtil.memCopy(srcPtr + srcStride * i, dstPtr + dstStride * i, bytesToCopy);
}
vertexView.ptr(dstPtr);
vertexView.vertexCount(vertexCount);
return new SimpleMesh(vertexView, dst, meshDescriptor);
}
}

View file

@ -11,12 +11,12 @@ public interface EmptyVertexList extends MutableVertexList {
} }
@Override @Override
default float y(int index){ default float y(int index) {
return 0.0f; return 0.0f;
} }
@Override @Override
default float z(int index){ default float z(int index) {
return 0.0f; return 0.0f;
} }

View file

@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.api.visualization.VisualizationContext;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
public class SimpleEntityVisual<T extends Entity> extends AbstractEntityVisual<T> implements SimpleDynamicVisual { public class SimpleEntityVisual<T extends Entity> extends AbstractEntityVisual<T> implements SimpleDynamicVisual {

View file

@ -9,7 +9,6 @@ import dev.engine_room.flywheel.api.visual.EntityVisual;
import dev.engine_room.flywheel.api.visualization.EntityVisualizer; import dev.engine_room.flywheel.api.visualization.EntityVisualizer;
import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.api.visualization.VisualizationContext;
import dev.engine_room.flywheel.api.visualization.VisualizerRegistry; import dev.engine_room.flywheel.api.visualization.VisualizerRegistry;
import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;

View file

@ -6,7 +6,6 @@ import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
import dev.engine_room.flywheel.api.visualization.EntityVisualizer; import dev.engine_room.flywheel.api.visualization.EntityVisualizer;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import dev.engine_room.flywheel.api.visualization.VisualizerRegistry; import dev.engine_room.flywheel.api.visualization.VisualizerRegistry;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;

View file

@ -2,21 +2,17 @@ package dev.engine_room.flywheel.impl;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.backend.Backend; import dev.engine_room.flywheel.api.backend.Backend;
import dev.engine_room.flywheel.api.internal.FlwApiLink; import dev.engine_room.flywheel.api.internal.FlwApiLink;
import dev.engine_room.flywheel.api.layout.LayoutBuilder; import dev.engine_room.flywheel.api.layout.LayoutBuilder;
import dev.engine_room.flywheel.api.registry.IdRegistry; import dev.engine_room.flywheel.api.registry.IdRegistry;
import dev.engine_room.flywheel.api.registry.Registry; import dev.engine_room.flywheel.api.registry.Registry;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
import dev.engine_room.flywheel.api.visualization.EntityVisualizer; import dev.engine_room.flywheel.api.visualization.EntityVisualizer;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import dev.engine_room.flywheel.impl.layout.LayoutBuilderImpl; import dev.engine_room.flywheel.impl.layout.LayoutBuilderImpl;
import dev.engine_room.flywheel.impl.registry.IdRegistryImpl; import dev.engine_room.flywheel.impl.registry.IdRegistryImpl;
import dev.engine_room.flywheel.impl.registry.RegistryImpl; import dev.engine_room.flywheel.impl.registry.RegistryImpl;
import dev.engine_room.flywheel.impl.vertex.VertexViewProviderRegistryImpl;
import dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl; import dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl;
import dev.engine_room.flywheel.impl.visualization.VisualizerRegistryImpl; import dev.engine_room.flywheel.impl.visualization.VisualizerRegistryImpl;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
@ -61,16 +57,6 @@ public class FlwApiLinkImpl implements FlwApiLink {
return new LayoutBuilderImpl(); return new LayoutBuilderImpl();
} }
@Override
public VertexViewProvider getVertexViewProvider(VertexFormat format) {
return VertexViewProviderRegistryImpl.getProvider(format);
}
@Override
public void setVertexViewProvider(VertexFormat format, VertexViewProvider provider) {
VertexViewProviderRegistryImpl.setProvider(format, provider);
}
@Override @Override
public boolean supportsVisualization(@Nullable LevelAccessor level) { public boolean supportsVisualization(@Nullable LevelAccessor level) {
return VisualizationManagerImpl.supportsVisualization(level); return VisualizationManagerImpl.supportsVisualization(level);

View file

@ -2,9 +2,9 @@ package dev.engine_room.flywheel.impl.event;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import dev.engine_room.flywheel.api.event.RenderContext;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.event.RenderContext;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;

View file

@ -3,7 +3,6 @@ package dev.engine_room.flywheel.impl.extension;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
public interface BlockEntityTypeExtension<T extends BlockEntity> { public interface BlockEntityTypeExtension<T extends BlockEntity> {

View file

@ -3,7 +3,6 @@ package dev.engine_room.flywheel.impl.extension;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import dev.engine_room.flywheel.api.visualization.EntityVisualizer; import dev.engine_room.flywheel.api.visualization.EntityVisualizer;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
public interface EntityTypeExtension<T extends Entity> { public interface EntityTypeExtension<T extends Entity> {

View file

@ -1,8 +1,9 @@
package dev.engine_room.flywheel.impl.extension; package dev.engine_room.flywheel.impl.extension;
import dev.engine_room.flywheel.lib.transform.PoseTransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.lib.transform.PoseTransformStack;
/** /**
* An extension interface for {@link PoseStack} that provides a {@link PoseTransformStack} wrapper. * An extension interface for {@link PoseStack} that provides a {@link PoseTransformStack} wrapper.
* <br> * <br>

View file

@ -1,18 +0,0 @@
package dev.engine_room.flywheel.impl.extension;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
import com.mojang.blaze3d.vertex.VertexFormat;
/**
* Duck interface to make VertexFormat store a VertexListProvider.
*
* @see VertexFormat
*/
public interface VertexFormatExtension {
/**
* @return The VertexViewProvider associated with this VertexFormat.
*/
VertexViewProvider flywheel$getVertexViewProvider();
void flywheel$setVertexViewProvider(VertexViewProvider provider);
}

View file

@ -16,7 +16,6 @@ import dev.engine_room.flywheel.api.layout.LayoutBuilder;
import dev.engine_room.flywheel.api.layout.ValueRepr; import dev.engine_room.flywheel.api.layout.ValueRepr;
import dev.engine_room.flywheel.impl.layout.LayoutImpl.ElementImpl; import dev.engine_room.flywheel.impl.layout.LayoutImpl.ElementImpl;
import dev.engine_room.flywheel.lib.math.MoreMath; import dev.engine_room.flywheel.lib.math.MoreMath;
import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;

View file

@ -8,7 +8,6 @@ import org.jetbrains.annotations.Unmodifiable;
import dev.engine_room.flywheel.api.layout.ElementType; import dev.engine_room.flywheel.api.layout.ElementType;
import dev.engine_room.flywheel.api.layout.Layout; import dev.engine_room.flywheel.api.layout.Layout;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
final class LayoutImpl implements Layout { final class LayoutImpl implements Layout {

View file

@ -6,7 +6,6 @@ import org.spongepowered.asm.mixin.Unique;
import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer; import dev.engine_room.flywheel.api.visualization.BlockEntityVisualizer;
import dev.engine_room.flywheel.impl.extension.BlockEntityTypeExtension; import dev.engine_room.flywheel.impl.extension.BlockEntityTypeExtension;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;

View file

@ -1,25 +0,0 @@
package dev.engine_room.flywheel.impl.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
import dev.engine_room.flywheel.impl.extension.VertexFormatExtension;
@Mixin(VertexFormat.class)
abstract class VertexFormatMixin implements VertexFormatExtension {
@Unique
private VertexViewProvider flywheel$vertexViewProvider;
@Override
public VertexViewProvider flywheel$getVertexViewProvider() {
return flywheel$vertexViewProvider;
}
@Override
public void flywheel$setVertexViewProvider(VertexViewProvider provider) {
flywheel$vertexViewProvider = provider;
}
}

View file

@ -8,7 +8,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;

View file

@ -8,7 +8,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunk;

View file

@ -7,7 +7,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.api.visualization.VisualizationManager; import dev.engine_room.flywheel.api.visualization.VisualizationManager;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;

View file

@ -7,7 +7,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import dev.engine_room.flywheel.lib.visual.VisualizationHelper; import dev.engine_room.flywheel.lib.visual.VisualizationHelper;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
@Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$RenderChunk$RebuildTask") @Mixin(targets = "net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$RenderChunk$RebuildTask")

View file

@ -1,53 +0,0 @@
package dev.engine_room.flywheel.impl.vertex;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.blaze3d.vertex.VertexFormatElement;
public class InferredVertexFormatInfo {
public final VertexFormat format;
public final int positionOffset;
public final int colorOffset;
public final int textureOffset;
public final int overlayOffset;
public final int lightOffset;
public final int normalOffset;
public InferredVertexFormatInfo(VertexFormat format) {
this.format = format;
int positionOffset = -1;
int colorOffset = -1;
int textureOffset = -1;
int overlayOffset = -1;
int lightOffset = -1;
int normalOffset = -1;
int offset = 0;
for (VertexFormatElement element : format.getElements()) {
if (element == DefaultVertexFormat.ELEMENT_POSITION) {
positionOffset = offset;
} else if (element == DefaultVertexFormat.ELEMENT_COLOR) {
colorOffset = offset;
} else if (element == DefaultVertexFormat.ELEMENT_UV0) {
textureOffset = offset;
} else if (element == DefaultVertexFormat.ELEMENT_UV1) {
overlayOffset = offset;
} else if (element == DefaultVertexFormat.ELEMENT_UV2) {
lightOffset = offset;
} else if (element == DefaultVertexFormat.ELEMENT_NORMAL) {
normalOffset = offset;
}
offset += element.getByteSize();
}
this.positionOffset = positionOffset;
this.colorOffset = colorOffset;
this.textureOffset = textureOffset;
this.overlayOffset = overlayOffset;
this.lightOffset = lightOffset;
this.normalOffset = normalOffset;
}
}

View file

@ -1,207 +0,0 @@
package dev.engine_room.flywheel.impl.vertex;
import org.lwjgl.system.MemoryUtil;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.math.RenderMath;
import dev.engine_room.flywheel.lib.vertex.AbstractVertexView;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.texture.OverlayTexture;
public class InferredVertexView extends AbstractVertexView implements VertexView {
protected final VertexFormat format;
protected final int stride;
protected final int positionOffset;
protected final int colorOffset;
protected final int textureOffset;
protected final int overlayOffset;
protected final int lightOffset;
protected final int normalOffset;
public InferredVertexView(InferredVertexFormatInfo formatInfo) {
format = formatInfo.format;
stride = format.getVertexSize();
positionOffset = formatInfo.positionOffset;
colorOffset = formatInfo.colorOffset;
textureOffset = formatInfo.textureOffset;
overlayOffset = formatInfo.overlayOffset;
lightOffset = formatInfo.lightOffset;
normalOffset = formatInfo.normalOffset;
}
@Override
public long stride() {
return stride;
}
@Override
public float x(int index) {
if (positionOffset < 0) return 0;
return MemoryUtil.memGetFloat(ptr + index * stride + positionOffset);
}
@Override
public float y(int index) {
if (positionOffset < 0) return 0;
return MemoryUtil.memGetFloat(ptr + index * stride + positionOffset + 4);
}
@Override
public float z(int index) {
if (positionOffset < 0) return 0;
return MemoryUtil.memGetFloat(ptr + index * stride + positionOffset + 8);
}
@Override
public float r(int index) {
if (colorOffset < 0) return 1;
return RenderMath.uf(MemoryUtil.memGetByte(ptr + index * stride + colorOffset));
}
@Override
public float g(int index) {
if (colorOffset < 0) return 1;
return RenderMath.uf(MemoryUtil.memGetByte(ptr + index * stride + colorOffset + 1));
}
@Override
public float b(int index) {
if (colorOffset < 0) return 1;
return RenderMath.uf(MemoryUtil.memGetByte(ptr + index * stride + colorOffset + 2));
}
@Override
public float a(int index) {
if (colorOffset < 0) return 1;
return RenderMath.uf(MemoryUtil.memGetByte(ptr + index * stride + colorOffset + 3));
}
@Override
public float u(int index) {
if (textureOffset < 0) return 0;
return MemoryUtil.memGetFloat(ptr + index * stride + textureOffset);
}
@Override
public float v(int index) {
if (textureOffset < 0) return 0;
return MemoryUtil.memGetFloat(ptr + index * stride + textureOffset + 4);
}
@Override
public int overlay(int index) {
if (overlayOffset < 0) return OverlayTexture.NO_OVERLAY;
return MemoryUtil.memGetInt(ptr + index * stride + overlayOffset);
}
@Override
public int light(int index) {
if (lightOffset < 0) return LightTexture.FULL_BRIGHT;
return MemoryUtil.memGetInt(ptr + index * stride + lightOffset);
}
@Override
public float normalX(int index) {
if (normalOffset < 0) return 0;
return RenderMath.f(MemoryUtil.memGetByte(ptr + index * stride + normalOffset));
}
@Override
public float normalY(int index) {
if (normalOffset < 0) return 0;
return RenderMath.f(MemoryUtil.memGetByte(ptr + index * stride + normalOffset + 1));
}
@Override
public float normalZ(int index) {
if (normalOffset < 0) return 0;
return RenderMath.f(MemoryUtil.memGetByte(ptr + index * stride + normalOffset + 2));
}
@Override
public void x(int index, float x) {
if (positionOffset < 0) return;
MemoryUtil.memPutFloat(ptr + index * stride + positionOffset, x);
}
@Override
public void y(int index, float y) {
if (positionOffset < 0) return;
MemoryUtil.memPutFloat(ptr + index * stride + positionOffset + 4, y);
}
@Override
public void z(int index, float z) {
if (positionOffset < 0) return;
MemoryUtil.memPutFloat(ptr + index * stride + positionOffset + 8, z);
}
@Override
public void r(int index, float r) {
if (colorOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + colorOffset, RenderMath.unb(r));
}
@Override
public void g(int index, float g) {
if (colorOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + colorOffset + 1, RenderMath.unb(g));
}
@Override
public void b(int index, float b) {
if (colorOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + colorOffset + 2, RenderMath.unb(b));
}
@Override
public void a(int index, float a) {
if (colorOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + colorOffset + 3, RenderMath.unb(a));
}
@Override
public void u(int index, float u) {
if (textureOffset < 0) return;
MemoryUtil.memPutFloat(ptr + index * stride + textureOffset, u);
}
@Override
public void v(int index, float v) {
if (textureOffset < 0) return;
MemoryUtil.memPutFloat(ptr + index * stride + textureOffset + 4, v);
}
@Override
public void overlay(int index, int overlay) {
if (overlayOffset < 0) return;
MemoryUtil.memPutInt(ptr + index * stride + overlayOffset, overlay);
}
@Override
public void light(int index, int light) {
if (lightOffset < 0) return;
MemoryUtil.memPutInt(ptr + index * stride + lightOffset, light);
}
@Override
public void normalX(int index, float normalX) {
if (normalOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + normalOffset, RenderMath.nb(normalX));
}
@Override
public void normalY(int index, float normalY) {
if (normalOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + normalOffset + 1, RenderMath.nb(normalY));
}
@Override
public void normalZ(int index, float normalZ) {
if (normalOffset < 0) return;
MemoryUtil.memPutByte(ptr + index * stride + normalOffset + 2, RenderMath.nb(normalZ));
}
}

View file

@ -1,19 +0,0 @@
package dev.engine_room.flywheel.impl.vertex;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
public class InferredVertexViewProvider implements VertexViewProvider {
private final InferredVertexFormatInfo formatInfo;
public InferredVertexViewProvider(VertexFormat format) {
formatInfo = new InferredVertexFormatInfo(format);
}
@Override
public VertexView createVertexView() {
return new InferredVertexView(formatInfo);
}
}

View file

@ -1,26 +0,0 @@
package dev.engine_room.flywheel.impl.vertex;
import com.mojang.blaze3d.vertex.VertexFormat;
import dev.engine_room.flywheel.api.vertex.VertexViewProvider;
import dev.engine_room.flywheel.impl.extension.VertexFormatExtension;
// TODO: Add freezing
public final class VertexViewProviderRegistryImpl {
private VertexViewProviderRegistryImpl() {
}
public static VertexViewProvider getProvider(VertexFormat format) {
VertexFormatExtension extension = (VertexFormatExtension) format;
VertexViewProvider provider = extension.flywheel$getVertexViewProvider();
if (provider == null) {
provider = new InferredVertexViewProvider(format);
extension.flywheel$setVertexViewProvider(provider);
}
return provider;
}
public static void setProvider(VertexFormat format, VertexViewProvider provider) {
((VertexFormatExtension) format).flywheel$setVertexViewProvider(provider);
}
}

View file

@ -13,7 +13,6 @@
"LevelRendererMixin", "LevelRendererMixin",
"MinecraftMixin", "MinecraftMixin",
"PoseStackMixin", "PoseStackMixin",
"VertexFormatMixin",
"fix.FixFabulousDepthMixin", "fix.FixFabulousDepthMixin",
"fix.FixNormalScalingMixin", "fix.FixNormalScalingMixin",
"visualmanage.BlockEntityMixin", "visualmanage.BlockEntityMixin",

View file

@ -5,13 +5,10 @@ import java.util.function.BiFunction;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
@ -64,9 +61,7 @@ public final class FabricBakedModelBuilder extends BakedModelBuilder {
BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, (renderType, shaded, data) -> { BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });

View file

@ -5,13 +5,10 @@ import java.util.function.BiFunction;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -53,9 +50,7 @@ public final class FabricBlockModelBuilder extends BlockModelBuilder {
BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, (renderType, shaded, data) -> { BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });

View file

@ -5,13 +5,10 @@ import java.util.function.BiFunction;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
@ -50,9 +47,7 @@ public final class FabricMultiBlockModelBuilder extends MultiBlockModelBuilder {
BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> { BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });

View file

@ -7,13 +7,10 @@ import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
@ -78,9 +75,7 @@ public final class ForgeBakedModelBuilder extends BakedModelBuilder {
BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, modelData, (renderType, shaded, data) -> { BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, modelData, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });

View file

@ -7,13 +7,10 @@ import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -67,9 +64,7 @@ public final class ForgeBlockModelBuilder extends BlockModelBuilder {
BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, modelData, (renderType, shaded, data) -> { BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, modelData, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });

View file

@ -8,13 +8,10 @@ import org.jetbrains.annotations.Nullable;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import dev.engine_room.flywheel.api.material.Material; import dev.engine_room.flywheel.api.material.Material;
import dev.engine_room.flywheel.api.model.Mesh;
import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.api.model.Model;
import dev.engine_room.flywheel.api.vertex.VertexView;
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.ModelUtil;
import dev.engine_room.flywheel.lib.model.SimpleMesh;
import dev.engine_room.flywheel.lib.model.SimpleModel; import dev.engine_room.flywheel.lib.model.SimpleModel;
import dev.engine_room.flywheel.lib.vertex.NoOverlayVertexView;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.BlockAndTintGetter;
@ -65,9 +62,7 @@ public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder {
BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> { BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> {
Material material = materialFunc.apply(renderType, shaded); Material material = materialFunc.apply(renderType, shaded);
if (material != null) { if (material != null) {
VertexView vertexView = new NoOverlayVertexView(); Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
MemoryBlock meshData = ModelUtil.convertVanillaBuffer(data, vertexView);
var mesh = new SimpleMesh(vertexView, meshData, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); builder.add(renderType, new Model.ConfiguredMesh(material, mesh));
} }
}); });