世界を動かす技術を、日本語で。

rlsw – RaylibソフトウェアのOpenGLレンダラー(5,000行未満のコード)

概要

raylib は、 C言語 で開発されたシンプルで使いやすい ゲームライブラリGitHub 上で多くの スターフォーク を獲得。 ページの読み込みエラーや 通知設定 の変更時には サインイン が必要。 オープンソース として多くの開発者に利用されている。 主要な特徴や注意点について以下で解説。

raylibとは

  • C言語 ベースの 軽量ゲームライブラリ
  • 学習用途プロトタイピング に最適
  • クロスプラットフォーム 対応(Windows、Linux、MacOSなど)
  • オープンソース であり、 GitHub でソースコードを公開
  • 直感的なAPI設計 による高い使いやすさ

GitHub上での人気

  • Star数 28,800以上の人気プロジェクト
  • Fork数 2,700以上で多くの派生プロジェクト
  • コミュニティ活動 が活発
  • IssueやPull Request による貢献の場が豊富

ページ読み込みエラーと通知設定

  • ページ読み込みエラー 時は リロード が推奨
  • 通知設定変更 には サインイン が必要
  • GitHubアカウント の作成・ログインが前提
  • エラー発生時 はネットワークやブラウザの状態確認が重要

利用時の注意点

  • 最新バージョン の確認と利用推奨
  • ライセンス (zlib/libpng)の遵守
  • ドキュメントサンプルコード の活用
  • コミュニティサポート の積極的な利用

まとめ

  • raylib は手軽に使える ゲーム開発ライブラリ
  • GitHub での活発な開発・サポート体制
  • エラー時 は基本的な対処と サインイン の確認が重要

Hackerたちの意見

*OpenGLスタイル。

ヘッダーだけ読んでおめでとう ;) 実際、これはかなり良いOpenGL 1.1のソフトウェア実装なんだ。ただし、完全ではないし、仕様通りでもないけどね。昔のMiniGLドライバーみたいに、ゲームが動くために必要な部分だけ実装してる感じ ;) 似たような感じで、RaylibのOpenGLバックエンドが動くために必要な部分だけ実装されてるよ!外部のグラフィックス依存関係なしでライブラリを使いたい人のために作られたんだ。

Raylibの作者は、依存関係なしで完全なraylibプログラムをコンパイルできるって発表してすごく喜んでたよ。たとえば、win32アプリであればね。 https://x.com/raysan5/status/1980322289527976202

でも…なんで?

それはすごく興味深いね。埋め込みプロセッサで楽しいハッキーなLEDスクリーンに何かをレンダリングするために、そんなものを探してたんだ。見つけたものはどれも満足できなかったけど、これを正しく理解できれば、ただコンパイルしてソフトウェアレンダリングすればいいのかな?192x128ピクセルの小さなサイズなら、どんなシステムでも十分速いはず。楽しいアニメーションの時間だね。

これ、Nintendo 3DSにぴったりだね!

面白いね。これって、NESやSNES、ジェネシス用のゲームを作るのに使えるってこと?

ソフトウェア上のOpenGL 1.1スタイル実装 OpenGL 2.0(非ES)を実装するのにどれくらいの行数が必要?

それよりも桁違いに多いよ ;) ユーザープログラム可能なシェーダーを実装する必要があるし、ARBアセンブリとGLSLの両方が必要だね。それにはGLSLパーサーやシェーダーインタープリターが必要になる(機械語にコンパイルすることを考えると、さらに複雑さが増す)。マルチテクスチャリングも実装しなきゃいけないし(こっちは多分簡単な方)、テクスチャコンバイナーの部分も全部必要だよ。これ自体は難しくないけど、結構な量のコードになるね… 全体で少なくとも4万行は必要だと思うけど、これはかなり控えめな見積もりだよ。もちろん、完全な仕様を実装することにこだわらなければ、もっと少なくて済むけど。

行数はわからないけど、PortableGLは3.x(くらい)のソフトウェアレンダラーだよ。https://github.com/rswinkle/PortableGL いいプロジェクトだし、遊ぶのも楽しいよ。

https://news.ycombinator.com/item?id=45270981

Fabrice BellardもOpenGLのものを書いてるよ: https://bellard.org/TinyGL/

すごい目標を持った人だね、あの人は何でもやっちゃう!

すごいね: (2022年3月5日) TinyGL 0.4.1がリリースされたよ (変更履歴) (2002年3月17日) TinyGL 0.4がリリースされたよ (変更履歴) 「私たちの計画は数世代にわたって測られる」

90年代にこれらのものをいくつか見たけど、全然クールじゃなかったよ。遅いし、動きもぎこちないし、アーティファクトも出てた。パフォーマンスのためにはゲームとレンダラーの密接な統合が必要だった。歴史って面白いね。

C-Chadsによるフォークも見てみて: https://github.com/C-Chads/tinygl これは機能が多くて、マルチスレッドのサポートも限られてるみたい。元のプロジェクトに比べて最近のアップデートもあるしね。残念ながら2023年末にアーカイブされたけど。

これ、CUDAに対応してるの?

いや、これはCPUレンダリングだけだよ!SIMDも使ってない、ただの整数(と浮動小数点)コードなんだ。

これがすごいのは、コンピュータがめちゃくちゃ速いから、このソフトウェアレンダリングされたOpenGL 1.1ライブラリだけで、そこそこいい2Dゲームが作れちゃうかもってことだね。

編集: ソフトウェアレンダリングだってことを見逃してた。俺は一世代先を行ってたみたい。最も効率的なスプライト深度順序アルゴリズムを使えば、CPU側でゲームをレンダリングするのはまだ可能だと思うよ(俺のゲームはローラーコースタータイクーンみたいなアイソメトリックピクセルアートなんだ)。ハハ!それがMetropolis 1998での悩みなんだ。古いOpenGLの固定関数パイプラインを使わなきゃいけない(幸いにも、GPUに追加フィールドを渡すことができるgl.hファイルのAB拡張関数を見つけた)。グラフィックスフレームワークにはSFMLを使ってるけど、これがOpenGL 1.xだと思う。可能性を示すゲーム: https://store.steampowered.com/app/2287430/Metropolis_1998/

ソフトウェアレンダリングは未来だと思うけど、実際にはハードウェアアクセラレーションが必要だね。計算(GPGPU)を活用して。

数十年前にソフトウェアレンダリングのアンリアルトーナメントがあったよ。フル3Dで、2023年でもちゃんと動いてる: https://youtu.be/MGZQAH5J1OQ

https://totenarctanz.itch.io/a-scavenging-trip raylibについてのすごくいいニュースだね。これを使うことを真剣に考えてるよ。

Tsodingがそのニュースについてどう思ってるのか、ちょっと気になるな。

彼はこれをやめるだろうね、今はメインストリームなことだし、HNでも注目されたしね :D

コードの大部分を理解できて本当に嬉しい!ソフトウェアレンダラーの美しさを見せてくれたpikuma.comに感謝!