实时阴影绘制技术研究

C++博客 首页 新随笔 联系 聚合 管理
  48 Posts :: 20 Stories :: 57 Comments :: 0 Trackbacks

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

  • void MyErrorCallback() {

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

posted on 2006-04-21 01:29 苦行僧 阅读(1181) 评论(0)  编辑 收藏 引用 所属分类: graphic

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理