package openmods.renderer;
import org.lwjgl.opengl.GL11;
public abstract class DisplayListWrapper {
private int displayList;
private boolean isValid;
private boolean pendingInvalidate;
public boolean isCompiled() {
return isValid;
}
public void render() {
if (pendingInvalidate) reset();
if (!isValid) {
displayList = GL11.glGenLists(1);
GL11.glNewList(displayList, GL11.GL_COMPILE);
compile();
GL11.glEndList();
isValid = true;
}
GL11.glCallList(displayList);
}
public abstract void compile();
/**
* WARNING: this method can be only used in client (rendering) thread. If not possible, use {@link #invalidate()}.
*/
public void reset() {
if (isValid) GL11.glDeleteLists(displayList, 1);
pendingInvalidate = isValid = false;
}
public void invalidate() {
pendingInvalidate = true;
}
}