OpenGL窗口视频捕获问题

时间:2011-09-14 15:02:03

标签: linux opengl screen-capture qglwidget

可能这很容易,但我找不到谷歌正确的话来吐出我需要的东西。 我有一个自定义的派生QGLWidget,并希望做一些视频捕获,以显示给其他人。

捕获适用于所有其他小部件(按钮,复选框,...)但我的GLWidget仍然是空白的(对于普通用户,它是完全响应的)。当我将鼠标悬停在鼠标上时,鼠标的矩形区域将在窗口小部件上重绘。

如何在动作捕捉时告诉我的小部件/ windowsystem刷新整个区域?

可能与同一问题有关:我曾在TeamViewer中发生过相同问题的会话。

修改

当我使用Qt演示Hello GL并捕获它时,存在同样的问题。

EDIT2

我尝试了一个我的GLUT演示,他们也没有工作, 我也读过有关记录opengl输出的问题,但这是在Windows机器上。 也许linux上也存在问题?

顺便说一下。我使用xvidcap进行捕获。

2 个答案:

答案 0 :(得分:1)

  

顺便说一下。我使用xvidcap进行捕获。

我不确定,但是IIRC xvidcap只使用Xdamage扩展来抓取,哪些程序报告为新呈现。 OpenGL操作不会设置损坏标志。

我个人在X11下使用ffmpeg进行screencapturing。一些事情

ffmpeg -f x11grab -r $FRAMERATE -s $WIDTHx$HEIGHT -i $DISPLAY+$XOFFSET,$YOFFSET -vcodec ... -b -y output_file

例如

ffmpeg -f x11grab -r 18 -s 800x600 -i :0+0,0 -vcodec mjpeg out.avi

我发现mjpegljpegx264 / fast lossless编解码器非常适合此任务。

答案 1 :(得分:0)

这是一个猜测,因为我对GL小部件没有特别的经验,但我要尝试的第一件事就是在你的小部件上设置不透明的paint事件标志:

setAttribute( Qt::WA_OpaquePaintEvent )