gpt4 book ai didi

opengl - OpenGL 的 Cg 问题

转载 作者:行者123 更新时间:2023-12-02 07:05:46 26 4
gpt4 key购买 nike

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

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

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

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

然而,事情开始变得奇怪。当使用单个着色器时,一切工作正常,但使用 cgGLLoadProgram 加载第二个着色器的行为似乎会使使用第一个着色器的对象停止渲染。切换绘制顺序似乎可以解决问题,但这很难解决。我和我合作伙伴的笔记本电脑(配备英特尔集成芯片组的最新机器)上都会出现此问题。

我在台式机上使用 GeForce GTX 260 测试了相同的代码,一切正常。我只是将其注销,因为我的笔记本电脑 GPU 与 Cg 不兼容,但我已经使用 OGRE graphics engine 在我的笔记本电脑上成功构建并运行了同时使用多个 Cg 着色器的程序。 (不幸的是,我目前正在做的作业是计算机图形学类(class),所以我不能只使用 OGRE)。

总而言之,我被难住了。 OGRE 正在做什么而我的代码没有做什么?我是否使用 Cg 不当?

最佳答案

在调用cgGLBindProgram之前,您必须先调用cgGLEnableProfile。从你的问题来看,你似乎是反过来做的。

来自 cgGLBindProgram 的 Cg 文档:

cgGLBindProgram binds a program to the current state. The program must have been loaded with cgGLLoadProgram before it can be bound. Also, the profile of the program must be enabled for the binding to work. This may be done with the cgGLEnableProfile function.

关于opengl - OpenGL 的 Cg 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com