Linux でグラフィックスを描画するには、X11 または OpenGL を使用する必要があります。(そして、近い将来、Wayland が別の選択肢になるかもしれません)。Linux カーネルはグラフィックス API を気にしないため、Linux ではグラフィックスを行う「ネイティブ」な方法はありません。これは、ユーザー空間に実装されるグラフィックス システムを使用するインターフェイス (DRM) を提供します。ウィンドウを気にせずに画面にピクセルをスプラットしたいだけなら、 /dev/fbdev を mmap することもできます – しかし、通常はそんなことはしたくありません。隠れる。
プロトコルのオーバーヘッドが原因で、使用する API に関係なく、単一のポイントを描画するのは非効率的です。
だからX11です。したがって、バッファ内のピクセルを変更するために使用する MIT-SHM 拡張機能を使用するのが最善の策です。これは、X11 サーバーによって全体がブリットされます。もちろん、純粋な X11 Xlib 関数を使用してこれを行うのは面倒です。これが、SDL が効果的にうまくまとめたものです。
もう 1 つのオプションは OpenGL です。OpenGL はライブラリではありません。これはシステム レベルの API であり、GPU にほぼ直接アクセスできます。また、X11 とうまく統合されます。はい、API は読み込まれるライブラリを通じて提供されますが、技術的には、そのライブラリは実際のドライバーへの「ラッパー」または「インターフェイス」にすぎません。OpenGL で単一点を描画しても意味がありません。ただし、(頂点配列を使用して) いくつかのポイントをリストに「バッチ処理」してから、そのリストを処理することができます。したがって、2 つの表示更新間隔の間にすべての着信ポイントを収集し、それらを 1 つのバッチで描画するという考え方です。
プラットフォームに依存しないソリューションが優先されます。
では、なぜネイティブAPI について質問しているのですか? 定義上、プラットフォームに依存しないネイティブ API はあり得ません。ネイティブか、プラットフォームに依存しないかのどちらかです。
そして、あなたの特定のシナリオでは、SDLが最適なソリューションになると思います.SDLは、レイトレーサーに最適な種類の抽象化とプログラム側のインターフェースを提供するからです. 参考までに: QEmu のような仮想マシンは SDL を使用します。
または、広くサポートされている真のプラットフォーム ニュートラル API である OpenGL を使用します。