Program: 80061
Project: 80061
Buggy source:
public void testDrawModel() throws Exception {
  Map<Texture,Mesh> meshList=new HashMap<>();
  Rasteriser rasteriser=RasteriserFactory.createRasteriser(RasteriserType.Lwjgl,DisplayType.Window,800,800,24,8,24,4);
  BlockRegistry br=new BlockRegistry(rasteriser);
  Map<String,String> textureMap=new HashMap<>();
  BlockModel bm=br.loadModel("String_Node_Str",zips,textureMap);
  List<BlockElement> elements=bm.getElements();
  for (  BlockElement element : elements) {
    SubTexture tex=null;
    LwjglTexture texture=null;
    if (element.getFaces().containsKey("String_Node_Str")) {
      tex=element.getFaces().get("String_Node_Str").getTexture();
      texture=(LwjglTexture)tex.texture;
      Mesh result=null;
      result=meshList.get(texture);
      if (result == null) {
        result=new LwjglMesh(texture);
        meshList.put(texture,result);
      }
      float x1=element.getFrom().x();
      float z1=element.getFrom().z();
      float x2=element.getTo().x();
      float y2=element.getTo().y();
      float z2=element.getTo().z();
      result.addVertex(new Vector3f(x1,y2,z1),tex.u0,tex.v0);
      result.addVertex(new Vector3f(x2,y2,z1),tex.u1,tex.v0);
      result.addVertex(new Vector3f(x2,y2,z2),tex.u1,tex.v1);
      result.addVertex(new Vector3f(x1,y2,z2),tex.u0,tex.v1);
    }
  }
  for (  Mesh m : meshList.values())   m.finalise();
  resize();
  System.out.println(glGetString(GL_VERSION));
  System.out.println(glGetString(GL_VENDOR));
  glColor3f(0.0f,1.0f,0.0f);
  glFrontFace(GL_CW);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_ALPHA_TEST);
  glAlphaFunc(GL11.GL_GREATER,0.6f);
  while (!Display.isCloseRequested()) {
    if (Display.wasResized())     resize();
    getKeys();
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    for (    BlockElement element : elements) {
      float originX=element.getRotationOrigin().x();
      float originY=element.getRotationOrigin().y();
      float originZ=element.getRotationOrigin().z();
      glPushMatrix();
      if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),1.0f,0,0);
        glTranslatef(-originX,-originY,-originZ);
      }
 else       if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),0,1.0f,0);
        glTranslatef(-originX,-originY,-originZ);
      }
 else       if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),0,0,1.0f);
        glTranslatef(-originX,-originY,-originZ);
      }
      float x1=element.getFrom().x();
      float y1=element.getFrom().y();
      float z1=element.getFrom().z();
      float x2=element.getTo().x();
      float y2=element.getTo().y();
      float z2=element.getTo().z();
      SubTexture tex=null;
      LwjglTexture texture=null;
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)tex.texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y2,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y1,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y1,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z1);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z1);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z2);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y1,z1);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y2,z2);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y1,z1);
        glEnd();
      }
      glPopMatrix();
    }
    Display.update();
    Display.sync(60);
  }
  Display.destroy();
}

Fixed version (ground truth):
public void testDrawModel() throws Exception {
  Map<Texture,Mesh> meshList=new HashMap<>();
  Rasteriser rasteriser=RasteriserFactory.createRasteriser(RasteriserType.Lwjgl,DisplayType.Window,800,800,24,8,24,4);
  BlockRegistry br=new BlockRegistry(rasteriser);
  Map<String,String> textureMap=new HashMap<>();
  BlockModel bm=br.loadModel("String_Node_Str",zips,textureMap);
  List<BlockElement> elements=bm.getElements();
  for (  BlockElement element : elements) {
    SubTexture tex=null;
    LwjglTexture texture=null;
    if (element.getFaces().containsKey("String_Node_Str")) {
      tex=element.getFaces().get("String_Node_Str").getTexture();
      texture=(LwjglTexture)tex.texture;
      Mesh result=null;
      result=meshList.get(texture);
      if (result == null) {
        result=new LwjglMesh(texture);
        meshList.put(texture,result);
      }
      float x1=element.getFrom().x();
      float z1=element.getFrom().z();
      float x2=element.getTo().x();
      float y2=element.getTo().y();
      float z2=element.getTo().z();
      Vector4f color=new Vector4f(1,1,1,1);
      result.addVertex(new Vector3f(x1,y2,z1),color,tex.u0,tex.v0);
      result.addVertex(new Vector3f(x2,y2,z1),color,tex.u1,tex.v0);
      result.addVertex(new Vector3f(x2,y2,z2),color,tex.u1,tex.v1);
      result.addVertex(new Vector3f(x1,y2,z2),color,tex.u0,tex.v1);
    }
  }
  for (  Mesh m : meshList.values())   m.finalise();
  resize();
  System.out.println(glGetString(GL_VERSION));
  System.out.println(glGetString(GL_VENDOR));
  glColor3f(0.0f,1.0f,0.0f);
  glFrontFace(GL_CW);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_ALPHA_TEST);
  glAlphaFunc(GL11.GL_GREATER,0.6f);
  while (!Display.isCloseRequested()) {
    if (Display.wasResized())     resize();
    getKeys();
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    for (    BlockElement element : elements) {
      float originX=element.getRotationOrigin().x();
      float originY=element.getRotationOrigin().y();
      float originZ=element.getRotationOrigin().z();
      glPushMatrix();
      if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),1.0f,0,0);
        glTranslatef(-originX,-originY,-originZ);
      }
 else       if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),0,1.0f,0);
        glTranslatef(-originX,-originY,-originZ);
      }
 else       if (element.getRotationAxis().equals("String_Node_Str")) {
        glTranslatef(originX,originY,originZ);
        glRotatef(element.getRotationAngle(),0,0,1.0f);
        glTranslatef(-originX,-originY,-originZ);
      }
      float x1=element.getFrom().x();
      float y1=element.getFrom().y();
      float z1=element.getFrom().z();
      float x2=element.getTo().x();
      float y2=element.getTo().y();
      float z2=element.getTo().z();
      SubTexture tex=null;
      LwjglTexture texture=null;
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)tex.texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y2,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y1,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y1,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z1);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z1);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z2);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x2,y2,z2);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x2,y2,z1);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x2,y1,z1);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x2,y1,z2);
        glEnd();
      }
      if (element.getFaces().containsKey("String_Node_Str")) {
        tex=element.getFaces().get("String_Node_Str").getTexture();
        texture=(LwjglTexture)element.getFaces().get("String_Node_Str").getTexture().texture;
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getId());
        glColor3f(1.0f,1.0f,1.0f);
        glBegin(GL_QUADS);
        glTexCoord2f(tex.u0,tex.v0);
        glVertex3f(x1,y2,z1);
        glTexCoord2f(tex.u1,tex.v0);
        glVertex3f(x1,y2,z2);
        glTexCoord2f(tex.u1,tex.v1);
        glVertex3f(x1,y1,z2);
        glTexCoord2f(tex.u0,tex.v1);
        glVertex3f(x1,y1,z1);
        glEnd();
      }
      glPopMatrix();
    }
    Display.update();
    Display.sync(60);
  }
  Display.destroy();
}