在同一个程序中可以有多个像素(碎片)着色器吗?

wlzqhblo  于 2022-10-18  发布在  其他
关注(0)|答案(3)|浏览(143)

我希望有两个像素着色器;第一个做一件事,然后下一个做其他的事情。这是可能的吗,或者我必须将所有东西都打包到一个着色器中?

kqqjbcuj

kqqjbcuj1#

您可以执行此操作,例如,通过从主入口点调用在各种着色器对象中实现的函数。

main() {
    callToShaderObject1()
    callToShaderObject2()
}

其中的每个CallToShaderObject函数都可以位于不同的着色器对象中,但在使用之前,必须在同一程序中附加和链接所有对象。

exdqitrt

exdqitrt2#

它们不能同时运行,但您可以对不同的几何体使用不同的着色器,或使用不同的着色器在多个过程中进行渲染。

bogh5gae

bogh5gae3#

答案取决于GL版本,您需要查看您正在使用的版本的glAttachShader文档。GLES版本(包括WebGL)不允许将多个片段着色器附加到单个程序,并且在尝试时会引发GL_INVALID_OPERATION错误。
glAttachShader - OpenGL 4
可以附加多个相同类型的着色器对象,因为每个对象都可能包含完整着色器的一部分。
glAttachShader - OpenGL ES 3.2
不允许附加同一类型的多个着色器对象。

相关问题