2009年7月25日

以前没用过,今天折腾了很久才学会。
    CGparameter Param = cgGetNamedParameter(m_raycastFrag, "aaa"); //读structure of array参数
       cgSetArraySize(Param,num);//设置数组大小
for (int i=0;i<num;i++)
{    
     CGparameter GaussIParam = cgGetArrayParameter(GaussParam,i);//读每一个strucut参数
    cgGLSetParameter2f(cgGetNamedStructParameter(GaussIParam,"center"),a,b);//读结构体的参数center,并赋值
}

发现一个问题:cg的文档,相对cuda而言,要少很多,尤其是一些高级用法。
posted @ 2009-07-25 20:11 cloudseawang 阅读(811) 评论(0) 编辑
程序的shader要用到三重循环,用cgc编译后,shader代码没问题。
然而cgCreateProgramFromFile时,却怎么得过去不,而且让内存从几兆一下上升到几百兆。
开始没有debug,还以为电脑中了病毒。

debug发现该问题后,想到可能是fp40不支持三重循环的shader,然后换用gp4fp解决该问题。

posted @ 2009-07-25 20:03 cloudseawang 阅读(89) 评论(0) 编辑
TextureManager::getGaussTF(gaussParam); 该函数通过引用方式读取gaussParam参数,然后绑定到cg的某一参数。
然而,如果该函数放在cgGLBindProgram(xxx)后执行,无法得到争取的gaussParam。
开始以为是引用问题,后改为传值,一样的错误。最后发现,必须把该函数放到cgglBIndProgram前执行。

--------------------------------------------
以上说说法是错误的,不是问题的根本!

关键是TextureManager::getGaussTF(gaussParam)的gaussParam涉及到地址分配。
如果gaussParam的地址由TextureMager分配的,调用时会自动失效。
必须在调用该函数之前分配!


posted @ 2009-07-25 20:00 cloudseawang 阅读(89) 评论(0) 编辑

导航

公告

统计