Это верно: такой класс не существует в модуле QtGui Qt5. И да, вы должны прибегать к простым вызовам OpenGL для обработки ваших текстур, если вы не хотите втягивать библиотеку виджета.
Это говорит о том, что текущая (скажем, несколько неоптимальная и непоследовательная) ситуация признана и активно обсуждается разработчиками Qt. См. Сообщение Sean Harmer's OpenGL in Qt 5.1 and onwards, в частности пункт 7. Но после этого потока и взгляда на текущее дерево древо, я сомневаюсь, что он приземлится в 5.1.
Редактировать: Глядя на других ответы и последние замечания, которые я хотел бы добавить относительно вариантов у вас есть со стандартным Qt 5.0:
Вашей главной целью:
- прибудет какой-то указатель вы можете перейти на
glTexImage2D(..., GL_UNSIGNED_BYTE, GL_RGBA, pointer)
из вашего потенциально «странного» отформатированного QImage? или
- использовать какой-либо вспомогательный класс, который вас интересует с помощью
glTex*()
связанных функций?
Если это первый и связанный (старый) модуль OpenGL (который является частью Qt 5.0) является вариантом (и, кроме «эстетически» причин, я не понимаю, почему это не будет) , вы могли бы использовать статический QGLWidget::convertToGLFormat(QImage)
, на который намекал Виктор. Если нет, то выполнение чего-то вроде этой функции «вручную» (в соответствии с тем, что предложил Xīcò) должно работать: сначала сначала вызываем QImage::convertToFormat(QImage::Format_ARGB32)
, а затем добавляем зависящую от платформы байтов и зеркалирование байтов (см. convertToGLFormatHelper (...) в the source). Хотя, если вы используете свои собственные шейдеры, то делать это на графическом процессоре намного быстрее.
Если вы хотите иметь как и связывая упомянутые OpenGL Qt 5.0 дополнительный модуль вариант, вы можете быть в состоянии фактически использовать QGLWidget::bindTexture(...)
эквивалент даже в классе QQuickView:
GLuint texID = QGLContext::fromOpenGLContext(
this->openglContext())->bindTexture(...)
Где this
будет QQuickView *. См. QGLContext help. (Отказ от ответственности: я не пробовал это сам.)
После представления моего ответа я понял, что заголовок и содержание вашего вопроса несколько противоречивы: модуль [Qt OpenGL] (http://doc-snapshot.qt-project.org/qt5-stable/qtopengl/ qtopengl-index.html) содержит «старый» интерфейс на основе QWidget для OpenGL, включая функциональность 'QGLWidget :: bindTexture (...)'. Новые классы Qt5 _QOpenGL * _ являются частью нового модуля [Qt Gui] (http://doc-snapshot.qt-project.org/qt5-stable/qtgui/qtgui-index.html). Я новичок в этом: можно ли обновить заголовок вопроса для разъяснения? – axxel
Я удалил слово «модуль» из названия. Я был бы в порядке с ответами, указывающими мне на что-нибудь в Qt Gui или Qt OpenGL (несмотря на то, что QtOpenGL в основном не рекомендуется). – cgmb
@axxel Интересно, что вы упоминаете 'QGLWidget :: bindTexture (...)', так как это было бы довольно разумное решение, если бы я был подклассифицирован QGLWidget. К сожалению, поскольку я оказываю поддержку QQuickView, было бы довольно сложно использовать это. – cgmb