我正在尝试将 glsl 程序与之前已成功编译的 2 个着色器链接,但该程序不会链接。根据 glRemedy 的调试器,错误信息是ERROR: Definition for "void main()" not found
. 经过一些调试,我发现 GPU 没有收到任何着色器,再次根据 glRemedy。我相信,我的代码看起来正确并且从客户端按预期执行。
顶点着色器:
layout(location = 0) in vec3 vertexPosicao;
void main() {
gl_Position.xyz = vertexPosicao;
gl_Position.w = 1.0;
}
片段着色器:
out vec3 cor;
void main() {
cor = vec3(1, 0, 0);
}
加载代码:
bool Shader::fromCode(std::string strCode) {
GLint result;
GLchar *code = new GLchar[strCode.size() + 1];
strcpy(code, strCode.c_str());
glShaderSource(m_id, 1, const_cast<const GLchar **>(&code), NULL);
glCompileShader(m_id);
glGetShaderiv(m_id, GL_COMPILE_STATUS, &result);
return (bool)result;
}
编辑:
在glShaderSource
我使用的着色器 ID 上使用后,我得到了源代码。所有的。但它似乎缺少\n。那会是个问题吗?
编辑2:
Infolog 说一切正常。从 C++ 代码来看,程序的信息日志也说没问题,但是从 glRemedy 来看,上面有那个错误。另外,我看不到 glRemedy 着色器的来源,它们的大小为 0kb。不,我设置的测试显示某些东西不起作用。
编辑 3:
圣诞节快乐!=D