加载中…
个人资料
实时阴影技术研究
实时阴影技术研究
  • 博客等级:
  • 博客积分:0
  • 博客访问:23,792
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

shader学习笔记(2)

(2006-04-21 01:35:48)
分类: learn skills

Using CG Runtime Library

  • 因为 Cg runtime 是运行进行编译和执行的接口,所以首先强调预编译的话,要编译好多版本,而且对将来的硬件改变不能扩展,没有使用 cg runtime 来得好

执行过程前文介绍过了
shader学习笔记(2)
可以通过一个 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); void MyErrorCallback() {

const char* errorString = cgGetErrorString(cgGetError());
}

cgSetErrorCallback(MyErrorCallback);

上边算是核心吧,下边展示一下总体关系图。
shader学习笔记(2)
  • 我的理解:

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 里边的。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有