Like KenRussel said, have you tried using GL_UNSIGNED_BYTE when drawing it?
Not sure if it could be loaded as a texture with unsigned bytes or not, but worth a shot...
Changing this:
GL11.glDrawPixels(
tex.getTexWidth(),
tex.getTexHeight(),
GL11.GL_RGB,
GL11.GL_BYTE,
tex.data);
To this:
GL11.glDrawPixels(
tex.getTexWidth(),
tex.getTexHeight(),
GL11.GL_RGB,
GL11.GL_UNSIGNED_BYTE,
tex.data);