c - OpenGL glAttachShader 不工作

标签 c opengl glsl shader

我有一个问题,就是我像在教程中一样编译和使用我的着色器,但 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);

最佳答案

glGetShaderiv 函数不接受 GL_ATTACHED_SHADERS 作为参数。您应该得到一个 GL_INVALID_ENUM 错误,如果您使用 KHR_debug(或一些替代方法,例如 glGetError()),您会注意到该错误。

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

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

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

关于c - OpenGL glAttachShader 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122054/

相关文章:

c++ - 相机旋转 (OpenGL)

java - LibGDX:如何使用 OpenGL 2.0 实现平面着色外观?

opengl-es - 将 float 打包到 vec4 中——这段代码是如何工作的?

c - 这两个 C 声明之间有什么区别?

c++具有多个图形选项

c - matlab中C数组的思想

c++ - OpenGL ES 2.0 2D 投影矩阵,将 GLfloat (*)[4] 转换为 GLfloat 时出错

c++ - 在macOS的片段着色器中未声明gl_PointCoord吗?

c++ - 配置文件位置和二进制文件并构建系统,如 autoconf

c - 再次通过引用传递