RGFW は、ウィンドウの作成と管理を抽象化するクロスプラットフォームのシングルヘッダー フレームワークです。 RGFW は使い方が簡単なので、複雑な低レベルのウィンドウ API、オーバーヘッドの多いライブラリ、またはプラットフォーム固有の API のサポートを扱うのではなく、ゲームやアプリケーションのプログラミングに集中できます。 RGFW は、邪魔にならずに低レベル API を処理します。現在、X11 (Linux)、Windows (XP +)、Emscripten (HTML5)、および MacOS をサポートしています。
ウィンドウの作成中に、RGFW は選択したグラフィックス コンテキストを初期化します。オプションには、OpenGL (バリアントを含む)、DirectX、ダイレクト ソフトウェア レンダリング、またはグラフィックス API なしが含まれます。 Vulkan サポート用の別のヘッダーもありますが、Vulkan コンテキストを自分で作成することをお勧めします。
RGFW は設計上も柔軟です。たとえば、イベント ループ システムやイベント コールバック システムを使用できます。 (詳細については、RGFW リポジトリの example/events/main.c および example/callbacks/main.c を参照してください)。
while (RGFW_window_checkEvent(win)) { switch (win->event.type) { case RGFW_quit: break; case RGFW_keyPressed: break; case RGFW_mousePosChanged: break; ... } } void mouseposfunc(RGFW_window* win, RGFW_point point) { } void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) { } void windowquitfunc(RGFW_window* win) { } RGFW_setMousePosCallback(mouseposfunc); RGFW_setKeyCallback(keyfunc); RGFW_setWindowQuitCallback(windowquitfunc);
RGFW は GLFW の代替として設計されています。これは、GLFW のコードベースが軽量ではなく、柔軟性が欠けているためです。
GitHub リポジトリがあり、GLFW のすべてのソース コードを 1 つの大きな単一ヘッダー ライブラリに配置します。この GLFW.h ファイルは 10.7 MB あるため、GitHub では表示できません。 RGFW は 244 キロバイトであり、RGFW バイナリのサイズも通常 GLFW バイナリの約 3 分の 1 であるため、GitHub で表示できます。また、RGFW は GLFW よりも RAM の使用量が少ない傾向があります。
RGFW が GLFW よりも大幅に軽量である場合、それは RGFW には機能が欠けていることを意味しますか?いいえ、RGFW には GLFW とほぼ同じ機能があります。違いを知りたい場合は、RGFW と GLFW を比較する表が RGFW リポジトリに含まれています。
RGFW を使用するには、この行をソース ファイルの 1 つに追加する必要があります。
#define RGFW_IMPLEMENTATION
これにより、RGFW ソース定義を含めることができます。
他のライブラリと同様に RGFW をコンパイルすることもできます。
cc -x c -c RGFW.h -D RGFW_IMPLEMENTATION -fPIC -D RGFW_EXPORT (Linux): cc -shared RGFW.o -lX11 -lXrandr -lm -lGL (window mingw): cc -shared RGFW.o -lgdi32 -lopengl32 -lwinmm -lm (macOS) cc -shared RGFW.o -framework Foundation -framework AppKit -framework OpenGL -framework CoreVideo -lm
ウィンドウを作成して RGFW を初期化するには、最初のウィンドウの場合は、RGFW_createWindow(const char* name, RGFW_rect, u16 args) を使用します
たとえば、画面の中央にサイズ変更できないウィンドウを作成する場合
RGFW_window* win = RGFW_createWindow("Window", RGFW_RECT(0, 0, 200, 200) RGFW_CENTER | RGFW_NO_RESIZE); ... // do software stuff RGFW_window_close(win); // close window now that we're done
レンダリングが終了したら、ウィンドウ バッファを交換する必要があります。
RGFW_window_swapBuffers(RGFW_window* win);
サポートされていない API を使用している場合は、関数を自分で処理する必要があります。
ここで完全な RGFW の例を示します:
#define RGFW_IMPLEMENTATION #include "RGFW.h" u8 icon[4 * 3 * 3] = {0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF}; void keyfunc(RGFW_window* win, u32 keycode, char keyName[16], u8 lockState, u8 pressed) { printf("this is probably early\n"); } int main() { RGFW_window* win = RGFW_createWindow("name", RGFW_RECT(500, 500, 500, 500), (u64)RGFW_CENTER); RGFW_window_setIcon(win, icon, RGFW_AREA(3, 3), 4); RGFW_setKeyCallback(keyfunc); // you can use callbacks like this if you want i32 running = 1; while (running) { while (RGFW_window_checkEvent(win)) { // or RGFW_window_checkEvents(); if you only want callbacks if (win->event.type == RGFW_quit || RGFW_isPressed(win, RGFW_Escape)) { running = 0; break; } if (win->event.type == RGFW_keyPressed) // this is the 'normal' way of handling an event printf("This is probably late\n"); } glClearColor(0xFF, 0XFF, 0xFF, 0xFF); glClear(GL_COLOR_BUFFER_BIT); RGFW_window_swapBuffers(win); } RGFW_window_close(win); }
RGFW サンプルのスクリーンショットと PureDoom-RGFW RGFW に関するその他のサンプル コードと情報は、リポジトリにあります。この例は、RGFW サンプル サイトで HTML5 を使用して実行することもできます。 RGFW に興味があれば、お気軽に RGFW リポジトリをチェックしたり、スターを付けたり、RGFW について質問したりしてください。また、批判、アドバイス、機能のリクエストもお待ちしております。
RGFW は GLFW よりも大幅に軽量ですが、それは GLFW よりも優れているという意味ではありません。最終的には、選択はあなた次第です。 RGFW はより軽量ですが、新しいものでもあり、小さなコミュニティがあります。そのため、サポートは少なく、本番環境に対応したプロジェクトではまだテストされていません。
RGFW に興味がある場合は、リポジトリをチェックしてください。 RGFW をサポートする方法の 1 つは、RGFW にスターを付けることです。
https://github.com/ColleagueRiley/RGFW
以上がRGFW の紹介: 軽量のシングル ヘッダー ウィンドウ フレームワークと GLFW の代替品の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。