I have been hitting the tutorials pretty hard lately, but I can't find anything that explains rendering textures using Vertex Buffer Objects. I have an understanding of how rendering textures work, and how VBOs work, but I don't know how to combine them. Here is my attempt.

Java Code:
public void create() {
    setup();
    render();
}

private void makeCube(float x, float y, float z) {
    int cube = glGenBuffers();
    int texture = glGenBuffers();
    FloatBuffer cubeBuffer;
    FloatBuffer textureBuffer;

    float highX = x + tileSize;
    float highY = y + tileSize;
    float highZ = z + tileSize;

    float[] textureData = new float[]{
        0,0,
        1,0,
        1,1,
        0,1
    };

    textureBuffer = asFloatBuffer(textureData);
    glBindBuffer(GL_ARRAY_BUFFER, texture);
    glBufferData(GL_ARRAY_BUFFER, textureBuffer, GL_DYNAMIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    float[] cubeData = new float[]{ //This syntax highlighter makes it look like some of this is commented out, its not.
        /*Front Face*/
        x, y, z,
        highX, y, z,
        highX, highY, z,
        x, highY, z,
        /*Back Face*/
        x, y, highZ,
        highX, y, highZ,
        highX, highY, highZ,
        x, highY, highZ,
        /*Left Face*/
        x, y, z,
        x, y, highZ,
        x, highY, highZ,
        x, highY, z,
        /*Right Face*/
        highX, y, z,
        highX, y, highZ,
        highX, highY, highZ,
        highX, highY, z,
        /*Bottom Face*/
        x, y, z,
        x, y, highZ,
        highX, y, highZ,
        highX, y, z,
        /*Top Face*/
        x, highY, z,
        x, highY, highZ,
        highX, highY, highZ,
        highX, highY, z,};

    cubeBuffer = asFloatBuffer(cubeData);

    glBindBuffer(GL_ARRAY_BUFFER, cube);
    glBufferData(GL_ARRAY_BUFFER, cubeBuffer, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glBindBuffer(GL_ARRAY_BUFFER, cube);

}

private void renderCube() {
    textures.get(0).bind();
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, 0);
    glTexCoordPointer(2, GL_FLOAT, 0, 0);
    glDrawArrays(GL_QUADS, 0, 22);
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}

private void render() {
    while (!Display.isCloseRequested()) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        camera();

        renderCube();

        Display.update();
        Display.sync(30);
    }

    Display.destroy();
    System.exit(0);
}

private void setup() {
    try {
        Display.setDisplayMode(new DisplayMode(frameWidth, frameHeight));
        Display.setTitle("3D Project");
        Display.setVSyncEnabled(vSync);
        Display.create();
    } catch (LWJGLException ex) {
        Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex);
    }

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(fov, (float) Display.getWidth() / (float) Display.getHeight(), zNear, zFar);
    //glOrtho(0, Display.getWidth(), Display.getHeight(), 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);

    glLoadIdentity();

    loadTextures();

    makeCube(0, 0, -1);

}
I can't quite figure out what the problem is (I assume it's with the textureData float[], I just don't know how to fix it). Here is the program output.

Another LWJGL Question-capture.png