Quantcast
Channel: QtWebEngine
Viewing all articles
Browse latest Browse all 13965

QPainter on a QGLWidget using VBOs

$
0
0
I have a QGLWidget that I wish to overpaint onto with a QPainter. I have followed the various examples out there to do this, but I still cannot seem to get it to work properly when I am using VBOs. I have the source code available here [dl.dropboxusercontent.com] The most relevant sections of code are as follows: void GlWidget:: paintEvent( QPaintEvent* event ) {       if ( !updatesEnabled() )    {       // do not update this widget       return;    }      if ( !isValid() )    {       // no valid render context       return;    }      // make sure this render context is the active one    makeCurrent();      QPainter painter;    painter.begin( this );    painter.setRenderHint( QPainter::Antialiasing );   #ifndef NO_2D_3D_MIX    // begin OpenGL calls    painter.beginNativePainting(); #endif      // Save the current OpenGL state (extra paranoid)    glPushAttrib( GL_ALL_ATTRIB_BITS );    glMatrixMode( GL_PROJECTION );    glPushMatrix();    glMatrixMode( GL_MODELVIEW );    glPushMatrix();      // setup the viewport    resizeGL( width(), height() );      // pre-render callback    preRender();      // begin rendering    emit rendering();      // 3D render    paintGL();      // Restore OpenGL state    glMatrixMode( GL_MODELVIEW );    glPopMatrix();    glMatrixMode( GL_PROJECTION );    glPopMatrix();    glPopAttrib();      // make sure there are no loaded shader programs    glUseProgram( 0 );    glBindBuffer( GL_ARRAY_BUFFER, 0 );   #ifndef NO_2D_3D_MIX    // end OpenGL calls    painter.endNativePainting();      // 2D render    render2d( &painter ); #endif      // post-render callback    postRender();      // end painting and swap the buffers    painter.end(); } and void TestWidget:: render3d() {    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );      // This works    glBegin( GL_TRIANGLES );    glColor3ub( 255, 15, 125 );    glVertex3f( -0.85, -0.90, 0.8 );   // triangle #1    glVertex3f(  0.90, -0.90, 0.8 );    glVertex3f(  0.90,  0.85, 0.8 );      glVertex3f( -0.90, -0.85, 0.8 );   // triangle #2    glVertex3f(  0.85,  0.90, 0.8 );    glVertex3f( -0.90,  0.90, 0.8 );    glEnd();      // Bind the shader program    m_shader.bind();      // Bind the vertex buffers    m_vertexBuffer.bind();      // draw them    glDrawArrays( GL_TRIANGLES, 0, NUM_VERTS ); } A couple of things to note are that the fixed-function OpenGL calls (glBegin, glVertex, glEnd) work properly and draw. The vertex buffer items only draw when I define ‘NO_2D_3D_MIX’. I feel like I must be missing something simple here, but I cannot figure out what. Due to other constraints I am using Qt v4.8.5, Mesa-9.2.1 GL headers with the nVidia 304.43 run-time drivers on a 64-bit RedHat Linux machine. Thanks in advance for any possible help.

Viewing all articles
Browse latest Browse all 13965

Latest Images

Trending Articles



Latest Images