- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 OpenGL 函数 glGenBuffers() 时遇到了一个奇怪的问题。我正在编写一个相当简单的应用程序,其中我使用以下列方式声明的 VBO:
#include <QGLFunctions>
#include <QGLWidget>
class MyClass : public QGLWidget, protected QGLFunctions {
GLuint vertexBufferObject;
// ...
GLuint makeBufferList(void);
}
GLuint MyClass::makeBufferList(void) {
vertexBufferObject = 0;
glGenBuffers(1, &vertexBufferObject); // <-- Here it crashes
// ... load data and render
return vertexBufferList;
}
MyClass::MyClass(QWidget* parent)
: QGLWidget(parent),
vertexBufferObject(0)
{
QGLContext* context = new QGLContext(this->format());
initializeGLFunctions(context);
glInit();
}
MyClass::~MyClass() {
glDeleteBuffers(1, &vertexBufferObject);
}
这一切在调试构建中都工作得很好。数据呈现得很好,而且程序最终正确完成。但是,在 Release Build 中,glGenBuffers() 会使程序崩溃。它不仅返回 0 或什么也不做,它会在函数调用时崩溃。但由于问题只发生在 Release 模式下,我无法使用调试器找出问题所在。
我正在使用 Windows 7 系统并在 Qt 4.8.1 中进行开发。编译器为MSVC 2010 (Qt SDK)编译器。
有没有人有任何我可以尝试的建议?
//编辑:
可能有用:我尝试使用 GCC (Qt SDK) 编译器在 Mac 上编译完全相同的代码,并且 Debug 和 Release Build 都工作得很好。但在 Windows 7 上,问题仍然存在。
最佳答案
找到了问题所在(感谢@MahmoudFayez):问题来自 Qt API 中的错误,它导致 glGenBuffers() 函数(可能还有其他函数)崩溃。这个问题直接等同于这里讨论的问题:
解决方案虽然不是很优雅,但相对简单:使用 GLEW 而不是 QGLFunctions。我通过以下方式解决了我的问题:
#include "glew.h"
#include <QGLWidget>
class MyClass : public QGLWidget {
// ...same as the above
}
MyClass::MyClass(QWidget* parent)
: QGLWidget(parent),
vertexBufferObject(0)
{
makeCurrent();
glewInit();
}
这一切都解决了。缺点是这涉及使用额外的外部依赖项,而使用 Qt 就是尽可能兼容,尽可能少的外部依赖项。不过这个bug好像要等到Qt 5.0发布才能修复。
作为最后的评论:我无法弄清楚这个错误中的哪一部分只导致崩溃的发布版本,而不是 Debug模式。
关于c++ - glGenBuffers 在 Release Build 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845230/
我目前正在将一个数组传递给一个函数,然后尝试将 glGenBuffers 与传递给该函数的数组一起使用。我想不出让 glGenBuffers 与我传递的数组一起工作的方法。我对指针的基础知识有很好的掌
事情是这样的:如果我将代码保留为 glGenBuffers(1, vertexBuffers),代码就会编译并运行。但是,我认为它应该是 2,因为 vertexBuffers 的大小为 2。 我错过了
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 GLFW 和 GLEW。但是在我的对象初始化期间 glGenBuffers 抛出异常 void Character::init2D(glm::vec3 top, glm::vec3 bot
我认为这是不可能的,但我在我的软件中看到了它。我已经构建了一个包装器对象来管理我的缓冲区对象(我正在使用共享上下文,所以我不能使用 VAO),并且在我开始使用 IBO(glDrawElements()
glGenBuffers(1, &bufferID) 将 ID 分配到 bufferID 失败的原因是什么? #define GL_GLEXT_PROTOTYPES 1 #include #incl
当我使用 glGenBuffers 创建一个带有指向它的指针的 VBO 时,我(认为)正在分配内存。对 glGenBuffers 的后续调用应该返回不同的指针,但是之前分配的内存呢?在 Nehe 示例
我正在使用 Windows,我注意到很多函数都是灰色的,因为我猜想 #ifdef GL_GLEXT_PROTOTYPES 没有定义。其中之一是 VBO 扩展。我应该只定义 GL_GLEXT_PROTO
我一直在实现一个基于本教程的小型 opengl 应用程序: http://openglbook.com/the-book/chapter-4-entering-the-third-dimension/
我检查了文档,它说 OpenGL 版本必须至少为 1.5 才能使 glGenBuffers() 工作。用户的版本是1.5,但是函数调用会导致崩溃。这是文档中的错误,还是用户的驱动程序问题? 我正在为
我似乎找不到 glGenBuffer Qt5 中的函数,我的包含列表看起来像 #include #include #include #include #include #include #
好吧,我从 OpenGL 开始,通过阅读有关 glBindBuffer 的文档,我有点困惑。 "glBindBuffer binds a buffer object to the specified
鉴于我们使用的是 OpenGL 4.5 或支持 GL_ARB_direct_state_access扩展,我们有新功能 glCreateBuffers . 此函数与 glGenBuffers 具有相同
我在其他地方看到过与我类似的问题,但没有人回答或解决我的问题。 在创建Context之后、调用glfwMakeContextCurrent()之前,我已经正确启动了GLEW 启动后,我尝试使用 glG
所以,我有一个顶点数组和一堆属性(顶点位置、颜色、法线、uvs...)但是有没有办法发送没有属性的数据或每帧生成缓冲区?或者有更好的方法吗? (具体来说,我在做一个批量渲染系统) 最佳答案 分配一次缓
当我使用 opengl 3.3 时,glGenBuffers() 和 glBufferData() 等函数工作得很好,但现在我使用的是 4.3,我想使用这些函数的更新版本,例如 glCreateBuf
当我运行this code时test_rbm.py 位于名为 python-deepnets 的目录中。 我遇到错误。 OpenGL.error.NullFunctionError:尝试调用未定义的函
在关于 OpenGL 3.0+ 的教程中,我们以这种方式创建顶点数组对象和顶点缓冲区对象: GLuint VAO, VBO; glGenVertexArrays(1, &VAO); glGenBuff
我正在使用支持 OpenGL 模式的 Ogre3d 引擎。 我有一个名为 Chunk 的对象,它创建了一个 Ogre::ManualObject。因为 ManualObject 的创建需要一些时间,所
我试图避开 PyOpenGL 的缓慢和高开销的后期绑定(bind)前端,并专门使用原始后端实现... 我遇到的问题是我似乎无法弄清楚前端如何将后端函数 glGenBuffers( n, buffers
我是一名优秀的程序员,十分优秀!