使用OpenGL将图像渲染到子类QDeclarativeItem中

时间:2012-01-21 11:40:28

标签: qt opengl-es qt4 opengl-es-2.0 qml

我正在尝试使用OpenGL ES 2.0执行多个图像处理,并将输出显示到子类QDeclarativeItem中,然后将在我的QML GUI中使用。 我仔细阅读了这里的答案:http://developer.qt.nokia.com/forums/viewthread/4109 并成功通过覆盖QDeclarativeItem的paint()方法在我的QML GUI中绘制一个红色到蓝色的矩形:

void GLDeclarativeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->beginNativePainting();
    glBegin(GL_QUADS);
    glColor3ub(0,0,255);
    glVertex2d(0, 0);
    glVertex2d(0, height());
    glColor3ub(255,0,0);
    glVertex2d(width(), height());
    glVertex2d(width(), 0);
    glEnd();
    painter->endNativePainting();
}

然而,我想要实现的是绘制将在我的自定义QGLWidget中处理的图像作为上述QDeclarativeItem的内容(而不是红色到蓝色的内容)。

在我使用的自定义QGLWidget中:

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

用于绘图,工作正常。但是,我找不到我的GLWidget中的绘图和我的GLDeclarativeItem之间的转换。到目前为止我尝试过的所有东西都给了我一个没有任何内容的矩形。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我做了类似的事情,但解决方法不同:我使用了叠加

我只是将 OpenGL渲染放在自己的小部件中,该小部件位于QDeclarativeView之上。

虽然你无法绘制OpenGL渲染的顶部,但效果很好。如果您真的需要,请使用半透明背景堆叠另一个QML视图。

祝你好运。