【发布时间】:2011-08-11 19:26:15
【问题描述】:
在循环遍历我想在 3D 引擎中渲染的所有对象时,尝试调用时出现错误
glDrawArrays(mesh->primitiveType, 0, mesh->vertexCount);
因为它试图从位置 0x0000000 读取,所以显然绑定到 mesh->vertexBuffer 索引的指针指向零。这一切都发生在我的 RenderableObject 类中。这个类的实例有一个绑定到它们的网格,这个网格包含一个应该链接到 VertexArray 的索引。但显然
glBindBuffer(GL_ARRAY_BUFFER, mesh->vertexBuffer);
失败了。
奇怪的是,它可以在我的 mac 和其他各种 windows 计算机上运行 - 但它不会在这台(windows)计算机上运行。因为我正在测试,所以我删除了所有 3D 模型,发现是导致问题的原语,MSVC++ 编译器以某种方式“优化”了我的代码,删除了之后的所有内容
glGenBuffers(1, &CubeMesh.vertexBuffer);
这可能就是为什么什么都没有绑定的原因,或者我是这么认为的。我禁用了链接器/编译器优化,我可以看到所有断点现在都会被命中 - 但我仍然遇到同样的异常,而且我完全不知道它为什么不起作用。
项目的整个源代码可以在@https://github.com/Wrap/TwinGame/tree/master/src 找到,据我所知问题出在 Primitives.cpp 和/或 RenderableObject.cpp(特别是 RenderableObject::Draw(); 方法) 文件。我是否试图阅读受保护的内容,LoadPrimitives() 有什么问题?方法?
感谢您花时间阅读本文。
【问题讨论】:
-
+1 提出了一个很好的、经过深思熟虑的详细问题。 :) 继续。
-
有问题的机器是否真的支持缓冲区对象?即使驱动程序将扩展的函数指针交给您,也并不意味着实际上支持该扩展。检查扩展字符串 (glGetString(GL_EXTENSIONS);)
-
你试过用纯软件渲染吗?这至少会告诉你问题出在哪一边。
-
确认mesh指针有效,内存异常是由vertexCount引起的吗?
-
我之前遇到过这个问题:确保您没有在 OpenGL 中启用任何其他没有指向缓冲区的数据数组。我曾经启用旧版颜色缓冲区以突出显示一些错误,但忘记删除这段代码。所以我会在渲染缓冲区之前启用 glColorArray,但我从未分配指向包含颜色的实际缓冲区的数据指针。这有意义吗?
标签: c++ memory opengl 3d-engine