- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 OpenGL 中,glUseProgram()
和 glUseShaderProgram()
有什么区别?
MESA 和 Nvidia 似乎都提供了 glext.h
,而在 GLEW 中,两者都有定义,而且两者似乎做的事情基本相同。我找到了 glUseProgram()
的文档但不适用于 glUseShaderProgram()
。它们真的可以互换吗?
最佳答案
glUseShaderProgramEXT()
是 EXT_separate_shader_objects 的一部分扩展名。
此扩展在获得 ARB 状态为 ARB_separate_shader_objects 的版本中发生了重大变化.思路还是一样的,但是 API 看起来很不一样。扩展规范对此评论:
This extension builds on the proof-of-concept provided by EXT_separate_shader_objects which demonstrated that separate shader objects can work for GLSL.
This ARB version addresses several "loose ends" in the prior EXT extension.
扩展的 ARB 版本随后被采纳为 OpenGL 4.1 的核心功能。如果您有兴趣使用此功能,首选方法是使用 4.1 中的核心入口点。
所有这一切为您提供了一种避免必须将所有阶段的着色器链接到单个程序中的方法。相反,您可以创建仅包含阶段子集的着色器的程序对象。然后,您可以混合和匹配来自不同程序的着色器,而无需重新链接它们。为了跟踪使用了哪些程序的哪些着色器,引入了一种称为“程序管道”的新型对象。
详细解释这一点超出了这个答案的范围。您将使用 glCreateProgramPipelines()
、glBindProgramPipeline()
和 glUseProgramStages()
等调用。您可以在 OpenGL wiki 上找到更多详细信息和示例代码.
关于c++ - glUseProgram() 和 glUseShaderProgram() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30852738/
在 OpenGL 中,glUseProgram() 和 glUseShaderProgram() 有什么区别? MESA 和 Nvidia 似乎都提供了 glext.h,而在 GLEW 中,两者都有定
我是一名优秀的程序员,十分优秀!