■ 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 );