Skip to content

Commit f33a25c

Browse files
committed
Trying to emulate call lists, in the meantime i made some other optimizations
1 parent c2ea778 commit f33a25c

22 files changed

Lines changed: 856 additions & 170 deletions

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ SaltLib aims to be an alternative of the Sodium mod for Minecraft, but for legac
77

88
**Performance:**
99
idk try it out
10+
11+
**Requirements:**
12+
A gpu (can be integrated) made after 2008

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ loom
3333
setIntermediaryUrl('https://maven.legacyfabric.net/net/legacyfabric/intermediary/%1$s/intermediary-%1$s-v2.jar');
3434

3535
// Only needed for versions not available from vanilla launcher by default.
36-
customMinecraftManifest.set("https://meta.legacyfabric.net/v2/manifest/${minecraft_version}")
36+
// customMinecraftManifest.set("https://meta.legacyfabric.net/v2/manifest/${minecraft_version}")
3737

3838
// Required by 1.7.x
3939
// runs

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ org.gradle.jvmargs=-Xmx1G
66
# Fabric Properties
77
minecraft_version = 1.8.9
88
yarn_mappings = 1.8.9+build.382
9-
loader_version = 0.14.7
9+
loader_version = 0.14.9
1010

1111
# Legacy Fabric API
1212
fabric_version = 1.7.0+1.8.9

settings.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,5 @@ pluginManagement
1313
name = 'Jitpack'
1414
url = 'https://jitpack.io'
1515
}
16-
17-
gradlePluginPortal()
1816
}
1917
}

src/main/java/me/Deex/SaltLib/Mixin/BufferBuilderMixin.java

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111
import org.spongepowered.asm.mixin.Mixin;
1212
import org.spongepowered.asm.mixin.Overwrite;
1313
import org.spongepowered.asm.mixin.Shadow;
14+
import org.spongepowered.asm.mixin.gen.Accessor;
1415

1516
import me.Deex.SaltLib.Renderer.MatrixStack;
1617
import net.minecraft.client.render.BufferBuilder;
1718
import net.minecraft.client.render.VertexFormat;
1819
import net.minecraft.client.render.VertexFormatElement;
1920

2021
@Mixin(BufferBuilder.class)
21-
public class BufferBuilderMixin
22+
public abstract class BufferBuilderMixin
2223
{
2324
@Shadow
2425
private ByteBuffer buffer;
@@ -44,13 +45,21 @@ public class BufferBuilderMixin
4445
@Shadow
4546
private double offsetZ;
4647

48+
@Shadow
49+
private boolean building;
50+
51+
private int method_9757()
52+
{
53+
return this.vertexCount * this.format.getVertexSizeInteger();
54+
}
55+
4756
/**
4857
* what is javadoc
4958
* @author me
5059
* @reason mod needs functionality
5160
*/
5261
@Overwrite
53-
private void nextElement() //Basically gets the next element in the buffer
62+
private void nextElement()
5463
{
5564
List<VertexFormatElement> elements = format.getElements();
5665

@@ -67,11 +76,50 @@ private void nextElement() //Basically gets the next element in the buffer
6776
} while (currentElement.getType() == VertexFormatElement.Type.PADDING);
6877
}
6978

70-
79+
@Shadow
80+
private int drawMode;
81+
82+
@Shadow
83+
private boolean textured;
84+
85+
@Shadow
86+
public abstract void reset();
87+
88+
@Overwrite
89+
public void begin(int drawMode, VertexFormat format)
90+
{
91+
if (this.building)
92+
{
93+
return; //Don't throw an error idiot
94+
}
95+
96+
this.building = true;
97+
this.reset();
98+
this.drawMode = drawMode;
99+
this.format = format;
100+
this.currentElement = format.get(this.currentElementId);
101+
this.textured = false;
102+
this.buffer.limit(this.buffer.capacity());
103+
}
104+
105+
@Overwrite
106+
public void end()
107+
{
108+
if (!this.building)
109+
{
110+
return; //Have you heard of assertions?
111+
}
112+
113+
this.building = false;
114+
this.buffer.position(0);
115+
this.buffer.limit(this.method_9757() * 4);
116+
}
117+
118+
71119
//The matrix tranforms are not exact functionaltiy, since OpenGL transforms the verticies with the matrix stack once
72120
//it is requested to be drawn or glBegin has been called
73121

