2011-09-14 87 views
0

也许这是很容易的,但我找不到合适的词为谷歌吐出我需要什么。 我有一个自定义派生的QGLWidget,并且想要做一些视频捕获以向其他人展示它。OpenGL窗口的视频捕捉问题

的拍摄非常适用于所有其他部件(按钮,复选框,...),但我仍然GLWidget空白(正常用户是充分响应)。当我将鼠标悬停在它上面时,鼠标的矩形区域将重新绘制在窗口小部件上。

我怎样才能知道我的小部件/的windowsystem刷新整个区域时,运动捕捉?

可能与同样的问题:我曾经在做的TeamViewer会话同样的问题发生在哪里。

编辑

当我使用Qt的演示你好GL和捕捉它有同样的问题。

EDIT2

我想我GLUT演示之一,他们也不能工作,也 我读到的问题记录的OpenGL输出效果,但是这是在Windows机器上。 也许在linux上也有问题?

Btw。我使用xvidcap进行捕获。

+0

看起来像缓冲区不更新 – blueskin

回答

1

Btw。我使用xvidcap进行捕获。

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

我个人使用的ffmpeg的X11下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编解码器福祉适合这项任务。

+0

谢谢ffmpeg的建议,我会试试看。但是这不能解决TeamViewer的问题。你知道我可以如何设置GL Widget区域的损坏标志吗? – Nobody

+0

@Nobody:据我所知,唯一干净的解决方案是通过修改Qt QGLWidget本身。真的,我必须看看源代码来确切地说。 – datenwolf

0

这是一个有点猜的,因为我有与GL部件缺乏经验而言,但我会尝试的第一件事是设置不透明的油漆事件标志上的小部件:

setAttribute(Qt::WA_OpaquePaintEvent) 
+0

我只是在小部件构造函数写这一点,但它并没有改变任何东西。 – Nobody