OpenGLアプリケーションはどのようにXをバイパスしてGPUに直接レンダリングできますか?できますか?

OpenGLアプリケーションはどのようにXをバイパスしてGPUに直接レンダリングできますか?できますか?

私はこれがどのように機能するかを理解しようとしています。したがって、X アプリケーションと OpenGL アプリケーションの 2 種類のアプリケーションがあります。 XアプリケーションはXlibを使用して画面に描画しますが、OpenGLは何とかXを完全にバイパスし、GPUに直接レンダリングしますか?どうやってやるの?

XとOpenGLの両方が実行されている場合、コンピュータはどのアイテムを画面にレンダリングするかをどうやって知ることができますか?優先順位はありますか? Xの実行中にこれを無視して上書きできますか?私が正しく理解したなら、これはOpenGLアプリケーションが何をしているのでしょうか。

答え1

OpenGLアプリケーションは「Xを迂回」せず、サーフェスを提供し、その上に描画するためにXが必要です。次に、Xは、その表面をスクリーンに投影する方法を決定する。時々アプリがフリーズした場合、ウィンドウを移動すると、サーフェスが明るい緑色の長方形で表示されることがあります。

以前は画面に直接描くことができました。ただし、合成ウィンドウマネージャがあるので、ある意味では自分でこれを行うことができます。したがって、画面に描画するためのAPIを引き続き使用できますが、WMはコンテンツを毎秒60回だけ上書きします。

関連情報