Track VBO and EBO via vanilla

This commit is contained in:
Jozufozu 2021-12-24 16:15:20 -08:00
parent de6c4270b2
commit e16b32e116
2 changed files with 21 additions and 2 deletions

View file

@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL40;
import org.lwjgl.opengl.GL42; import org.lwjgl.opengl.GL42;
import org.lwjgl.opengl.GL43; import org.lwjgl.opengl.GL43;
import com.jozufozu.flywheel.mixin.BufferUploaderAccessor;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
public enum GlBufferType { public enum GlBufferType {
@ -34,9 +35,19 @@ public enum GlBufferType {
public void bind(int buffer) { public void bind(int buffer) {
GlStateManager._glBindBuffer(glEnum, buffer); GlStateManager._glBindBuffer(glEnum, buffer);
switch (this.glEnum) {
case GL15C.GL_ELEMENT_ARRAY_BUFFER -> BufferUploaderAccessor.flywheel$setLastEBO(buffer);
case GL15C.GL_ARRAY_BUFFER -> BufferUploaderAccessor.flywheel$setLastVBO(buffer);
}
} }
public void unbind() { public void unbind() {
GlStateManager._glBindBuffer(glEnum, 0); GlStateManager._glBindBuffer(glEnum, 0);
switch (this.glEnum) {
case GL15C.GL_ELEMENT_ARRAY_BUFFER -> BufferUploaderAccessor.flywheel$setLastEBO(0);
case GL15C.GL_ARRAY_BUFFER -> BufferUploaderAccessor.flywheel$setLastVBO(0);
}
} }
} }

View file

@ -5,12 +5,20 @@ import org.spongepowered.asm.mixin.gen.Accessor;
import com.mojang.blaze3d.vertex.BufferUploader; import com.mojang.blaze3d.vertex.BufferUploader;
import net.minecraft.client.renderer.ShaderInstance;
@Mixin(BufferUploader.class) @Mixin(BufferUploader.class)
public interface BufferUploaderAccessor { public interface BufferUploaderAccessor {
@Accessor("lastVertexArrayObject") @Accessor("lastVertexArrayObject")
static void flywheel$setLastVAO(int id) { static void flywheel$setLastVAO(int id) {
throw new AssertionError(); throw new AssertionError();
} }
@Accessor("lastVertexBufferObject")
static void flywheel$setLastVBO(int id) {
throw new AssertionError();
}
@Accessor("lastIndexBufferObject")
static void flywheel$setLastEBO(int id) {
throw new AssertionError();
}
} }