Opengl &引用;无效操作“;关于着色器加载和编译 问题

Opengl &引用;无效操作“;关于着色器加载和编译 问题,opengl,haskell,glut,glfw,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

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"
提供OpenGL 3.3上下文

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

问题:
我能做些什么来修复此问题或获取更多调试信息?

我在gDebugger下运行了您的代码,这使它变得简单:

GL.matrixMode $= GL.Projection
GL.loadIdentity
GL.ortho2D 0 (realToFrac w) (realToFrac h) 0
此剩余代码正在触发错误状态:

错误代码:GL\u操作无效

错误说明: 当前状态下不允许指定的操作。忽略有问题的函数,除了设置错误标志外没有其他副作用


作为补充说明,着色器编译永远不会触发
无效的\u操作
(除非尝试使用断开的管道进行渲染);编译错误可以通过直接检查编译状态来获得。

请确保OpenGL未处于错误状态,然后再进行操作。一些扩展加载器包装器(获取3.3函数所必需的)会使OpenGL处于错误状态,必须清除该错误状态,这样才能避免自欺欺人。
GL.matrixMode $= GL.Projection
GL.loadIdentity
GL.ortho2D 0 (realToFrac w) (realToFrac h) 0