armos devlog 3f1b057 and 6aab220

github.com

以下の機能が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と同様の挙動と考えて良い).

このコマンドは以下の処理を行う.

  1. dub initの実行によるプロジェクトの生成,
  2. armosのアプリケーションの雛形となるMainApp classとそのエントリーポイントを含んだコードをsource/app.dへ上書き.
  3. 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より優先される..

今後は--typeoptionにより様々な種類のglsl sourceを生成できるようにしていく予定. .

glslify Shader Precompile

armos.graphics.shaderでglsl sourceをコンパイルする前に行われるソースコードの展開(precompile)にnpmのパッケージであるglslifyを使用するようにした.

この変更により,以下の機能が提供される.

  • glsl sourceのモジュール化と読み込み
  • npmによるglsl-*系パッケージの手軽な利用

詳細は以下の記事を参照.

qiita.com

なお,dlangのソースコードにハードコードされたglsl sourceをarmos.graphics.Shader.loadSourcesに渡した場合, そのコードは/にあると見なされる.glslifyの相対パスによるmodule読み込みの際には注意すること.