Ashish,
Какие изменения вы внесли в плагин платформы eglfs?
Я также модифицировал плагин eglfs, чтобы он работал на плате arm.
Два места, которые я изменил:
избегайте вызова eglMakeCurrent дважды, когда EGLDisplay, EGLSurface (чтение), EGLSurface (рисование), EGLDisplay не изменяются --- На моей доске вызов eglMakeCurrent дважды вызовет прерывание программы.
Проблема такая же, как и у вас (QGLShader :: QGLShader: 'context' должен быть текущим контекстом или совместно с ним.)
В библиотеке QtOpengl есть функция QGLWidget * qt_gl_share_widget (), которая создаст новый QGLContext и установит его в QPlatformGLContext.
В bool QGLShaderProgram :: bind () он будет проверять currentContext с тем, что в QGLSharedResourceGuard. 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 тоже есть эти проблемы.