gpt4 book ai didi

c++ - glDrawArray() 给出内存异常

转载 作者:IT老高 更新时间:2023-10-28 12:46:13 25 4
gpt4 key购买 nike

在循环遍历我想在 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);

这可能就是为什么什么都没有绑定(bind)的原因,或者我是这么认为的。我禁用了链接器/编译器优化,我可以看到所有断点现在都会被命中 - 但我仍然遇到同样的异常,而且我完全不知道它为什么不起作用。

项目的全部源码可以在@https://github.com/Wrap/TwinGame/tree/master/src找到,据我所知,问题出在 Primitives.cpp 和/或 RenderableObject.cpp(特别是 RenderableObject::Draw(); 方法)文件中。我是否试图阅读 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com