关于在OpenGL中连接计算着色器程序的问题

扫描仪

我正在尝试创建一个计算着色器程序computeProgram并在其上附加两个源代码。这是我的代码:

    unsigned int computeProgram = glCreateProgram();
    glAttachShader(computeProgram, MyFirstComputeShaderSourceCode);
    glAttachShader(computeProgram, MySecondComputeShaderSourceCode);
    glLinkProgram(computeProgram);
    

    glGetProgramiv(computeProgram, GL_LINK_STATUS, &success);
    if (!success) {
        glGetProgramInfoLog(computeProgram, 512, NULL, infoLog);
        std::cout << "ERROR::SHADER::COMPUTE_PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
        exit(1);
    }

我得到这种类型的链接错误信息:

ERROR::SHADER::COMPUTE_PROGRAM::LINKING_FAILED
ERROR: Duplicate function definitions for "main"; prototype: "main()" found.

我确实main在两个着色器源代码中都有功能,我理解为什么这不起作用,因为main一个程序中只需要一个功能。但是我的问题来了:如果我试图将顶点着色器源和片段着色器源链接到单个程序,例如,renderProgram还有两个main函数,一个在顶点着色器中,一个在片段着色器中。但是,如果我将这两者联系起来,它会以某种方式正常工作。

为什么会发生这种差异?如果我想使用这两个计算着色器,我是否应该创建两个计算程序以避免重复main功能?

任何帮助表示赞赏!

httpdigest

为什么会发生这种差异?

当您将顶点着色器和片段着色器链接到同一个着色器程序时,这两个(正如它们的名称所暗示的)处于不同的着色器阶段每个着色器阶段都需要一个main() 函数的定义。

当您附加位于同一着色器阶段的两个着色器(例如您的两个计算着色器对象)时,它们将链接到同一着色器阶段(计算)。那是行不通的。

如果我想使用这两个计算着色器,我是否应该创建两个计算程序以避免重复主函数?

是的。如果您有两个计算着色器,每个计算着色器都根据 main() 函数定义自己的功能,那么创建两个着色器程序,每个着色器程序都有一个链接到它的着色器对象。特别是当您的两个着色器与主机具有完全不同的接口时,例如 SSBO 或采样器/图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章