Using
CG
Runtime Library
-
因为
Cg
runtime
是运行进行编译和执行的接口,所以首先强调预编译的话,要编译好多版本,而且对将来的硬件改变不能扩展,没有使用
cg runtime
来得好
-
执行过程前文介绍过了
-
-
可以通过一个
cg
文件使用
CG
_SOURCE
来创建
CGProgram
,也可以通过一个
cg
程序使用
CG_OBJECT
来创建一个
CGProgram
。
-
CGProgram
:所有的
cg
设置都是围绕
CGProgram
展开的,目的就是给绘制设置正确的参数状态。
-
CGbool
cgIsProgramCompiled(CGprogram program);
-
cgCompileProgram(CGprogram
program);
-
CGprogram
cgCopyProgram(CGprogram program);
-
CGprogram
cgGetFirstProgram(CGcontext context);
CGprogram cgGetNextProgram(CGprogram program);但不能保证取出来的顺序
-
const
char* cgGetLastListing(CGcontext context);获得最后一个
cgCreateProgram
的结果
-
CGcontext
cgGetProgramContext(CGprogram program);
CGprofile cgGetProgramProfile(CGprogram program);
CGprofile cgGetProfile(const char* profileString);
const char* cgGetProfileString(CGprofile profile);
-
const char*
cgGetProgramString(CGprogram program,CGenum stringType);
-
CGParameter
:关于参数的函数很多,可以顺次取得参数,也可以通过名称树(或者叫命名空间)的形式来绑定参数,并用来设置参数。
-
CGparameter
cgGetFirstParameter(CGprogram program,CGenum namespace);
CGparameter cgGetNextParameter(CGparameter parameter);
-
cgGetFirstStructParameter()
along with cgGetNextParameter():
-
int
cgGetArrayDimension(CGparameter parameter);
int cgGetArraySize(CGparameter parameter, int dimension);
CGparameter cgGetArrayParameter(CGparameter parameter,int
index);
CGparameter cgGetNamedParameter(CGprogram program,const char*
name);
-
CGprogram
cgGetParameterProgram(CGparameter parameter);
-
CGenum
cgGetParameterVariability(CGparameter parameter);
-
CGenum
cgGetParameterDirection(CGparameter parameter);
-
CGtype
cgGetParameterType(CGparameter parameter);
-
CGtype
cgGetType(const char* typeString);
const char* cgGetTypeString(CGtype type);
-
const char*
cgGetParameterName(CGparameter parameter);
-
const char*
cgGetParameterSemantic(CGparameter parameter);
-
CGresource
cgGetParameterResource(CGparameter parameter);
CGresource cgGetResource(const char* resourceString);
const char* cgGetResourceString(CGresource resource);
CGresource cgGetParameterBaseResource(CGparameter parameter);
unsigned long cgGetParameterResourceIndex(CGparameter
parameter);
const double* cgGetParameterValues(CGparameter
parameter,CGenum valueType, int* numberOfValuesReturned);
-
CGError
:可以使用回调机制处理错误,像
glGetError
那样获得最后的错误,并有各种错误的枚举。
-
CGerror error =
cgGetError();
const char* errorString = cgGetErrorString(error);
const char* errorString = cgGetErrorString(cgGetError());
}
cgSetErrorCallback(MyErrorCallback);
-
上边算是核心吧,下边展示一下总体关系图。
-
-
我的理解:
0,因为openGL最终使用的是program,所以一切都为了控制Program。
1,可以由file直接生成program,但这种方式不好控制,
只能一个一个的设置parameter的方式去控制参数,
对于具有State的fx更是无能为力。
2,可以由file生成effect,然后通过对于各个Technique的各个Pass的各个State
的设置和改变来控制Effect,再由effect生成Program。
3,一种很好的解决状态问题的方法就是按照FX封装State,然后按照State进行排序,
并使用CallBack函数的方式一次性的设置当前Program需要的State。
现在还不清楚的是
fx
文件中的
Technique
和
Pass
以及各种
State
状态是怎么运作,设置到
Program
里边的。