我有一些3D代码,我注意到不会在严格的核心配置文件中呈现,但在“正常”(未明确请求的仅作为核心)配置文件上下文中可以。为了找出问题,我已经写了最小最简单可行的OpenGL绘图程序只是一个三角形和矩形:如何使这个简单的OpenGL代码(在“宽松的”3.3和4.2配置文件中工作)在严格的3.2和4.2核心配置文件中工作?
我已经张贴的OpenGL程序as a Gist here。
随着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调用,因为它是inside the glutil package我进口 - 但这被调用为主旨的compileShaders最后一步() FUNC。
您是否尝试过使用GL_ARB_debug_output扩展获得比“GL_INVALID_OPERATION”更多有用的错误信息?设置起来有点麻烦,但绝对值得。 – postgoodism
+1分享一个最小的最简单可能的OpenGL程序的示例Go – ANisus
公平地说,它不是真正的“最小的最简单的可能的OpenGL程序Go”,公平......可以减少它;) – metaleap