package openblocks.shapes; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.nio.ByteBuffer; import java.util.List; import openmods.renderer.shaders.BufferHelper; import openmods.utils.Coord; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL15; public class CoordShape { @SideOnly(Side.CLIENT) private int vbo; private final List<Coord> coords; public CoordShape(List<Coord> coords) { this.coords = coords; } @SideOnly(Side.CLIENT) public int bindVBO() { if (vbo == 0) { ByteBuffer data = BufferUtils.createByteBuffer(coords.size() * 3 * 4); for (Coord c : coords) data.putInt(c.x).putInt(c.y).putInt(c.z); data.flip(); vbo = BufferHelper.methods().glGenBuffers(); BufferHelper.methods().glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo); BufferHelper.methods().glBufferData(GL15.GL_ARRAY_BUFFER, data, GL15.GL_STATIC_DRAW); } else BufferHelper.methods().glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo); return vbo; } public List<Coord> getCoords() { return coords; } public int size() { return coords.size(); } @SideOnly(Side.CLIENT) public void destroy() { if (vbo != 0) BufferHelper.methods().glDeleteBuffers(vbo); vbo = 0; } }