mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-27 20:34:43 +01:00
Sweeping things under the rug
- Comment out some stuff to get it to compile. - Pull in ModelUtil virtual stuffs from old flywheel. - Update build.gradle to always download sources/javadoc in IDEA.
This commit is contained in:
parent
8d54e9268a
commit
d925d697cc
15 changed files with 208 additions and 184 deletions
|
@ -41,6 +41,13 @@ mixin {
|
|||
debug.export = true
|
||||
}
|
||||
|
||||
idea {
|
||||
module {
|
||||
downloadJavadoc = true
|
||||
downloadSources = true
|
||||
}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
if (Boolean.parseBoolean(use_parchment)) {
|
||||
mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}"
|
||||
|
|
|
@ -3,38 +3,35 @@ package com.simibubi.create.content.contraptions.render;
|
|||
import org.joml.Matrix4f;
|
||||
import org.lwjgl.opengl.GL20;
|
||||
|
||||
import com.jozufozu.flywheel.gl.shader.GlProgram;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
|
||||
public class ContraptionProgram extends GlProgram {
|
||||
protected final int uLightBoxSize;
|
||||
protected final int uLightBoxMin;
|
||||
protected final int uModel;
|
||||
|
||||
protected int uLightVolume;
|
||||
|
||||
public ContraptionProgram(ResourceLocation name, int handle) {
|
||||
//super(name, handle);
|
||||
super(handle);
|
||||
uLightBoxSize = getUniformLocation("uLightBoxSize");
|
||||
uLightBoxMin = getUniformLocation("uLightBoxMin");
|
||||
uModel = getUniformLocation("uModel");
|
||||
}
|
||||
|
||||
public class ContraptionProgram {
|
||||
// protected final int uLightBoxSize;
|
||||
// protected final int uLightBoxMin;
|
||||
// protected final int uModel;
|
||||
//
|
||||
// protected int uLightVolume;
|
||||
//
|
||||
// public ContraptionProgram(ResourceLocation name, int handle) {
|
||||
// super(handle);
|
||||
// uLightBoxSize = getUniformLocation("uLightBoxSize");
|
||||
// uLightBoxMin = getUniformLocation("uLightBoxMin");
|
||||
// uModel = getUniformLocation("uModel");
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void registerSamplers() {
|
||||
// super.registerSamplers();
|
||||
// uLightVolume = setSamplerBinding("uLightVolume", 4);
|
||||
// }
|
||||
|
||||
public void bind(Matrix4f model, AABB lightVolume) {
|
||||
double sizeX = lightVolume.maxX - lightVolume.minX;
|
||||
double sizeY = lightVolume.maxY - lightVolume.minY;
|
||||
double sizeZ = lightVolume.maxZ - lightVolume.minZ;
|
||||
GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ);
|
||||
GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ);
|
||||
// uploadMatrixUniform(uModel, model);
|
||||
}
|
||||
//
|
||||
// public void bind(Matrix4f model, AABB lightVolume) {
|
||||
// double sizeX = lightVolume.maxX - lightVolume.minX;
|
||||
// double sizeY = lightVolume.maxY - lightVolume.minY;
|
||||
// double sizeZ = lightVolume.maxZ - lightVolume.minZ;
|
||||
// GL20.glUniform3f(uLightBoxSize, (float) sizeX, (float) sizeY, (float) sizeZ);
|
||||
// GL20.glUniform3f(uLightBoxMin, (float) lightVolume.minX, (float) lightVolume.minY, (float) lightVolume.minZ);
|
||||
// // uploadMatrixUniform(uModel, model);
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -7,10 +7,8 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||
import com.jozufozu.flywheel.api.event.BeginFrameEvent;
|
||||
import com.jozufozu.flywheel.api.event.ReloadLevelRendererEvent;
|
||||
import com.jozufozu.flywheel.api.event.RenderStageEvent;
|
||||
import com.jozufozu.flywheel.gl.error.GlError;
|
||||
import com.jozufozu.flywheel.lib.model.baked.BlockModelBuilder;
|
||||
import com.jozufozu.flywheel.backend.gl.error.GlError;
|
||||
import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
||||
import com.jozufozu.flywheel.lib.model.baked.TessellatedModel;
|
||||
import com.jozufozu.flywheel.lib.transform.TransformStack;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllMovementBehaviours;
|
||||
|
@ -165,13 +163,13 @@ public class ContraptionRenderDispatcher {
|
|||
|
||||
public static SuperByteBuffer buildStructureBuffer(VirtualRenderWorld renderWorld, Contraption c,
|
||||
RenderType layer) {
|
||||
Collection<StructureTemplate.StructureBlockInfo> values = c.getRenderedBlocks();
|
||||
var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld)
|
||||
.modelDataMap(c.modelData)
|
||||
.build();
|
||||
SuperByteBuffer sbb = new SuperByteBuffer(data);
|
||||
data.release();
|
||||
return sbb;
|
||||
// Collection<StructureTemplate.StructureBlockInfo> values = c.getRenderedBlocks();
|
||||
// var build = new MultiBlockModelBuilder(values).renderWorld(renderWorld)
|
||||
// .modelDataMap(c.modelData)
|
||||
// .build();
|
||||
// SuperByteBuffer sbb = new SuperByteBuffer(data);
|
||||
// build.delete();
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int getLight(Level world, float lx, float ly, float lz) {
|
||||
|
|
|
@ -34,9 +34,10 @@ public class ContraptionRenderInfo {
|
|||
|
||||
AbstractContraptionEntity entity = contraption.entity;
|
||||
|
||||
visible = event.getFrustum()
|
||||
.isVisible(entity.getBoundingBoxForCulling()
|
||||
.inflate(2));
|
||||
visible = false;
|
||||
// visible = event.getFrustum()
|
||||
// .isVisible(entity.getBoundingBoxForCulling()
|
||||
// .inflate(2));
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
|
|
|
@ -4,7 +4,7 @@ import org.joml.Matrix4f;
|
|||
|
||||
import com.jozufozu.flywheel.api.event.BeginFrameEvent;
|
||||
import com.jozufozu.flywheel.api.event.RenderStageEvent;
|
||||
import com.jozufozu.flywheel.gl.GlStateTracker;
|
||||
import com.jozufozu.flywheel.backend.gl.GlStateTracker;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.content.contraptions.AbstractContraptionEntity;
|
||||
import com.simibubi.create.content.contraptions.Contraption;
|
||||
|
|
|
@ -22,12 +22,12 @@ public class SBBContraptionManager extends ContraptionRenderingWorld<Contraption
|
|||
@Override
|
||||
public void renderLayer(RenderStageEvent event) {
|
||||
super.renderLayer(event);
|
||||
RenderType type = event.getType();
|
||||
VertexConsumer consumer = event.buffers.bufferSource()
|
||||
.getBuffer(type);
|
||||
visible.forEach(info -> renderContraptionLayerSBB(info, type, consumer));
|
||||
|
||||
event.buffers.bufferSource().endBatch(type);
|
||||
// RenderType type = event.getType();
|
||||
// VertexConsumer consumer = event.buffers.bufferSource()
|
||||
// .getBuffer(type);
|
||||
// visible.forEach(info -> renderContraptionLayerSBB(info, type, consumer));
|
||||
//
|
||||
// event.buffers.bufferSource().endBatch(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.List;
|
|||
|
||||
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.render.ModelUtil;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForBlockState;
|
|||
import com.simibubi.create.content.schematics.cannon.LaunchedItem.ForEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.ModelUtil;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
|
|
@ -3,11 +3,8 @@ package com.simibubi.create.content.schematics.client;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.jozufozu.flywheel.core.model.ModelUtil;
|
||||
import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData;
|
||||
import com.jozufozu.flywheel.core.model.ShadeSeparatingVertexConsumer;
|
||||
import com.jozufozu.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||
import com.simibubi.create.content.schematics.SchematicWorld;
|
||||
|
@ -92,58 +89,59 @@ public class SchematicRenderer {
|
|||
}
|
||||
|
||||
protected SuperByteBuffer drawLayer(RenderType layer) {
|
||||
BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER;
|
||||
ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||
|
||||
PoseStack poseStack = objects.poseStack;
|
||||
RandomSource random = objects.random;
|
||||
BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos;
|
||||
SchematicWorld renderWorld = schematic;
|
||||
renderWorld.renderMode = true;
|
||||
BoundingBox bounds = renderWorld.getBounds();
|
||||
|
||||
ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper;
|
||||
BufferBuilder shadedBuilder = objects.shadedBuilder;
|
||||
BufferBuilder unshadedBuilder = objects.unshadedBuilder;
|
||||
|
||||
shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder);
|
||||
|
||||
ModelBlockRenderer.enableCaching();
|
||||
for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) {
|
||||
BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor);
|
||||
BlockState state = renderWorld.getBlockState(pos);
|
||||
|
||||
if (state.getRenderShape() == RenderShape.MODEL) {
|
||||
BakedModel model = dispatcher.getBlockModel(state);
|
||||
BlockEntity blockEntity = renderWorld.getBlockEntity(localPos);
|
||||
ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY;
|
||||
modelData = model.getModelData(renderWorld, pos, state, modelData);
|
||||
long seed = state.getSeed(pos);
|
||||
random.setSeed(seed);
|
||||
if (model.getRenderTypes(state, random, modelData).contains(layer)) {
|
||||
poseStack.pushPose();
|
||||
poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ());
|
||||
|
||||
renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true,
|
||||
random, seed, OverlayTexture.NO_OVERLAY, modelData, layer);
|
||||
|
||||
poseStack.popPose();
|
||||
}
|
||||
}
|
||||
}
|
||||
ModelBlockRenderer.clearCache();
|
||||
|
||||
shadeSeparatingWrapper.clear();
|
||||
ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder);
|
||||
|
||||
renderWorld.renderMode = false;
|
||||
|
||||
SuperByteBuffer sbb = new SuperByteBuffer(bufferedData);
|
||||
bufferedData.release();
|
||||
return sbb;
|
||||
// FIXME: use flywheel buffering utilities?
|
||||
// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER;
|
||||
// ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
||||
// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||
//
|
||||
// PoseStack poseStack = objects.poseStack;
|
||||
// RandomSource random = objects.random;
|
||||
// BlockPos.MutableBlockPos mutableBlockPos = objects.mutableBlockPos;
|
||||
// SchematicWorld renderWorld = schematic;
|
||||
// renderWorld.renderMode = true;
|
||||
// BoundingBox bounds = renderWorld.getBounds();
|
||||
//
|
||||
// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper;
|
||||
// BufferBuilder shadedBuilder = objects.shadedBuilder;
|
||||
// BufferBuilder unshadedBuilder = objects.unshadedBuilder;
|
||||
//
|
||||
// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder);
|
||||
//
|
||||
// ModelBlockRenderer.enableCaching();
|
||||
// for (BlockPos localPos : BlockPos.betweenClosed(bounds.minX(), bounds.minY(), bounds.minZ(), bounds.maxX(), bounds.maxY(), bounds.maxZ())) {
|
||||
// BlockPos pos = mutableBlockPos.setWithOffset(localPos, anchor);
|
||||
// BlockState state = renderWorld.getBlockState(pos);
|
||||
//
|
||||
// if (state.getRenderShape() == RenderShape.MODEL) {
|
||||
// BakedModel model = dispatcher.getBlockModel(state);
|
||||
// BlockEntity blockEntity = renderWorld.getBlockEntity(localPos);
|
||||
// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY;
|
||||
// modelData = model.getModelData(renderWorld, pos, state, modelData);
|
||||
// long seed = state.getSeed(pos);
|
||||
// random.setSeed(seed);
|
||||
// if (model.getRenderTypes(state, random, modelData).contains(layer)) {
|
||||
// poseStack.pushPose();
|
||||
// poseStack.translate(localPos.getX(), localPos.getY(), localPos.getZ());
|
||||
//
|
||||
// renderer.tesselateBlock(renderWorld, model, state, pos, poseStack, shadeSeparatingWrapper, true,
|
||||
// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer);
|
||||
//
|
||||
// poseStack.popPose();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// ModelBlockRenderer.clearCache();
|
||||
//
|
||||
// shadeSeparatingWrapper.clear();
|
||||
// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder);
|
||||
//
|
||||
// renderWorld.renderMode = false;
|
||||
//
|
||||
// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData);
|
||||
// bufferedData.release();
|
||||
return null;
|
||||
}
|
||||
|
||||
private static int getLayerCount() {
|
||||
|
@ -155,7 +153,7 @@ public class SchematicRenderer {
|
|||
public final PoseStack poseStack = new PoseStack();
|
||||
public final RandomSource random = RandomSource.createNewThreadLocalInstance();
|
||||
public final BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos();
|
||||
public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
||||
// public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
||||
public final BufferBuilder shadedBuilder = new BufferBuilder(512);
|
||||
public final BufferBuilder unshadedBuilder = new BufferBuilder(512);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.mojang.math.Axis;
|
|||
import com.simibubi.create.foundation.fluid.FluidRenderer;
|
||||
import com.simibubi.create.foundation.gui.ILightingSettings;
|
||||
import com.simibubi.create.foundation.gui.UIRenderHelper;
|
||||
import com.simibubi.create.foundation.render.ModelUtil;
|
||||
import com.simibubi.create.foundation.utility.Color;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
|
|
|
@ -6,9 +6,6 @@ import java.util.Map;
|
|||
import java.util.Map.Entry;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.jozufozu.flywheel.core.model.ModelUtil;
|
||||
import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData;
|
||||
import com.jozufozu.flywheel.core.model.ShadeSeparatingVertexConsumer;
|
||||
import com.jozufozu.flywheel.lib.transform.TransformStack;
|
||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
|
@ -344,8 +341,8 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
|
||||
ms.pushPose();
|
||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
ModelUtil.VANILLA_RENDERER
|
||||
.renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY);
|
||||
// ModelUtil.VANILLA_RENDERER
|
||||
// .renderBreakingTexture(world.getBlockState(pos), pos, world, ms, builder, ModelData.EMPTY);
|
||||
ms.popPose();
|
||||
}
|
||||
|
||||
|
@ -408,62 +405,62 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
}
|
||||
|
||||
private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) {
|
||||
BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER;
|
||||
ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||
|
||||
PoseStack poseStack = objects.poseStack;
|
||||
RandomSource random = objects.random;
|
||||
ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper;
|
||||
BufferBuilder shadedBuilder = objects.shadedBuilder;
|
||||
BufferBuilder unshadedBuilder = objects.unshadedBuilder;
|
||||
|
||||
shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder);
|
||||
|
||||
world.setMask(this.section);
|
||||
ModelBlockRenderer.enableCaching();
|
||||
section.forEach(pos -> {
|
||||
BlockState state = world.getBlockState(pos);
|
||||
FluidState fluidState = world.getFluidState(pos);
|
||||
|
||||
poseStack.pushPose();
|
||||
poseStack.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
|
||||
if (state.getRenderShape() == RenderShape.MODEL) {
|
||||
BakedModel model = dispatcher.getBlockModel(state);
|
||||
BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY;
|
||||
modelData = model.getModelData(world, pos, state, modelData);
|
||||
long seed = state.getSeed(pos);
|
||||
random.setSeed(seed);
|
||||
if (model.getRenderTypes(state, random, modelData).contains(layer)) {
|
||||
renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true,
|
||||
random, seed, OverlayTexture.NO_OVERLAY, modelData, layer);
|
||||
}
|
||||
}
|
||||
|
||||
if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer)
|
||||
dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState);
|
||||
|
||||
poseStack.popPose();
|
||||
});
|
||||
ModelBlockRenderer.clearCache();
|
||||
world.clearMask();
|
||||
|
||||
shadeSeparatingWrapper.clear();
|
||||
ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder);
|
||||
|
||||
SuperByteBuffer sbb = new SuperByteBuffer(bufferedData);
|
||||
bufferedData.release();
|
||||
return sbb;
|
||||
// BlockRenderDispatcher dispatcher = ModelUtil.VANILLA_RENDERER;
|
||||
// ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
||||
// ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||
//
|
||||
// PoseStack poseStack = objects.poseStack;
|
||||
// RandomSource random = objects.random;
|
||||
// ShadeSeparatingVertexConsumer shadeSeparatingWrapper = objects.shadeSeparatingWrapper;
|
||||
// BufferBuilder shadedBuilder = objects.shadedBuilder;
|
||||
// BufferBuilder unshadedBuilder = objects.unshadedBuilder;
|
||||
//
|
||||
// shadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
// unshadedBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK);
|
||||
// shadeSeparatingWrapper.prepare(shadedBuilder, unshadedBuilder);
|
||||
//
|
||||
// world.setMask(this.section);
|
||||
// ModelBlockRenderer.enableCaching();
|
||||
// section.forEach(pos -> {
|
||||
// BlockState state = world.getBlockState(pos);
|
||||
// FluidState fluidState = world.getFluidState(pos);
|
||||
//
|
||||
// poseStack.pushPose();
|
||||
// poseStack.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
//
|
||||
// if (state.getRenderShape() == RenderShape.MODEL) {
|
||||
// BakedModel model = dispatcher.getBlockModel(state);
|
||||
// BlockEntity blockEntity = world.getBlockEntity(pos);
|
||||
// ModelData modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY;
|
||||
// modelData = model.getModelData(world, pos, state, modelData);
|
||||
// long seed = state.getSeed(pos);
|
||||
// random.setSeed(seed);
|
||||
// if (model.getRenderTypes(state, random, modelData).contains(layer)) {
|
||||
// renderer.tesselateBlock(world, model, state, pos, poseStack, shadeSeparatingWrapper, true,
|
||||
// random, seed, OverlayTexture.NO_OVERLAY, modelData, layer);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (!fluidState.isEmpty() && ItemBlockRenderTypes.getRenderLayer(fluidState) == layer)
|
||||
// dispatcher.renderLiquid(pos, world, shadedBuilder, state, fluidState);
|
||||
//
|
||||
// poseStack.popPose();
|
||||
// });
|
||||
// ModelBlockRenderer.clearCache();
|
||||
// world.clearMask();
|
||||
//
|
||||
// shadeSeparatingWrapper.clear();
|
||||
// ShadeSeparatedBufferedData bufferedData = ModelUtil.endAndCombine(shadedBuilder, unshadedBuilder);
|
||||
//
|
||||
// SuperByteBuffer sbb = new SuperByteBuffer(bufferedData);
|
||||
// bufferedData.release();
|
||||
return null;
|
||||
}
|
||||
|
||||
private static class ThreadLocalObjects {
|
||||
public final PoseStack poseStack = new PoseStack();
|
||||
public final RandomSource random = RandomSource.createNewThreadLocalInstance();
|
||||
public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
||||
//public final ShadeSeparatingVertexConsumer shadeSeparatingWrapper = new ShadeSeparatingVertexConsumer();
|
||||
public final BufferBuilder shadedBuilder = new BufferBuilder(512);
|
||||
public final BufferBuilder unshadedBuilder = new BufferBuilder(512);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package com.simibubi.create.foundation.render;
|
||||
|
||||
import com.jozufozu.flywheel.api.model.Mesh;
|
||||
import com.jozufozu.flywheel.lib.model.Models;
|
||||
import com.jozufozu.flywheel.lib.model.baked.BakedModelBuilder;
|
||||
import com.jozufozu.flywheel.lib.model.baked.TessellatedModel;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -19,11 +23,20 @@ public class BakedModelRenderHelper {
|
|||
return standardModelRender(model, referenceState, new PoseStack());
|
||||
}
|
||||
|
||||
public static SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState, PoseStack ms) {
|
||||
ShadeSeparatedBufferedData data = ModelUtil.getBufferedData(model, referenceState, ms);
|
||||
SuperByteBuffer sbb = new SuperByteBuffer(data);
|
||||
data.release();
|
||||
return sbb;
|
||||
public static SuperByteBuffer standardModelRender(BakedModel bakedModel, BlockState referenceState, PoseStack ms) {
|
||||
var model = new BakedModelBuilder(bakedModel).blockState(referenceState)
|
||||
.poseStack(ms)
|
||||
.disableShadeSeparation()
|
||||
.build();
|
||||
|
||||
SuperByteBuffer out = null;
|
||||
for (Mesh value : model.meshes()
|
||||
.values()) {
|
||||
out = new SuperByteBuffer(value);
|
||||
break;
|
||||
}
|
||||
model.delete();
|
||||
return out;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package com.simibubi.create.foundation.render;
|
||||
|
||||
import net.minecraftforge.client.model.data.ModelData;
|
||||
import net.minecraftforge.client.model.data.ModelProperty;
|
||||
|
||||
public class ModelUtil {
|
||||
public static final ModelProperty<Boolean> VIRTUAL_PROPERTY = new ModelProperty<>();
|
||||
public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build();
|
||||
|
||||
public static boolean isVirtual(ModelData data) {
|
||||
return data.has(ModelUtil.VIRTUAL_PROPERTY) && Boolean.TRUE.equals(data.get(ModelUtil.VIRTUAL_PROPERTY));
|
||||
}
|
||||
}
|
|
@ -10,12 +10,15 @@ import org.joml.Quaternionf;
|
|||
import org.joml.Vector3f;
|
||||
import org.joml.Vector4f;
|
||||
|
||||
import com.jozufozu.flywheel.api.model.Mesh;
|
||||
import com.jozufozu.flywheel.api.vertex.VertexList;
|
||||
import com.jozufozu.flywheel.lib.math.DiffuseLightCalculator;
|
||||
import com.jozufozu.flywheel.lib.math.RenderMath;
|
||||
import com.jozufozu.flywheel.lib.memory.MemoryBlock;
|
||||
import com.jozufozu.flywheel.lib.transform.Transform;
|
||||
import com.jozufozu.flywheel.lib.transform.TransformStack;
|
||||
import com.jozufozu.flywheel.lib.util.ShadersModHandler;
|
||||
import com.jozufozu.flywheel.lib.vertex.FullVertexView;
|
||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
|
@ -33,8 +36,9 @@ import net.minecraft.core.Direction;
|
|||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
public class SuperByteBuffer implements Transform<SuperByteBuffer> {
|
||||
public class SuperByteBuffer implements TransformStack<SuperByteBuffer> {
|
||||
|
||||
private final MemoryBlock backingStore;
|
||||
private final VertexList template;
|
||||
private final IntPredicate shadedPredicate;
|
||||
|
||||
|
@ -67,26 +71,16 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer> {
|
|||
// Temporary
|
||||
private static final Long2IntMap WORLD_LIGHT_CACHE = new Long2IntOpenHashMap();
|
||||
|
||||
public SuperByteBuffer(ByteBuffer vertexBuffer, BufferBuilder.DrawState drawState, int unshadedStartVertex) {
|
||||
int vertexCount = drawState.vertexCount();
|
||||
int stride = drawState.format().getVertexSize();
|
||||
public SuperByteBuffer(Mesh mesh) {
|
||||
var template = new FullVertexView();
|
||||
|
||||
backingStore = MemoryBlock.malloc(mesh.vertexCount() * FullVertexView.STRIDE);
|
||||
template.ptr(backingStore.ptr());
|
||||
template.vertexCount(mesh.vertexCount());
|
||||
|
||||
mesh.write(template);
|
||||
|
||||
ShadedVertexList template = new BlockVertexList.Shaded(vertexBuffer, vertexCount, stride, unshadedStartVertex);
|
||||
shadedPredicate = template::isShaded;
|
||||
this.template = template;
|
||||
|
||||
transforms.pushPose();
|
||||
}
|
||||
|
||||
public SuperByteBuffer(ShadeSeparatedBufferedData data) {
|
||||
this(data.vertexBuffer(), data.drawState(), data.unshadedStartVertex());
|
||||
}
|
||||
|
||||
public SuperByteBuffer(ByteBuffer vertexBuffer, BufferBuilder.DrawState drawState) {
|
||||
int vertexCount = drawState.vertexCount();
|
||||
int stride = drawState.format().getVertexSize();
|
||||
|
||||
template = new BlockVertexList(vertexBuffer, vertexCount, stride);
|
||||
shadedPredicate = index -> true;
|
||||
|
||||
transforms.pushPose();
|
||||
|
@ -247,7 +241,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer> {
|
|||
}
|
||||
|
||||
public void delete() {
|
||||
template.delete();
|
||||
backingStore.free();
|
||||
}
|
||||
|
||||
public PoseStack getTransforms() {
|
||||
|
@ -272,11 +266,13 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer> {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer pushPose() {
|
||||
transforms.pushPose();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SuperByteBuffer popPose() {
|
||||
transforms.popPose();
|
||||
return this;
|
||||
|
|
|
@ -7,6 +7,7 @@ import javax.annotation.Nullable;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.simibubi.create.foundation.placement.PlacementHelpers;
|
||||
import com.simibubi.create.foundation.render.ModelUtil;
|
||||
import com.simibubi.create.foundation.render.SuperRenderTypeBuffer;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
|
Loading…
Add table
Reference in a new issue