mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Make IVertexConsumers such as the lighting pipeline, be aware of which format they are dealing with. (#8692)
Also fix Lighting pipeline ignoring the overlay coords from the block renderer.
This commit is contained in:
1 parent
e6a73ef36c
commit
d7bc564512
13 files changed
+123
-52
No files matched your search
@@ -5,13 +5,14 @@
|
||||
|
||||
package net.minecraftforge.client.extensions;
|
||||
|
||||
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 net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
import net.minecraftforge.client.model.pipeline.LightUtil;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
|
||||
import java.nio.Buffer;
|
||||
@@ -34,6 +35,8 @@ public interface IForgeVertexConsumer
|
||||
return (VertexConsumer) this;
|
||||
}
|
||||
|
||||
VertexFormat getVertexFormat();
|
||||
|
||||
// Copy of putBulkData, but enables tinting and per-vertex alpha
|
||||
default void putBulkData(PoseStack.Pose poseStack, BakedQuad bakedQuad, float red, float green, float blue, int packedLight, int packedOverlay, boolean readExistingColor) {
|
||||
putBulkData(poseStack, bakedQuad, red, green, blue, 1.0f, packedLight, packedOverlay, readExistingColor);
|
||||
|
||||
@@ -1,20 +1,6 @@
|
||||
/*
|
||||
* Minecraft Forge
|
||||
* Copyright (c) 2016-2022.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation version 2.1
|
||||
* of the License.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
package net.minecraftforge.client.gui;
|
||||
|
||||
@@ -44,6 +44,7 @@ public class ForgeBlockModelRenderer extends ModelBlockRenderer
|
||||
{
|
||||
VertexBufferConsumer consumer = consumerFlat.get();
|
||||
consumer.setBuffer(buffer);
|
||||
consumer.setPackedOverlay(packedOverlay);
|
||||
|
||||
VertexLighterFlat lighter = lighterFlat.get();
|
||||
lighter.setParent(consumer);
|
||||
@@ -64,6 +65,7 @@ public class ForgeBlockModelRenderer extends ModelBlockRenderer
|
||||
{
|
||||
VertexBufferConsumer consumer = consumerSmooth.get();
|
||||
consumer.setBuffer(buffer);
|
||||
consumer.setPackedOverlay(packedOverlay);
|
||||
|
||||
VertexLighterSmoothAo lighter = lighterSmooth.get();
|
||||
lighter.setParent(consumer);
|
||||
|
||||
@@ -7,19 +7,31 @@ package net.minecraftforge.client.model.pipeline;
|
||||
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
|
||||
import com.mojang.blaze3d.vertex.VertexFormatElement;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||
import net.minecraft.core.Direction;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Assumes VertexFormatElement is present in the BufferBuilder's vertex format.
|
||||
*/
|
||||
public class VertexBufferConsumer implements IVertexConsumer
|
||||
{
|
||||
private VertexFormat format;
|
||||
private List<VertexFormatElement> elements;
|
||||
private VertexConsumer renderer;
|
||||
private boolean overrideOverlayCoords;
|
||||
private int overlayCoordU;
|
||||
private int overlayCoordV;
|
||||
|
||||
public VertexBufferConsumer() {}
|
||||
public VertexBufferConsumer()
|
||||
{
|
||||
setVertexFormat(DefaultVertexFormat.BLOCK);
|
||||
}
|
||||
|
||||
public VertexBufferConsumer(VertexConsumer buffer)
|
||||
{
|
||||
@@ -29,7 +41,7 @@ public class VertexBufferConsumer implements IVertexConsumer
|
||||
@Override
|
||||
public final VertexFormat getVertexFormat()
|
||||
{
|
||||
return DefaultVertexFormat.BLOCK;
|
||||
return format;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -40,24 +52,36 @@ public class VertexBufferConsumer implements IVertexConsumer
|
||||
final float d2 = data.length <= 2 ? 0 : data[2];
|
||||
final float d3 = data.length <= 3 ? 0 : data[3];
|
||||
|
||||
switch (e)
|
||||
var element = elements.get(e);
|
||||
|
||||
switch (element.getUsage())
|
||||
{
|
||||
case 0: // POSITION_3F
|
||||
renderer.vertex(d0, d1, d2);
|
||||
case POSITION: // POSITION_3F
|
||||
if (element.getIndex() == 0)
|
||||
renderer.vertex(d0, d1, d2);
|
||||
break;
|
||||
case 4: // NORMAL_3B
|
||||
renderer.normal(d0, d1, d2);
|
||||
case NORMAL: // NORMAL_3B
|
||||
if (element.getIndex() == 0)
|
||||
renderer.normal(d0, d1, d2);
|
||||
break;
|
||||
case 1: // COLOR_4UB
|
||||
renderer.color(d0, d1, d2, d3);
|
||||
case COLOR: // COLOR_4UB
|
||||
if (element.getIndex() == 0)
|
||||
renderer.color(d0, d1, d2, d3);
|
||||
break;
|
||||
case 2: // TEX_2F
|
||||
renderer.uv(d0, d1);
|
||||
case UV: // TEX_2F
|
||||
switch(element.getIndex())
|
||||
{
|
||||
case 0 -> renderer.uv(d0, d1);
|
||||
case 1 -> {
|
||||
if (overrideOverlayCoords)
|
||||
renderer.overlayCoords(overlayCoordU, overlayCoordV);
|
||||
else
|
||||
renderer.overlayCoords((int) (d0 * 32767f), (int) (d1 * 32767f));
|
||||
}
|
||||
case 2 -> renderer.uv2((int) (d0 * 0xF0), (int) (d1 * 0xF0));
|
||||
}
|
||||
break;
|
||||
case 3: // TEX_2SB
|
||||
renderer.uv2((int) (d0 * 0xF0), (int) (d1 * 0xF0));
|
||||
break;
|
||||
case 5: // PADDING_1B
|
||||
case PADDING:
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Vertex element out of bounds: " + e);
|
||||
@@ -71,6 +95,13 @@ public class VertexBufferConsumer implements IVertexConsumer
|
||||
public void setBuffer(VertexConsumer buffer)
|
||||
{
|
||||
this.renderer = buffer;
|
||||
setVertexFormat(buffer.getVertexFormat());
|
||||
}
|
||||
|
||||
public void setVertexFormat(VertexFormat format)
|
||||
{
|
||||
this.format = format;
|
||||
this.elements = this.format.getElements();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,4 +112,11 @@ public class VertexBufferConsumer implements IVertexConsumer
|
||||
public void setApplyDiffuseLighting(boolean diffuse) {}
|
||||
@Override
|
||||
public void setTexture(TextureAtlasSprite texture ) {}
|
||||
|
||||
public void setPackedOverlay(int packedOverlay)
|
||||
{
|
||||
this.overrideOverlayCoords = true;
|
||||
this.overlayCoordV = (packedOverlay >> 16) & 0xFFFF;
|
||||
this.overlayCoordU = (packedOverlay) & 0xFFFF;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Minecraft Forge - Forge Development LLC
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Minecraft Forge - Forge Development LLC
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
|
||||
Reference in new issue
Block a user