遍历要在3D引擎中渲染的所有对象时,尝试调用时出现错误
glDrawArrays(mesh->primitiveType, 0, mesh->vertexCount);
因为它尝试从位置0x0000000读取,所以显然绑定(bind)到mesh-> vertexBuffer索引的指针指向零。这一切都发生在我的RenderableObject类中。此类的实例具有绑定(bind)到它们的网格,并且该网格包含应链接到VertexArray的索引。但是显然
glBindBuffer(GL_ARRAY_BUFFER, mesh->vertexBuffer);
失败了。
奇怪的是,它将在我的Mac和其他各种Windows计算机上运行-但不会在此(Windows)计算机上运行。因为我正在测试,所以我删除了所有3D模型,并发现是导致此问题的原语,所以MSVC++编译器以某种方式“优化”了我的代码,以在删除之后
glGenBuffers(1, &CubeMesh.vertexBuffer);
这可能就是为什么没有束缚的原因,或者我想。我禁用了链接器/编译器优化,我可以看到现在所有断点都会受到攻击-但我仍然遇到相同的异常,而且对于它为什么不起作用我一无所知。
就我所知道的问题所在,可以在Primitives.cpp和/或RenderableObject.cpp(特别是RenderableObject::Draw();方法)文件中找到@ https://github.com/Wrap/TwinGame/tree/master/src,该项目的整个源代码都可以找到。我是否正在尝试读取 protected 内容,LoadPrimitives()出了什么问题?方法?
感谢您抽时间阅读。
最佳答案
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
是否可用。我希望这行得通。关于c++ - glDrawArray()给出内存异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5769876/