cgGl




cgDestroyEffect

SYNTAX void cgDestroyEffect( CGeffect effect ); DESC Effect object を破棄する Effect を破棄すると それに関連する Techinique Pass も無効になる


cgIsEffect

SYNTAX CGbool cgIsEffect( CGeffect effect ); DESC determine if an effect handle references a valid effect


cgGetLastListing

SYNTAX const char * cgGetLastListing( CGcontext context ); RET NULL: 空だった DESC get the current listing text Cg Compiler , CG_ERROR の情報が取得できる cgGetLastListing(); POINT Context には Error 情報とかもはいっている


cgGetFirstStateAssignment

SYNTAX cgGetFirstStateAssignment( CGpass pass ) DESC get the first state assignment in a pass // 描画 pass Pass { State } POINT Nest 構造をたどっていく


cgCreateProgramFromFile

SYNTAX cgCreateProgramFromFile DESC 指定した cg ソースコード, コンパイル済みのオブジェクトから CgProgram を生成する。
// 相対パスで指定する shdV = cgCreateProgramFromFile( ctx, CG_SOURCE, "data/shader/test.vsh", pf, NULL, NULL); // 絶対パスで指定する shdF = cgCreateProgramFromFile( ctx, CG_SOURCE, "d:/data/shader/test.vsh", pf, NULL, NULL);



エラーチェック




cgGetError

SYNTAX CGerror cgGetError( void ); DESC エラーステートを取得する。 cgGetError() をコールするとエラー状態はリセットされる。
CGerror err = cgGetError(); assert( err == CG_NO_ERROR );



cgSetErrorCallback

SYNTAX typedef void (*CGerrorCallbackFunc)( void ); void cgSetErrorCallback( CGerrorCallbackFunc func ); DESC Cg ランタイムエラーが発生した時にコールバックされる関数を設定する。
void MyErrorCallback() { const char* s = cgGetErrorString( cgGetError() ); printf( "ERROR: Cg Runtime msg = %s\n", s ); } cgSetErrorCallback( MyErrorCallback );



cgGetErrorString

SYNTAX const char * cgGetErrorString( CGerror error ); DESC エラーコード値からエラー文字列を返す。


cgGetNamedParameterAnnotation

SYNTAX CGannotation cgGetNamedParameterAnnotation( CGparameter param,const char * name ); RET NULL : なかった CG_INVALID_PARAM_HANDLE_ERROR is generated if param is not a valid parameter. DESC 名前, parameter を指定して CGannotation をえる


cgGetFirstTechnique

SYNTAX CGtechnique cgGetFirstTechnique( CGeffect effect ); RET CG_INVALID_EFFECT_HANDLE_ERROR( if effect is not a valid effect ) DESC Effect の最初の Techinique をえる
// effect 内の すべての Technique を Iterate するときに使う CGeffect effect = cgCreateEffectFromFile(context, cgfx_filename, NULL); CGtechnique technique = cgGetFirstTechnique(effect); while (technique) { // Do something with each technique // 有効かを調べる // CGbool cgValidateTechnique( CGtechnique tech ); if ( cgValidateTechnique(tech) ) { // 名前をえる printf("ERR: %s", cgGetTechniqueName(tech) ); } // 次の Tech へ technique = cgGetNextTechnique(technique); }



cgGetNamedParameter

SYNTAX CGparameter cgGetNamedParameter( CGprogram, const char *name ) DESC 指定 shader Program から uniform data へのハンドルを取得 RET null : 指定した Parameter がない !null : ParameterHandle TIP RetVal で Shader 内に, どの UniParam があるか確認可能.
// Vertex Program から ModelViewProj を取得してセット param = cgGetNamedParameter( vp, "ModelViewProj") Matrix m; cgGLSetMatrixParameterfr( param, m.f );



cgGLSetMatrixParameter

