glUseProgram() 和 glUseShaderProgram() 有什么区别?
What is the difference between glUseProgram() and glUseShaderProgram()?
在OpenGL中,glUseProgram()
和glUseShaderProgram()
有什么区别?
似乎在MESA和Nvidia中提供了glext.h
,而在GLEW中,两者都是定义的,并且似乎都做了基本相同的事情。我找到glUseProgram()
的文档,但没有找到glUseShaderProgram()
的文档。它们真的可以互换吗?
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 上找到更多详细信息和示例代码。
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- typedef 枚举和枚举类有什么区别?
- &C::c 和 &(C::c) 有什么区别?
- ascii 和 unicode 在处理级别有什么区别吗?
- C 中的常量限定符和 C++ 中的常量限定符有什么区别?
- "ABC" 和 "ABC" ) 在C++中有什么区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 两种访问I2C总线的方法有什么区别?
- 两种模板示例有什么区别?
- 这两种C++语法之间有什么区别?
- lua 5.0.2 模块和 5.3.5 有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- std::vector和llvm::SmallVector之间有什么区别?什么时候用哪一个