"无效操作"在着色器加载和编译

时间:2015-03-30 19:56:07

标签: opengl haskell glut glfw

问题

a.vs中使用着色器程序:

#version 330
in vec2 vPosition;
void main() {
    gl_Position = vec4(vPosition, 0.0, 1.0);
}

并给出:

import qualified Graphics.GLUtil as GLU
import qualified Graphics.Rendering.OpenGL as GL

这一行:

vs <- GLU.loadShader GL.VertexShader $ shaderPath </> "a.vs"

导致:

  

GL:错误InvalidOperation&#34;无效操作&#34;

在运行时。

详细

我在Mac OS X 10.10.2上运行。 OpenGL上下文通过GLFW设置:

GLFW.windowHint $ GLFW.WindowHint'OpenGLDebugContext True
GLFW.windowHint $ GLFW.WindowHint'ContextVersionMajor 3
GLFW.windowHint $ GLFW.WindowHint'ContextVersionMinor 3
GLFW.windowHint $ GLFW.WindowHint'OpenGLForwardCompat True
GLFW.windowHint $ GLFW.WindowHint'OpenGLProfile GLFW.OpenGLProfile'Core

给出OpenGL 3.3上下文。

可以在此repository(指向特定提交的链接),特别是Main.hs中找到代码的上下文。

问题

如何解决此问题或获取更多调试信息?

1 个答案:

答案 0 :(得分:1)

我在gDebugger下运行你的代码,它很简单:

GL.matrixMode $= GL.Projection
GL.loadIdentity
GL.ortho2D 0 (realToFrac w) (realToFrac h) 0

这段剩余的代码触发了错误状态:

  

错误代码:GL_INVALID_OPERATION

     

错误-描述:   当前状态下不允许指定的操作。忽略违规功能,除了设置错误标志外没有任何副作用。

作为旁注,着色器编译永远不会触发INVALID_OPERATION(除非您尝试使用损坏的管道进行渲染);编译错误可以通过直接检查编译状态来获得。