[英]Question about linking compute shader program in 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
function。 但是我的问题来了:如果我试图将顶点着色器源和片段着色器源链接到单个程序,比如renderProgram
,还有两个main
函数,一个在顶点着色器中,一个在片段着色器中。 但是,如果我将这两者联系起来,它会以某种方式正常工作。
为什么会出现这种差异? 如果我想使用这两个计算着色器,我是否应该创建两个计算程序以避免main
function 的重复?
任何帮助表示赞赏!
为什么会出现这种差异?
当您将顶点着色器和片段着色器链接到同一个着色器程序时,这两个(顾名思义)处于不同的着色器阶段。 每个着色器阶段都需要 main() function 的一个定义。
当您附加两个处于同一着色器阶段的着色器时,例如您的两个计算着色器对象,那么它们将链接到同一着色器阶段(计算)。 那是行不通的。
如果我想使用这两个计算着色器,我是否应该创建两个计算程序以避免主 function 的重复?
是的。 当您有两个计算着色器,每个计算着色器都根据 main() function 定义自己的功能时,然后创建两个着色器程序,每个着色器程序都链接到一个着色器对象。 特别是当您的两个着色器与主机具有完全不同的接口时,例如 SSBO 或采样器/图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.