SYNTAX DESC uniform 型行列( 4 X 4 行列 )パラメータの設定をする。 r 接尾辞 行優先の順序で配置されていることを想定 c 接尾辞 行列が列優先の順序で配置されていることを想定する


cgGLSetStateMatrixParameter

SYNTAX void cgGLSetStateMatrixParameter( CGparameter param, GLenum type, // 行列の種類 GLenum transform // 追加の変換処理 ); DESC OpenGL の行列を直接わたす。 POINT 列, 行の指定はなく、Cg 側では列優先として行列が設定される。 つまり、位置を取得するには 第3列の値をとる。
cgGLSetStateMatrixParameter( param, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE );
uniform float4x4 eyepos; // 視線ベクトル E = float4( eyepos[0][3], eyepos[1][3], eyepos[2][3], eyepos[3][3] ) - IN.pos;
合成行列 CG_GL_MODELVIEW_PROJECTION_MATRIX モデルビュー行列 CG_GL_MODELVIEW_MATRIX 射影行列 CG_GL_PROJECTION_MATRIX 現在のテクスチャ CG_GL_TEXTURE_MATRIX パラメータ値の設定に使用する前にステートの行列に適用する変換を指定 変換を適用しない CG_GL_MATRIX_IDENTITY 行列を転置する CG_GL_MATRIX_TRANSPOSE 行列を逆にする CG_GL_MATRIX_INVERSE 行列に逆と転置の両方する CG_GL_MATRIX_INVERSE_TRANSPOSE cgGLGetParameter1f(CGparameter parameter, float* array); cgGLGetParameter1d(CGparameter parameter, double* array); cgGLGetParameter2f(CGparameter parameter, float* array); cgGLGetParameter2d(CGparameter parameter, double* array); cgGLGetParameter3f(CGparameter parameter, float* array); cgGLGetParameter3d(CGparameter parameter, double* array); cgGLGetParameter4f(CGparameter parameter, double* array); cgGLGetParameter4d(CGparameter parameter, type* array); void cgGLSetMatrixParameterfr(CGparameter parameter, const float* matrix); void cgGLSetMatrixParameterfc(CGparameter parameter, const float* matrix); void cgGLSetMatrixParameterdr(CGparameter parameter, const double* matrix); void cgGLSetMatrixParameterdc(CGparameter parameter, const double* matrix); void cgGLSetMatrixParameterArray{fd}{rc}( CGparameter param, long offset, long nelements, const TYPE * v ); cgGLSetParameterArray


パラメータ(parameter)




cgGLSetParameterArray4

SYNTAX cgGLSetParameterArray4( CGparameter param, long offset, // 配列 v の開始オフセット( 先頭からなら 0 ) long nr, // float4 型配列の要素数 const float * v // データ ); DESC 配列型パラメータに値をセットする。
// スキニング行列を設定する。 float m[] = { 1, 0, 0, 200, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, -400, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, } param = cgGetNamedParameter( shdV, "m"); cgGLSetParameterArray4f( param, 0, 2*4, m );
v2f main( app IN, uniform float4 m[4*2] ) { float4x4 mtx = float4x4( m[0], m[1], m[2], m[3] ); float4 pos = mul( mtx, IN.pos ); }



cgGLSetParameter4fv

SYNTAX void cgGetNamedParameter( CGparameter, float *) DESC float N 型値をセットする


cgGLSetParameter

SYNTAX cgGLSetParameter
CGparameter p = cgGetNamedParameter( db.createShd( "pe_dof.fsh" ), "testparam" ); cgGLSetParameter4f( p, 1, 1, 0, 1 );



cgGetArraySize

SYNTAX int cgGetArrayDimension(CGparameter parameter); int cgGetArraySize( CGparameter p, int d ); CGparameter cgGetArrayParameter(CGparameter p, int idx ); DESC case CG_ARRAY: { // 0 次元目の 要素数 をかえす // // // // int arraySize = cgGetArraySize(p, 0); myas( 0, "not impl Array size %d", arraySize );