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 effectcgGetLastListing
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 cgGLSetParameterCGparameter 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 );