我希望有两个像素着色器;第一个做一件事,然后下一个做其他的事情。这是可能的吗,或者我必须将所有东西都打包到一个着色器中?
kqqjbcuj1#
您可以执行此操作,例如,通过从主入口点调用在各种着色器对象中实现的函数。
main() { callToShaderObject1() callToShaderObject2() }
其中的每个CallToShaderObject函数都可以位于不同的着色器对象中,但在使用之前,必须在同一程序中附加和链接所有对象。
exdqitrt2#
它们不能同时运行,但您可以对不同的几何体使用不同的着色器,或使用不同的着色器在多个过程中进行渲染。
bogh5gae3#
答案取决于GL版本,您需要查看您正在使用的版本的glAttachShader文档。GLES版本(包括WebGL)不允许将多个片段着色器附加到单个程序,并且在尝试时会引发GL_INVALID_OPERATION错误。glAttachShader - OpenGL 4:可以附加多个相同类型的着色器对象,因为每个对象都可能包含完整着色器的一部分。glAttachShader - OpenGL ES 3.2:不允许附加同一类型的多个着色器对象。
glAttachShader
3条答案
按热度按时间kqqjbcuj1#
您可以执行此操作,例如,通过从主入口点调用在各种着色器对象中实现的函数。
其中的每个CallToShaderObject函数都可以位于不同的着色器对象中,但在使用之前,必须在同一程序中附加和链接所有对象。
exdqitrt2#
它们不能同时运行,但您可以对不同的几何体使用不同的着色器,或使用不同的着色器在多个过程中进行渲染。
bogh5gae3#
答案取决于GL版本,您需要查看您正在使用的版本的
glAttachShader
文档。GLES版本(包括WebGL)不允许将多个片段着色器附加到单个程序,并且在尝试时会引发GL_INVALID_OPERATION错误。glAttachShader - OpenGL 4:
可以附加多个相同类型的着色器对象,因为每个对象都可能包含完整着色器的一部分。
glAttachShader - OpenGL ES 3.2:
不允许附加同一类型的多个着色器对象。