1

程序在 glBindFramebuffer(GL_FRAMEBUFFER, fb); 处崩溃;在函数 gen_texture

gdb 告诉我“程序收到信号 SIGILL,非法指令。”

void gen_texture(GLuint &color, int width, int height)
{
   GLuint fb;

   glGenFramebuffers(1, &fb);
   glGenTextures(1, &color);

   glBindFramebuffer(GL_FRAMEBUFFER, fb);
...



int main(int argc, char **argv)
{
   glutInit (&argc, argv);
   glutInitContextVersion(4, 3);
   glutInitContextProfile(GLUT_CORE_PROFILE);

   std::cout << std::hex << glGetError() << "\n" << std::flush;

   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA);
   glutInitWindowSize (500, 500);
   glutCreateWindow ("");
   glutDisplayFunc (display);
   glutIdleFunc (display);

   std::cout << std::hex << glGetError() << "\n" << std::flush;


   glewExperimental=GL_TRUE;
   GLenum err=glewInit();
   if(err!=GLEW_OK)
   {
      std::cerr << "glewInit fehlgeschlagen, aborting." << std::endl;
   }

   gen_texture(texture, 100, 60);
...
4

1 回答 1

1

在这段代码中

GLenum err=glewInit();
if(err!=GLEW_OK)
{
      std::cerr << "glewInit fehlgeschlagen, aborting." << std::endl;
}

仅仅因为 GLEW 返回 OK 进行初始化,这并不意味着所有扩展都已加载。此外,检查glGetError不会向您报告 GLUT 错误(例如不支持您请求的上下文。glGetError仅报告 OpenGL 错误(GLUT 不是 OpenGL 的一部分),此外必须在循环中调用,直到它返回GL_NO_ERROR

我建议您添加更详细的错误诊断并报告回来。

于 2013-10-27T17:26:39.700 回答