Я обновляю OpenGL / Qt до OSX Lion и у меня появляются новые ошибки, которые мне нужно решить. Я получаю GL_FRAMEBUFFER_UNDEFINED на GLClear необъяснимым образом.
Я прочитал все возможные причины этого, и, похоже, ничего не совпадает. Чтобы помочь отследить проблему, я добавил следующие две строки в общий проверочный код, который мы используем:
glCheckFramebufferStatus(GL_FRAMEBUFFER);
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER);
Вот OpenGL Trace, сначала начало приложения:
1: 0x01021b06 glGenBuffers(1, 0x11c461c0);
2: 0x01021b06 glGenBuffers(1, 0x11c4616c);
3: 0x01021b06 glGenBuffers(1, 0x11c46118);
4: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
5: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
6: 0x01021b06 glGetError(); returns: GL_NO_ERROR
7: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
8: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
9: 0x01021b06 glGetError(); returns: GL_NO_ERROR
10: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
11: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
Как вы можете видеть, ОБА вызовы заканчиваются как glCheckFramebufferStatusEXT, что, как я полагаю, является чем-то, что делает OSX. Я не уверен, почему нет никакого фреймбуфера, хотя когда-либо.
Теперь, вот след во время ошибки:
29842: 0x01021b06 glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_ONE);
29843: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29844: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29845: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29846: 0x01021b06 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 32, 32, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, 0x11c3d010);
29847: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29848: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29849: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29850: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29851: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29852: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29853: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29854: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29855: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29856: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29857: 0x01021b06 glClearColor(0, 0, 0, 1);
29858: 0x01021b06 glGetError(); returns: GL_NO_ERROR
29859: 0x01021b06 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); returns: GL_FRAMEBUFFER_UNDEFINED
29860: 0x01021b06 glClear(GL_COLOR_BUFFER_BIT);
29861: 0x01021b06 glGetError(); returns: GL_INVALID_FRAMEBUFFER_OPERATION
Как видите, мы получаем GL_NO_ERROR, вплоть до GlClear, который не работает.
Я не уверен, как решить эту проблему - какую информацию я должен собрать, чтобы решить ее?