[TASK] Fixed rendering modifier lines and areas. Rendering block previews no longer crashes (renders black).

This commit is contained in:
Christian Knaapen
2021-09-26 12:48:36 +02:00
parent 3930844208
commit 4b1997e44f
3 changed files with 29 additions and 20 deletions

View File

@@ -2,6 +2,7 @@ package nl.requios.effortlessbuilding.render;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.Util;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@@ -29,8 +30,12 @@ public class BuildRenderTypes extends RenderType {
//LINES //LINES
renderState = CompositeState.builder() renderState = CompositeState.builder()
.setLineState(LINE) .setLineState(LINE)
.setShaderState(RenderStateShard.RENDERTYPE_LINES_SHADER)
.setLayeringState(VIEW_OFFSET_Z_LAYERING) .setLayeringState(VIEW_OFFSET_Z_LAYERING)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY) .setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setTextureState(RenderStateShard.NO_TEXTURE)
.setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
.setLightmapState(RenderStateShard.NO_LIGHTMAP)
.setWriteMaskState(COLOR_DEPTH_WRITE) .setWriteMaskState(COLOR_DEPTH_WRITE)
.setCullState(RenderStateShard.NO_CULL) .setCullState(RenderStateShard.NO_CULL)
.createCompositeState(false); .createCompositeState(false);
@@ -39,12 +44,16 @@ public class BuildRenderTypes extends RenderType {
//PLANES //PLANES
renderState = CompositeState.builder() renderState = CompositeState.builder()
.setLineState(LINE) .setLineState(LINE)
.setLayeringState(VIEW_OFFSET_Z_LAYERING) .setShaderState(RenderStateShard.RENDERTYPE_LINES_SHADER)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY) .setLayeringState(VIEW_OFFSET_Z_LAYERING)
.setWriteMaskState(COLOR_WRITE) .setTransparencyState(TRANSLUCENT_TRANSPARENCY)
.setCullState(RenderStateShard.NO_CULL) .setTextureState(RenderStateShard.NO_TEXTURE)
.createCompositeState(false); .setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
.setLightmapState(RenderStateShard.NO_LIGHTMAP)
.setWriteMaskState(COLOR_WRITE)
.setCullState(RenderStateShard.NO_CULL)
.createCompositeState(false);
PLANES = RenderType.create("eb_planes", PLANES = RenderType.create("eb_planes",
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.TRIANGLE_STRIP, INITIAL_BUFFER_SIZE, false, false, renderState); DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.TRIANGLE_STRIP, INITIAL_BUFFER_SIZE, false, false, renderState);
} }
@@ -79,16 +88,17 @@ public class BuildRenderTypes extends RenderType {
}, ShaderHandler::releaseShader); }, ShaderHandler::releaseShader);
RenderType.CompositeState renderState = RenderType.CompositeState.builder() RenderType.CompositeState renderState = RenderType.CompositeState.builder()
.setTextureState(new RenderStateShard.TextureStateShard(ShaderHandler.shaderMaskTextureLocation, false, false)) .setShaderState(RenderStateShard.RENDERTYPE_TRANSLUCENT_SHADER)
.setTexturingState(MY_TEXTURING) .setTextureState(new RenderStateShard.TextureStateShard(ShaderHandler.shaderMaskTextureLocation, false, false))
.setTransparencyState(TRANSLUCENT_TRANSPARENCY) .setTexturingState(MY_TEXTURING)
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
//TODO 1.17 //TODO 1.17
// .setDiffuseLightingState(DIFFUSE_LIGHTING_DISABLED) // .setDiffuseLightingState(DIFFUSE_LIGHTING_DISABLED)
// .setAlphaState(DEFAULT_ALPHA) // .setAlphaState(DEFAULT_ALPHA)
.setCullState(new RenderStateShard.CullStateShard(true)) .setCullState(new RenderStateShard.CullStateShard(true))
.setLightmapState(new RenderStateShard.LightmapStateShard(false)) .setLightmapState(new RenderStateShard.LightmapStateShard(false))
.setOverlayState(new RenderStateShard.OverlayStateShard(false)) .setOverlayState(new RenderStateShard.OverlayStateShard(false))
.createCompositeState(true); .createCompositeState(true);
//Unique name for every combination, otherwise it will reuse the previous one //Unique name for every combination, otherwise it will reuse the previous one
String name = "eb_block_previews_" + dissolve + "_" + blockPos + "_" + firstPos + "_" + secondPos + "_" + red; String name = "eb_block_previews_" + dissolve + "_" + blockPos + "_" + firstPos + "_" + secondPos + "_" + red;
return RenderType.create(name, return RenderType.create(name,

View File

@@ -21,7 +21,7 @@ public class ModifierRenderer {
protected static final Color colorZ = new Color(52, 247, 255); protected static final Color colorZ = new Color(52, 247, 255);
protected static final Color colorRadial = new Color(52, 247, 255); protected static final Color colorRadial = new Color(52, 247, 255);
protected static final int lineAlpha = 200; protected static final int lineAlpha = 200;
protected static final int planeAlpha = 75; protected static final int planeAlpha = 50;
protected static final Vec3 epsilon = new Vec3(0.001, 0.001, 0.001); //prevents z-fighting protected static final Vec3 epsilon = new Vec3(0.001, 0.001, 0.001); //prevents z-fighting
public static void render(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, ModifierSettingsManager.ModifierSettings modifierSettings) { public static void render(PoseStack matrixStack, MultiBufferSource.BufferSource renderTypeBuffer, ModifierSettingsManager.ModifierSettings modifierSettings) {

View File

@@ -21,6 +21,7 @@ import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
@@ -53,8 +54,6 @@ public class RenderHandler {
PoseStack matrixStack = event.getMatrixStack(); PoseStack matrixStack = event.getMatrixStack();
BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder(); BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
MultiBufferSource.BufferSource renderTypeBuffer = MultiBufferSource.immediate(bufferBuilder); MultiBufferSource.BufferSource renderTypeBuffer = MultiBufferSource.immediate(bufferBuilder);
if (renderTypeBuffer == null)
return;
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player); ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
@@ -193,8 +192,8 @@ public class RenderHandler {
try { try {
BakedModel model = dispatcher.getBlockModel(blockState); BakedModel model = dispatcher.getBlockModel(blockState);
dispatcher.getModelRenderer().renderModel(matrixStack.last(), buffer, dispatcher.getModelRenderer().renderModel(matrixStack.last(), buffer, blockState, model,
blockState, model, 1f, 1f, 1f, 0, OverlayTexture.NO_OVERLAY); 1f, 1f, 1f, 0, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE);
// blockRendererDispatcher.getBlockModelRenderer().renderModel(world, blockRendererDispatcher.getModelForState(blockState), // blockRendererDispatcher.getBlockModelRenderer().renderModel(world, blockRendererDispatcher.getModelForState(blockState),
// blockState, logicPos, matrixStack, renderTypeBuffer.getBuffer(renderType), true, new Random(), blockState.getPositionRandom(logicPos), i); // blockState, logicPos, matrixStack, renderTypeBuffer.getBuffer(renderType), true, new Random(), blockState.getPositionRandom(logicPos), i);
} catch (NullPointerException e) { } catch (NullPointerException e) {