74-
@Overwrite
122+
/*@Overwrite
75123
public BufferBuilder vertex(double x, double y, double z)
76124
{
77125
int i = this.vertexCount * this.format.getVertexSize() + this.format.getIndex(this.currentElementId);
@@ -170,6 +218,7 @@ public BufferBuilder texture(double u, double v)
170218
return (BufferBuilder)(Object)this;
171219
}
172220
221+
@Overwrite
173222
public BufferBuilder texture2(int u, int v)
174223
{
175224
//TODO: Call to texture instead
@@ -215,4 +264,5 @@ public BufferBuilder texture2(int u, int v)
215264
this.nextElement();
216265
return (BufferBuilder)(Object)this;
217266
}
267+
/**/
218268
}
Lines changed: 2 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
package me.Deex.SaltLib.Mixin;
22

3-
import java.nio.ByteBuffer;
4-
import java.nio.FloatBuffer;
5-
import java.util.List;
3+
import me.Deex.SaltLib.Renderer.CustomBufferRenderer;
64

7-
import com.mojang.blaze3d.platform.GLX;
8-
import com.mojang.blaze3d.platform.GlStateManager;
9-
10-
import org.lwjgl.opengl.GL11;
115
import org.spongepowered.asm.mixin.Mixin;
126
import org.spongepowered.asm.mixin.Overwrite;
137

148
import net.minecraft.client.render.BufferBuilder;
159
import net.minecraft.client.render.BufferRenderer;
16-
import net.minecraft.client.render.VertexFormat;
17-
import net.minecraft.client.render.VertexFormatElement;
1810

1911
@Mixin(BufferRenderer.class)
2012
public class BufferRendererMixin
@@ -27,87 +19,6 @@ public class BufferRendererMixin
2719
@Overwrite
2820
public void draw(BufferBuilder builder)
2921
{
30-
if (builder.getVertexCount() <= 0)
31-
{
32-
return;
33-
}
34-
35-
int textureUnitOffset;
36-
int j;
37-
VertexFormat vertexFormat = builder.getFormat();
38-
int stride = vertexFormat.getVertexSize();
39-
ByteBuffer byteBuffer = builder.getByteBuffer();
40-
List<VertexFormatElement> list = vertexFormat.getElements();
41-
block12: for (j = 0; j < list.size(); ++j)
42-
{
43-
VertexFormatElement vertexFormatElement = list.get(j);
44-
VertexFormatElement.Type type = vertexFormatElement.getType();
45-
int vertexTypeID = vertexFormatElement.getFormat().getGlId();
46-
textureUnitOffset = vertexFormatElement.getIndex();
47-
byteBuffer.position(vertexFormat.getIndex(j));
48-
switch (type)
49-
{
50-
case POSITION:
51-
{
52-
GL11.glVertexPointer(vertexFormatElement.getCount(), vertexTypeID, stride, byteBuffer);
53-
GL11.glEnableClientState(32884);
54-
continue block12;
55-
}
56-
case UV:
57-
{
58-
GLX.gl13ClientActiveTexture(GLX.textureUnit + textureUnitOffset);
59-
GL11.glTexCoordPointer(vertexFormatElement.getCount(), vertexTypeID, stride, byteBuffer);
60-
GL11.glEnableClientState(32888);
61-
GLX.gl13ClientActiveTexture(GLX.textureUnit);
62-
continue block12;
63-
}
64-
case COLOR:
65-
{
66-
GL11.glColorPointer(vertexFormatElement.getCount(), vertexTypeID, stride, byteBuffer);
67-
GL11.glEnableClientState(32886);
68-
continue block12;
69-
}
70-
case NORMAL:
71-
{
72-
GL11.glNormalPointer(vertexTypeID, stride, byteBuffer);
73-
GL11.glEnableClientState(32885);
74-
}
75-
}
76-
}
77-
GL11.glDrawArrays(builder.getDrawMode(), 0, builder.getVertexCount());
78-
int m = list.size();
79-
block13: for (j = 0; j < m; ++j)
80-
{
81-
VertexFormatElement vertexFormatElement2 = list.get(j);
82-
VertexFormatElement.Type type2 = vertexFormatElement2.getType();
83-
textureUnitOffset = vertexFormatElement2.getIndex();
84-
switch (type2)
85-
{
86-
case POSITION:
87-
{
88-
GL11.glDisableClientState(32884);
89-
continue block13;
90-
}
91-
case UV:
92-
{
93-
GLX.gl13ClientActiveTexture(GLX.textureUnit + textureUnitOffset);
94-
GL11.glDisableClientState(32888);
95-
GLX.gl13ClientActiveTexture(GLX.textureUnit);
96-
continue block13;
97-
}
98-
case COLOR:
99-
{
100-
GL11.glDisableClientState(32886);
101-
GlStateManager.clearColor();
102-
continue block13;
103-
}
104-
case NORMAL:
105-
{
106-
GL11.glDisableClientState(32885);
107-
}
108-
}
109-
}
110-
111-
builder.reset();
22+
CustomBufferRenderer.DrawAndReset(builder);
11223
}
11324
}
Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,20 @@
11
package me.Deex.SaltLib.Mixin;
22

