Контекст Qt OpenGl на Raspberry Pi
Я пишу программу, которая с контекстом Qt5 opengl. Он хорошо работает на моем рабочем столе (Fedora 23). Но я должен запустить его на pi 2. Поэтому я загружаю Qt5 каждый исходный код и компилирую его изначально на pi. Когда я пытался скомпилировать и запустить мою программу на пи, она выдает следующую ошибку:
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
На форумах Qt я видел, что в Raspberry pi XCB никак не может интегрироваться с egl. Также, когда я настраивал исходные коды Qt, опция EGL on x была no. Но GLX был включен. Есть ли способ установить QXcbIntegration для использования GLX на пи?
Я пытался исправить интеграцию XCB и egl. Поэтому я попытался перекомпилировать тест egl-x11 в каталоге config.tests/qpa qtbase, чтобы увидеть ошибки. Выход был:
g++ -c -pipe -O2 -Wall -W -fPIC -I. -isystem /usr/include/libdrm -I../../../mkspecs/linux-g++ -o egl-x11.o egl-x11.cpp
egl-x11.cpp: In function ‘int main(int, char**)’:
egl-x11.cpp:47:20: error: invalid conversion from ‘EGLNativeDisplayType {aka void*}’ to ‘Display* {aka _XDisplay*}’ [-fpermissive]
egl-x11.cpp:49:11: error: invalid conversion from ‘EGLNativeDisplayType {aka void*}’ to ‘Display* {aka _XDisplay*}’ [-fpermissive]
egl-x11.cpp:50:79: error: invalid conversion from ‘Window {aka long unsigned int}’ to ‘EGLNativeWindowType {aka void*}’ [-fpermissive]
egl-x11.cpp:51:26: error: invalid conversion from ‘EGLNativeWindowType {aka void*}’ to ‘Window {aka long unsigned int}’ [-fpermissive]
/usr/include/X11/Xlib.h:2251:12: error: initializing argument 2 of ‘int XDestroyWindow(Display*, Window)’ [-fpermissive]
Makefile:530: recipe for target 'egl-x11.o' failed
make: *** [egl-x11.o] Error 1
Есть ли способ исправить интеграцию XCB и EGL?
Если ни EGL, ни GLX интеграция невозможны на RasPberry Pi, что я могу сделать, чтобы запустить мое приложение на PI?
1 ответ
Вам понадобится Raspberry Pi 2. И вам придется перекомпилировать библиотеку Qt для этого.
Он будет работать с использованием интеграции платформы Qt EGLFS, которая использует EGL. Что означает одно полноэкранное приложение Qt, без рабочего стола.
Я не собирал библиотеку на Raspberry, но я сделал кросс-компиляцию библиотеки Qt. Требуется малиновый sysroot для настройки Qt против него:
./configure -opengl es2 -device linux-rasp-pi2-g++ -sysroot "$R" -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -make tools ... <lots of other options>
Если в sysroot установлены правильные файлы, они будут правильно обнаружены и настроены.