私の質問は、単にバッファを割り当て、ビットマップを渡して画面に描画するだけでよいのに、なぜopen gl、sfml、sdlのようなものを使用する必要があるのでしょうか?
ショート:高速だから(OpenGL、DirectX)。
長いです:
これはすべて自分でできると思うかもしれません。画面にピクセルを描画します。四角形や三角形などの図形を描画する小さなライブラリを作成する場合があります。もちろん、これは機能します。まさにこれを行うためのライブラリがたくさんあります。そのうちのいくつかはOpenGL仕様を実装しているため(openglのソフトウェア側のようなものです)、Casey Muratoriが行うことを正確に実行します。ソフトウェア側ですべてを計算し、ソフトウェア側でピクセルを設定して、結果を画面に書き込みます。
しかし、これは遅いです。最終的にこれらすべてを実行するCPUは、このシナリオ用には作成されていません。それがGPUの目的です。OpenGLが行うこと(もちろんソフトウェア実装でない限り)は、すべてのデータ、すべての描画呼び出し、ほぼすべてをグラフィックスカードにプッシュし、GPUに作業を行うように指示することです。GPUは、この種のジョブ専用に作られています。浮動小数点数(あなたは何をすべきかザッツ掛ける多くの 3Dシーンを描画するときに)とシェーダを実行します。そしてこれは並行して。GPUの速さを把握するために、1920x1080ピクセルのフルスクリーンで3Dのシンプルなシーンを考えてください。これらは、2,073,600ピクセルを乗算して描画されます。以下のためのすべての単一ピクセルの場合、GPUはフラグメントシェーダーを少なくとも1回実行し、ほとんどの場合は複数回実行します。ここで、1秒あたり60フレームで実行するとします。つまり、GPUはフラグメントシェーダーを2,073,600 * 60 = 124,416,000回/秒で実行します。CPUでこのようなことができると思いますか?(これは非常に簡単な説明です。より近いオブジェクトでオーバードローするピクセル数、使用するMSAAの量など、さらに多くのことを考慮する必要がありますが、1秒あたり124,416,000回はおそらく最も低く、 '簡単なシーンで60fps以上を簡単に取得できます)
それはOpenGLとDirect3Dが行うことであり、どのエンジンに対して@Uri Popovsが答えを見るかです。