sigill on glBindFramebuffer

时间:2013-10-27 16:21:10

标签: linux opengl

程序在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);
...

1 个答案:

答案 0 :(得分: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

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