首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenGL求解Cg问题

用OpenGL求解Cg问题
EN

Stack Overflow用户
提问于 2012-05-01 17:06:06
回答 1查看 647关注 0票数 4

我正在Windows上开发一个OpenGL项目,使用GLEW来提供所提供的Windows所缺少的功能。对于着色器支持,我使用NVIDIA的Cg。我读过的所有文档和代码示例都表明,以下是加载使用中的着色器的正确方法,我在代码中以这种方式实现了一些事情:

  1. 使用cgCreateContext创建Cg上下文。
  2. 分别使用cgGLGetLatestProfileCG_GL_VERTEXCG_GL_FRAGMENT获取最新的顶点和像素着色器配置文件。使用cgGLSetContextOptimalOptions为两个配置文件创建最佳设置。
  3. 使用您编写的这些配置文件和着色器,使用cgCreateProgramFromFile创建着色器程序。
  4. 使用cgGLLoadProgram加载着色器程序。

然后,对于使用给定着色器的对象,每个帧:

  1. 使用cgGLBindProgram绑定所需的着色器(顶点和/或像素)。
  2. 使用cgGLEnableProfile为所需着色器启用配置文件。
  3. 检索和设置任何需要的统一着色器参数使用cgGetNamedParameter和各种参数设置功能。
  4. 正常呈现对象
  5. 通过调用cgGLDisableProfile清除着色器

然而,事情开始变得奇怪了。当使用单个着色器时,一切都工作得很好,但是使用cgGLLoadProgram加载第二个着色器的操作似乎会使使用第一个着色器的对象停止呈现。改变抽签顺序似乎解决了这个问题,但这很难解决问题。这个问题发生在我和我的合作伙伴的笔记本电脑(最近使用英特尔集成芯片组的机器)上。

我用GeForce GTX 260在我的桌面上测试了相同的代码,一切都很好。我会把它写下来,因为我的笔记本电脑GPU和Cg不太协调,但我已经成功地构建并运行了一些程序,在我的笔记本电脑上同时使用几个Cg着色器,使用OGRE图形引擎 (不幸的是,我目前正在做的任务是一个计算机图形类,所以我不能只使用食人魔)。

总之,我很困惑。食人魔在做什么,而我的代码却不是?我是不是不正确地使用了Cg?

EN

回答 1

Stack Overflow用户

发布于 2013-02-21 17:19:01

你必须先打电话给cgGLEnableProfile,然后再打给cgGLBindProgram。从你的问题上看,你似乎是反过来做的。

来自cgGLBindProgram的Cg文档

cgGLBindProgram将程序绑定到当前状态。在绑定程序之前,程序必须已经加载了cgGLLoadProgram。此外,必须启用程序的配置文件才能使绑定工作。这可以用cgGLEnableProfile函数来完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10401357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档