在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
中找到代码的上下文。
如何解决此问题或获取更多调试信息?
答案 0 :(得分:1)
我在gDebugger下运行你的代码,它很简单:
GL.matrixMode $= GL.Projection
GL.loadIdentity
GL.ortho2D 0 (realToFrac w) (realToFrac h) 0
这段剩余的代码触发了错误状态:
错误代码:
GL_INVALID_OPERATION
错误-描述: 当前状态下不允许指定的操作。忽略违规功能,除了设置错误标志外没有任何副作用。
作为旁注,着色器编译永远不会触发INVALID_OPERATION
(除非您尝试使用损坏的管道进行渲染);编译错误可以通过直接检查编译状态来获得。