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; }
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; }