ハードウェアカーソルがどのように正確に機能するかを説明できる人はいますか?画面に描画しているグラフィックスとどのように関連していますか? OpenGLを使用して描画していますが、ハードウェアカーソルはOpenGLグラフィックスとどのように関連していますか?
編集:これに将来興味を持つかもしれない人のために、ハードウェアでカーソルを表示するために必要なものを実装しました。実装はカーネル内にあり、それを使用するには単純なioctlで十分でした。完璧に動作します。
ハードウェアカーソルとは、GPUが画面フレームバッファー上に(小さい)オーバーレイ画像を描画するために提供するものであり、GPU上の2つのレジスターなどによって位置を変更できます。したがって、ポインタの周りを移動しても、以前に妨げられていたフレームバッファの部分を再描画する必要はありません。
OpenGLとの関係:なし!
ハードウェアカーソルは、OpenGLによってレンダリングまたはサポートされません。いくつかの小さなハードウェアは、ディスプレイコネクタから出力される画像にオーバーレイします。各フレームのスキャンアウト時に、ビットストリームに直接挿入されます。そのため、座標を含むハードウェアレジスタのペアを変更することで移動できます。昔は、これらはスプライトと呼ばれ、さまざまなシステムでさまざまな数がサポートされていました。
ハードウェアカーソルは、ゲームやエンジンのフレームレートではなく、画面のリフレッシュレートに関連付けられているため、待ち時間が短くなり、エクスペリエンスが向上します。
ただし、レンダリングループ中に画面スペーススプライトとしてレンダリングされるソフトウェアカーソルは、ゲームエンジンのレートで実行する必要があります。したがって、ゲームでラグが発生したり、その他の方法でターゲットfpsを下回ったりすると、カーソルのレイテンシが悪化します。通常、ゲームのfpsのわずかな低下は許容されますが、カーソルの待ち時間のわずかな低下は、「遅いカーソル」として非常に顕著です。
これは、ハードウェアカーソルをオンにしたままソフトウェアカーソルをレンダリングすることで簡単にテストできます。 (参考までに、Windows APIでは、hwカーソル関数はShowCursorです)。ソフトウェアカーソルがハードウェアカーソルの後ろにあることがわかります。