Ошибки, отображаемые для операторов OpenGL OES в Xcode 6 для iOS8

Xcode 6 iOS SDK 8.0 в Yosemite дает мне ошибки для кода OpenGL ES2, который компилируется под Xcode 5

GLuint depthStencilRenderbuffer;
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthStencilRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES,
                         GL_DEPTH24_STENCIL8_OES,
                         self.view.bounds.size.width,
                         self.view.bounds.size.height);

Генерирует ошибки:

строка 2:

Конфликтующие типы для 'glBindRenderBufferOES'

Использование необъявленного идентификатора 'GL_RENDERBUFFER_OES'

строка 3:

неявное объявление содержать 'glBindRenderBufferOES' недопустимо в C99

Изменить: Хорошо, я могу снова заставить все работать, заменив:

GLuint depthStencilRenderbuffer;
glBindRenderbuffer(GL_RENDERBUFFER, depthStencilRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER,
                      GL_STENCIL_INDEX8,
                      self.view.bounds.size.width,
                      self.view.bounds.size.height);

Тем не менее - я не знаю, почему это изменение необходимо, и я был бы признателен за дальнейшее понимание того, что происходит здесь.

Ответы

Ответ 1

Try:

#import <OpenGLES/ES2/glext.h>

или

#import <OpenGLES/ES3/glext.h>

работает для меня.

Без него приложение, которое правильно работает на xcode 6 + ios7, может найти GL_FALSE и другие.

Ответ 2

Я думаю, что комментарий @reto-koradi правильный. У меня была проблема с моим кодом, который был аналогичным образом нарушен в iOS8. Они изменили то, как некоторые заголовки содержат другие заголовки, поэтому вот шаги, которые я сделал:

  • Получите Xcode5 и найдите ту же строку, что и в Xcode6/iOS8.
  • Щелкните по этой ссылке и узнайте, в какой файл заголовка она находится.
  • Вернитесь к Xcode6/iOS8 и найдите этот файл.

Для меня это было #import <OpenGLES/ES2/glext.h>, потому что некоторые из glextensions, которые я использовал, отсутствовали.