Qt 5.3。在 QOpenGLFrameBuffer 上绘画

Posted

技术标签:

【中文标题】Qt 5.3。在 QOpenGLFrameBuffer 上绘画【英文标题】:Qt 5.3. Painting on QOpenGLFrameBuffer 【发布时间】:2014-05-07 15:50:08 【问题描述】:

在 Qt 5.3(测试版)中的 QOpenGLFrameBuffer 上绘画对我来说似乎有点难以捉摸,我只能得到黑色图像。 (我没有尝试过Qt5以前的版本,但没有发现这方面有问题的任何通知)

四处搜索,我在http://dangelog.wordpress.com/2013/02/10/using-fbos-instead-of-pbuffers-in-qt-5-2 复制了确切的样本。

在 createImageWIthFBO() 结束前添加

  QImage img=fbo.toImage();
  img.save("d:/tmp.jpg");

在没有进一步操作的情况下检查新结果,但结果图像是黑色的。

我错过了什么吗?也许是一些平台问题? (此处为 8.0)

【问题讨论】:

它是测试版。你试过在 qt 论坛的 beta 线程中提问吗? 作为该代码的作者,我可以确认它在具有 5.2.1、5.3 RC 和 5.4(即开发分支)的 Linux/NVIDIA 上正常工作。按原样复制的 sn-p 是否按预期工作?你有哪个GPU?鉴于它是为 5.0 编写的,您是否尝试使用 QOffscreenSurface(在 5.1 中添加)而不是不可见的 QWindow 来修改它? 感谢您检查 peppe。 GPU 是 NVIDIA GeForce GT 630M。我正在尝试复制的剪切,因为只添加了我提到的两行来保存图像,这就是产生黑色图像的原因。我刚刚也尝试使用具有相同结果的 QOffscreenSurface。它必须是一些愚蠢的细节...... 但是如果你修改它,你能看到它按预期绘制吗?我只是想将 FBO 的问题与图像保存的问题一分为二。 我明白了!问题出在 format.setMajorVersion(3); ,它必须是 2。我在 android 中尝试过,但在创建上下文时失败了。接下来更改为使用 QOffscreenSurface 并且它起作用了,因为我从表面本身获得了格式。现在有了 QWindow,它也可以在我的 Android 手机上使用。 【参考方案1】:

问题出在指令format.setMajorVersion(3) 中,3 应该是 2 并且所有工作都按预期工作。 (我猜opengl的一些实现在这个细节上比较挑剔)

【讨论】:

以上是关于Qt 5.3。在 QOpenGLFrameBuffer 上绘画的主要内容,如果未能解决你的问题,请参考以下文章

新的拖放机制在 Qt-Quick (Qt 5.3) 中无法按预期工作

Qt 5.3 使用原来的QT4.8.4项目时QWebView QWebFrame

使用 Qt 5.3 或 Qt 5.4(但不是 Qt 5.2)编译时,QGuiApplication 在手机锁定时停止事件循环

Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]

Qt 5.3 Webkit QWebView中的Javascript太慢了,在Windows上挂了MainWindow

QT 5.3开发及移植