QVideoFilterRunnable和OpenGL Context如何协同工作?

时间:2017-10-03 17:03:14

标签: android qt opengl-es qml

我试图在Android上使用C ++,Qt,QML,OpenCV和OpenGL编写增强现实(AR)应用程序。

原则工作流程:

  1. 相机提供了一个新的视频框架(带有openGL纹理ID)
  2. 我抓住了这个边缘localhost:8080/components/my-el/
  3. 然后我做了一些物体识别并计算出新的位置 (在videoframe内)我需要将对象放在3D opengl中 场景
  4. 重新渲染openGL对象
  5. 将它与openGL渲染管道(固定功能或兼容性配置文件)一起使用videoframe作为背景纹理(零拷贝)以最大化渲染速度
  6. 操纵视频框架纹理的代码示例:

    QVideoFilterRunnable::run(...)

    使用QVideoFrame FilterRunnable::run(QVideoFrame* input, const QVideoSurfaceFormat &sFormat, RunFlags flags) { if(sFormat.handleType() == QAbstractVideoBuffer::GLTextureHandle) { QOpenGLContext* c = QOpenGLContext::currentContext(); QOpenGLFunctions* f = c->functions(); GLuint textID = input->handle().toInt(); f->glBindTexture(GL_TEXTURE_2D,textID); float pixels[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, }; f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); } } 屏幕变为黑色而不会出现任何错误。

    问题是我找不到glTexImage2D()如何在后台处理OpenGL上下文的任何信息。我不知道如何在没有标准函数FilterRunnable::run()glDrawArrays()glViewport()的情况下使用initializeGL()resizeGL()

    例如,我想将videoframe(映射在背景多边形上)与前面的任意OpenGL对象结合起来。

    我可以在哪里获得有关此主题的信息或最佳方式?

0 个答案:

没有答案