我有一些3D代码,发现在严格的核心档案中无法渲染,但在“普通”(不是明确要求仅使用核心档案的)配置环境中运行良好。为了分离问题,我编写了一个最简单的OpenGL程序,只画一个三角形和一个矩形:
我已经将该OpenGL程序作为Gist发布在此处。
当变量useStrictCoreProfile设置为false时,该程序不会向控制台输出任何错误消息,并根据上面的截图绘制一个四边形和一个三角形,在Intel HD OpenGL 3.3和具有OpenGL 4.2的GeForce上都绘制成功。
然而,当useStrictCoreProfile设置为true时,它会清除背景色但不绘制三角形和四边形,控制台输出如下:
GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT
如果请求的是4.2严格核心配置文件而不是3.2,则会出现相同的问题。适用于3个不同的NVIDIA GPU,因此我认为我没有正确符合严格的核心配置文件。我做错了什么,我该如何解决?
请注意,在上面的Gist中,您不会找到glEnableVertexAttribArray调用,因为我正在导入{{link1:glutil包}} - 但是这将在要点的compileShaders()函数的最后一步被调用。