首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在单个OpenGL程序中附加多个相同类型的着色器?

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

Stack Overflow用户
提问于 2012-02-07 06:24:00
回答 1查看 7.9K关注 0票数 20

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-07 06:38:17

可以将常用函数放在单独的着色器中。然后只编译一次,并链接到多个程序中。

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

假设你有复杂的照明功能:

代码语言:javascript
复制
vec3 ComputeLighting(vec3 position, vec3 eyeDir)
{
    // ...
    return vec3(...);
}

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

代码语言:javascript
复制
vec3 ComputeLighting(vec3 position, vec3 eyeDir);

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

然后分别编译公共着色器和主着色器。但是只编译一次公共着色器。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9168252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档