armos devlog 3f1b057 and 6aab220
以下の機能がarmosのdev branchに取り込まれた.
- CLIでのarmos generateコマンドによるコード生成
- glslifyによるShaderのprecompile
また,今回の変更によりarmosの動作にはnpmを要求するようになった.
(この解説では便宜上,プロジェクトのルートディレクトリを/
として表記する)
armos generateコマンド
$ armos generate <target>
いくつかの種類のディレクトリやソースコードを自動生成する.generate
の部分はg
に省略可能.
<target>
は以下がサポートされている.
project
material
glslsource
(glslsources
)
project target
$ armos generate project [<projectpath>] [<options...>]
armos
コマンドの<target>
にproject
を指定した場合,新規に指定したパス<projectname>
にarmosのプロジェクトを生成する.
<projectname>
を省略した場合,現在のワーキングディレクトリにプロジェクトが生成される(dub initと同様の挙動と考えて良い).
このコマンドは以下の処理を行う.
dub init
の実行によるプロジェクトの生成,- armosのアプリケーションの雛形となるMainApp classとそのエントリーポイントを含んだコードを
source/app.d
へ上書き. - glslifyがnpmのglobalに存在しない場合,インストールを行う.
以下のoptionにより,デフォルトで生成されるapp.dに追加するコンポーネントを指定できる.
--defaultcamera string
他のコンポーネントについてのoptionは今後追加していく予定.
--defaultcamera string
armos.graphics.camera.DefaultCamera
を追加する.このoptionはインスタンスの名前を指定するために文字列の値を設定する必要がある.
material target
$ armos generate material <ClassName> [<path>] [<options...>]
armos.graphics.materialを継承したクラスの定義が書かれたコードを生成する.<ClassName>
には生成するクラスの名称を指定する.pathを指定しないこと(e.g. foo/BoxMaterial
).
生成されたコードは/source/<projectname>/materials/<classname>.d
として保存される.
以下のoptionが使用可能.
glslsource (glslsources) target
ここでは機能が似ている2つのtargetについて説明する.
$ armos generate glslsource <filepath> [<options...>]
glslsource
は一つのglslファイルを生成する.<filepath>
に指定したファイルを/shaders
ディレクトリ内に生成する.
生成されるファイルがvertex shaderかfragment shaderか,あるいはgeometry shaderかは,<filepath>
で指定された文字列の拡張子により判別される.
拡張子は以下を用いること.
.vert
vertex shader.frag
fragment shader.geom
geometry shader
optionには以下を使用できる.
$ armos generate glslsources <dirpath> [<options...>]
glslsources
は vertex shader, fragment shader, geometry shaderの3つのglsl sourceを含んだディレクトリを/shaders
ディレクトリ内に<dirpath>
として生成する.
以下のoptionが使用できる.
--no-vert
vertex shaderを生成しない--no-geom
geometry shaderを生成しない--no-frag
fragment shaderを生成しない--path string
/
ディレクトリからの相対パスで生成先を指定.dirpath
より優先される..
今後は--type
optionにより様々な種類のglsl sourceを生成できるようにしていく予定.
.
glslify Shader Precompile
armos.graphics.shaderでglsl sourceをコンパイルする前に行われるソースコードの展開(precompile)にnpmのパッケージであるglslifyを使用するようにした.
この変更により,以下の機能が提供される.
- glsl sourceのモジュール化と読み込み
- npmによるglsl-*系パッケージの手軽な利用
詳細は以下の記事を参照.
なお,dlangのソースコードにハードコードされたglsl sourceをarmos.graphics.Shader.loadSourcesに渡した場合,
そのコードは/
にあると見なされる.glslifyの相対パスによるmodule読み込みの際には注意すること.