gpt4 book ai didi

opengl - 在单个OpenGL程序中附加多个相同类型的着色器?

转载 作者:行者123 更新时间:2023-12-03 12:35:24 25 4
gpt4 key购买 nike

在阅读OpenGL规范时,我始终注意到它提到您可以在一个程序中包含多个相同种类的着色器(即,多个与glAttachShader相连的GL_VERTEX_SHADER)。特别是在OpenGL 4.2,第2.11.3节,程序对象中:“可以将相同类型的多个着色器对象附加到单个程序对象...”。

OpenGL管道程序和子例程可能在这里适用,但这是在它们存在之前定义的(实际上,它可以追溯到2.1规范§2.15.2),因此我正在寻找这种想法的GL4之前的示例。当我进行一些简单的测试时,我发现包含多个void main()会导致链接错误。有谁知道使用它的实际示例?

最佳答案

您可以将常用功能放在单独的着色器中。然后仅编译一次,并链接多个程序。

这类似于只编译一次cpp文件以获取静态或共享库的方式。然后,您将此库链接到多个可执行程序中,从而节省了编译时间。

假设您具有复杂的照明功能:

vec3 ComputeLighting(vec3 position, vec3 eyeDir)
{
// ...
return vec3(...);
}


然后对要使用此功能的每个着色器执行以下操作:

vec3 ComputeLighting(vec3 position, vec3 eyeDir);

void main()
{
vec3 light = ComputeLighting(arg1, arg2);
gl_FragColor = ...;
}


然后,分别编译通用着色器和主着色器。但是,仅对通用着色器进行一次编译。

关于opengl - 在单个OpenGL程序中附加多个相同类型的着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com