为什么glAttachShader会出现1282错误?

时间:2013-12-01 10:38:27

标签: opengl haskell

我正在运行以下OpenGLRaw / Haskell代码。行glAttachShader program vShader生成1282错误。我正在运行最新的Mac OS X(我认为它运行的是OpenGL 4.1)。

 let points = [0.0, 0.0, (0.0 :: GLdouble)]
      numPoints = (fromIntegral $ (length points) `div` 3)
  verticesPtr <- newArray points

  -- Buffer object to hold the vertices.                                                                                                                                             
  bufferPtr <- malloc :: IO (Ptr GLuint)
  glGenBuffers 1 bufferPtr
  bufferId <- peek bufferPtr
  glBindBuffer gl_ARRAY_BUFFER bufferId
  glBufferData gl_ARRAY_BUFFER
    (fromIntegral ((sizeOf (1.0 :: GLdouble)) * (length points)))
    verticesPtr gl_STATIC_DRAW

  -- Shaders                                                                                                                                                                         
  program <- glCreateProgram
  bindAttribLocation program 0 "position"

  vShader <- glCreateShader gl_VERTEX_SHADER
  vSource <- readFile "shaders/test.vert"                                                                                                                                            
  loadShaderSource vShader vSource                                                                                                                                                   
  glCompileShader vShader                                                                                                                                                            
  glAttachShader program vShader         

  glLinkProgram program
  glUseProgram program

这是我的顶点着色器:

#version 410 core

layout(location = 0) in vec3 position;

void main() {
  gl_Position = vec4(position, 1.0);
}

1 个答案:

答案 0 :(得分:1)

错误1282(或0x0502)是GL_INVALID_OPERATION的枚举常量。我不知道它在哪里触发了,虽然有一些关于捕获它的建议。

  • (如果你还没有这样做的话)通过调用glGetError并打印它来调试它。这有助于找到引发错误的确切位置。
  • 检查glGetShaderInfoLog是否存在着色器可能的编译错误。
  • 检查您是否真的使用OpenGL 4.1,如果可能,请检查配置文件。 OpenGL的其他版本或配置文件可能不允许4.1中允许的某些操作。