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
経由で取得します。
実行中にアプリケーションのメモリ使用量が増加しますか? – SurvivalMachine
私は今、それを見ています。記憶は上昇しており、非常に低いインクリメントであり、長期間に渡って成長しているようには見えません。 –
私はこの問題についていくつかの進歩を遂げました。私はビデオモードを列挙するために使用していたXFree86コードを削除しましたが、今は画面出力を取得します。また、私の古いコードでは、X11の 'Window'オブジェクトの浅いコピーが問題のいくつかを引き起こしたという別の問題が潜んでいると思います。参考までに、この例は私のために働いています:https://www.opengl.org/discussion_boards/showthreadphp/165856-Minimal-GLX-OpenGL3-0-example –