2016-07-23 12 views
0

OpenGLアプリケーションをLinuxに移植しています(Debian Jesseコア、GLX、X11、Xfree86、GL 3.0をMesa 10.3.2経由で使用しています)。私は完全に理解できないレンダリングの問題に悩まされています(説明は以下になります)、私は使用方法を知っているデバッグの方法を使い果たしました。私の質問は、私はこれをデバッグにどのようにアプローチするのですか?パフォーマンスを検査するためのツール、私が見ることができるログファイル、インストールしてブレークポイントを設定できる開発ライブラリ、その他のものがありますか?GLXアプリケーションのデバッグ - 鈍いウィンドウが再描画されない

症状:タイトルバー上の

  • ウィンドウがインスタンス化されると、窓枠が描かれているが、ウィンドウの内容が描かれていない(私はウィンドウ内のデスクトップの背景を参照してください)
  • クリック&ドラッグ
  • アプリケーションを閉じるには数秒かかりますが、ウィンドウが破棄される直前の非常に短い瞬間に、正しいスクリーン出力がウィンドウに表示されます。
  • 非常に小さいウィンドウのサイズ変更はできませんsluを改善するggishnessまたは表示の問題
  • topは、2%のCPUの最大使用量を示します(ほとんどの場合、0.3〜0.7%の範囲です)。メモリの使用量が増減しますが、安定した範囲にとどまります。少し遅れていますが、システムの残りの部分はかなりうっすらです。
 
top - 01:09:42 up 3:43, 3 users, load average: 0.31, 0.12, 0.12 
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 0.3 us, 0.4 sy, 0.0 ni, 99.2 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem: 16411604 total, 1342704 used, 15068900 free, 47860 buffers 
KiB Swap: 2783228 total,  0 used, 2783228 free. 752736 cached Mem 
PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND                  
3758 andrew 20 0 145700 25080 16704 R 0.3 0.2 0:02.36 mtexec 

私が試した何を:私はWindows上で同様の問題に遭遇してきた

  • 、問題はSwapBuffers呼び出しにnullのウィンドウハンドルを渡しました。ここtopからのスナップショットです。私はglXSwapBuffersコールでブレークポイントでgdbを実行し、同じことが今起こっていないことを確認しました。
  • gdbを使用してウィンドウ作成コードをトレースすると、Display*Windowのインスタンスがnullでなく変更されていないことが確認されます。
  • ExposeおよびConfigureNotifyイベントでの再描画および非再描画。再描画コードを削除しても問題は発生しません。
  • 重要な場合は、私はGLEWを使用していますが、コンテキストの作成には使用していません。 glXCreateContextAttribsARBへの関数ポインタをglXGetProcAddress経由で取得します。
+0

実行中にアプリケーションのメモリ使用量が増加しますか? – SurvivalMachine

+0

私は今、それを見ています。記憶は上昇しており、非常に低いインクリメントであり、長期間に渡って成長しているようには見えません。 –

+0

私はこの問題についていくつかの進歩を遂げました。私はビデオモードを列挙するために使用していたXFree86コードを削除しましたが、今は画面出力を取得します。また、私の古いコードでは、X11の 'Window'オブジェクトの浅いコピーが問題のいくつかを引き起こしたという別の問題が潜んでいると思います。参考までに、この例は私のために働いています:https://www.opengl.org/discussion_boards/showthreadphp/165856-Minimal-GLX-OpenGL3-0-example –

答えて

1

この問題をデバッグする方法についての私の質問への短い答え:表示列挙は実際にはX11ディスプレイと互換性のあるGLXFramebufferConfigを提供していることを確認してください。 glXXf86ライブラリコールを混在させる場合は、glXを使用してプログラムを起動して実行してください。詳細を説明する良いリソースは、Programming OpenGL in Linux: GLX and Xlibガイドです。

関連する問題