Ogre中将Cg编译成asm使用

如果你的Ogre材质使用的shader脚本是cg,而你想脱离cg插件,那么你只需将原来的cg脚本编译为asm即可,而不用去为特定的渲染系统写特定脚本了。
以下代码将一个cg shader输出到文本文件,每个cg program都会输出一个.asm文件和一个对应的参数表命名文件(解决asm不能识别命名参数的问题)
 
可以遍历Ogre::GpuProgramManager输出所有,也可以输出自己制定的program
	Ogre::GpuProgramPtr pPro = Ogre::GpuProgramManager::getSingleton().getByName("object_fs");	
	if (pPro->getSyntaxCode() == "cg")
	{
		Ogre::String s2 = pPro->getSource();
		Ogre::HighLevelGpuProgramPtr pHigh = pPro;
		Ogre::String s1 = pHigh->_getBindingDelegate()->getSource();
		std::ofstream ofs("c:/object_fs.asm");
		ofs << s1;
		ofs.close();
		pHigh->getNamedConstants().save("c:/object_fs.txt");
	}

 

然后材质改变为

vertex_program object_vs asm
{
	manual_named_constants object_vs.txt
	source object_vs.asm
	syntax vs_2_0

	default_params
	{
		param_named_auto world 		world_matrix
		param_named_auto worldViewProj 	worldviewproj_matrix
		param_named_auto texViewProj 	texture_viewproj_matrix	
	}
}


 

你可能感兴趣的:(object,String,脚本,Matrix,shader,Constants)