Beispiel #1
0
void GraphicObject::createVBOs()
{
    destroyVBOs();

    vao = new QOpenGLVertexArrayObject(widget);
    vao->create();
    vao->bind();

    vboVertices = new QOpenGLBuffer( QOpenGLBuffer::VertexBuffer );
    vboVertices->create();
    vboVertices->setUsagePattern( QOpenGLBuffer::StaticDraw );
    vboVertices->bind();
    sProgram->enableAttributeArray("vertex");
    sProgram->setAttributeArray("vertex", GL_FLOAT, 0, 4, 0);
    vboVertices->allocate( vertices, vnum * sizeof(QVector4D) );

    vboIndices = new QOpenGLBuffer( QOpenGLBuffer::IndexBuffer );
    vboIndices->create();
    vboIndices->setUsagePattern( QOpenGLBuffer::StaticDraw );
    vboIndices->bind();
    vboIndices->allocate( indices, inum * sizeof(unsigned int) );

    vboNormals = new QOpenGLBuffer( QOpenGLBuffer::VertexBuffer );
    vboNormals->create();
    vboNormals->setUsagePattern( QOpenGLBuffer::StaticDraw );
    vboNormals->bind();
    vboNormals->allocate( normals, vnum * sizeof(QVector3D) );
    sProgram->enableAttributeArray("normal");
    sProgram->setAttributeArray("normal", GL_FLOAT, 0, 3, 0);
}
void OpenGLWidget::createVBOs(){
    destroyVBOs();//destroy previous (GPU allocated) VBOs
    //define coordinate texture=========================================
    QVector2D *qVector2DTextureCoordinate=new QVector2D[4];
    qVector2DTextureCoordinate[3]= QVector2D(0,0);
    qVector2DTextureCoordinate[2]=QVector2D(1,0);
    qVector2DTextureCoordinate[1]=QVector2D(1,1);
    qVector2DTextureCoordinate[0]=QVector2D(0,1);
    //end===============================================================

    //transfer coordenate  texture to gpu===============================
    vboTextureCoordinate = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
    vboTextureCoordinate->create();
    vboTextureCoordinate->bind();
    vboTextureCoordinate->setUsagePattern(QOpenGLBuffer::StaticDraw);
    vboTextureCoordinate->allocate(qVector2DTextureCoordinate , 4*sizeof(QVector2D));
    //end===============================================================

    //define face to form one square====================================
    unsigned int  *indices = new unsigned int[2*3];
    indices[0]=0; indices[1]=1; indices[2]=2;
    indices[3]=2; indices[4]=3; indices[5]=0;
    //end===============================================================
    //transfer face to gpu==============================================
    vboIndices =new QOpenGLBuffer(QOpenGLBuffer::IndexBuffer);
    vboIndices ->create();
    vboIndices ->bind();
    vboIndices ->setUsagePattern(QOpenGLBuffer::StaticDraw);
    vboIndices ->allocate(indices , 2 * 3 *sizeof(unsigned int));
    //end===============================================================
    delete [] indices;
    delete qVector2DTextureCoordinate;
}
Beispiel #3
0
GraphicObject::~GraphicObject()
{
    delete [] indices;
    indices = NULL;

    delete vertices;
    vertices = NULL;

    delete color;
    color = NULL;

    delete vertexShader;
    vertexShader = NULL;

    delete fragmentShader;
    fragmentShader = NULL;

    if( sProgram ) {
        sProgram->release();
        delete sProgram;
        sProgram = NULL;
    }

    if( vertexShader ) {
        delete vertexShader;
        vertexShader = NULL;
    }

    if( fragmentShader ) {
        delete fragmentShader;
        fragmentShader = NULL;
    }

    destroyVBOs();
}
OpenGLWidget::~OpenGLWidget(){
    destroyVBOs();
    destroyShaders();
    if(imgOrig) delete imgOrig;
}