mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-12-27 23:47:09 +01:00
Fix diffuse lighting in batching engine
- Complete hack that definitely won't come back to bite me - Also slighting change some unsafe writing stuff
This commit is contained in:
parent
80d41a76af
commit
99a50631cb
7 changed files with 60 additions and 50 deletions
|
@ -9,9 +9,11 @@ import com.jozufozu.flywheel.backend.RenderLayer;
|
|||
import com.jozufozu.flywheel.backend.instancing.TaskEngine;
|
||||
import com.jozufozu.flywheel.backend.instancing.Engine;
|
||||
import com.jozufozu.flywheel.event.RenderLayerEvent;
|
||||
import com.mojang.blaze3d.platform.Lighting;
|
||||
import com.mojang.blaze3d.vertex.BufferBuilder;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.mojang.math.Matrix4f;
|
||||
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
|
@ -60,6 +62,15 @@ public class BatchingEngine implements Engine, MultiBufferSource {
|
|||
|
||||
stack.popPose();
|
||||
|
||||
// FIXME: this probably breaks some vanilla stuff but it works much better for flywheel
|
||||
Matrix4f mat = new Matrix4f();
|
||||
mat.setIdentity();
|
||||
if (event.getWorld().effects().constantAmbientLight()) {
|
||||
Lighting.setupNetherLevel(mat);
|
||||
} else {
|
||||
Lighting.setupLevel(mat);
|
||||
}
|
||||
|
||||
// TODO: when/if this causes trouble with shaders, try to inject our BufferBuilders
|
||||
// into the RenderBuffers from context.
|
||||
buffers.forEach((type, builder) -> type.end(builder, 0, 0, 0));
|
||||
|
|
|
@ -14,12 +14,12 @@ public abstract class BasicWriterUnsafe<D extends BasicData> extends UnsafeBuffe
|
|||
|
||||
@Override
|
||||
protected void writeInternal(D d) {
|
||||
long addr = writePointer;
|
||||
MemoryUtil.memPutByte(addr, (byte) (d.blockLight << 4));
|
||||
MemoryUtil.memPutByte(addr + 1, (byte) (d.skyLight << 4));
|
||||
MemoryUtil.memPutByte(addr + 2, d.r);
|
||||
MemoryUtil.memPutByte(addr + 3, d.g);
|
||||
MemoryUtil.memPutByte(addr + 4, d.b);
|
||||
MemoryUtil.memPutByte(addr + 5, d.a);
|
||||
long ptr = writePointer;
|
||||
MemoryUtil.memPutByte(ptr, (byte) (d.blockLight << 4));
|
||||
MemoryUtil.memPutByte(ptr + 1, (byte) (d.skyLight << 4));
|
||||
MemoryUtil.memPutByte(ptr + 2, d.r);
|
||||
MemoryUtil.memPutByte(ptr + 3, d.g);
|
||||
MemoryUtil.memPutByte(ptr + 4, d.b);
|
||||
MemoryUtil.memPutByte(ptr + 5, d.a);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,10 +14,9 @@ public class ModelWriterUnsafe extends BasicWriterUnsafe<ModelData> {
|
|||
@Override
|
||||
protected void writeInternal(ModelData d) {
|
||||
super.writeInternal(d);
|
||||
long addr = writePointer + 6;
|
||||
long ptr = writePointer + 6;
|
||||
|
||||
((WriteUnsafe) (Object) d.model).writeUnsafe(addr);
|
||||
addr += 4 * 16;
|
||||
((WriteUnsafe) (Object) d.normal).writeUnsafe(addr);
|
||||
((WriteUnsafe) (Object) d.model).writeUnsafe(ptr);
|
||||
((WriteUnsafe) (Object) d.normal).writeUnsafe(ptr + 4 * 16);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,18 +13,18 @@ public class OrientedWriterUnsafe extends BasicWriterUnsafe<OrientedData> {
|
|||
|
||||
@Override
|
||||
protected void writeInternal(OrientedData d) {
|
||||
long addr = writePointer;
|
||||
long ptr = writePointer;
|
||||
super.writeInternal(d);
|
||||
|
||||
MemoryUtil.memPutFloat(addr + 6, d.posX);
|
||||
MemoryUtil.memPutFloat(addr + 10, d.posY);
|
||||
MemoryUtil.memPutFloat(addr + 14, d.posZ);
|
||||
MemoryUtil.memPutFloat(addr + 18, d.pivotX);
|
||||
MemoryUtil.memPutFloat(addr + 22, d.pivotY);
|
||||
MemoryUtil.memPutFloat(addr + 26, d.pivotZ);
|
||||
MemoryUtil.memPutFloat(addr + 30, d.qX);
|
||||
MemoryUtil.memPutFloat(addr + 34, d.qY);
|
||||
MemoryUtil.memPutFloat(addr + 38, d.qZ);
|
||||
MemoryUtil.memPutFloat(addr + 42, d.qW);
|
||||
MemoryUtil.memPutFloat(ptr + 6, d.posX);
|
||||
MemoryUtil.memPutFloat(ptr + 10, d.posY);
|
||||
MemoryUtil.memPutFloat(ptr + 14, d.posZ);
|
||||
MemoryUtil.memPutFloat(ptr + 18, d.pivotX);
|
||||
MemoryUtil.memPutFloat(ptr + 22, d.pivotY);
|
||||
MemoryUtil.memPutFloat(ptr + 26, d.pivotZ);
|
||||
MemoryUtil.memPutFloat(ptr + 30, d.qX);
|
||||
MemoryUtil.memPutFloat(ptr + 34, d.qY);
|
||||
MemoryUtil.memPutFloat(ptr + 38, d.qZ);
|
||||
MemoryUtil.memPutFloat(ptr + 42, d.qW);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,16 +27,16 @@ public abstract class Matrix3fMixin implements WriteUnsafe, WriteSafe {
|
|||
@Shadow protected float m22;
|
||||
|
||||
@Override
|
||||
public void writeUnsafe(long addr) {
|
||||
MemoryUtil.memPutFloat(addr, m00);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m10);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m20);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m01);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m11);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m21);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m02);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m12);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m22);
|
||||
public void writeUnsafe(long ptr) {
|
||||
MemoryUtil.memPutFloat(ptr, m00);
|
||||
MemoryUtil.memPutFloat(ptr + 4, m10);
|
||||
MemoryUtil.memPutFloat(ptr + 8, m20);
|
||||
MemoryUtil.memPutFloat(ptr + 12, m01);
|
||||
MemoryUtil.memPutFloat(ptr + 16, m11);
|
||||
MemoryUtil.memPutFloat(ptr + 20, m21);
|
||||
MemoryUtil.memPutFloat(ptr + 24, m02);
|
||||
MemoryUtil.memPutFloat(ptr + 28, m12);
|
||||
MemoryUtil.memPutFloat(ptr + 32, m22);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -34,23 +34,23 @@ public abstract class Matrix4fMixin implements WriteUnsafe, WriteSafe {
|
|||
@Shadow protected float m33;
|
||||
|
||||
@Override
|
||||
public void writeUnsafe(long addr) {
|
||||
MemoryUtil.memPutFloat(addr, m00);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m10);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m20);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m30);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m01);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m11);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m21);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m31);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m02);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m12);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m22);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m32);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m03);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m13);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m23);
|
||||
MemoryUtil.memPutFloat(addr += 4L, m33);
|
||||
public void writeUnsafe(long ptr) {
|
||||
MemoryUtil.memPutFloat(ptr, m00);
|
||||
MemoryUtil.memPutFloat(ptr + 4, m10);
|
||||
MemoryUtil.memPutFloat(ptr + 8, m20);
|
||||
MemoryUtil.memPutFloat(ptr + 12, m30);
|
||||
MemoryUtil.memPutFloat(ptr + 16, m01);
|
||||
MemoryUtil.memPutFloat(ptr + 20, m11);
|
||||
MemoryUtil.memPutFloat(ptr + 24, m21);
|
||||
MemoryUtil.memPutFloat(ptr + 28, m31);
|
||||
MemoryUtil.memPutFloat(ptr + 32, m02);
|
||||
MemoryUtil.memPutFloat(ptr + 36, m12);
|
||||
MemoryUtil.memPutFloat(ptr + 40, m22);
|
||||
MemoryUtil.memPutFloat(ptr + 44, m32);
|
||||
MemoryUtil.memPutFloat(ptr + 48, m03);
|
||||
MemoryUtil.memPutFloat(ptr + 52, m13);
|
||||
MemoryUtil.memPutFloat(ptr + 56, m23);
|
||||
MemoryUtil.memPutFloat(ptr + 60, m33);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,5 +5,5 @@ public interface WriteUnsafe {
|
|||
/**
|
||||
* Write the contents of this object into sequential memory starting at the given address.
|
||||
*/
|
||||
void writeUnsafe(long addr);
|
||||
void writeUnsafe(long ptr);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue