我有一个问题,那就是我编译和使用我的着色器就像在图托拉尔,但格拉茨哈德不工作我的返回值(如果我检查它)是0,但编译是成功的。
有人能帮我吗?
这是我代码的一部分:

  fragment_shaderID = CompileShader("/home/nikolaij/Schreibtisch/MOTOR/shader.frag", 1000, GL_FRAGMENT_SHADER);
  vertex_shaderID = CompileShader("/home/nikolaij/Schreibtisch/MOTOR/shader.vert", 1000, GL_VERTEX_SHADER);

  shader_programID = makeShaderProgram(vertex_shaderID, fragment_shaderID);

  shader_programID = glCreateProgram();

  glAttachShader(shader_programID, fragment_shaderID);
  glAttachShader(shader_programID, vertex_shaderID);

  glLinkProgram(shader_programID);

  int attach = 0;
  glGetShaderiv(fragment_shaderID, GL_ATTACHED_SHADERS, &attach);

  printf("ATTACH : %i\n", attach);

  glUseProgram(shader_programID);

最佳答案

glGetShaderiv函数不接受GL_ATTACHED_SHADERS作为参数。您应该会得到一个GL_INVALID_ENUM错误,如果您使用KHR_debug(或其他选项,如glGetError(),您会注意到这个错误)。
此外,材质球没有附加材质球。只有程序有附加的着色器。以下是更正版本:

int num_attached;
glGetProgramiv(shader_programID, GL_ATTACHED_SHADERS, &num_attached);

我强烈建议您使用KHR_debug,因为您会立即发现错误。或者至少使用glGetError(),但这不会给您提供更多信息。

10-07 16:27