01_vertex_program pt.1

Cgをインストールする時に一緒に保存されるサンプルプログラムで,Cgの勉強.
まずは,Cgを使う時のルールみたいなのを,最初のサンプルファイル(01_vertex_program)を参考にまとめてみる.
このプログラムはバーテックスシェーダのみしか使用してないけど,そっちの方がシンプルで読みやすいと思う.

Cgを使う時は,
* Cgを使う準備
* Cgを有効にする
という作業が必要.

* Cgを使う準備
Cgコンテキスト作成
まず最初に,Cgコンテキストを作成する.
myCgContext = cgCreateContext();
プロファイル作成
次に,プロファイルを取得して,シェーダの中身が書かれているファイル(.cg)を読み込む.
myCgVertexProfile = cgGLGetLatestProfile(CG_GL_VERTEX);
cgGLSetOptimalOptions(myCgVertexProfile);
checkForCgError(“selecting vertex profile”);

myCgVertexProgram =
cgCreateProgramFromFile(
myCgContext, /* Cg runtime context */
CG_SOURCE, /* Program in human-readable form */
myVertexProgramFileName, /* Name of file containing program */
myCgVertexProfile, /* Profile: OpenGL ARB vertex program */
myVertexProgramName, /* Entry function name */
NULL); /* No extra compiler options */
checkForCgError(“creating vertex program from file”);
cgGLLoadProgram(myCgVertexProgram);
checkForCgError(“loading vertex program”);

cgGLGetLatestProfile関数の引数をCG_GL_VERTEXとするとバーテックスシェーダが取得出来る(フラグメントシェーダの場合はCG_GL_FRAGMENTとすればよいのかな?).
cgCreateProgramFromFile関数で,指定したファイル(今回はC2E1v_green.cg)からプログラムを作成.
cgGLLoadProgramで,GPUにシェーダを転送する.

* Cgを有効にする
上記のようにして行った設定を,有効化する.
cgGLBindProgram(myCgVertexProgram);
checkForCgError(“binding vertex program”);
cgGLEnableProfile(myCgVertexProfile);
checkForCgError(“enabling vertex profile”);
cgGLBindProgram関数でシェーダをバインドして,cgGLEnableProfile関数で,プロファイルを有効にする.

バーテックスシェーダで何をやっているかは別にまとめる.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s