cg shader一直报错的解决方案

今天打开之前的程序,着色器用cg写的,但是一直在报Invalid Program Handle错误,我从代码一直检查到显卡驱动,重装了cg toolkit,升级了显卡驱动,更新了cuda,但是没用,就这样纠结了一天,还是被一个学弟看到,我之前有把OpenGL版本信息和用到的显卡信息输出出来,才发现,原来程序默认跑在HD集显上,哭瞎!
通过修改NVIDA控制面板里,将所有程序都用NVIDA显卡来跑,然后就行了!我真是蠢爆了!

附上如何输出OpenGL信息和显卡信息的代码:

    cout << "OpenGL version:" << endl;
	const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字
	const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台
	const GLubyte* OpenGLVersion = glGetString(GL_VERSION); //返回当前OpenGL实现的版本号
	const GLubyte* gluVersion = gluGetString(GLU_VERSION); //返回当前GLU工具库版本

	printf("OpenGL实现厂商的名字:%s\n", name);
	printf("渲染器标识符:%s\n", biaoshifu);
	printf("OpenGL实现的版本号:%s\n", OpenGLVersion);
	printf("OGLU工具库版本:%s\n", gluVersion);

对于cg shader的debug,可以输出一下错误信息:

static void checkForCgError(const char *situation, const int line, const CGcontext context)
{
	CGerror error;
	const char *string = cgGetLastErrorString(&error);
	cout << line << " "
		<< situation << " "
		<< error << " "<< CG_NO_ERROR << endl;
	if (error != CG_NO_ERROR)
	{
		cout << line << " "
			<< situation << " "
			<< string << endl;
		if (CG_COMPILER_ERROR == error)
			cout << cgGetLastListing(context) << endl;
		exit(1);
	}
}

调用方式就是:

checkForCgError("shader name", __LINE__, cg_context);

shader name 就是你shader的名字或者其它字符串,__LINE__是c++输出行号的,cg_context表示你当前使用的cg的上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值