循环浏览我想在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()出了什么问题;方法
感谢您花时间阅读本文。
答案 0 :(得分:2)
RenderableObject::RenderableObject(ObjectManager* objectmgr) : Object(objectmgr), visible(true), scale(1.0f), mesh(0) {
mObjMgr->registerRenderable(this);
}
我认为这是你的问题mesh(0)
。也许您在之前调用Draw()
方法来初始化此值。也许你的Renderer
课程可以做到。
尝试在任何函数调用之前添加assert(mesh != 0)
。
void RenderableObject::Draw(class ShaderManager* shaderMgr){
//TODO: iterate through all meshes that belong to the object
assert(mesh != 0)
glBindBuffer(GL_ARRAY_BUFFER, mesh->vertexBuffer[0]);
我希望,如果GL_ARB_vertex_buffer_object
可用,您正在检查。我希望这有效。