#qt4 #opengl-es-2.0 #framebuffer
#qt4 #opengl-es-2.0 #фреймбуфер
Вопрос:
Я пытаюсь написать драйвер QScreen для Qt для Embedded Linux, чтобы иметь возможность интегрировать возможности OpenGL через фреймбуфер. На данный момент у меня есть оба окна QWS вместе с поверхностями EGL на экране с моим драйвером. Я использую реализации методов exposeRegion по умолчанию, blit и solidFill. К сожалению, я заметил, что если я пытаюсь разместить окно QWS поверх поверхности EGL, я получаю, что поверхность EGL всегда находится над окном QWS.
Возможно ли каким-то образом разрешить окнам QWS перемещаться по поверхности EGL, когда поверхность EGL не является окном верхнего уровня? Как я могу это сделать?
Я знаю, что OpenGL рисует непосредственно на экране, но я предположил, что прерывание процедуры обновления должно было позволить драйверу QScreen нарисовать окно поверх него, но, похоже, этого не происходит.
Спасибо!
Ответ №1:
На всякий случай, если кому-то еще интересно, это можно сделать. Я не мог только потому, что некоторые другие функции нужно было переопределить. В моем случае этого не хватало:
bool CompositeGLScreen::chooseContext(QGLContext *context, const QGLContext *shareContext)
{
Q_UNUSED(context);
Q_UNUSED(shareContext);
return false;
}
Эталонная реализация Qt для PowerVR делает это таким образом.