2024/01/28(日) [n年前の日記]
#1 [basic] FreeBASIC + raylibを試用
raylibという、ゲーム制作用のフレームワークがあるらしい。
_raysan5/raylib: A simple and easy-to-use library to enjoy videogames programming
_raylib | A simple and easy-to-use library to enjoy videogames programming
元々は C言語用のライブラリだったけど、色々な言語から呼び出して使えるようになってる模様。
_raylib/BINDINGS.md at master - raysan5/raylib
FreeBASICから利用することもできる、という話を見かけた。本当に動かせるのか気になったので、少しだけ試してみた。
環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit/64bit。
_raysan5/raylib: A simple and easy-to-use library to enjoy videogames programming
_raylib | A simple and easy-to-use library to enjoy videogames programming
元々は C言語用のライブラリだったけど、色々な言語から呼び出して使えるようになってる模様。
_raylib/BINDINGS.md at master - raysan5/raylib
FreeBASICから利用することもできる、という話を見かけた。本当に動かせるのか気になったので、少しだけ試してみた。
環境は Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit/64bit。
◎ 色んな版があった :
FreeBASIC から raylib を利用するには、ヘッダーファイルが必要。
FreeBASIC 1.10.1 のインストールフォルダ/inc/ に raylib.bi というヘッダーファイルが既に入っていた/同梱されていたけれど、中身を眺めてみたら raylib 3.0.0 用だった。raylib の現行版は 5.0.0 なので、FreeBASICのソレは古い気がする…。
githubで検索したところ、4種類のFreeBASIC用ライブラリがあった。
_WIITD/raylib-freebasic: FreeBasic bindings for raylib
_glasyalabolas/fb-raylib: Port of raylib 3.5 headers and examples for FreeBasic
_denise-amiga/raylib-fb: FreeBasic bindings for raylib
_VB6Hobbyst7/FB_3D_world_DEMO: a 3D world coding exercise in freeBASIC using raylib
上から順に、raylib 5.0/4.5/4.2対応、3.5対応、3.0対応、3.0対応、となっていた。
更に、FreeBASICの掲示板で配布してる版も見かけた。raylib 3.0用らしい。
_fbraylib 3.0 dynamic/static Windows/linux 32/64 bit. - freebasic.net
FreeBASIC 1.10.1 のインストールフォルダ/inc/ に raylib.bi というヘッダーファイルが既に入っていた/同梱されていたけれど、中身を眺めてみたら raylib 3.0.0 用だった。raylib の現行版は 5.0.0 なので、FreeBASICのソレは古い気がする…。
githubで検索したところ、4種類のFreeBASIC用ライブラリがあった。
_WIITD/raylib-freebasic: FreeBasic bindings for raylib
_glasyalabolas/fb-raylib: Port of raylib 3.5 headers and examples for FreeBasic
_denise-amiga/raylib-fb: FreeBasic bindings for raylib
_VB6Hobbyst7/FB_3D_world_DEMO: a 3D world coding exercise in freeBASIC using raylib
上から順に、raylib 5.0/4.5/4.2対応、3.5対応、3.0対応、3.0対応、となっていた。
更に、FreeBASICの掲示板で配布してる版も見かけた。raylib 3.0用らしい。
_fbraylib 3.0 dynamic/static Windows/linux 32/64 bit. - freebasic.net
◎ raylib 5.0対応版 raylib-freebasic を試用 :
新しいほうがいいのかなと、5.0対応版の raylib-freebasic を試用してみることにした。
_WIITD/raylib-freebasic: FreeBasic bindings for raylib
raylib-freebasic-5.0.zip を入手して解凍。
raylib本体も入手しないといけない。どこかで、raylib はビルドにMINGW64が必要と書いてあったような気がするので、raylib 本体は、64bit版の raylib-5.0_win64_mingw-w64.zip を選ぶことにした。
_raysan5/raylib: A simple and easy-to-use library to enjoy videogames programming
raylib-5.0_win64_mingw-w64.zip を入手して解凍。
FreeBASIC用の raylib-freebasic-5.0.zip を解凍してできたフォルダの中には、.bi とサンプル(examples/)が入っていた。このフォルダの中に、raylib 5.0 本体側の .a と .dll をコピーしてやる。
FreeBASIC 64bit版の fbc64.exe を使ってサンプルファイルをコンパイル。
実行するとウインドウが開いた。ウインドウ右上の閉じるボタンをクリックしたら、ちゃんと閉じてくれた。
しかし、2つあるサンプルファイルのうち、1つがコンパイルできない。
同梱サンプルすらコンパイルできない状態で配布されているあたり、もしかすると鋭意開発中状態なのだろうか。
_WIITD/raylib-freebasic: FreeBasic bindings for raylib
raylib-freebasic-5.0.zip を入手して解凍。
raylib本体も入手しないといけない。どこかで、raylib はビルドにMINGW64が必要と書いてあったような気がするので、raylib 本体は、64bit版の raylib-5.0_win64_mingw-w64.zip を選ぶことにした。
_raysan5/raylib: A simple and easy-to-use library to enjoy videogames programming
raylib-5.0_win64_mingw-w64.zip を入手して解凍。
FreeBASIC用の raylib-freebasic-5.0.zip を解凍してできたフォルダの中には、.bi とサンプル(examples/)が入っていた。このフォルダの中に、raylib 5.0 本体側の .a と .dll をコピーしてやる。
- libraylib.a, libraylibdll.a を、raylib-freebasic の .bi と同じ階層にコピー。
- raylib.dll は、raylib-freebasic のサンプルファイルがある階層にコピー。
FreeBASIC 64bit版の fbc64.exe を使ってサンプルファイルをコンパイル。
fbc64 core_basic_window.bascore_basic_window.exe が生成された。
実行するとウインドウが開いた。ウインドウ右上の閉じるボタンをクリックしたら、ちゃんと閉じてくれた。
しかし、2つあるサンプルファイルのうち、1つがコンパイルできない。
> fbc64 core_3d_camera_first_person.bas core_3d_camera_first_person.bas(27) error 42: Variable not declared, SetCameraMode in 'SetCameraMode(cam, CAMERA_FIRST_PERSON)' core_3d_camera_first_person.bas(33) error 1: Argument count mismatch in 'UpdateCamera(@cam)'
同梱サンプルすらコンパイルできない状態で配布されているあたり、もしかすると鋭意開発中状態なのだろうか。
◎ raylib 3.5対応版 fb-raylib を試用 :
サンプルファイルの数は 3.5対応版のほうが圧倒的に多いので、3.5対応版の fb-raylib を試用してみることにした。
_glasyalabolas/fb-raylib: Port of raylib 3.5 headers and examples for FreeBasic
fb-raylib-master.zip を入手して解凍。
加えて、raylib 3.5本体を入手するのだけど…。
raylib-3.5.0_win32_mingw-w64.zip を入手して解凍。lib/ の中に、.a と .dll があるので…。
32bit版 FreeBASICを使ってコンパイル。
他のサンプルファイルもコンパイルして動作確認してみたけれど、どれもコンパイルが通って動いてくれた。
今のところ、この版、raylib 3.5.0 win32 mingw w64 と fb-raylib の組み合わせが、一番すんなりと動いてくれる気がする。
_glasyalabolas/fb-raylib: Port of raylib 3.5 headers and examples for FreeBasic
fb-raylib-master.zip を入手して解凍。
加えて、raylib 3.5本体を入手するのだけど…。
- 何故か raylib 32bit版を使わないと、一部のサンプルファイルにおいて、freeBASIC側でのコンパイルに失敗した。
- 試しに raylib 3.7 を入手して使ってみたが、これも一部のサンプルファイルがコンパイルに失敗した。
raylib-3.5.0_win32_mingw-w64.zip を入手して解凍。lib/ の中に、.a と .dll があるので…。
- .a は、.bi がある場所にコピー。
- .dll は、サンプルファイル .bas がある場所(examples/ の中)にコピー。
32bit版 FreeBASICを使ってコンパイル。
fbc32 core_basic_window.bascore_basic_window.exe が生成されたので実行。ウインドウが表示された。ウインドウ右上の閉じるボタンをクリックしたら、ちゃんとウインドウが閉じた。
他のサンプルファイルもコンパイルして動作確認してみたけれど、どれもコンパイルが通って動いてくれた。
今のところ、この版、raylib 3.5.0 win32 mingw w64 と fb-raylib の組み合わせが、一番すんなりと動いてくれる気がする。
◎ FreeBASIC同梱版を試用 :
FreeBASICに同梱されていた raylib.bi も使ってみた。これは raylib 3.0.0 の利用を推奨してる。
raylib 3.0.0 本体、raylib-3.0.0-Win32-mingw.zip を入手して解凍。.a と .dll を、サンプルファイルと同じ場所に置いて、fbc32 でコンパイル。
生成した exe を実行しようとすると raylib.dll が無いと言われる。libraylib.dll ならあるのだけど…。raylib.dll にリネームしたら動いてくれた。
しかし、ウインドウは表示されるものの、閉じるボタンを押しても反応しない。DOS窓上から実行していたので、DOS窓上で Ctrl+C を押したら止まってくれた。どうやら、raylib.bi 内の、WindowShouldClose() の返り値が Byte になってるのがダメらしい。Boolean に修正したらウインドウを閉じられるようになった。しかし、ウインドウを閉じることすらできない状態で同梱されているとは…。
FreeBASIC同梱版が一番問題無く使えるのかなと予想したけれど、そういうわけでもなかった…。
そもそも同梱版は、対象にしている raylib のバージョンが古い点も気になる。おそらく、とりあえず動くようになった時点で同梱されて、そこからずっと放置されているのでは…。もしかすると FreeBASIC + raylib で何かを作りたいという人はそれほど居なくて、動作確認も、バグ報告もされていないのかもしれない。
何にせよ試した範囲では、今現在は raylib 3.5対応版の fb-raylib で実験したほうがトラブルに遭遇することも少ないのではないかなあ、と…。
raylib 3.0.0 本体、raylib-3.0.0-Win32-mingw.zip を入手して解凍。.a と .dll を、サンプルファイルと同じ場所に置いて、fbc32 でコンパイル。
生成した exe を実行しようとすると raylib.dll が無いと言われる。libraylib.dll ならあるのだけど…。raylib.dll にリネームしたら動いてくれた。
しかし、ウインドウは表示されるものの、閉じるボタンを押しても反応しない。DOS窓上から実行していたので、DOS窓上で Ctrl+C を押したら止まってくれた。どうやら、raylib.bi 内の、WindowShouldClose() の返り値が Byte になってるのがダメらしい。Boolean に修正したらウインドウを閉じられるようになった。しかし、ウインドウを閉じることすらできない状態で同梱されているとは…。
FreeBASIC同梱版が一番問題無く使えるのかなと予想したけれど、そういうわけでもなかった…。
そもそも同梱版は、対象にしている raylib のバージョンが古い点も気になる。おそらく、とりあえず動くようになった時点で同梱されて、そこからずっと放置されているのでは…。もしかすると FreeBASIC + raylib で何かを作りたいという人はそれほど居なくて、動作確認も、バグ報告もされていないのかもしれない。
何にせよ試した範囲では、今現在は raylib 3.5対応版の fb-raylib で実験したほうがトラブルに遭遇することも少ないのではないかなあ、と…。
◎ 余談。dllが入ってない版もある :
raylib 4.2, 4.5, 5.0 32bit版の中には .dll が入ってなかったりするのだけど…。32bit版はサポートしなくなったということだろうか…。それとも Visual C++版の dll を流用しろということ…?
特に 4.2 は lib/ の中身まで空になっていた。どうも事情があるらしいけれど詳しいことはよく分からない。
_[build] raylib-4.2.0_win32_mingw-w64.zip missing libs - Issue #2698 - raysan5/raylib
特に 4.2 は lib/ の中身まで空になっていた。どうも事情があるらしいけれど詳しいことはよく分からない。
_[build] raylib-4.2.0_win32_mingw-w64.zip missing libs - Issue #2698 - raysan5/raylib
[ ツッコむ ]
以上です。