私はWindowsAPIに似たLinuxAPIを期待していました。私がGoogleで目にするのは、QtとGTKへの参照だけです。OpenGLで描画するための単純なウィンドウ以外は本当に必要ないので、これらのライブラリは私の使用のために肥大化しているように見えます。QtとGTKはLinuxでウィンドウを作成するために何を使用しますか?これ以上低レベルのものはありませんか?
6 に答える
Xウィンドウシステムは通常、描画を行います。次に、生のXlib上でQtやGTKなどのツールキットを使用して、イベントループ、ドラッグアンドドロップ、マウスクリックでのアプリの起動、その他すべての「デスクトップ」機能を提供します。
Xlibとopenglを直接操作するのはかなり簡単です。または、 openglを学びたいだけの場合は、ウィンドウを表示したり、マウス/キーボードイベントを処理したりするために必要なフレームワークが提供されます。
OpenGLの場合、これを行う最も簡単な方法は、GLUTまたはSDLを使用することです。GLUTを使用したおおよその例を次に示します。
#include <GL/glut.h>
int main (int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("My new window");
/* ... */
}
Xlibを直接使用するのは非常に面倒なので、実際には避けたいと思います。さらに、GLUTとSDLを使用すると、OpenGLアプリケーションをさまざまなプラットフォームに簡単に移植できます。
Axe Martinによると、X11(または最近のフォークXOrg)はウィンドウシステムですが、実際には、ツールキットを使用せずに、Xライブラリを使用するだけでX11アプリケーション(つまりクライアント)を作成できます。ドキュメントについては、こちらをご覧ください 。
これはかなり苦痛であり、比較的単純なアプリケーションが期待どおりに機能するために多くのコードが必要になるため、一般的にそうすることは最善のアイデアではありません。
2019年の回答を更新しました。Unixライクなシステムは通常Xウィンドウシステムを使用します。Xlibを使用して直接操作できます。これは低レベルのAPIです。しかし、より歓迎的でクロスプラットフォームのソリューションが必要になる可能性があります。次を使用できます。
- OpenGLユーティリティツールキット-GLUT
- シンプルで高速なマルチメディアライブラリ-SFML
- Simple DirectMedia Layer -SDL
- グラフィックライブラリフレームワーク-GLFW(私の推奨)
GLFWはCで記述されており、Windows、macOS、およびLinuxやFreeBSDなどのXWindowSystemを使用する多くのUnixライクなシステムをネイティブでサポートしています。
インストールしたら、次のウィンドウを作成します。
#include <GLFW/glfw3.h>
.
. //Entry and glfwInit()
.
GLFWwindow* window = glfwCreateWindow(1000, 1000, "MyWindow", NULL, NULL);
glfwMakeContextCurrent(window);
私はこれが古い投稿であることを知っています。しかし、最近私のようにこれを見つけた人にとっては、ここに便利な図があります。それは、抽象化してどれだけ下に行きたい/必要があるかという問題です。注意を怠ると、バイナリでコーディングしようとすることになります。XLibはSFMLの依存関係であり、XLibには依存関係があります。
単純なウィンドウで、図面が画面に表示されると仮定します 。Westonコンポジターは、EGLOutput / EGLDeviceを使用して、合成されたWestonデスクトップまたは個々のWaylandアプリケーションを物理ディスプレイデバイスに表示します。
他のメーカーのハードウェアを使用して描画する場合、 GEMを使用するとヒントが得られる場合があります。