2026-06-29 05:40:40
諏訪子
c++
glsl
gamedev
shader

【C++・GLSL】Shader Playground 1.0.0 リリース

HTMLとCSSのコードを実際にウェブサイトに組み込む前にテスト出来るウェブサイトは沢山あります。
然し、GLSLシェーダーをテスト出来る場所が不足しています。
其処でShadertoyを見つけました。
此れは正に其れを実現しています。
但し、1つ問題があります:其れはGLSL ESで、PC版GLSLではありません。
其れ自体は最悪というわけではありませんが、GLSL ESはGLSLと少し異なる為、シェーダーコードの移植性が損なわれる可能性があります。
其処で、未完のGLSLチュートリアルシリーズ用に作ったGLSLテスターをフォークし、其の上にImGuiを追加すれば、欲しい物が手に入ると思いました!
1つ問題があって、此のGLSLテスターはC言語で書かれていて、ImGuiはC++です。
実際、此れは全く問題ではありません。
main.cmain.ccにリネームしてC++コンパイラでコンパイルするだけで、C++にアップグレード出来ます。
更に、ファイル処理をSQLiteに置き換えてシェーダーをデータベースに保存する様にすれば、居酒屋にいる女子を驚かせられるかもしん。

チャレンジ

少なく共、其れが当初の意図でした。
此れは自分自身への5日間のチャレンジで、結局4日間で完成させました。
5日間を選んだのは、新しいフルタイムの仕事の初日に合わせており、此のプログラムが役立つかもしんと思ったからです。
課題はShadertoyのクローンを作る事、其れだけでした。
然し2日目からどんどん機能を追加し始め、小さなゲームエンジンへと変貌しましたが、其れでもShadertoyの代替として十分に使えます。
此れは、OpenGLのCPU側を制御するLuaエンジンのおかげです。

プラットフォーム対応のドラマ

全てのシェーダーとLuaコードは、ローカルのSQLiteデータベースに保存され、ファイルシステムの散らかりを出来る限り減らしています。
初回起動時にデータベースは${HOME}\AppData\Local\076Studio\ShaderPlaygroundに自動的に初期化されます。
何故Windowsだけなのか気になるかもしん。
当初の目的はクロスプラットフォームで、Windows、macOS、Linux、FreeBSD、OpenBSD、NetBSD、Haikuに対応させる事でした。
然し、Haiku用のコンピュータをもう持っていないので、其れは除外されました。
macOSでは、LuaJITがAArch64アーキテクチャをサポートしていない為コンパイル出来ず、此れも除外されました。
FreeBSDとOpenBSDでは、sol2(LuaJITのC++バインディング)でコンストラクタが存在しないというエラーでコンパイル出来ませんでした。
其れを見てNetBSDは試す気になれませんでした。
Linuxでは幾つかの軽微な修正の後にコンパイル出来ましたが、WSL2上でコンパイルした為、実際に動作するかを検証出来ませんでした。其の為、Windows用のプリコンパイル済みバイナリのみ提供しています。
ソースコードは076ライセンスでオープンソース公開されているので、Unix系システムで自分でコンパイルしてみて下さい。
Microsoft GitHubやCodebergでプルリクエストを歓迎します。

Shader Playgroundの使い方に関するオンラインドキュメントはありませんが、プログラム内でF1キーを押すと完全なマニュアルが表示されます。

コンパイル方法

最近のPCプロジェクトと同様、CMakeビルドシステムを使用しています。

Windowsの場合:

> cmake -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release
> cmake --build build --config Release

其の他の環境:

$ cmake -B build -DCMAKE_BUILD_TYPE=Release
$ cmake --build build --config Release

ダウンロード

ソースコードは此方にあります。
ダウンロード可能なバイナリ:

スクリーンショット

Shader Playground
Shader Playground
Shader Playground

以上