3-
import org.spongepowered.asm.mixin.Final;
43
import org.spongepowered.asm.mixin.Mixin;
54
import org.spongepowered.asm.mixin.Overwrite;
6-
import org.spongepowered.asm.mixin.Shadow;
75

8-
import com.mojang.blaze3d.platform.GlStateManager;
96

107
import net.minecraft.client.render.BufferBuilder;
11-
import net.minecraft.client.render.BufferRenderer;
128
import net.minecraft.client.render.chunk.ChunkBuilder;
139
import net.minecraft.client.world.BuiltChunk;
1410

1511
@Mixin(ChunkBuilder.class)
1612
public class ChunkBuilderMixin
1713
{
18-
@Shadow
19-
@Final
20-
private BufferRenderer field_11040;
21-
22-
/*@Overwrite
14+
@Overwrite
2315
private void method_10125(BufferBuilder bufferBuilder, int i, BuiltChunk builtChunk)
2416
{
25-
GlStateManager.pushMatrix();
26-
builtChunk.method_10169();
27-
this.field_11040.draw(bufferBuilder);
28-
GlStateManager.popMatrix();
17+
//NOTE: To my knowledge, this function doesn't get called when VBOs are turned on.
18+
return;
2919
}
30-
/* */
3120
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package me.Deex.SaltLib.Mixin;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
5+
import net.minecraft.client.render.BlockRenderLayer;
6+
import net.minecraft.client.render.WorldRenderer;
7+
import net.minecraft.client.render.world.ChunkRenderHelperImpl;
8+
import net.minecraft.client.util.GlAllocationUtils;
9+
import net.minecraft.client.world.BuiltChunk;
10+
import net.minecraft.util.math.BlockPos;
11+
import net.minecraft.world.World;
12+
13+
@Mixin(ChunkRenderHelperImpl.class)
14+
public abstract class ChunkRenderHelperImplMixin extends BuiltChunk
15+
{
16+
//TODO: Ask someone smart what to do with the constructor when mixing in with an extends class
17+
public ChunkRenderHelperImplMixin(World world, WorldRenderer worldRenderer, BlockPos blockPos, int i)
18+
{
19+
super(world, worldRenderer, blockPos, i);
20+
}
21+
22+
@Override
23+
public void delete()
24+
{
25+
return;
26+
}
27+
}

src/main/java/me/Deex/SaltLib/Mixin/GL11Mixin.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)