在 QGlWidget 中使用 openGLES 显示图像

Show image using openGLES in QGlWidget

void GLMouseWidget::paintGL(QImage* data)
{
    //glClear(GL_COLOR_BUFFER_BIT);
    //gldata = QGLWidget::convertToGLFormat(*data);
    //glDrawPixels(data->width(), data->height(), GL_RGBA, GL_UNSIGNED_BYTE, gldata.bits());

}

此代码在支持 OpenGL 但不支持 OpenGL ES1 的显卡下运行良好。我读过我应该尝试使用纹理,但到目前为止我失败了。有人可以分享代码片段吗?我的图像是灰色循环的 (QImage::Format_Indexed8),我需要 +- 高效的代码片段,只是为了在 QGLWidget 上显示图像。

这就是在 qt4 中执行此操作的方法。

GLMouseWidget::GLMouseWidget( int camWidth,int camHeight, QWidget* parent, Qt::WindowFlags f )
    : QGLWidget( parent, 0, f )
{
    qrf = QRectF (0.0f,0.0f,(float)camWidth,(float)camHeight);
   //qrf = QRectF (0.0f,0.0f,800.0f,600.0f);
}

void GLMouseWidget::setNewFrame(QImage *image_){
    glimage = QGLWidget::convertToGLFormat(*image_);
    textureId = bindTexture(glimage);
}

void GLMouseWidget::paintGL()
{
    drawTexture(qrf, textureId);
}

void GLMouseWidget::resizeGL(int w, int h)
{
    glViewport (0, 0, w, h);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, w,0,h,-1,1);
    glMatrixMode (GL_MODELVIEW);
}

你从 class 中呼叫

*img = cvMatToQImage(frame);
label->setNewFrame(img);
label->update();