start working on schematic rendering

This commit is contained in:
JozsefA 2021-02-05 22:48:55 -08:00
parent d50e07369b
commit 90993ce8e1
8 changed files with 51 additions and 17 deletions

View file

@ -31,6 +31,8 @@ import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.ModLoader;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import java.util.ArrayList; import java.util.ArrayList;

View file

@ -24,7 +24,7 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> {
protected Direction facing; protected Direction facing;
protected InstanceKey<RotatingData> shaft; protected InstanceKey<RotatingData> shaft;
protected InstanceKey<RotatingData> wheel; // protected InstanceKey<RotatingData> wheel;
public FlyWheelInstance(InstancedTileRenderer<?> modelManager, FlywheelTileEntity tile) { public FlyWheelInstance(InstancedTileRenderer<?> modelManager, FlywheelTileEntity tile) {
super(modelManager, tile); super(modelManager, tile);
@ -37,28 +37,28 @@ public class FlyWheelInstance extends KineticTileInstance<FlywheelTileEntity> {
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState); Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
Consumer<RotatingData> setup = setupFunc(tile.getSpeed(), axis); Consumer<RotatingData> setup = setupFunc(tile.getSpeed(), axis);
shaft = shaftModel().setupInstance(setup); shaft = shaftModel().setupInstance(setup);
wheel = wheelModel().setupInstance(setup); // wheel = wheelModel().setupInstance(setup);
} }
@Override @Override
protected void onUpdate() { protected void onUpdate() {
Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState); Direction.Axis axis = ((IRotate) lastState.getBlock()).getRotationAxis(lastState);
updateRotation(shaft, axis); updateRotation(shaft, axis);
updateRotation(wheel, axis); // updateRotation(wheel, axis);
} }
@Override @Override
public void updateLight() { public void updateLight() {
shaft.modifyInstance(this::relight); shaft.modifyInstance(this::relight);
wheel.modifyInstance(this::relight); // wheel.modifyInstance(this::relight);
} }
@Override @Override
public void remove() { public void remove() {
shaft.delete(); shaft.delete();
wheel.delete();
shaft = null; shaft = null;
wheel = null; // wheel.delete();
// wheel = null;
} }
protected InstancedModel<RotatingData> shaftModel() { protected InstancedModel<RotatingData> shaftModel() {

View file

@ -69,9 +69,9 @@ public class FlywheelRenderer extends KineticTileEntityRenderer {
.renderInto(ms, vb); .renderInto(ms, vb);
} }
// kineticRotationTransform(wheel, te, blockState.get(HORIZONTAL_FACING) kineticRotationTransform(wheel, te, blockState.get(HORIZONTAL_FACING)
// .getAxis(), AngleHelper.rad(angle), light); .getAxis(), AngleHelper.rad(angle), light);
// wheel.renderInto(ms, vb); wheel.renderInto(ms, vb);
} }

View file

@ -56,7 +56,7 @@ public class SchematicHandler {
public SchematicHandler() { public SchematicHandler() {
renderers = new Vector<>(3); renderers = new Vector<>(3);
for (int i = 0; i < renderers.capacity(); i++) for (int i = 0; i < renderers.capacity(); i++)
renderers.add(new SchematicRenderer()); renderers.add(new SchematicRendererWithInstancing());
overlay = new SchematicHotbarSlotOverlay(); overlay = new SchematicHotbarSlotOverlay();
currentTool = Tools.Deploy; currentTool = Tools.Deploy;

View file

@ -34,7 +34,7 @@ public class SchematicRenderer {
private final Set<RenderType> startedBufferBuilders = new HashSet<>(getLayerCount()); private final Set<RenderType> startedBufferBuilders = new HashSet<>(getLayerCount());
private boolean active; private boolean active;
private boolean changed; private boolean changed;
private SchematicWorld schematic; protected SchematicWorld schematic;
private BlockPos anchor; private BlockPos anchor;
public SchematicRenderer() { public SchematicRenderer() {
@ -81,7 +81,7 @@ public class SchematicRenderer {
buffer); buffer);
} }
private void redraw(Minecraft minecraft) { protected void redraw(Minecraft minecraft) {
usedBlockRenderLayers.clear(); usedBlockRenderLayers.clear();
startedBufferBuilders.clear(); startedBufferBuilders.clear();

View file

@ -0,0 +1,36 @@
package com.simibubi.create.content.schematics.client;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.simibubi.create.foundation.render.FastRenderDispatcher;
import com.simibubi.create.foundation.render.contraption.ContraptionKineticRenderer;
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderType;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.loading.FMLClientLaunchProvider;
public class SchematicRendererWithInstancing extends SchematicRenderer {
public final ContraptionKineticRenderer tiles;
public SchematicRendererWithInstancing() {
this.tiles = new ContraptionKineticRenderer();
}
@Override
protected void redraw(Minecraft minecraft) {
super.redraw(minecraft);
tiles.invalidate();
schematic.getRenderedTileEntities().forEach(tiles::add);
}
@Override
public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) {
super.render(ms, buffer);
//tiles.render(RenderType.getCutoutMipped(), FastRenderDispatcher.getProjectionMatrix(), );
}
}

View file

@ -106,7 +106,7 @@ public class FastRenderDispatcher {
} }
// copied from GameRenderer.renderWorld // copied from GameRenderer.renderWorld
private static Matrix4f getProjectionMatrix() { public static Matrix4f getProjectionMatrix() {
if (projectionMatrixThisFrame != null) return projectionMatrixThisFrame; if (projectionMatrixThisFrame != null) return projectionMatrixThisFrame;
float partialTicks = AnimationTickHolder.getPartialTicks(); float partialTicks = AnimationTickHolder.getPartialTicks();

View file

@ -68,10 +68,6 @@ public abstract class InstancedModel<D extends InstanceData> extends BufferedMod
return instanceCount() == 0; return instanceCount() == 0;
} }
public void clearInstanceData() {
}
protected void deleteInternal() { protected void deleteInternal() {
super.deleteInternal(); super.deleteInternal();
instanceVBO.delete(); instanceVBO.delete();