3D Code Doesn't Display Anything

Hi, I took the code from http://jameshui.tumblr.com/post/29459200037/rendering-simple-3d-objects-and-md2-models-with and adapted it for the latest version of cocos2d-x.

The code of “LoadingLayer” is below:

#include "LoadingLayer.h"

bool LoadingLayer::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(! CCLayer::init());

        mTexture = CCTextureCache::sharedTextureCache()->addImage("test.png");

        CCGLProgram* program = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTexture);
        setShaderProgram(program);

        mSpeed = 80;
        mYaw = 0;
        mPitch = 90.0f;
        mRoll = 0;

        bRet = true;

        scheduleUpdate();
    } while (0);
    return bRet;
}


void LoadingLayer::update(float dt)
{
    if (dt > 0.0167f)
        dt = 0.0167f;

    mYaw += dt*mSpeed;
    mPitch += dt*mSpeed;
    mRoll += dt*mSpeed;
}


void LoadingLayer::draw()
{
    CCDirector::sharedDirector()->setDepthTest(true);

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords );

    getShaderProgram()->use();

    CCSize size = CCDirector::sharedDirector()->getWinSize();

    float scale = size.width/480.0f;

    kmMat4 matrixP;
    kmMat4 matrixMV;
    kmMat4 matrixMVP;

    kmGLGetMatrix(KM_GL_PROJECTION, &matrixP );
    kmGLGetMatrix(KM_GL_MODELVIEW, &matrixMV );

    kmQuaternion quat;
    kmQuaternionRotationYawPitchRoll(&quat, mYaw, mPitch, mRoll);

    kmMat3 rotation;
    kmMat3RotationQuaternion(&rotation, &quat);

    kmVec3 translation;
    kmVec3Fill(&translation, size.width/2, size.height/2.2f, 0);

    kmMat4 rotationAndMove;
    kmMat4RotationTranslation(&rotationAndMove, &rotation, &translation);

    kmMat4Multiply(&matrixMVP, &matrixP, &matrixMV);
    kmMat4Multiply(&matrixMVP, &matrixMVP, &rotationAndMove);               // apply rotation and translation to the matrix

    GLuint matrixId = glGetUniformLocation(getShaderProgram()->getProgram(), "u_MVPMatrix");
    getShaderProgram()->setUniformLocationWithMatrix4fv(matrixId, matrixMVP.mat, 1);

    // texture for the box  
    ccGLBindTexture2D( mTexture->getName() );

    ccVertex3F vertices[4];
    ccVertex2F uv[4];

    glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, 0, vertices);
    glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, uv);

    float x = 0;
    float y = 0;
    float len = 40*scale;

    /////////// front
    vertices[0] = vertex3(x-len,y-len,len);     
    vertices[1] = vertex3(x-len,y+len,len);
    vertices[2] = vertex3(x+len,y-len,len);
    vertices[3] = vertex3(x+len,y+len,len);

    uv[0] = vertex2(0, 1);
    uv[1] = vertex2(0, 0);
    uv[2] = vertex2(1, 1);
    uv[3] = vertex2(1, 0);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    ////////// right
    vertices[0] = vertex3(x+len,y-len,len);         
    vertices[1] = vertex3(x+len,y+len,len);
    vertices[2] = vertex3(x+len,y-len,-len);
    vertices[3] = vertex3(x+len,y+len,-len);

    uv[0] = vertex2(0, 1);
    uv[1] = vertex2(0, 0);
    uv[2] = vertex2(1, 1);
    uv[3] = vertex2(1, 0);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    ///////// back
    vertices[0] = vertex3(x+len,y-len,-len);    
    vertices[1] = vertex3(x+len,y+len,-len);
    vertices[2] = vertex3(x-len,y-len,-len);
    vertices[3] = vertex3(x-len,y+len,-len);

    uv[0] = vertex2(0, 1);
    uv[1] = vertex2(0, 0);
    uv[2] = vertex2(1, 1);
    uv[3] = vertex2(1, 0);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    ////////// left
    vertices[0] = vertex3(x-len,y-len,len);         
    vertices[1] = vertex3(x-len,y+len,len);
    vertices[2] = vertex3(x-len,y-len,-len);
    vertices[3] = vertex3(x-len,y+len,-len);

    uv[0] = vertex2(0, 1);
    uv[1] = vertex2(0, 0);
    uv[2] = vertex2(1, 1);
    uv[3] = vertex2(1, 0);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


    ///////// top
    vertices[0] = vertex3(x+len,y+len,len); 
    vertices[1] = vertex3(x-len,y+len,len);
    vertices[2] = vertex3(x+len,y+len,-len);
    vertices[3] = vertex3(x-len,y+len,-len);

    uv[0] = vertex2(0, 0);
    uv[1] = vertex2(1, 0);
    uv[2] = vertex2(0, 1);
    uv[3] = vertex2(1, 1);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    ///////// bottom
    vertices[0] = vertex3(x+len,y-len,len); 
    vertices[1] = vertex3(x-len,y-len,len);
    vertices[2] = vertex3(x+len,y-len,-len);
    vertices[3] = vertex3(x-len,y-len,-len);

    uv[0] = vertex2(0, 0);
    uv[1] = vertex2(1, 0);
    uv[2] = vertex2(0, 1);
    uv[3] = vertex2(1, 1);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    CC_INCREMENT_GL_DRAWS(1);
}

All I get is this:

As you can see, it shows one GL call, so the draw() method is being called. Any ideas?