为了账号安全,请及时绑定邮箱和手机立即绑定

如何使这个简单的OpenGL代码在严格的3.2和4.2核心配置文件中工作?

如何使这个简单的OpenGL代码在严格的3.2和4.2核心配置文件中工作?

Go
慕容森 2021-05-07 17:47:16
我注意到一些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_OPERATIONLASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATIONLASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATIONLASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATIONLASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATIONEXIT...如果要求使用4.2严格的核心配置文件而不是3.2,则存在相同的问题。适用于3个不同的nvidia GPU,因此我认为我没有正确地遵循严格的内核配置文件。我做错了什么,该如何解决?请注意,在上面的Gist中不会找到glEnableVertexAttribArray调用,因为它位于我要导入的glutil包内,但这确实是gist的compileShaders()函数的最后一步。
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您没有使用glGenVertexArrays()和glBindVertexArray()创建/绑定顶点数组对象。VAOs封装一堆顶点属性的状态,包括其属性启用,详细介绍每个属性信息等,他们是可选的,当最初推出的功能,但是他们现在严格/核心上下文需要根据第10.4节的OpenGL核心规范:


当没有绑定顶点数组时,任何修改,绘制或查询顶点数组状态的命令都会生成INVALID_OPERATION错误。这在初始GL状态下发生,并且可能由于BindVertexArray或DeleteVertexArrays的副作用而发生。


这是一个有关如何使用VAO的非常粗糙的示例:


// At initialization time:

GLuint vao = 0;

glGenVertexArrays(1, &vao);

glBindVertexArray(vao);

// Set up your vertex attribute state:

//  - glBindBuffer(GL_ARRAY_BUFFER,...);

//  - glEnableVertexAttribArray(...);

//  - glVertexAttribPointer(...);

//  - etc. -- Refer to OpenGL docs to see what is/isn't included in the VAO!

glBindVertexArray(0); // unbinds vao


// At draw time:

glBindVertexArray(vao); // automatically sets up previously-bound vertex attribute state

glDrawArrays(...);

glBindVertexArray(0); // unbinds vao


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信