From 180aad05decc7eefa87e4e45d6747c48f40e5361 Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Mon, 17 Apr 2023 12:12:01 -0400 Subject: save --- .../tylermurphy/Minecraft/Render/Data/Mesh.java | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 src/main/java/net/tylermurphy/Minecraft/Render/Data/Mesh.java (limited to 'src/main/java/net/tylermurphy/Minecraft/Render/Data/Mesh.java') diff --git a/src/main/java/net/tylermurphy/Minecraft/Render/Data/Mesh.java b/src/main/java/net/tylermurphy/Minecraft/Render/Data/Mesh.java new file mode 100755 index 0000000..093a58e --- /dev/null +++ b/src/main/java/net/tylermurphy/Minecraft/Render/Data/Mesh.java @@ -0,0 +1,82 @@ +package net.tylermurphy.Minecraft.Render.Data; + +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GL30; + +import java.io.Serializable; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; + +public class Mesh implements Serializable { + + private static final long serialVersionUID = -8137846451745511907L; + + public static List vaos = new ArrayList<>(); + public static List vbos = new ArrayList<>(); + + private final int id; + private final int vertexCount; + private int counter = 0; + + public Mesh(int vertexCount){ + this.id = GL30.glGenVertexArrays(); + vaos.add(id); + this.vertexCount = vertexCount; + GL30.glBindVertexArray(id); + } + + public Mesh store(float[] data, int coordinateSize){ + int id = GL15.glGenBuffers(); + vbos.add(id); + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, id); + FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length); + buffer.put(data); + buffer.flip(); + GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW); + GL20.glVertexAttribPointer(counter,coordinateSize, GL11.GL_FLOAT,false,0,0); + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); + counter++; + return this; + } + + public Mesh finish(){ + GL30.glBindVertexArray(0); + return this; + } + + public void delete(){ + IntBuffer amount = BufferUtils.createIntBuffer(1); + GL20.glGetIntegerv(GL20.GL_MAX_VERTEX_ATTRIBS, amount); + GL30.glBindVertexArray(id); + for (int i=0; i < amount.get(0); i++) { + IntBuffer vbo = BufferUtils.createIntBuffer(1); + GL20.glGetVertexAttribiv(i, GL20.GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, vbo); + if(vbo.get(0) > 0) { + GL15.glDeleteBuffers(vbo.get(0)); + } + } + GL30.glDeleteVertexArrays(id); + } + + public int getID() { + return id; + } + public int getVertexCount() { + return vertexCount; + } + + public static void cleanUp() { + for(int vao:vaos){ + GL30.glDeleteVertexArrays(vao); + } + for(int vbo:vbos){ + GL30.glDeleteBuffers(vbo); + } + } + +} -- cgit v1.2.3-freya