QOpenGLContext из контекста GLFW

У нас есть окно 3D-рендеринга, созданное с помощью GLFW, и мы хотим использовать QWebkit для отображения QWebPage внутри рендеринга (также известного как рендеринг QWebPage в текстуру OpenGL). Использование только версии ЦП слишком медленно, и Qt поддерживает рендеринг QWebkit в QOpenGLFramebufferObjects (используя QOpenGLPaintDevice).

Однако для этого требуется создание QOpenGLContext (для которого требуется собственное окно и т. д.), что в конечном итоге мешает работе всего нашего приложения. (Переключение между GLFW и Qt Context также вызывает бесконечное количество GL_INVALID_OPERATION)

Лучшее решение: мы получаем Qt для использования контекста GLFW.

Пример кода:

QOpenGLFramebufferObject qfbo(mWidth, mHeight); //< this crashes because he will implicitly try to get QOpenGLFunctions which gets the default context which is null
qfbo.bind();
QOpenGLPaintDevice paintdev(mWidth, mHeight);

QPainter painter(&paintdev);
painter.beginNativePainting();
mPage->mainFrame()->render( &painter );
painter.endNativePainting();

Итак, вот несколько вопросов:

  • можно ли заставить Qt использовать контекст GLFW OpenGL?
  • если нет, то как мы можем переключаться между контекстом GLFW и контекстом Qt? (используя совместное использование текстуры для передачи визуализированного QWebPage)
  • если все это невозможно, есть ли бесплатный проект Webkit с 64-битной поддержкой Windows/Linux/Mac, который может отображать с использованием OpenGL?

person Artificial Mind    schedule 13.12.2013    source источник
comment
Несколько недель с тех пор, как был задан вопрос. Вы не можете напрямую смешивать два объекта контекста, используя QT. QT великолепен, но для того, чтобы оставаться переносимым, он также имеет некоторые ограничения - в основном доступ к низкоуровневым дескрипторам объектов и манипулирование ими напрямую. Таким образом, даже попытка использовать QOpenGLContext из другого потока, а не тот, в котором он был создан, потерпит неудачу. И для того, чтобы использовать любую из оболочек QT OpenGL, вам понадобится действующий текущий QOpenGLContext. Итак, то, что вы хотите, невозможно без взлома реализации QT.   -  person Sebastian Cabot    schedule 01.02.2014


Ответы (1)


@Sebastian Cabot написал:

Вы не можете напрямую смешивать два объекта контекста, используя QT. QT великолепен, но для того, чтобы оставаться переносимым, он также имеет некоторые ограничения - в основном доступ к низкоуровневым дескрипторам объектов и манипулирование ими напрямую. Таким образом, даже попытка использовать QOpenGLContext из другого потока, чем тот, в котором он был создан, потерпит неудачу. И для того, чтобы использовать любую из оболочек QT OpenGL, вам понадобится действительный QOpenGLContext current. Итак, то, что вы хотите, невозможно без взлома реализации QT.

person Community    schedule 16.06.2015