在OpenGL中glUseProgram()glUseShaderProgram()有什么区别?

似乎在MESA和Nvidia中提供了glext.h,而在GLEW中,两者都已定义,并且似乎都在做相同的事情。我找到 glUseProgram() 的文档,但没有glUseShaderProgram()的文档。它们真的可以互换吗?

最佳答案

glUseShaderProgramEXT()EXT_separate_shader_objects扩展的一部分。
此扩展在获得ARB状态的版本ARB_separate_shader_objects中进行了重大更改。想法仍然是相同的,但是API看起来却大不相同。扩展规范对此进行了评论:

然后,扩展的ARB版本被用作OpenGL 4.1中的核心功能。如果您对使用此功能感兴趣,则首选使用4.1中的核心入口点。
所有这些为您提供了一种避免将所有阶段的着色器链接到一个程序中的方法。相反,您可以创建仅包含阶段的一部分着色器的程序对象。然后,您可以混合和匹配来自不同程序的着色器,而不必重新链接它们。为了跟踪使用哪些着色器的程序,引入了一种称为“程序管道”的新型对象。
对此进行详细解释超出了此答案的范围。您将使用glCreateProgramPipelines()glBindProgramPipeline()glUseProgramStages()之类的调用。您可以在OpenGL wiki上找到更多详细信息和示例代码。

关于c++ - glUseProgram()和glUseShaderProgram()有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30852738/

10-12 23:56