glGenFramebuffers 中的段错误

Posted

技术标签:

【中文标题】glGenFramebuffers 中的段错误【英文标题】:Segfault in glGenFramebuffers 【发布时间】:2012-06-07 16:55:09 【问题描述】:

我遇到了段错误,不知道为什么。与我一起工作的人在 OSX 机器上编译并正确运行。 gdb backtrace 告诉我它来自这部分代码,特别是来自 glGenFramebuffers:

    // Render the warped texture mapped triangles to framebuffer
GLuint myFBO;
GLuint myTexture;

glEnable(GL_TEXTURE_2D);
glGenTextures(1, &myTexture);
glBindTexture(GL_TEXTURE_2D, myTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.width, size.height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glGenFramebuffers(1, &myFBO);
glBindFramebuffer(GL_FRAMEBUFFER_EXT, myFBO);

我使用 Nvidia 卡运行 12.04 Ubuntu,使用操作系统提供的 Nvidia 最新专有驱动程序。我对 OpenGL 不是很熟悉,很多代码是我的伙伴的,他似乎也被难住了。如果您需要任何进一步的信息,我很乐意提供。

【问题讨论】:

您是否已经通过在代码中的某处调用glGetError() 来检查错误?也许它的输出可以帮助你。 glGenFramebuffers 是指针还是函数?如果指针 - 它是有效的(不是 NULL)吗?执行此代码时是否创建了 OpenGL 上下文? 【参考方案1】:

答案其实很简单。 OSX 编码人员在开始使用 glew 调用之前不需要调用 glewInit() - Linux 和 Windows 用户需要。另外,我发现了另一条有趣的信息:检查您是否能够使用 glxinfo 执行直接渲染。它可以在运行 OpenGL 程序时发挥重要作用。

【讨论】:

以上是关于glGenFramebuffers 中的段错误的主要内容,如果未能解决你的问题,请参考以下文章

Windows:处理所有线程中的段错误

getline 中的段错误

函数调用中的段错误

C中多线程python扩展中的段错误

atoi(str) 中的段错误

生产者消费者程序中的段错误