package openmods.renderer.shaders; import java.nio.ByteBuffer; import org.lwjgl.opengl.ARBBufferObject; import org.lwjgl.opengl.ContextCapabilities; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GLContext; public class BufferHelper { static { initialize(); } public static IBufferMethods methods; static void initialize() { ContextCapabilities caps = GLContext.getCapabilities(); if (GLBufferMethods.isSupported(caps)) methods = new GLBufferMethods(); else if (ARBBufferMethods.isSupported(caps)) methods = new ARBBufferMethods(); } public static boolean isSupported() { return methods != null; } public static IBufferMethods methods() { return methods; } public static interface IBufferMethods { public int glGenBuffers(); public void glBindBuffer(int target, int buffer); public void glBufferData(int target, ByteBuffer data, int usage); public void glDeleteBuffers(int buffer); } private static class GLBufferMethods implements IBufferMethods { public static boolean isSupported(ContextCapabilities caps) { return caps.OpenGL15; } @Override public int glGenBuffers() { return GL15.glGenBuffers(); } @Override public void glBindBuffer(int target, int buffer) { GL15.glBindBuffer(target, buffer); } @Override public void glBufferData(int target, ByteBuffer data, int usage) { GL15.glBufferData(target, data, usage); } @Override public void glDeleteBuffers(int buffer) { GL15.glDeleteBuffers(buffer); } } private static class ARBBufferMethods implements IBufferMethods { public static boolean isSupported(ContextCapabilities caps) { return caps.OpenGL15; } @Override public int glGenBuffers() { return ARBBufferObject.glGenBuffersARB(); } @Override public void glBindBuffer(int target, int buffer) { ARBBufferObject.glBindBufferARB(target, buffer); } @Override public void glBufferData(int target, ByteBuffer data, int usage) { ARBBufferObject.glBufferDataARB(target, data, usage); } @Override public void glDeleteBuffers(int buffer) { ARBBufferObject.glDeleteBuffersARB(buffer); } } }