我有一些3D的代码,我注意到在一个严格的核心配置文件将不会渲染而精“正常”(-作为核心,只有要求没有明确)配置文件环境。 为了找出问题,我已经写了最小最简单可行的OpenGL绘图程序只是一个三角形和矩形:
我已经发布使OpenGL程序作为这里要点 。
与useStrictCoreProfile变量设置为假,则程序没有错误消息输出到控制台,并绘制一个四边形和三角形按照上面的截图,无论在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的,所以我认为我不符合严格的核心配置文件正确。 什么是我做错了,我怎么能解决这个问题?
请注意,你不会发现有上述要点的glEnableVertexAttribArray调用,因为它的glutil包里面我进口-但这被调用为主旨的compileShaders最后一步()FUNC。