我注意到一些3D代码不会在严格的核心配置文件中呈现,但可以在“正常”(非明确要求仅作为核心提供)配置文件上下文中呈现。为了解决这个问题,我编写了最小的,最简单的OpenGL程序,仅绘制了一个三角形和一个矩形:
我在这里将OpenGL程序发布为要点。
在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调用,因为它位于我要导入的glutil包内,但这确实是gist的compileShaders()函数的最后一步。
DIEA
相关分类