2011-09-14 85 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