为什么我的 OpenGL glAttachShader 不工作?

问题描述 投票:0回答:1

我有一个问题,那就是我像在教程中一样编译和使用我的着色器,但是 glAttachShader 不起作用我的返回值(如果我检查它)是 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);
c opengl glsl shader
1个回答
2
投票

glGetShaderiv
函数不接受
GL_ATTACHED_SHADERS
作为参数。您应该会收到
GL_INVALID_ENUM
错误,如果您使用
KHR_debug
(或其他替代方案,如
glGetError()
),您会注意到该错误。

此外,着色器没有附加的着色器。只有程序附加了着色器。这是更正后的版本:

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

我强烈建议使用

KHR_debug
,因为你会立即发现错误。或者至少使用
glGetError()
,但这不会为您提供那么多信息。

© www.soinside.com 2019 - 2024. All rights reserved.