我在Qt / E中启用了opengl-es2支持,我想制作一个浏览器应用程序,代码是:
int main(int argc,char * argv []) {
QApplication a(argc, argv);
QGraphicsView g;
g.setScene(new QGraphicsScene(&g));
g.scene()->setItemIndexMethod(QGraphicsScene::NoIndex);
g.setAttribute(Qt::WA_DeleteOnClose);
g.setOptimizationFlags(QGraphicsView::DontAdjustForAntialiasing);
g.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
g.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
g.setAlignment(Qt::AlignTop | Qt::AlignHCenter);
g.setFrameStyle(QFrame::NoFrame);
g.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
g.setViewport(new QGLWidget());
g.showFullScreen();
QGraphicsWebView view;
view.load(QUrl("http://www.google.com"));
view.setGeometry(QRectF(0,0,800,400));
view.show();
g.scene()->addItem(&view);
a.exec();
}
我可以看到谷歌页面加载了几分之一秒然后消失了。
错误日志粘贴bin链接==> http://pastebin.com/bgbQqd1M
答案 0 :(得分:0)
与Ashish,
您对eglfs平台插件进行了哪些更改? 我还修改了eglfs插件,让它在扶手板上运行。
我改变的两个地方是:
避免调用eglMakeCurrent两次,当EGLDisplay,EGLSurface(读取),EGLSurface(Draw),EGLD显示没有改变---在我的板上,调用eglMakeCurrent两次将导致程序中止。
问题与您相同(QGLShader :: QGLShader:' context'必须是当前上下文或与之共享。)
在QtOpengl库中,有一个函数QGLWidget * qt_gl_share_widget(),它将创建一个新的QGLContext并将其设置为QPlatformGLContext。
在bool QGLShaderProgram :: bind()中,它将使用QGLSharedResourceGuard中的一个来检查currentContext。 QGLContext :: areSharing(d-> programGuard.context(),QGLContext :: currentContext())。
解决此问题。 我在qeglplatformcontext.cpp中添加以下代码
#include <QGLContext>
class QEGLFSContext : public QGLContext
{
public:
bool chooseContext(const QGLContext* shareContext = 0)
{
QGLContext::chooseContext(shareContext); // in QGLContext, this guy is protected
}
};
void QEGLPlatformContext::makeCurrent()
{
QPlatformGLContext::makeCurrent();
QGLContext * ctx = QGLContext::fromPlatformGLContext(this);
QEGLFSContext* eglctx = (QEGLFSContext*)ctx;
static QEGLFSContext * s_ctx = eglctx;
if (s_ctx != eglctx)
{
s_ctx->chooseContext();
}
//...
}
使用这些更改后,我可以运行hellogl_es2并显示动画以显示Qt徽标和气泡。
但我仍有一些问题: QLabel,QMenu ......无法展示。
你对这个问题有任何想法吗? 我也从某个人那里得到了一些想法,qws / simplegl也有这些问题。