1日で始めるGLSL




              2013/01/28
             大阪スタジオ
              江上龍太郎
GLSL
• C言語をベースにしたシェーディング言語




• 文字列を流し込んでコンパイル
お手軽環境
• GLUT

• freeglut

• GLFW
属性
• Uniform
 アプリケーション側から送る
 VertexShader・FragmentShaderの
 両方から読み出せる

• Const
 不変な値を設定する
属性
• Attribute
  アプリケーションから送る
  VertexShaderのみで読み出せる
              GLSL1.3から非推奨
• Varying
  VertexShaderとFlagmentShader間を繋ぐ
  FragmentShader側では値が補間される
GLSL1.3からの変更
• Attribute → in

• Varying
  VertexShader → out
  FragmentShader → in

• 入出力を表すように変更されました

• Attribute・Varyingを使用すると警告されます
組み込み変数
• gl_~から始まる用意されてる変数

• 各変数毎に属性が指定されていて、
       GLSL1.3の固定機能
  定義の手間が省ける
        排除で非推奨へ
• それぞれのシェーダで結果を格納するための
  変数も用意されている
GLSL1.3からの変更
• 結局ユーザが定義してシェーダ繋ぐ

• とりあえずin outで流し込んでおけば
  問題ない

• 結果を格納するにはinvariant・・・?
初シェーダ
• 3Dでガリガリ書く方に目が行きがち

• でも僕はフラグメントシェーダを使って、
  画像処理とか書くのをお勧めします
フラグメントシェーダ
• 簡単な処理で大きな効果を得られることが多い

• in(varying)による補間を実感しやすい

• フラグメントシェーダ重いことが理解できる
discard
• FragmentShaderにおいて、
  点を打たないことを命令するキーワード

• スマートフォンの機種によってはOS毎落ちてし
  まう
  魔法の命令
スマートフォンでは…
• GLSL-ESを使用する

• #ifdef GL_ESを使用して共通化することも可能

• GPU毎で差が大きく、共通化するのは困難な作
  業…
簡単に書ける環境
• GLSL Sandbox
  http://glsl.heroku.com/

• Web上でGLSLのコードの編集と実行が行える

• 眺めるだけでも参考になります
参考資料
• 床井研究室
  http://marina.sys.wakayama-u.ac.jp/~tokoi/

• HYPERでんち
  http://dench.flatlib.jp/
何かご質問などありましたらどうぞ!
ご清聴ありがとうございました。

1日で始めるglsl