2016-08-23 1 views
0

私はXlibとGLXを使ってLinuxでOpenGLアプリケーションを書いています。マウスポインタを使ってオブジェクトを描画し、ウィンドウ内のオブジェクトをドラッグしたいと思います。しかし、どのような方法で描画オブジェクトを描画したり移動したりしても、実際のマウスポインタの位置(Xサーバによって描画される)と、私が取得するポインタ座標で描画するオブジェクトの位置との間には、XOrgマウスポインタを描画するサーバコード

私の質問は、XOrgサーバーがマウスポインタを実際に画面に描くためにどのようなコードを使用するのですか?だから私は同じ種類のコードを使って画面にグラフィックスを配置し、マウスポインタとグラフィックスオブジェクトの位置を常に完全に揃えることができます。

XOrgの関連するソースファイルへのポインタさえも優れています。

答えて

2

私の質問は、XOrgサーバーがマウスポインタを実際に画面に描画するためにどのコードを使用するのですか?

すべてがうまくいけば、コードは全くマウスポインタを描いていません。いわゆる「ハードウェアカーソル」のサポートは数十年前からありました。本質的には、ハードウェアの「スプライトエンジン」として知られているもので、小さな画面と値のペア(x​​、y)が画面に表示されます。グラフィックスハードウェアは、すべてのフレームで、カーソル画像が特定の位置にオーバーレイされるようにディスプレイに送信する。

グラフィックスシステムは、入力デバイスの動きに基づいて位置値を絶えず更新しています。

もちろん、この種の「スプライトエンジン」を持たないグラフィックハードウェアもあります。しかし、ここでのトリックは、頻繁に更新するために、速く更新し、遅く更新することです。

しかし、どのような方法で描画オブジェクトを移動したり移動したりしても、実際のマウスポインタの位置(Xサーバーの描画位置)と描画するオブジェクトの位置ポインタは、私はXlibの(XQueryPointerまたはXのイベント)から取得したり、あなたはそれがで間違った時に自分の画像に統合読んでどうなるの/ dev /入力/イベント*

はい、から直接読んで調整します。レイテンシを最小限に抑えるための重要な要素は、可能な限り遅く描画し、できるだけ長く入力を統合してから、V-Syncの期限を満たすために絶対に物事を描く必要があることです。そして、最も重要なやり方は過去のことを描くのではなく、画面に現われる瞬間の状況を描くことです。私。描画された次のフレームの入力を予測し、それを使用する必要があります。

カルマンフィルタは、このための事実上の標準的な方法になっています。

関連する問題