在OpenGL中,glUseProgram()
和glUseShaderProgram()
之间有什么区别?
似乎在MESA中,Nvidia提供了glext.h
,而在GLEW中,两者都被定义了,两者似乎基本相同。我找到了glUseProgram()
的文档,但找不到glUseShaderProgram()
的文档。它们真的可以互换吗?
答案 0 :(得分:3)
glUseShaderProgramEXT()
是EXT_separate_shader_objects扩展程序的一部分。
此版本在ARB状态为ARB_separate_shader_objects的版本中发生了显着变化。这个想法仍然是一样的,但API看起来很不一样。扩展规范评论:
此扩展基于EXT_separate_shader_objects提供的概念验证,证明了单独的着色器对象可以用于GLSL。
此ARB版本解决了之前EXT扩展中的几个“松散目标”。
然后,ARB版本的扩展被用作OpenGL 4.1的核心功能。如果您对使用此功能感兴趣,则使用4.1中的核心入口点是首选方法。
所有这些都为您提供了一种避免将所有阶段的着色器链接到单个程序的方法。相反,您可以创建仅包含阶段子集的着色器的程序对象。然后,您可以混合和匹配来自不同程序的着色器,而无需重新链接它们。为了跟踪使用哪个程序的着色器,引入了一种称为“程序管道”的新类型的对象。
详细解释这个问题超出了本答案的范围。您将使用glCreateProgramPipelines()
,glBindProgramPipeline()
和glUseProgramStages()
等来电。您可以在OpenGL wiki上找到更多详细信息和示例代码。